{"version":3,"file":"core.mjs","sources":["../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/qdev.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/log.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/error/assert.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/util-mapArray.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/error/error.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode-data-types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/character-escaping.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/markers.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/promises.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/scoped-styles.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/event-names.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/unitless_number.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/hash_code.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/styles.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/platform/next-tick.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/platform/platform.js","../../../dist-dev/tsc-out/packages/qwik/src/core/preloader/constants.js","../../../dist-dev/tsc-out/packages/qwik/src/core/preloader/types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/preloader/bundle-graph.js","../../../dist-dev/tsc-out/packages/qwik/src/core/preloader/queue.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/objects.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/stream-writer.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/ssr-const.js","../../../dist-dev/tsc-out/packages/qwik/src/core/version.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/element.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/container.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/backref.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/vnode-namespace.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/maps.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode/vnode.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode/virtual-vnode.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode/element-vnode.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode/text-vnode.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/cursor-queue.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/cursor-props.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/subscriber.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/utils/tracker.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/impl/signal-impl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/impl/computed-signal-impl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/impl/async-signal-impl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/constants.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/flyweight.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/props-proxy.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/implicit_dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/impl/serializer-signal-impl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/signal-api.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/signal.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/internal-api.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/impl/wrapped-signal-impl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/subscription-data.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/jsx-node.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/bind-handlers.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/jsx-internal.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/jsx-runtime.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/slot.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/utils.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/attribute.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/jsx-filename.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/prop.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode/types/dom-vnode-operation.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-sequential-scope.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-signal.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-cursor-boundary.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/utils/destroyable.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/run-qrl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/vnode-diff.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/component-execution.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/reconcile-keyed-loop.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/chore-execution.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/cursor-flush.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/cursor-walker.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/cursor.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/cursor/ssr-chore-execution.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode/vnode-dirty.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/prototype-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/vnode-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/cleanup.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-task.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/debug.js","../../../dist-dev/tsc-out/packages/qwik/src/core/reactive-primitives/impl/store.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/constants.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/qrl-to-string.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/subscription-patch.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/serialize.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/serialization-context.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/can-serialize.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/dump-state.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/preprocess-state.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/allocate.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/platform/async-local-storage.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared-types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/inlined-fn.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/shared-container.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/async-generator.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/internal-server-component.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/ssr-render-component.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/ssr-render-jsx.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-lexical-scope.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-resource.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/ssr-events.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-on.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-hmr.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/projection/external-projection.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/inflate.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/deser-proxy.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/serdes.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/serdes/verify.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-context.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/error/error-handling.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/reveal.js","../../../dist-dev/tsc-out/packages/qwik/src/core/control-flow/suspense-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/process-segment-state.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/process-vnode-data.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/dom-container.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-locale.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-core.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl-class-dev.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl-class.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/component.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl.public.dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/get-client-manifest.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/dom-render.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-store.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/unique-index-generator.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-id.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-env-data.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/scoped-stylesheet.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-styles.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-computed.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-serializer.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-visible-task.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-resource-dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-task-dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-visible-task-dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-async.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-error-boundary.js","../../../dist-dev/tsc-out/packages/qwik/src/core/control-flow/each.js","../../../dist-dev/tsc-out/packages/qwik/src/core/control-flow/reveal.js","../../../dist-dev/tsc-out/packages/qwik/src/core/control-flow/suspense.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/prefetch-service-worker/prefetch.js","../../../dist-dev/tsc-out/packages/qwik/src/core/index.js"],"sourcesContent":["// Direct `globalThis.X` accesses (no alias) so Terser's `global_defs` engages\n// and folds these to literal booleans in production builds, allowing\n// `qTest ? testBranch : prodBranch` shims to tree-shake.\nexport const qDev = globalThis.qDev !== false;\nexport const qInspector = globalThis.qInspector === true;\nexport const qDynamicPlatform = globalThis.qDynamicPlatform !== false;\nexport const qTest = globalThis.qTest === true;\nexport const qRuntimeQrl = globalThis.qRuntimeQrl === true;\nexport const seal = (obj) => {\n    if (qDev) {\n        Object.seal(obj);\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWRldi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvcWRldi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4RUFBOEU7QUFDOUUscUVBQXFFO0FBQ3JFLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUksVUFBa0IsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBSSxVQUFrQixDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFDbEUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUksVUFBa0IsQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLENBQUM7QUFDL0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFJLFVBQWtCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUksVUFBa0IsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFO0lBQy9CLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBEaXJlY3QgYGdsb2JhbFRoaXMuWGAgYWNjZXNzZXMgKG5vIGFsaWFzKSBzbyBUZXJzZXIncyBgZ2xvYmFsX2RlZnNgIGVuZ2FnZXNcbi8vIGFuZCBmb2xkcyB0aGVzZSB0byBsaXRlcmFsIGJvb2xlYW5zIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBhbGxvd2luZ1xuLy8gYHFUZXN0ID8gdGVzdEJyYW5jaCA6IHByb2RCcmFuY2hgIHNoaW1zIHRvIHRyZWUtc2hha2UuXG5leHBvcnQgY29uc3QgcURldiA9IChnbG9iYWxUaGlzIGFzIGFueSkucURldiAhPT0gZmFsc2U7XG5leHBvcnQgY29uc3QgcUluc3BlY3RvciA9IChnbG9iYWxUaGlzIGFzIGFueSkucUluc3BlY3RvciA9PT0gdHJ1ZTtcbmV4cG9ydCBjb25zdCBxRHluYW1pY1BsYXRmb3JtID0gKGdsb2JhbFRoaXMgYXMgYW55KS5xRHluYW1pY1BsYXRmb3JtICE9PSBmYWxzZTtcbmV4cG9ydCBjb25zdCBxVGVzdCA9IChnbG9iYWxUaGlzIGFzIGFueSkucVRlc3QgPT09IHRydWU7XG5leHBvcnQgY29uc3QgcVJ1bnRpbWVRcmwgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLnFSdW50aW1lUXJsID09PSB0cnVlO1xuXG5leHBvcnQgY29uc3Qgc2VhbCA9IChvYmo6IGFueSkgPT4ge1xuICBpZiAocURldikge1xuICAgIE9iamVjdC5zZWFsKG9iaik7XG4gIH1cbn07XG4iXX0=","import { qDev, qTest } from './qdev';\nconst STYLE = qDev\n    ? `background: #564CE0; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;`\n    : '';\nexport const logError = (message, ...optionalParams) => {\n    return createAndLogError(false, message, ...optionalParams);\n};\nexport const throwErrorAndStop = (message, ...optionalParams) => {\n    const error = createAndLogError(false, message, ...optionalParams);\n    // eslint-disable-next-line no-debugger\n    debugger;\n    throw error;\n};\nexport const logErrorAndStop = (message, ...optionalParams) => {\n    const err = createAndLogError(qDev, message, ...optionalParams);\n    // eslint-disable-next-line no-debugger\n    debugger;\n    return err;\n};\nconst _printed = /*#__PURE__*/ new Set();\nexport const logOnceWarn = (message, ...optionalParams) => {\n    if (qDev) {\n        const key = 'warn' + String(message);\n        if (!_printed.has(key)) {\n            _printed.add(key);\n            logWarn(message, ...optionalParams);\n        }\n    }\n};\nexport const logWarn = (message, ...optionalParams) => {\n    if (qDev) {\n        console.warn('%cQWIK WARN', STYLE, message, ...optionalParams);\n    }\n};\nexport const logDebug = (message, ...optionalParams) => {\n    if (qDev) {\n        // eslint-disable-next-line no-console\n        console.debug('%cQWIK', STYLE, message, ...optionalParams);\n    }\n};\nconst createAndLogError = (asyncThrow, message, ...optionalParams) => {\n    const err = message instanceof Error ? message : new Error(message);\n    // display the error message first, then the optional params, and finally the stack trace\n    // the stack needs to be displayed last because the given params will be lost among large stack traces so it will\n    // provide a bad developer experience\n    !qTest && console.error('%cQWIK ERROR', STYLE, err.message, ...optionalParams, err.stack);\n    asyncThrow &&\n        !qTest &&\n        setTimeout(() => {\n            // throwing error asynchronously to avoid breaking the current call stack.\n            // We throw so that the error is delivered to the global error handler for\n            // reporting it to a third-party tools such as Qwik Insights, Sentry or New Relic.\n            throw err;\n        }, 0);\n    return err;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckMsTUFBTSxLQUFLLEdBQUcsSUFBSTtJQUNoQixDQUFDLENBQUMsNEZBQTRGO0lBQzlGLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFUCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFhLEVBQUUsR0FBRyxjQUFxQixFQUFFLEVBQUU7SUFDbEUsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFhLEVBQUUsR0FBRyxjQUFxQixFQUFTLEVBQUU7SUFDbEYsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQ25FLHVDQUF1QztJQUN2QyxRQUFRLENBQUM7SUFDVCxNQUFNLEtBQUssQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQWEsRUFBRSxHQUFHLGNBQXFCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDaEUsdUNBQXVDO0lBQ3ZDLFFBQVEsQ0FBQztJQUNULE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxFQUFVLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBYSxFQUFFLEdBQUcsY0FBcUIsRUFBRSxFQUFFO0lBQ3JFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFhLEVBQUUsR0FBRyxjQUFxQixFQUFFLEVBQUU7SUFDakUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxHQUFHLGNBQXFCLEVBQUUsRUFBRTtJQUNyRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1Qsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUM3RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFVBQW1CLEVBQUUsT0FBYSxFQUFFLEdBQUcsY0FBcUIsRUFBRSxFQUFFO0lBQ3pGLE1BQU0sR0FBRyxHQUFHLE9BQU8sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFcEUseUZBQXlGO0lBQ3pGLGlIQUFpSDtJQUNqSCxxQ0FBcUM7SUFDckMsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFGLFVBQVU7UUFDUixDQUFDLEtBQUs7UUFDTixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsMEVBQTBFO1lBQzFFLDBFQUEwRTtZQUMxRSxrRkFBa0Y7WUFDbEYsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHFEZXYsIHFUZXN0IH0gZnJvbSAnLi9xZGV2JztcblxuY29uc3QgU1RZTEUgPSBxRGV2XG4gID8gYGJhY2tncm91bmQ6ICM1NjRDRTA7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMnB4IDNweDsgYm9yZGVyLXJhZGl1czogMnB4OyBmb250LXNpemU6IDAuOGVtO2BcbiAgOiAnJztcblxuZXhwb3J0IGNvbnN0IGxvZ0Vycm9yID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4ge1xuICByZXR1cm4gY3JlYXRlQW5kTG9nRXJyb3IoZmFsc2UsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aHJvd0Vycm9yQW5kU3RvcCA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiBuZXZlciA9PiB7XG4gIGNvbnN0IGVycm9yID0gY3JlYXRlQW5kTG9nRXJyb3IoZmFsc2UsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXG4gIGRlYnVnZ2VyO1xuICB0aHJvdyBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2dFcnJvckFuZFN0b3AgPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gIGNvbnN0IGVyciA9IGNyZWF0ZUFuZExvZ0Vycm9yKHFEZXYsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXG4gIGRlYnVnZ2VyO1xuICByZXR1cm4gZXJyO1xufTtcblxuY29uc3QgX3ByaW50ZWQgPSAvKiNfX1BVUkVfXyovIG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5leHBvcnQgY29uc3QgbG9nT25jZVdhcm4gPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gIGlmIChxRGV2KSB7XG4gICAgY29uc3Qga2V5ID0gJ3dhcm4nICsgU3RyaW5nKG1lc3NhZ2UpO1xuICAgIGlmICghX3ByaW50ZWQuaGFzKGtleSkpIHtcbiAgICAgIF9wcmludGVkLmFkZChrZXkpO1xuICAgICAgbG9nV2FybihtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9nV2FybiA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHtcbiAgaWYgKHFEZXYpIHtcbiAgICBjb25zb2xlLndhcm4oJyVjUVdJSyBXQVJOJywgU1RZTEUsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxvZ0RlYnVnID0gKG1lc3NhZ2U/OiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4ge1xuICBpZiAocURldikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5kZWJ1ZygnJWNRV0lLJywgU1RZTEUsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlQW5kTG9nRXJyb3IgPSAoYXN5bmNUaHJvdzogYm9vbGVhbiwgbWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gIGNvbnN0IGVyciA9IG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UgOiBuZXcgRXJyb3IobWVzc2FnZSk7XG5cbiAgLy8gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZSBmaXJzdCwgdGhlbiB0aGUgb3B0aW9uYWwgcGFyYW1zLCBhbmQgZmluYWxseSB0aGUgc3RhY2sgdHJhY2VcbiAgLy8gdGhlIHN0YWNrIG5lZWRzIHRvIGJlIGRpc3BsYXllZCBsYXN0IGJlY2F1c2UgdGhlIGdpdmVuIHBhcmFtcyB3aWxsIGJlIGxvc3QgYW1vbmcgbGFyZ2Ugc3RhY2sgdHJhY2VzIHNvIGl0IHdpbGxcbiAgLy8gcHJvdmlkZSBhIGJhZCBkZXZlbG9wZXIgZXhwZXJpZW5jZVxuICAhcVRlc3QgJiYgY29uc29sZS5lcnJvcignJWNRV0lLIEVSUk9SJywgU1RZTEUsIGVyci5tZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcywgZXJyLnN0YWNrKTtcblxuICBhc3luY1Rocm93ICYmXG4gICAgIXFUZXN0ICYmXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyB0aHJvd2luZyBlcnJvciBhc3luY2hyb25vdXNseSB0byBhdm9pZCBicmVha2luZyB0aGUgY3VycmVudCBjYWxsIHN0YWNrLlxuICAgICAgLy8gV2UgdGhyb3cgc28gdGhhdCB0aGUgZXJyb3IgaXMgZGVsaXZlcmVkIHRvIHRoZSBnbG9iYWwgZXJyb3IgaGFuZGxlciBmb3JcbiAgICAgIC8vIHJlcG9ydGluZyBpdCB0byBhIHRoaXJkLXBhcnR5IHRvb2xzIHN1Y2ggYXMgUXdpayBJbnNpZ2h0cywgU2VudHJ5IG9yIE5ldyBSZWxpYy5cbiAgICAgIHRocm93IGVycjtcbiAgICB9LCAwKTtcbiAgcmV0dXJuIGVycjtcbn07XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { throwErrorAndStop } from '../utils/log';\nconst ASSERT_DISCLAIMER = 'Internal assert, this is likely caused by a bug in Qwik: ';\n/*@__INLINE__*/\nexport function assertDefined(value, text, ...parts) {\n    if (isDev) {\n        if (value != null) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n/*@__INLINE__*/\nexport function assertEqual(value1, value2, text, ...parts) {\n    if (isDev) {\n        if (value1 === value2) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertFail(text, ...parts) {\n    if (isDev) {\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n/*@__INLINE__*/\nexport function assertTrue(value1, text, ...parts) {\n    if (isDev) {\n        if (value1 === true) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n/*@__INLINE__*/\nexport function assertFalse(value1, text, ...parts) {\n    if (isDev) {\n        if (value1 === false) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n/*@__INLINE__*/\nexport function assertNumber(value1, text, ...parts) {\n    if (isDev) {\n        if (typeof value1 === 'number') {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n/*@__INLINE__*/\nexport function assertString(value1, text, ...parts) {\n    if (isDev) {\n        if (typeof value1 === 'string') {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9lcnJvci9hc3NlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxNQUFNLGlCQUFpQixHQUFHLDJEQUEyRCxDQUFDO0FBRXRGLGVBQWU7QUFDZixNQUFNLFVBQVUsYUFBYSxDQUMzQixLQUFRLEVBQ1IsSUFBWSxFQUNaLEdBQUcsS0FBWTtJQUVmLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsZUFBZTtBQUNmLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQVcsRUFDWCxNQUFXLEVBQ1gsSUFBWSxFQUNaLEdBQUcsS0FBWTtJQUVmLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUNELGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBSUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZLEVBQUUsR0FBRyxLQUFZO0lBQ3RELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0FBQ0gsQ0FBQztBQUVELGVBQWU7QUFDZixNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQVcsRUFBRSxJQUFZLEVBQUUsR0FBRyxLQUFZO0lBQ25FLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUNELGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsZUFBZTtBQUNmLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBVyxFQUFFLElBQVksRUFBRSxHQUFHLEtBQVk7SUFDcEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUM7QUFFRCxlQUFlO0FBQ2YsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFXLEVBQUUsSUFBWSxFQUFFLEdBQUcsS0FBWTtJQUNyRSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUNELGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsZUFBZTtBQUNmLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBVyxFQUFFLElBQVksRUFBRSxHQUFHLEtBQVk7SUFDckUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTztRQUNULENBQUM7UUFDRCxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgdGhyb3dFcnJvckFuZFN0b3AgfSBmcm9tICcuLi91dGlscy9sb2cnO1xuXG5jb25zdCBBU1NFUlRfRElTQ0xBSU1FUiA9ICdJbnRlcm5hbCBhc3NlcnQsIHRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBRd2lrOiAnO1xuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZWZpbmVkPFQ+KFxuICB2YWx1ZTogVCxcbiAgdGV4dDogc3RyaW5nLFxuICAuLi5wYXJ0czogYW55W11cbik6IGFzc2VydHMgdmFsdWUgaXMgTm9uTnVsbGFibGU8VD4ge1xuICBpZiAoaXNEZXYpIHtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvd0Vycm9yQW5kU3RvcChBU1NFUlRfRElTQ0xBSU1FUiArIHRleHQsIC4uLnBhcnRzKTtcbiAgfVxufVxuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbChcbiAgdmFsdWUxOiBhbnksXG4gIHZhbHVlMjogYW55LFxuICB0ZXh0OiBzdHJpbmcsXG4gIC4uLnBhcnRzOiBhbnlbXVxuKTogYXNzZXJ0cyB2YWx1ZTEgaXMgdHlwZW9mIHZhbHVlMiB7XG4gIGlmIChpc0Rldikge1xuICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvd0Vycm9yQW5kU3RvcChBU1NFUlRfRElTQ0xBSU1FUiArIHRleHQsIC4uLnBhcnRzKTtcbiAgfVxufVxuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRGYWlsKHRleHQ6IHN0cmluZywgLi4ucGFydHM6IGFueVtdKTogbmV2ZXI7XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RmFpbCh0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSkge1xuICBpZiAoaXNEZXYpIHtcbiAgICB0aHJvd0Vycm9yQW5kU3RvcChBU1NFUlRfRElTQ0xBSU1FUiArIHRleHQsIC4uLnBhcnRzKTtcbiAgfVxufVxuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVlMTogYW55LCB0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSk6IGFzc2VydHMgdmFsdWUxIGlzIHRydWUge1xuICBpZiAoaXNEZXYpIHtcbiAgICBpZiAodmFsdWUxID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93RXJyb3JBbmRTdG9wKEFTU0VSVF9ESVNDTEFJTUVSICsgdGV4dCwgLi4ucGFydHMpO1xuICB9XG59XG5cbi8qQF9fSU5MSU5FX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVlMTogYW55LCB0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSk6IGFzc2VydHMgdmFsdWUxIGlzIGZhbHNlIHtcbiAgaWYgKGlzRGV2KSB7XG4gICAgaWYgKHZhbHVlMSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3dFcnJvckFuZFN0b3AoQVNTRVJUX0RJU0NMQUlNRVIgKyB0ZXh0LCAuLi5wYXJ0cyk7XG4gIH1cbn1cblxuLypAX19JTkxJTkVfXyovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TnVtYmVyKHZhbHVlMTogYW55LCB0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSk6IGFzc2VydHMgdmFsdWUxIGlzIG51bWJlciB7XG4gIGlmIChpc0Rldikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUxID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvd0Vycm9yQW5kU3RvcChBU1NFUlRfRElTQ0xBSU1FUiArIHRleHQsIC4uLnBhcnRzKTtcbiAgfVxufVxuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTdHJpbmcodmFsdWUxOiBhbnksIHRleHQ6IHN0cmluZywgLi4ucGFydHM6IGFueVtdKTogYXNzZXJ0cyB2YWx1ZTEgaXMgc3RyaW5nIHtcbiAgaWYgKGlzRGV2KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93RXJyb3JBbmRTdG9wKEFTU0VSVF9ESVNDTEFJTUVSICsgdGV4dCwgLi4ucGFydHMpO1xuICB9XG59XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { assertTrue } from '../shared/error/assert';\n/** @internal */\nexport const mapApp_findIndx = (array, key, start) => {\n    isDev && assertTrue(start % 2 === 0, 'Expecting even number.');\n    let bottom = start >> 1;\n    let top = (array.length - 2) >> 1;\n    while (bottom <= top) {\n        const mid = bottom + ((top - bottom) >> 1);\n        const midKey = array[mid << 1];\n        if (midKey === key) {\n            return mid << 1;\n        }\n        if (midKey < key) {\n            bottom = mid + 1;\n        }\n        else {\n            top = mid - 1;\n        }\n    }\n    return (bottom << 1) ^ -1;\n};\n/** @internal */\nexport const mapArray_set = (array, key, value, start, allowNullValue = false) => {\n    const indx = mapApp_findIndx(array, key, start);\n    if (indx >= 0) {\n        if (value == null && !allowNullValue) {\n            array.splice(indx, 2);\n        }\n        else {\n            array[indx + 1] = value;\n        }\n    }\n    else if (value != null || allowNullValue) {\n        array.splice(indx ^ -1, 0, key, value);\n    }\n};\nexport const mapApp_remove = (array, key, start) => {\n    const indx = mapApp_findIndx(array, key, start);\n    let value = null;\n    if (indx >= 0) {\n        value = array[indx + 1];\n        array.splice(indx, 2);\n        return value;\n    }\n    return value;\n};\n/** @internal */\nexport const mapArray_get = (array, key, start) => {\n    const indx = mapApp_findIndx(array, key, start);\n    if (indx >= 0) {\n        return array[indx + 1];\n    }\n    else {\n        return null;\n    }\n};\nexport const mapArray_has = (array, key, start) => {\n    return mapApp_findIndx(array, key, start) >= 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC1tYXBBcnJheS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvdXRpbC1tYXBBcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBSSxLQUFtQixFQUFFLEdBQVcsRUFBRSxLQUFhLEVBQVUsRUFBRTtJQUM1RixLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDL0QsSUFBSSxNQUFNLEdBQUksS0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxPQUFPLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBVyxDQUFDO1FBQ3pDLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUMxQixLQUFtQixFQUNuQixHQUFXLEVBQ1gsS0FBZSxFQUNmLEtBQWEsRUFDYixpQkFBMEIsS0FBSyxFQUMvQixFQUFFO0lBQ0YsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDZCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO1NBQU0sSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzNDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFJLEtBQW1CLEVBQUUsR0FBVyxFQUFFLEtBQWEsRUFBWSxFQUFFO0lBQzVGLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksS0FBSyxHQUFhLElBQUksQ0FBQztJQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNkLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQW1CLEVBQUUsR0FBVyxFQUFFLEtBQWEsRUFBWSxFQUFFO0lBQzNGLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBYSxDQUFDO0lBQ3JDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUksS0FBbUIsRUFBRSxHQUFXLEVBQUUsS0FBYSxFQUFXLEVBQUU7SUFDMUYsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBhc3NlcnRUcnVlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBtYXBBcHBfZmluZEluZHggPSA8VD4oYXJyYXk6IChUIHwgbnVsbClbXSwga2V5OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBpc0RldiAmJiBhc3NlcnRUcnVlKHN0YXJ0ICUgMiA9PT0gMCwgJ0V4cGVjdGluZyBldmVuIG51bWJlci4nKTtcbiAgbGV0IGJvdHRvbSA9IChzdGFydCBhcyBudW1iZXIpID4+IDE7XG4gIGxldCB0b3AgPSAoYXJyYXkubGVuZ3RoIC0gMikgPj4gMTtcbiAgd2hpbGUgKGJvdHRvbSA8PSB0b3ApIHtcbiAgICBjb25zdCBtaWQgPSBib3R0b20gKyAoKHRvcCAtIGJvdHRvbSkgPj4gMSk7XG4gICAgY29uc3QgbWlkS2V5ID0gYXJyYXlbbWlkIDw8IDFdIGFzIHN0cmluZztcbiAgICBpZiAobWlkS2V5ID09PSBrZXkpIHtcbiAgICAgIHJldHVybiBtaWQgPDwgMTtcbiAgICB9XG4gICAgaWYgKG1pZEtleSA8IGtleSkge1xuICAgICAgYm90dG9tID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9wID0gbWlkIC0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChib3R0b20gPDwgMSkgXiAtMTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBtYXBBcnJheV9zZXQgPSA8VD4oXG4gIGFycmF5OiAoVCB8IG51bGwpW10sXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogVCB8IG51bGwsXG4gIHN0YXJ0OiBudW1iZXIsXG4gIGFsbG93TnVsbFZhbHVlOiBib29sZWFuID0gZmFsc2VcbikgPT4ge1xuICBjb25zdCBpbmR4ID0gbWFwQXBwX2ZpbmRJbmR4KGFycmF5LCBrZXksIHN0YXJ0KTtcbiAgaWYgKGluZHggPj0gMCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsICYmICFhbGxvd051bGxWYWx1ZSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZHgsIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnJheVtpbmR4ICsgMV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCB8fCBhbGxvd051bGxWYWx1ZSkge1xuICAgIGFycmF5LnNwbGljZShpbmR4IF4gLTEsIDAsIGtleSBhcyBhbnksIHZhbHVlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG1hcEFwcF9yZW1vdmUgPSA8VD4oYXJyYXk6IChUIHwgbnVsbClbXSwga2V5OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiBUIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGluZHggPSBtYXBBcHBfZmluZEluZHgoYXJyYXksIGtleSwgc3RhcnQpO1xuICBsZXQgdmFsdWU6IFQgfCBudWxsID0gbnVsbDtcbiAgaWYgKGluZHggPj0gMCkge1xuICAgIHZhbHVlID0gYXJyYXlbaW5keCArIDFdO1xuICAgIGFycmF5LnNwbGljZShpbmR4LCAyKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IG1hcEFycmF5X2dldCA9IDxUPihhcnJheTogKFQgfCBudWxsKVtdLCBrZXk6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IFQgfCBudWxsID0+IHtcbiAgY29uc3QgaW5keCA9IG1hcEFwcF9maW5kSW5keChhcnJheSwga2V5LCBzdGFydCk7XG4gIGlmIChpbmR4ID49IDApIHtcbiAgICByZXR1cm4gYXJyYXlbaW5keCArIDFdIGFzIFQgfCBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWFwQXJyYXlfaGFzID0gPFQ+KGFycmF5OiAoVCB8IG51bGwpW10sIGtleTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBtYXBBcHBfZmluZEluZHgoYXJyYXksIGtleSwgc3RhcnQpID49IDA7XG59O1xuIl19","/** @private */\nexport const isHtmlElement = (node) => {\n    return node ? node.nodeType === 1 : false;\n};\nexport const isSerializableObject = (v) => {\n    const proto = Object.getPrototypeOf(v);\n    return proto === Object.prototype || proto === Array.prototype || proto === null;\n};\nexport const isObject = (v) => {\n    return typeof v === 'object' && v !== null;\n};\nexport const isArray = (v) => {\n    return Array.isArray(v);\n};\nexport const isString = (v) => {\n    return typeof v === 'string';\n};\nexport const isNumber = (v) => {\n    return typeof v === 'number';\n};\nexport const isFunction = (v) => {\n    return typeof v === 'function';\n};\nexport const isPrimitiveOrNullUndefined = (v) => {\n    return (typeof v !== 'object' && typeof v !== 'function') || v === null || v === undefined;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWU7QUFDZixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFhLEVBQW1CLEVBQUU7SUFDOUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFFLElBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFVLEVBQWdDLEVBQUU7SUFDL0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBVSxFQUFlLEVBQUU7SUFDbEQsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFVLEVBQWtCLEVBQUU7SUFDcEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVUsRUFBZSxFQUFFO0lBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVUsRUFBZSxFQUFFO0lBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFrQyxDQUFVLEVBQVUsRUFBRTtJQUNoRixPQUFPLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUNqQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxDQUFVLEVBQ3lDLEVBQUU7SUFDckQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDN0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBwcml2YXRlICovXG5leHBvcnQgY29uc3QgaXNIdG1sRWxlbWVudCA9IChub2RlOiB1bmtub3duKTogbm9kZSBpcyBFbGVtZW50ID0+IHtcbiAgcmV0dXJuIG5vZGUgPyAobm9kZSBhcyBOb2RlKS5ub2RlVHlwZSA9PT0gMSA6IGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VyaWFsaXphYmxlT2JqZWN0ID0gKHY6IHVua25vd24pOiB2IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yodik7XG4gIHJldHVybiBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gQXJyYXkucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHY6IHVua25vd24pOiB2IGlzIG9iamVjdCA9PiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gKHY6IHVua25vd24pOiB2IGlzIHVua25vd25bXSA9PiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHYpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gKHY6IHVua25vd24pOiB2IGlzIHN0cmluZyA9PiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodjogdW5rbm93bik6IHYgaXMgbnVtYmVyID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uID0gPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBhbnk+KHY6IHVua25vd24pOiB2IGlzIFQgPT4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdmdW5jdGlvbic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmVPck51bGxVbmRlZmluZWQgPSAoXG4gIHY6IHVua25vd25cbik6IHYgaXMgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gKHR5cGVvZiB2ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdiAhPT0gJ2Z1bmN0aW9uJykgfHwgdiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIGEgdmFsdWUgd2hpY2ggaXMgZWl0aGVyIHJlc29sdmUgb3IgYSBwcm9taXNlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVmFsdWVPclByb21pc2U8VD4gPSBUIHwgUHJvbWlzZTxUPjtcbiJdfQ==","import { isDev } from '@qwik.dev/core/build';\nimport { logErrorAndStop } from '../utils/log';\nimport { isObject } from '../utils/types';\nconst baseUrl = 'https://qwikdev-build-v2.qwik-8nx.pages.dev/docs/errors/#q';\nexport const codeToText = (code, ...parts) => {\n    if (isDev) {\n        // Keep one error, one line to make it easier to search for the error message.\n        // Keep in sync with packages/docs/src/routes/docs/errors/index.mdx\n        const MAP = [\n            'Error while serializing class or style attributes', // 0\n            'Scheduler not found', // 1\n            'track() received object, without prop to track', // 2\n            'Only primitive and object literals can be serialized. {{0}}', // 3\n            'You can render over a existing q:container. Skipping render().', // 4\n            'QRL is not a function', // 5\n            'Dynamic import {{0}} not found', // 6\n            'Unknown type argument', // 7\n            `Actual value for useContext({{0}}) can not be found, make sure some ancestor component has set a value using useContextProvider(). In the browser make sure that the context was used during SSR so its state was serialized.`, // 8\n            \"Invoking 'use*()' method outside of invocation context.\", // 9\n            `Calling a 'use*()' method outside 'component$(() => { HERE })' is not allowed. 'use*()' methods provide hooks to the 'component$' state and lifecycle, ie 'use' hooks can only be called synchronously within the 'component$' function or another 'use' method.\\nSee https://qwik.dev/docs/core/tasks/#use-method-rules`, // 10\n            'The provided Context reference \"{{0}}\" is not a valid context created by createContextId()', // 11\n            'SsrError(tag): {{0}}', // 12\n            'QRLs can not be resolved because it does not have an attached container. This means that the QRL does not know where it belongs inside the DOM, so it cant dynamically import() from a relative path.', // 13\n            'QRLs can not be dynamically resolved, because it does not have a chunk path', // 14\n            '{{0}}\\nThe JSX ref attribute must be a Signal', // 15\n            'Serialization Error: Deserialization of data type {{0}} is not implemented', // 16\n            'Serialization Error: Expected vnode for ref prop, but got {{0}}', // 17\n            'Serialization Error: Cannot allocate data type {{0}}', // 18\n            'Serialization Error: Missing root id for {{0}}', // 19\n            'Serialization Error: Serialization of data type {{0}} is not implemented', // 20\n            'Serialization Error: Unvisited {{0}}', // 21\n            'Serialization Error: Missing QRL chunk for {{0}}', // 22\n            '{{0}}\\nThe value of the textarea must be a string found {{1}}', // 23\n            'Unable to find q:container', // 24\n            \"Element must have 'q:container' attribute.\", // 25\n            'Unknown vnode type {{0}}.', // 26\n            'Materialize error: missing element: {{0}} {{1}} {{2}}', // 27\n            'Cannot coerce a Signal, use `.value` instead', // 28\n            'useComputed$ QRL {{0}} {{1}} cannot return a Promise', // 29\n            '===\\nQwik version {{0}} already imported while importing {{1}}.\\nThis can lead to issues due to duplicated shared structures.\\nVerify that the Qwik libraries you\\'re using are in \"resolve.noExternal[]\" and in \"optimizeDeps.exclude\".\\n===\\n', // 30\n            'WrappedSignal is read-only', // 31\n            'Attribute value is unsafe for SSR {{0}}', // 32\n            'SerializerSymbol function returned rejected promise', // 33\n            'Serialization Error: Cannot serialize function: {{0}}', // 34\n            'Cannot read .value of a clientOnly async signal during SSR. Use .loading to check state, or provide an initial value.', // 35\n        ];\n        let text = MAP[code] ?? '';\n        if (parts.length) {\n            text = text.replaceAll(/{{(\\d+)}}/g, (_, index) => {\n                let v = parts[index];\n                if (v && isObject(v) && v.constructor === Object) {\n                    v = JSON.stringify(v).slice(0, 50);\n                }\n                return v;\n            });\n        }\n        return `Code(Q${code}): ${text}`;\n    }\n    else {\n        return `Code(Q${code}) ${baseUrl}${code}`;\n    }\n};\nexport const qError = (code, errorMessageArgs = []) => {\n    const text = codeToText(code, ...errorMessageArgs);\n    return logErrorAndStop(text, ...errorMessageArgs);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2Vycm9yL2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLE9BQU8sR0FBRyw0REFBNEQsQ0FBQztBQUM3RSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsR0FBRyxLQUFZLEVBQVUsRUFBRTtJQUNsRSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsOEVBQThFO1FBQzlFLG1FQUFtRTtRQUNuRSxNQUFNLEdBQUcsR0FBRztZQUNWLG1EQUFtRCxFQUFFLElBQUk7WUFDekQscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixnREFBZ0QsRUFBRSxJQUFJO1lBQ3RELDZEQUE2RCxFQUFFLElBQUk7WUFDbkUsZ0VBQWdFLEVBQUUsSUFBSTtZQUN0RSx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLGdDQUFnQyxFQUFFLElBQUk7WUFDdEMsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QiwrTkFBK04sRUFBRSxJQUFJO1lBQ3JPLHlEQUF5RCxFQUFFLElBQUk7WUFDL0QsMFRBQTBULEVBQUUsS0FBSztZQUNqVSw0RkFBNEYsRUFBRSxLQUFLO1lBQ25HLHNCQUFzQixFQUFFLEtBQUs7WUFDN0IsdU1BQXVNLEVBQUUsS0FBSztZQUM5TSw2RUFBNkUsRUFBRSxLQUFLO1lBQ3BGLCtDQUErQyxFQUFFLEtBQUs7WUFDdEQsNEVBQTRFLEVBQUUsS0FBSztZQUNuRixpRUFBaUUsRUFBRSxLQUFLO1lBQ3hFLHNEQUFzRCxFQUFFLEtBQUs7WUFDN0QsZ0RBQWdELEVBQUUsS0FBSztZQUN2RCwwRUFBMEUsRUFBRSxLQUFLO1lBQ2pGLHNDQUFzQyxFQUFFLEtBQUs7WUFDN0Msa0RBQWtELEVBQUUsS0FBSztZQUN6RCwrREFBK0QsRUFBRSxLQUFLO1lBQ3RFLDRCQUE0QixFQUFFLEtBQUs7WUFDbkMsNENBQTRDLEVBQUUsS0FBSztZQUNuRCwyQkFBMkIsRUFBRSxLQUFLO1lBQ2xDLHVEQUF1RCxFQUFFLEtBQUs7WUFDOUQsOENBQThDLEVBQUUsS0FBSztZQUNyRCxzREFBc0QsRUFBRSxLQUFLO1lBQzdELGlQQUFpUCxFQUFFLEtBQUs7WUFDeFAsNEJBQTRCLEVBQUUsS0FBSztZQUNuQyx5Q0FBeUMsRUFBRSxLQUFLO1lBQ2hELHFEQUFxRCxFQUFFLEtBQUs7WUFDNUQsdURBQXVELEVBQUUsS0FBSztZQUM5RCx1SEFBdUgsRUFBRSxLQUFLO1NBQy9ILENBQUM7UUFDRixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDakQsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sU0FBUyxJQUFJLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLFNBQVMsSUFBSSxLQUFLLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBeUNGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVksRUFBRSxtQkFBMEIsRUFBRSxFQUFTLEVBQUU7SUFDMUUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGxvZ0Vycm9yQW5kU3RvcCB9IGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcblxuY29uc3QgYmFzZVVybCA9ICdodHRwczovL3F3aWtkZXYtYnVpbGQtdjIucXdpay04bngucGFnZXMuZGV2L2RvY3MvZXJyb3JzLyNxJztcbmV4cG9ydCBjb25zdCBjb2RlVG9UZXh0ID0gKGNvZGU6IG51bWJlciwgLi4ucGFydHM6IGFueVtdKTogc3RyaW5nID0+IHtcbiAgaWYgKGlzRGV2KSB7XG4gICAgLy8gS2VlcCBvbmUgZXJyb3IsIG9uZSBsaW5lIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNlYXJjaCBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggcGFja2FnZXMvZG9jcy9zcmMvcm91dGVzL2RvY3MvZXJyb3JzL2luZGV4Lm1keFxuICAgIGNvbnN0IE1BUCA9IFtcbiAgICAgICdFcnJvciB3aGlsZSBzZXJpYWxpemluZyBjbGFzcyBvciBzdHlsZSBhdHRyaWJ1dGVzJywgLy8gMFxuICAgICAgJ1NjaGVkdWxlciBub3QgZm91bmQnLCAvLyAxXG4gICAgICAndHJhY2soKSByZWNlaXZlZCBvYmplY3QsIHdpdGhvdXQgcHJvcCB0byB0cmFjaycsIC8vIDJcbiAgICAgICdPbmx5IHByaW1pdGl2ZSBhbmQgb2JqZWN0IGxpdGVyYWxzIGNhbiBiZSBzZXJpYWxpemVkLiB7ezB9fScsIC8vIDNcbiAgICAgICdZb3UgY2FuIHJlbmRlciBvdmVyIGEgZXhpc3RpbmcgcTpjb250YWluZXIuIFNraXBwaW5nIHJlbmRlcigpLicsIC8vIDRcbiAgICAgICdRUkwgaXMgbm90IGEgZnVuY3Rpb24nLCAvLyA1XG4gICAgICAnRHluYW1pYyBpbXBvcnQge3swfX0gbm90IGZvdW5kJywgLy8gNlxuICAgICAgJ1Vua25vd24gdHlwZSBhcmd1bWVudCcsIC8vIDdcbiAgICAgIGBBY3R1YWwgdmFsdWUgZm9yIHVzZUNvbnRleHQoe3swfX0pIGNhbiBub3QgYmUgZm91bmQsIG1ha2Ugc3VyZSBzb21lIGFuY2VzdG9yIGNvbXBvbmVudCBoYXMgc2V0IGEgdmFsdWUgdXNpbmcgdXNlQ29udGV4dFByb3ZpZGVyKCkuIEluIHRoZSBicm93c2VyIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb250ZXh0IHdhcyB1c2VkIGR1cmluZyBTU1Igc28gaXRzIHN0YXRlIHdhcyBzZXJpYWxpemVkLmAsIC8vIDhcbiAgICAgIFwiSW52b2tpbmcgJ3VzZSooKScgbWV0aG9kIG91dHNpZGUgb2YgaW52b2NhdGlvbiBjb250ZXh0LlwiLCAvLyA5XG4gICAgICBgQ2FsbGluZyBhICd1c2UqKCknIG1ldGhvZCBvdXRzaWRlICdjb21wb25lbnQkKCgpID0+IHsgSEVSRSB9KScgaXMgbm90IGFsbG93ZWQuICd1c2UqKCknIG1ldGhvZHMgcHJvdmlkZSBob29rcyB0byB0aGUgJ2NvbXBvbmVudCQnIHN0YXRlIGFuZCBsaWZlY3ljbGUsIGllICd1c2UnIGhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdpdGhpbiB0aGUgJ2NvbXBvbmVudCQnIGZ1bmN0aW9uIG9yIGFub3RoZXIgJ3VzZScgbWV0aG9kLlxcblNlZSBodHRwczovL3F3aWsuZGV2L2RvY3MvY29yZS90YXNrcy8jdXNlLW1ldGhvZC1ydWxlc2AsIC8vIDEwXG4gICAgICAnVGhlIHByb3ZpZGVkIENvbnRleHQgcmVmZXJlbmNlIFwie3swfX1cIiBpcyBub3QgYSB2YWxpZCBjb250ZXh0IGNyZWF0ZWQgYnkgY3JlYXRlQ29udGV4dElkKCknLCAvLyAxMVxuICAgICAgJ1NzckVycm9yKHRhZyk6IHt7MH19JywgLy8gMTJcbiAgICAgICdRUkxzIGNhbiBub3QgYmUgcmVzb2x2ZWQgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGFuIGF0dGFjaGVkIGNvbnRhaW5lci4gVGhpcyBtZWFucyB0aGF0IHRoZSBRUkwgZG9lcyBub3Qga25vdyB3aGVyZSBpdCBiZWxvbmdzIGluc2lkZSB0aGUgRE9NLCBzbyBpdCBjYW50IGR5bmFtaWNhbGx5IGltcG9ydCgpIGZyb20gYSByZWxhdGl2ZSBwYXRoLicsIC8vIDEzXG4gICAgICAnUVJMcyBjYW4gbm90IGJlIGR5bmFtaWNhbGx5IHJlc29sdmVkLCBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSBjaHVuayBwYXRoJywgLy8gMTRcbiAgICAgICd7ezB9fVxcblRoZSBKU1ggcmVmIGF0dHJpYnV0ZSBtdXN0IGJlIGEgU2lnbmFsJywgLy8gMTVcbiAgICAgICdTZXJpYWxpemF0aW9uIEVycm9yOiBEZXNlcmlhbGl6YXRpb24gb2YgZGF0YSB0eXBlIHt7MH19IGlzIG5vdCBpbXBsZW1lbnRlZCcsIC8vIDE2XG4gICAgICAnU2VyaWFsaXphdGlvbiBFcnJvcjogRXhwZWN0ZWQgdm5vZGUgZm9yIHJlZiBwcm9wLCBidXQgZ290IHt7MH19JywgLy8gMTdcbiAgICAgICdTZXJpYWxpemF0aW9uIEVycm9yOiBDYW5ub3QgYWxsb2NhdGUgZGF0YSB0eXBlIHt7MH19JywgLy8gMThcbiAgICAgICdTZXJpYWxpemF0aW9uIEVycm9yOiBNaXNzaW5nIHJvb3QgaWQgZm9yIHt7MH19JywgLy8gMTlcbiAgICAgICdTZXJpYWxpemF0aW9uIEVycm9yOiBTZXJpYWxpemF0aW9uIG9mIGRhdGEgdHlwZSB7ezB9fSBpcyBub3QgaW1wbGVtZW50ZWQnLCAvLyAyMFxuICAgICAgJ1NlcmlhbGl6YXRpb24gRXJyb3I6IFVudmlzaXRlZCB7ezB9fScsIC8vIDIxXG4gICAgICAnU2VyaWFsaXphdGlvbiBFcnJvcjogTWlzc2luZyBRUkwgY2h1bmsgZm9yIHt7MH19JywgLy8gMjJcbiAgICAgICd7ezB9fVxcblRoZSB2YWx1ZSBvZiB0aGUgdGV4dGFyZWEgbXVzdCBiZSBhIHN0cmluZyBmb3VuZCB7ezF9fScsIC8vIDIzXG4gICAgICAnVW5hYmxlIHRvIGZpbmQgcTpjb250YWluZXInLCAvLyAyNFxuICAgICAgXCJFbGVtZW50IG11c3QgaGF2ZSAncTpjb250YWluZXInIGF0dHJpYnV0ZS5cIiwgLy8gMjVcbiAgICAgICdVbmtub3duIHZub2RlIHR5cGUge3swfX0uJywgLy8gMjZcbiAgICAgICdNYXRlcmlhbGl6ZSBlcnJvcjogbWlzc2luZyBlbGVtZW50OiB7ezB9fSB7ezF9fSB7ezJ9fScsIC8vIDI3XG4gICAgICAnQ2Fubm90IGNvZXJjZSBhIFNpZ25hbCwgdXNlIGAudmFsdWVgIGluc3RlYWQnLCAvLyAyOFxuICAgICAgJ3VzZUNvbXB1dGVkJCBRUkwge3swfX0ge3sxfX0gY2Fubm90IHJldHVybiBhIFByb21pc2UnLCAvLyAyOVxuICAgICAgJz09PVxcblF3aWsgdmVyc2lvbiB7ezB9fSBhbHJlYWR5IGltcG9ydGVkIHdoaWxlIGltcG9ydGluZyB7ezF9fS5cXG5UaGlzIGNhbiBsZWFkIHRvIGlzc3VlcyBkdWUgdG8gZHVwbGljYXRlZCBzaGFyZWQgc3RydWN0dXJlcy5cXG5WZXJpZnkgdGhhdCB0aGUgUXdpayBsaWJyYXJpZXMgeW91XFwncmUgdXNpbmcgYXJlIGluIFwicmVzb2x2ZS5ub0V4dGVybmFsW11cIiBhbmQgaW4gXCJvcHRpbWl6ZURlcHMuZXhjbHVkZVwiLlxcbj09PVxcbicsIC8vIDMwXG4gICAgICAnV3JhcHBlZFNpZ25hbCBpcyByZWFkLW9ubHknLCAvLyAzMVxuICAgICAgJ0F0dHJpYnV0ZSB2YWx1ZSBpcyB1bnNhZmUgZm9yIFNTUiB7ezB9fScsIC8vIDMyXG4gICAgICAnU2VyaWFsaXplclN5bWJvbCBmdW5jdGlvbiByZXR1cm5lZCByZWplY3RlZCBwcm9taXNlJywgLy8gMzNcbiAgICAgICdTZXJpYWxpemF0aW9uIEVycm9yOiBDYW5ub3Qgc2VyaWFsaXplIGZ1bmN0aW9uOiB7ezB9fScsIC8vIDM0XG4gICAgICAnQ2Fubm90IHJlYWQgLnZhbHVlIG9mIGEgY2xpZW50T25seSBhc3luYyBzaWduYWwgZHVyaW5nIFNTUi4gVXNlIC5sb2FkaW5nIHRvIGNoZWNrIHN0YXRlLCBvciBwcm92aWRlIGFuIGluaXRpYWwgdmFsdWUuJywgLy8gMzVcbiAgICBdO1xuICAgIGxldCB0ZXh0ID0gTUFQW2NvZGVdID8/ICcnO1xuICAgIGlmIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2VBbGwoL3t7KFxcZCspfX0vZywgKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB2ID0gcGFydHNbaW5kZXhdO1xuICAgICAgICBpZiAodiAmJiBpc09iamVjdCh2KSAmJiB2LmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodikuc2xpY2UoMCwgNTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBgQ29kZShRJHtjb2RlfSk6ICR7dGV4dH1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgQ29kZShRJHtjb2RlfSkgJHtiYXNlVXJsfSR7Y29kZX1gO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBRRXJyb3Ige1xuICBzdHJpbmdpZnlDbGFzc09yU3R5bGUgPSAwLFxuICBzY2hlZHVsZXJOb3RGb3VuZCA9IDEsXG4gIHRyYWNrT2JqZWN0V2l0aG91dFByb3AgPSAyLFxuICB2ZXJpZnlTZXJpYWxpemFibGUgPSAzLFxuICBjYW5ub3RSZW5kZXJPdmVyRXhpc3RpbmdDb250YWluZXIgPSA0LFxuICBxcmxJc05vdEZ1bmN0aW9uID0gNSxcbiAgZHluYW1pY0ltcG9ydEZhaWxlZCA9IDYsXG4gIHVua25vd25UeXBlQXJndW1lbnQgPSA3LFxuICBub3RGb3VuZENvbnRleHQgPSA4LFxuICB1c2VNZXRob2RPdXRzaWRlQ29udGV4dCA9IDksXG4gIHVzZUludm9rZUNvbnRleHQgPSAxMCxcbiAgaW52YWxpZENvbnRleHQgPSAxMSxcbiAgdGFnRXJyb3IgPSAxMixcbiAgcXJsTWlzc2luZ0NvbnRhaW5lciA9IDEzLFxuICBxcmxNaXNzaW5nQ2h1bmsgPSAxNCxcbiAgaW52YWxpZFJlZlZhbHVlID0gMTUsXG4gIHNlcmlhbGl6ZUVycm9yTm90SW1wbGVtZW50ZWQgPSAxNixcbiAgc2VyaWFsaXplRXJyb3JFeHBlY3RlZFZOb2RlID0gMTcsXG4gIHNlcmlhbGl6ZUVycm9yQ2Fubm90QWxsb2NhdGUgPSAxOCxcbiAgc2VyaWFsaXplRXJyb3JNaXNzaW5nUm9vdElkID0gMTksXG4gIHNlcmlhbGl6ZUVycm9yVW5rbm93blR5cGUgPSAyMCxcbiAgc2VyaWFsaXplRXJyb3JVbnZpc2l0ZWQgPSAyMSxcbiAgc2VyaWFsaXplRXJyb3JNaXNzaW5nQ2h1bmsgPSAyMixcbiAgd3JvbmdUZXh0YXJlYVZhbHVlID0gMjMsXG4gIGNvbnRhaW5lck5vdEZvdW5kID0gMjQsXG4gIGVsZW1lbnRXaXRob3V0Q29udGFpbmVyID0gMjUsXG4gIGludmFsaWRWTm9kZVR5cGUgPSAyNixcbiAgbWF0ZXJpYWxpemVWTm9kZURhdGFFcnJvciA9IDI3LFxuICBjYW5ub3RDb2VyY2VTaWduYWwgPSAyOCxcbiAgY29tcHV0ZWROb3RTeW5jID0gMjksXG4gIGR1cGxpY2F0ZVF3aWsgPSAzMCxcbiAgd3JhcHBlZFJlYWRPbmx5ID0gMzEsXG4gIHVuc2FmZUF0dHIgPSAzMixcbiAgc2VyaWFsaXplclN5bWJvbFJlamVjdGVkUHJvbWlzZSA9IDMzLFxuICBzZXJpYWxpemVFcnJvckNhbm5vdFNlcmlhbGl6ZUZ1bmN0aW9uID0gMzQsXG4gIGFzeW5jQ2xpZW50T25seVZhbHVlRHVyaW5nU1NSID0gMzUsXG59XG5cbmV4cG9ydCBjb25zdCBxRXJyb3IgPSAoY29kZTogbnVtYmVyLCBlcnJvck1lc3NhZ2VBcmdzOiBhbnlbXSA9IFtdKTogRXJyb3IgPT4ge1xuICBjb25zdCB0ZXh0ID0gY29kZVRvVGV4dChjb2RlLCAuLi5lcnJvck1lc3NhZ2VBcmdzKTtcbiAgcmV0dXJuIGxvZ0Vycm9yQW5kU3RvcCh0ZXh0LCAuLi5lcnJvck1lc3NhZ2VBcmdzKTtcbn07XG4iXX0=","/** QRL related utilities that you can import without importing all of Qwik. */\nimport { isDev } from '@qwik.dev/core/build';\nexport const SYNC_QRL = '<sync>';\n/** Sync QRL is a function which is serialized into `<script q:func=\"qwik/json\">` tag. */\nexport const isSyncQrl = (value) => {\n    return isQrl(value) && value.$symbol$ == SYNC_QRL;\n};\nexport const isQrl = (value) => {\n    return typeof value === 'function' && typeof value.getSymbol === 'function';\n};\nexport function assertQrl(qrl) {\n    if (isDev) {\n        if (!isQrl(qrl)) {\n            throw new Error('Not a QRL');\n        }\n    }\n}\nexport const getSymbolHash = (symbolName) => {\n    const index = symbolName.lastIndexOf('_') + 1;\n    return symbolName.slice(index);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvcXJsLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtFQUErRTtBQUUvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJN0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUVqQyx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBVSxFQUE0QixFQUFFO0lBQ2hFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFjLEtBQWMsRUFBMkIsRUFBRTtJQUM1RSxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxPQUFRLEtBQWEsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0FBQ3ZGLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxTQUFTLENBQUksR0FBVztJQUN0QyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBRSxFQUFFO0lBQ2xELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogUVJMIHJlbGF0ZWQgdXRpbGl0aWVzIHRoYXQgeW91IGNhbiBpbXBvcnQgd2l0aG91dCBpbXBvcnRpbmcgYWxsIG9mIFF3aWsuICovXG5cbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCwgU3luY1FSTEludGVybmFsIH0gZnJvbSAnLi9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuL3FybC5wdWJsaWMnO1xuXG5leHBvcnQgY29uc3QgU1lOQ19RUkwgPSAnPHN5bmM+JztcblxuLyoqIFN5bmMgUVJMIGlzIGEgZnVuY3Rpb24gd2hpY2ggaXMgc2VyaWFsaXplZCBpbnRvIGA8c2NyaXB0IHE6ZnVuYz1cInF3aWsvanNvblwiPmAgdGFnLiAqL1xuZXhwb3J0IGNvbnN0IGlzU3luY1FybCA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgU3luY1FSTEludGVybmFsID0+IHtcbiAgcmV0dXJuIGlzUXJsKHZhbHVlKSAmJiB2YWx1ZS4kc3ltYm9sJCA9PSBTWU5DX1FSTDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1FybCA9IDxUID0gdW5rbm93bj4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBRUkxJbnRlcm5hbDxUPiA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLmdldFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRRcmw8VD4ocXJsOiBRUkw8VD4pOiBhc3NlcnRzIHFybCBpcyBRUkxJbnRlcm5hbDxUPiB7XG4gIGlmIChpc0Rldikge1xuICAgIGlmICghaXNRcmwocXJsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSBRUkwnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFN5bWJvbEhhc2ggPSAoc3ltYm9sTmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gc3ltYm9sTmFtZS5sYXN0SW5kZXhPZignXycpICsgMTtcbiAgcmV0dXJuIHN5bWJvbE5hbWUuc2xpY2UoaW5kZXgpO1xufTtcbiJdfQ==","/**\n * A friendly name tag for a VirtualVNode.\n *\n * Theses are used to give a name to a VirtualVNode. This is useful for debugging and testing.\n *\n * The name is only added in development mode and is not included in production builds.\n */\nexport const DEBUG_TYPE = 'q:type';\nexport const VirtualTypeName = {\n    [\"V\" /* VirtualType.Virtual */]: /* ********* */ 'Virtual', //\n    [\"F\" /* VirtualType.Fragment */]: /* ******** */ 'Fragment', //\n    [\"S\" /* VirtualType.WrappedSignal */]: /* *** */ 'Signal', //\n    [\"A\" /* VirtualType.Awaited */]: /* ********* */ 'Awaited', //\n    [\"C\" /* VirtualType.Component */]: /* ******* */ 'Component', //\n    [\"I\" /* VirtualType.InlineComponent */]: /* * */ 'InlineComponent', //\n    [\"P\" /* VirtualType.Projection */]: /* ****** */ 'Projection', //\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlGQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBWW5DLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBMkI7SUFDckQsK0JBQXFCLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFO0lBQ3BELGdDQUFzQixFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUNyRCxxQ0FBMkIsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDbkQsK0JBQXFCLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFO0lBQ3BELGlDQUF1QixFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtJQUN0RCx1Q0FBNkIsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtJQUM1RCxrQ0FBd0IsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQUU7Q0FDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSVNzck5vZGUsIFN0cmVhbVdyaXRlciwgU3ltYm9sVG9DaHVua1Jlc29sdmVyIH0gZnJvbSAnLi4vc3NyL3Nzci10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRJZCB9IGZyb20gJy4uL3VzZS91c2UtY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4vanN4L3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemF0aW9uQ29udGV4dCB9IGZyb20gJy4vc2VyZGVzL2luZGV4JztcbmltcG9ydCB0eXBlIHsgVk5vZGUgfSBmcm9tICcuL3Zub2RlL3Zub2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXNlcmlhbGl6ZUNvbnRhaW5lciB7XG4gICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IHVua25vd247XG4gICRnZXRGb3J3YXJkUmVmJDogKGlkOiBudW1iZXIpID0+IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBnZXRTeW5jRm46IChpZDogbnVtYmVyKSA9PiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICAkc3RhdGUkPzogdW5rbm93bltdO1xuICAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXA7XG4gICRmb3J3YXJkUmVmcyQ6IEFycmF5PG51bWJlciB8IHN0cmluZz4gfCBudWxsO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lciB7XG4gIHJlYWRvbmx5ICR2ZXJzaW9uJDogc3RyaW5nO1xuICByZWFkb25seSAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXA7XG4gICRyb290Q29udGFpbmVyJDogQ29udGFpbmVyIHwgbnVsbDtcbiAgJGlzT3V0T2ZPcmRlclNlZ21lbnQkOiBib29sZWFuO1xuICAvLy8gQ3VycmVudCBsYW5ndWFnZSBsb2NhbGVcbiAgcmVhZG9ubHkgJGxvY2FsZSQ6IHN0cmluZztcbiAgLy8vIFJldHJpZXZlIE9iamVjdCBmcm9tIHBhdXNlZCBzZXJpYWxpemVkIHN0YXRlLlxuICByZWFkb25seSAkZ2V0T2JqZWN0QnlJZCQ6IChpZDogbnVtYmVyIHwgc3RyaW5nKSA9PiBhbnk7XG4gIHJlYWRvbmx5ICRzZXJ2ZXJEYXRhJDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcmVhZG9ubHkgJGluc3RhbmNlSGFzaCQ6IHN0cmluZyB8IG51bGw7XG4gICRjdXJyZW50VW5pcXVlSWQkOiBudW1iZXI7XG4gICRidWlsZEJhc2UkOiBzdHJpbmcgfCBudWxsO1xuICAkcmVuZGVyUHJvbWlzZSQ6IFByb21pc2U8dm9pZD4gfCBudWxsO1xuICAkcmVzb2x2ZVJlbmRlclByb21pc2UkOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuICAkcGVuZGluZ0NvdW50JDogbnVtYmVyO1xuICAkY2hlY2tQZW5kaW5nQ291bnQkKCk6IHZvaWQ7XG5cbiAgaGFuZGxlRXJyb3IoZXJyOiBhbnksICRob3N0JDogSG9zdEVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgZ2V0UGFyZW50SG9zdChob3N0OiBIb3N0RWxlbWVudCk6IEhvc3RFbGVtZW50IHwgbnVsbDtcbiAgc2V0Q29udGV4dDxUPihob3N0OiBIb3N0RWxlbWVudCwgY29udGV4dDogQ29udGV4dElkPFQ+LCB2YWx1ZTogVCk6IHZvaWQ7XG4gIHJlc29sdmVDb250ZXh0PFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBjb250ZXh0SWQ6IENvbnRleHRJZDxUPik6IFQgfCB1bmRlZmluZWQ7XG4gIHNldEhvc3RQcm9wPFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZDtcbiAgZ2V0SG9zdFByb3A8VD4oaG9zdDogSG9zdEVsZW1lbnQsIG5hbWU6IHN0cmluZyk6IFQgfCBudWxsO1xuICAkYXBwZW5kU3R5bGUkKGNvbnRlbnQ6IHN0cmluZywgc3R5bGVJZDogc3RyaW5nLCBob3N0OiBIb3N0RWxlbWVudCwgc2NvcGVkOiBib29sZWFuKTogdm9pZDtcbiAgLyoqXG4gICAqIFdoZW4gY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIGV4ZWN1dGVkLCBpdCBtYXkgYWRkL3JlbW92ZSBjaGlsZHJlbi4gVGhpcyBjYW4gY2F1c2UgcHJvYmxlbXNcbiAgICogd2l0aCB0aGUgcHJvamVjdGlvbiBiZWNhdXNlIGRlbGV0aW5nIGNvbnRlbnQgd2lsbCBwcmV2ZW50IHRoZSBwcm9qZWN0aW9uIHJlZmVyZW5jZXMgZnJvbVxuICAgKiBsb29raW5nIHVwIHZub2Rlcy4gVGhlcmVmb3JlIGJlZm9yZSB3ZSBleGVjdXRlIHRoZSBjb21wb25lbnQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBhbGwgb2YgaXRzXG4gICAqIHJlZmVyZW5jZXMgdG8gdm5vZGUgYXJlIHJlc29sdmVkLlxuICAgKlxuICAgKiBAcGFyYW0gcmVuZGVySG9zdCAtIEhvc3QgZWxlbWVudCB0byBlbnN1cmUgcHJvamVjdGlvbiBpcyByZXNvbHZlZC5cbiAgICovXG4gIGVuc3VyZVByb2plY3Rpb25SZXNvbHZlZChob3N0OiBIb3N0RWxlbWVudCk6IHZvaWQ7XG4gIHNlcmlhbGl6YXRpb25DdHhGYWN0b3J5KFxuICAgIE5vZGVDb25zdHJ1Y3Rvcjoge1xuICAgICAgbmV3ICguLi5yZXN0OiBhbnlbXSk6IHsgX19icmFuZF9fOiAnU3NyTm9kZScgfTtcbiAgICB9IHwgbnVsbCxcbiAgICBEb21SZWZDb25zdHJ1Y3Rvcjoge1xuICAgICAgbmV3ICguLi5yZXN0OiBhbnlbXSk6IHsgX19icmFuZF9fOiAnRG9tUmVmJyB9O1xuICAgIH0gfCBudWxsLFxuICAgIHN5bWJvbFRvQ2h1bmtSZXNvbHZlcjogU3ltYm9sVG9DaHVua1Jlc29sdmVyLFxuICAgIHdyaXRlcj86IFN0cmVhbVdyaXRlclxuICApOiBTZXJpYWxpemF0aW9uQ29udGV4dDtcbn1cblxuZXhwb3J0IHR5cGUgSG9zdEVsZW1lbnQgPSBWTm9kZSB8IElTc3JOb2RlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFFFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIF9xRGlzcGF0Y2g/OiBSZWNvcmQ8c3RyaW5nLCBFdmVudEhhbmRsZXIgfCBFdmVudEhhbmRsZXJbXT47XG4gIF9xU2VnbWVudD86IHN0cmluZztcbiAgdk5vZGU/OiBWTm9kZTtcbn1cblxuZXhwb3J0IHR5cGUgcVdpbmRvdyA9IFdpbmRvdyAmIHtcbiAgLyoqXG4gICAqIFF3aWtMb2FkZXIgY29tbXVuaWNhdGlvbiBjaGFubmVsLiBTdGFydHMgb3V0IGFzIGEgcmVndWxhciBhcnJheSBhbmQgaXMgdGhlbiByZXBsYWNlZCB3aXRoIHRoaXNcbiAgICogb2JqZWN0LiBXZSB1c2Uga2ViYWItY2FzZSBwcm9wZXJ0eSBuYW1lcyB0byBhdm9pZCBjb252ZXJ0aW5nIHRvIGNhbWVsQ2FzZSBkdXJpbmcgRE9NIHJlbmRlcmluZ1xuICAgKiB3aGlsZSB3ZSBhZGQgbmV3IGV2ZW50cyB0byBxd2lrbG9hZGVyLlxuICAgKi9cbiAgX3F3aWtFdjoge1xuICAgIC8qKiBUaGUgc2NvcGVkIGtlYmFiY2FzZSBuYW1lcyBvZiBldmVudHMsIGUuZy4gYFwiZTpteS1ldmVudFwiYCwgYFwiZXA6dG91Y2hzdGFydFwiYCBvciBgXCJ3OmxvYWRcImAgKi9cbiAgICBldmVudHM6IFNldDxzdHJpbmc+O1xuICAgIC8qKiBUaGUga25vd24gcm9vdCBub2RlcyAoZG9jdW1lbnQsIHNoYWRvdyByb290cykgKi9cbiAgICByb290czogU2V0PE5vZGU+O1xuICAgIC8qKiBBZGQgbmV3IHJvb3Qgbm9kZXMsIG9yIHNjb3BlZCBrZWJhYmNhc2UgZXZlbnRuYW1lcyB0byBsaXN0ZW4gdG8uICovXG4gICAgcHVzaDogKC4uLmU6IChzdHJpbmcgfCAoRXZlbnRUYXJnZXQgJiBQYXJlbnROb2RlKSlbXSkgPT4gdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFF3aWtMb2FkZXJFdmVudFNjb3BlID0gJ2QnIHwgJ2RwJyB8ICd3JyB8ICd3cCcgfCAnZScgfCAnZXAnO1xuXG4vKipcbiAqIEEgZnJpZW5kbHkgbmFtZSB0YWcgZm9yIGEgVmlydHVhbFZOb2RlLlxuICpcbiAqIFRoZXNlcyBhcmUgdXNlZCB0byBnaXZlIGEgbmFtZSB0byBhIFZpcnR1YWxWTm9kZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZy5cbiAqXG4gKiBUaGUgbmFtZSBpcyBvbmx5IGFkZGVkIGluIGRldmVsb3BtZW50IG1vZGUgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFQlVHX1RZUEUgPSAncTp0eXBlJztcblxuZXhwb3J0IGNvbnN0IGVudW0gVmlydHVhbFR5cGUge1xuICBWaXJ0dWFsID0gJ1YnLFxuICBGcmFnbWVudCA9ICdGJyxcbiAgV3JhcHBlZFNpZ25hbCA9ICdTJyxcbiAgQXdhaXRlZCA9ICdBJyxcbiAgQ29tcG9uZW50ID0gJ0MnLFxuICBJbmxpbmVDb21wb25lbnQgPSAnSScsXG4gIFByb2plY3Rpb24gPSAnUCcsXG59XG5cbmV4cG9ydCBjb25zdCBWaXJ0dWFsVHlwZU5hbWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFtWaXJ0dWFsVHlwZS5WaXJ0dWFsXTogLyogKioqKioqKioqICovICdWaXJ0dWFsJywgLy9cbiAgW1ZpcnR1YWxUeXBlLkZyYWdtZW50XTogLyogKioqKioqKiogKi8gJ0ZyYWdtZW50JywgLy9cbiAgW1ZpcnR1YWxUeXBlLldyYXBwZWRTaWduYWxdOiAvKiAqKiogKi8gJ1NpZ25hbCcsIC8vXG4gIFtWaXJ0dWFsVHlwZS5Bd2FpdGVkXTogLyogKioqKioqKioqICovICdBd2FpdGVkJywgLy9cbiAgW1ZpcnR1YWxUeXBlLkNvbXBvbmVudF06IC8qICoqKioqKiogKi8gJ0NvbXBvbmVudCcsIC8vXG4gIFtWaXJ0dWFsVHlwZS5JbmxpbmVDb21wb25lbnRdOiAvKiAqICovICdJbmxpbmVDb21wb25lbnQnLCAvL1xuICBbVmlydHVhbFR5cGUuUHJvamVjdGlvbl06IC8qICoqKioqKiAqLyAnUHJvamVjdGlvbicsIC8vXG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBRQ29udGFpbmVyVmFsdWUge1xuICBQQVVTRUQgPSAncGF1c2VkJyxcbiAgUkVTVU1FRCA9ICdyZXN1bWVkJyxcbiAgLy8gdGhlc2UgdmFsdWVzIGJlbG93IGFyZSB1c2VkIGluIHRoZSBxd2lrIGxvYWRlciBhcyBhIHBsYWluIHRleHQgZm9yIHRoZSBxOmNvbnRhaW5lciBzZWxlY3RvclxuICAvLyBzdGFuZGFyZCBkYW5nZXJvdXNseVNldElubmVySFRNTFxuICBIVE1MID0gJ2h0bWwnLFxuICAvLyB0ZXh0YXJlYVxuICBURVhUID0gJ3RleHQnLFxufVxuXG5leHBvcnQgdHlwZSBPYmpUb1Byb3h5TWFwID0gV2Vha01hcDxhbnksIGFueT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUUNvbnRhaW5lckVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgcUZ1bmNzPzogRnVuY3Rpb25bXTtcbiAgX3F3aWtqc29uXz86IGFueTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemF0aW9uIHN0cmF0ZWd5IGZvciBjb21wdXRlZCBhbmQgYXN5bmMgc2lnbmFscy4gVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2VyaWFsaXplIHRoZWlyXG4gKiB2YWx1ZSBkdXJpbmcgU1NSLlxuICpcbiAqIC0gYG5ldmVyYDogVGhlIHZhbHVlIGlzIG5ldmVyIHNlcmlhbGl6ZWQuIFdoZW4gdGhlIGNvbXBvbmVudCBpcyByZXN1bWVkLCB0aGUgdmFsdWUgd2lsbCBiZVxuICogICByZWNhbGN1bGF0ZWQgd2hlbiBpdCBpcyBmaXJzdCByZWFkLlxuICogLSBgYWx3YXlzYDogVGhlIHZhbHVlIGlzIGFsd2F5cyBzZXJpYWxpemVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0LlxuICpcbiAqICoqSU1QT1JUQU5UKio6IFdoZW4geW91IHVzZSBgbmV2ZXJgLCB5b3VyIHNlcmlhbGl6ZWQgSFRNTCBpcyBzbWFsbGVyLCBidXQgdGhlIHJlY2FsY3VsYXRpb24gd2lsbFxuICogdHJpZ2dlciBzdWJzY3JpcHRpb25zLCBtZWFuaW5nIHRoYXQgb3RoZXIgc2lnbmFscyB1c2luZyB0aGlzIHNpZ25hbCB3aWxsIHJlY2FsY3VsYXRlLCBldmVuIGlmXG4gKiB0aGlzIHNpZ25hbCBkaWRuJ3QgY2hhbmdlLlxuICpcbiAqIFRoaXMgaXMgbm9ybWFsbHkgbm90IGEgcHJvYmxlbSwgYnV0IGZvciBhc3luYyBzaWduYWxzIGl0IG1heSBtZWFuIGZldGNoaW5nIHNvbWV0aGluZyBhZ2Fpbi5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6YXRpb25TdHJhdGVneSA9XG4gIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIGluIHRoZSBmdXR1cmVcbiAgLy8gJ2F1dG8nIHxcbiAgJ25ldmVyJyB8ICdhbHdheXMnO1xuXG5leHBvcnQgY29uc3QgZW51bSBTc3JOb2RlRmxhZ3Mge1xuICBVcGRhdGFibGUgPSAxLFxufVxuIl19","/**\n * @file\n *\n *   VNodeData is additional information which allows the `vnode` to recover virtual VNode information\n *   from the HTML.\n */\n/**\n * VNodeDataSeparator contains information about splitting up the VNodeData and attaching it to the\n * HTML.\n */\nexport const VNodeDataSeparator = {\n    REFERENCE_CH: /* ***** */ `~`, // `~` is a reference to the node. Save it.\n    REFERENCE: /* ******** */ 126, // `~` is a reference to the node. Save it.\n    ADVANCE_1_CH: /* ***** */ `!`, // `!` is vNodeData separator skipping 0. (ie next vNode)\n    ADVANCE_1: /* ********* */ 33, // `!` is vNodeData separator skipping 0. (ie next vNode)\n    ADVANCE_2_CH: /* ***** */ `\"`, // `\"` is vNodeData separator skipping 1.\n    ADVANCE_2: /* ********* */ 34, // `\"` is vNodeData separator skipping 1.\n    ADVANCE_4_CH: /* ***** */ `#`, // `#` is vNodeData separator skipping 2.\n    ADVANCE_4: /* ********* */ 35, // `#` is vNodeData separator skipping 2.\n    ADVANCE_8_CH: /* ***** */ `$`, // `$` is vNodeData separator skipping 4.\n    ADVANCE_8: /* ********* */ 36, // `$` is vNodeData separator skipping 4.\n    ADVANCE_16_CH: /* **** */ `%`, // `%` is vNodeData separator skipping 8.\n    ADVANCE_16: /* ******** */ 37, // `%` is vNodeData separator skipping 8.\n    ADVANCE_32_CH: /* **** */ `&`, // `&` is vNodeData separator skipping 16.\n    ADVANCE_32: /* ******** */ 38, // `&` is vNodeData separator skipping 16.\n    ADVANCE_64_CH: /* **** */ `'`, // `'` is vNodeData separator skipping 32.\n    ADVANCE_64: /* ******** */ 39, // `'` is vNodeData separator skipping 32.\n    ADVANCE_128_CH: /* *** */ `(`, // `(` is vNodeData separator skipping 64.\n    ADVANCE_128: /* ******* */ 40, // `(` is vNodeData separator skipping 64.\n    ADVANCE_256_CH: /* *** */ `)`, // `)` is vNodeData separator skipping 128.\n    ADVANCE_256: /* ******* */ 41, // `)` is vNodeData separator skipping 128.\n    ADVANCE_512_CH: /* *** */ `*`, // `*` is vNodeData separator skipping 256.\n    ADVANCE_512: /* ******* */ 42, // `*` is vNodeData separator skipping 256.\n    ADVANCE_1024_CH: /* ** */ `+`, // `+` is vNodeData separator skipping 512.\n    ADVANCE_1024: /* ****** */ 43, // `+` is vNodeData separator skipping 512.\n    ADVANCE_2048_CH: /* *  */ ',', // ',' is vNodeData separator skipping 1024.\n    ADVANCE_2048: /* ****** */ 44, // ',' is vNodeData separator skipping 1024.\n    ADVANCE_4096_CH: /* *  */ `-`, // `-` is vNodeData separator skipping 2048.\n    ADVANCE_4096: /* ****** */ 45, // `-` is vNodeData separator skipping 2048.\n    ADVANCE_8192_CH: /* *  */ `.`, // `.` is vNodeData separator skipping 4096.\n    ADVANCE_8192: /* ****** */ 46, // `.` is vNodeData separator skipping 4096.\n};\n/**\n * VNodeDataChar contains information about the VNodeData used for encoding props.\n *\n * Available character ranges: 59 - 64, 91 - 94, 96, 123 - 126\n */\nexport const VNodeDataChar = {\n    OPEN: /* ************** */ 123, // `{` is the start of the VNodeData for a virtual element.\n    OPEN_CHAR: /* ****** */ '{',\n    CLOSE: /* ************* */ 125, // `}` is the end of the VNodeData for a virtual element.\n    CLOSE_CHAR: /* ***** */ '}',\n    SCOPED_STYLE: /* ******* */ 59, // `;` - `q:sstyle` - Style attribute.\n    SCOPED_STYLE_CHAR: /* */ ';',\n    RENDER_FN: /* ********** */ 60, // `<` - `q:renderFn' - Component QRL render function (body)\n    RENDER_FN_CHAR: /* ** */ '<',\n    ID: /* ***************** */ 61, // `=` - `q:id` - ID of the element.\n    ID_CHAR: /* ********* */ '=',\n    PROPS: /* ************** */ 62, // `>` - `q:props' - Component Props\n    PROPS_CHAR: /* ****** */ '>',\n    SLOT_PARENT: /* ******** */ 63, // `?` - `q:sparent` - Slot parent.\n    SLOT_PARENT_CHAR: /*  */ '?',\n    KEY: /* **************** */ 64, // `@` - `q:key` - Element key.\n    KEY_CHAR: /* ******** */ '@',\n    SEQ: /* **************** */ 91, // `[` - `q:seq' - Seq value from `useSequentialScope()`\n    SEQ_CHAR: /* ******** */ '[',\n    DON_T_USE: /* ********** */ 92, // `\\` - SKIP because `\\` is used as escaping\n    DON_T_USE_CHAR: '\\\\',\n    CONTEXT: /* ************ */ 93, // `]` - `q:ctx' - Component context/props\n    CONTEXT_CHAR: /* **** */ ']',\n    SEQ_IDX: /* ************ */ 94, // `^` - `q:seqIdx' - Sequential scope id\n    SEQ_IDX_CHAR: /* **** */ '^',\n    BACK_REFS: /* ********** */ 96, // '`' - `q:brefs' - Effect dependencies/subscriptions\n    BACK_REFS_CHAR: /* ** */ '`',\n    SEPARATOR: /* ********* */ 124, // `|` - Separator char to encode any key/value pairs.\n    SEPARATOR_CHAR: /* ** */ '|',\n    SLOT: /* ************** */ 126, // `~` - `q:slot' - Slot name\n    SLOT_CHAR: /* ******* */ '~',\n};\n/**\n * Convert a segment-local vnode index into a key for the root container's shared qVNodeRefs map.\n *\n * Out-of-order Suspense segments each start counting vnode refs from 0, but the client merges all\n * segment refs into one root-level map. This uses a Cantor-style pairing function for the\n * zero-based pair `(segmentIndex, localIndex)`, then makes it negative so segment refs cannot\n * collide with root refs, which are non-negative.\n *\n * Examples:\n *\n * - Segment 1, local 0 -> -1\n * - Segment 2, local 0 -> -2\n * - Segment 1, local 1 -> -3\n */\nexport const getSegmentVNodeRefId = (segmentId, localIndex) => {\n    const segmentIndex = parseInt(segmentId, 10) - 1;\n    const diagonal = segmentIndex + localIndex;\n    return -((diagonal * (diagonal + 1)) / 2 + localIndex + 1);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtZGF0YS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdm5vZGUtZGF0YS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLDJDQUEyQztJQUMxRSxTQUFTLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSwyQ0FBMkM7SUFDMUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUseURBQXlEO0lBQ3hGLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLHlEQUF5RDtJQUN4RixZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSx5Q0FBeUM7SUFDeEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUseUNBQXlDO0lBQ3hFLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLHlDQUF5QztJQUN4RSxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSx5Q0FBeUM7SUFDeEUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUseUNBQXlDO0lBQ3hFLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLHlDQUF5QztJQUN4RSxhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5Q0FBeUM7SUFDeEUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUseUNBQXlDO0lBQ3hFLGFBQWEsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBDQUEwQztJQUN6RSxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSwwQ0FBMEM7SUFDekUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMENBQTBDO0lBQ3pFLFVBQVUsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLDBDQUEwQztJQUN6RSxj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Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxTQUFpQixFQUFFLFVBQWtCLEVBQVUsRUFBRTtJQUNwRixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxNQUFNLFFBQVEsR0FBRyxZQUFZLEdBQUcsVUFBVSxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogICBWTm9kZURhdGEgaXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3aGljaCBhbGxvd3MgdGhlIGB2bm9kZWAgdG8gcmVjb3ZlciB2aXJ0dWFsIFZOb2RlIGluZm9ybWF0aW9uXG4gKiAgIGZyb20gdGhlIEhUTUwuXG4gKi9cblxuLyoqXG4gKiBWTm9kZURhdGFTZXBhcmF0b3IgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgc3BsaXR0aW5nIHVwIHRoZSBWTm9kZURhdGEgYW5kIGF0dGFjaGluZyBpdCB0byB0aGVcbiAqIEhUTUwuXG4gKi9cbmV4cG9ydCBjb25zdCBWTm9kZURhdGFTZXBhcmF0b3IgPSB7XG4gIFJFRkVSRU5DRV9DSDogLyogKioqKiogKi8gYH5gLCAvLyBgfmAgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuIFNhdmUgaXQuXG4gIFJFRkVSRU5DRTogLyogKioqKioqKiogKi8gMTI2LCAvLyBgfmAgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuIFNhdmUgaXQuXG4gIEFEVkFOQ0VfMV9DSDogLyogKioqKiogKi8gYCFgLCAvLyBgIWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAwLiAoaWUgbmV4dCB2Tm9kZSlcbiAgQURWQU5DRV8xOiAvKiAqKioqKioqKiogKi8gMzMsIC8vIGAhYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDAuIChpZSBuZXh0IHZOb2RlKVxuICBBRFZBTkNFXzJfQ0g6IC8qICoqKioqICovIGBcImAsIC8vIGBcImAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxLlxuICBBRFZBTkNFXzI6IC8qICoqKioqKioqKiAqLyAzNCwgLy8gYFwiYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDEuXG4gIEFEVkFOQ0VfNF9DSDogLyogKioqKiogKi8gYCNgLCAvLyBgI2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyLlxuICBBRFZBTkNFXzQ6IC8qICoqKioqKioqKiAqLyAzNSwgLy8gYCNgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgMi5cbiAgQURWQU5DRV84X0NIOiAvKiAqKioqKiAqLyBgJGAsIC8vIGAkYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDQuXG4gIEFEVkFOQ0VfODogLyogKioqKioqKioqICovIDM2LCAvLyBgJGAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyA0LlxuICBBRFZBTkNFXzE2X0NIOiAvKiAqKioqICovIGAlYCwgLy8gYCVgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgOC5cbiAgQURWQU5DRV8xNjogLyogKioqKioqKiogKi8gMzcsIC8vIGAlYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDguXG4gIEFEVkFOQ0VfMzJfQ0g6IC8qICoqKiogKi8gYCZgLCAvLyBgJmAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxNi5cbiAgQURWQU5DRV8zMjogLyogKioqKioqKiogKi8gMzgsIC8vIGAmYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDE2LlxuICBBRFZBTkNFXzY0X0NIOiAvKiAqKioqICovIGAnYCwgLy8gYCdgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgMzIuXG4gIEFEVkFOQ0VfNjQ6IC8qICoqKioqKioqICovIDM5LCAvLyBgJ2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAzMi5cbiAgQURWQU5DRV8xMjhfQ0g6IC8qICoqKiAqLyBgKGAsIC8vIGAoYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDY0LlxuICBBRFZBTkNFXzEyODogLyogKioqKioqKiAqLyA0MCwgLy8gYChgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgNjQuXG4gIEFEVkFOQ0VfMjU2X0NIOiAvKiAqKiogKi8gYClgLCAvLyBgKWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxMjguXG4gIEFEVkFOQ0VfMjU2OiAvKiAqKioqKioqICovIDQxLCAvLyBgKWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxMjguXG4gIEFEVkFOQ0VfNTEyX0NIOiAvKiAqKiogKi8gYCpgLCAvLyBgKmAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyNTYuXG4gIEFEVkFOQ0VfNTEyOiAvKiAqKioqKioqICovIDQyLCAvLyBgKmAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyNTYuXG4gIEFEVkFOQ0VfMTAyNF9DSDogLyogKiogKi8gYCtgLCAvLyBgK2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyA1MTIuXG4gIEFEVkFOQ0VfMTAyNDogLyogKioqKioqICovIDQzLCAvLyBgK2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyA1MTIuXG4gIEFEVkFOQ0VfMjA0OF9DSDogLyogKiAgKi8gJywnLCAvLyAnLCcgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxMDI0LlxuICBBRFZBTkNFXzIwNDg6IC8qICoqKioqKiAqLyA0NCwgLy8gJywnIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgMTAyNC5cbiAgQURWQU5DRV80MDk2X0NIOiAvKiAqICAqLyBgLWAsIC8vIGAtYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDIwNDguXG4gIEFEVkFOQ0VfNDA5NjogLyogKioqKioqICovIDQ1LCAvLyBgLWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyMDQ4LlxuICBBRFZBTkNFXzgxOTJfQ0g6IC8qICogICovIGAuYCwgLy8gYC5gIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgNDA5Ni5cbiAgQURWQU5DRV84MTkyOiAvKiAqKioqKiogKi8gNDYsIC8vIGAuYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDQwOTYuXG59O1xuXG4vKipcbiAqIFZOb2RlRGF0YUNoYXIgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFZOb2RlRGF0YSB1c2VkIGZvciBlbmNvZGluZyBwcm9wcy5cbiAqXG4gKiBBdmFpbGFibGUgY2hhcmFjdGVyIHJhbmdlczogNTkgLSA2NCwgOTEgLSA5NCwgOTYsIDEyMyAtIDEyNlxuICovXG5leHBvcnQgY29uc3QgVk5vZGVEYXRhQ2hhciA9IHtcbiAgT1BFTjogLyogKioqKioqKioqKioqKiogKi8gMTIzLCAvLyBge2AgaXMgdGhlIHN0YXJ0IG9mIHRoZSBWTm9kZURhdGEgZm9yIGEgdmlydHVhbCBlbGVtZW50LlxuICBPUEVOX0NIQVI6IC8qICoqKioqKiAqLyAneycsXG4gIENMT1NFOiAvKiAqKioqKioqKioqKioqICovIDEyNSwgLy8gYH1gIGlzIHRoZSBlbmQgb2YgdGhlIFZOb2RlRGF0YSBmb3IgYSB2aXJ0dWFsIGVsZW1lbnQuXG4gIENMT1NFX0NIQVI6IC8qICoqKioqICovICd9JyxcblxuICBTQ09QRURfU1RZTEU6IC8qICoqKioqKiogKi8gNTksIC8vIGA7YCAtIGBxOnNzdHlsZWAgLSBTdHlsZSBhdHRyaWJ1dGUuXG4gIFNDT1BFRF9TVFlMRV9DSEFSOiAvKiAqLyAnOycsXG4gIFJFTkRFUl9GTjogLyogKioqKioqKioqKiAqLyA2MCwgLy8gYDxgIC0gYHE6cmVuZGVyRm4nIC0gQ29tcG9uZW50IFFSTCByZW5kZXIgZnVuY3Rpb24gKGJvZHkpXG4gIFJFTkRFUl9GTl9DSEFSOiAvKiAqKiAqLyAnPCcsXG4gIElEOiAvKiAqKioqKioqKioqKioqKioqKiAqLyA2MSwgLy8gYD1gIC0gYHE6aWRgIC0gSUQgb2YgdGhlIGVsZW1lbnQuXG4gIElEX0NIQVI6IC8qICoqKioqKioqKiAqLyAnPScsXG4gIFBST1BTOiAvKiAqKioqKioqKioqKioqKiAqLyA2MiwgLy8gYD5gIC0gYHE6cHJvcHMnIC0gQ29tcG9uZW50IFByb3BzXG4gIFBST1BTX0NIQVI6IC8qICoqKioqKiAqLyAnPicsXG4gIFNMT1RfUEFSRU5UOiAvKiAqKioqKioqKiAqLyA2MywgLy8gYD9gIC0gYHE6c3BhcmVudGAgLSBTbG90IHBhcmVudC5cbiAgU0xPVF9QQVJFTlRfQ0hBUjogLyogICovICc/JyxcbiAgS0VZOiAvKiAqKioqKioqKioqKioqKioqICovIDY0LCAvLyBgQGAgLSBgcTprZXlgIC0gRWxlbWVudCBrZXkuXG4gIEtFWV9DSEFSOiAvKiAqKioqKioqKiAqLyAnQCcsXG4gIFNFUTogLyogKioqKioqKioqKioqKioqKiAqLyA5MSwgLy8gYFtgIC0gYHE6c2VxJyAtIFNlcSB2YWx1ZSBmcm9tIGB1c2VTZXF1ZW50aWFsU2NvcGUoKWBcbiAgU0VRX0NIQVI6IC8qICoqKioqKioqICovICdbJyxcbiAgRE9OX1RfVVNFOiAvKiAqKioqKioqKioqICovIDkyLCAvLyBgXFxgIC0gU0tJUCBiZWNhdXNlIGBcXGAgaXMgdXNlZCBhcyBlc2NhcGluZ1xuICBET05fVF9VU0VfQ0hBUjogJ1xcXFwnLFxuICBDT05URVhUOiAvKiAqKioqKioqKioqKiogKi8gOTMsIC8vIGBdYCAtIGBxOmN0eCcgLSBDb21wb25lbnQgY29udGV4dC9wcm9wc1xuICBDT05URVhUX0NIQVI6IC8qICoqKiogKi8gJ10nLFxuICBTRVFfSURYOiAvKiAqKioqKioqKioqKiogKi8gOTQsIC8vIGBeYCAtIGBxOnNlcUlkeCcgLSBTZXF1ZW50aWFsIHNjb3BlIGlkXG4gIFNFUV9JRFhfQ0hBUjogLyogKioqKiAqLyAnXicsXG4gIEJBQ0tfUkVGUzogLyogKioqKioqKioqKiAqLyA5NiwgLy8gJ2AnIC0gYHE6YnJlZnMnIC0gRWZmZWN0IGRlcGVuZGVuY2llcy9zdWJzY3JpcHRpb25zXG4gIEJBQ0tfUkVGU19DSEFSOiAvKiAqKiAqLyAnYCcsXG4gIFNFUEFSQVRPUjogLyogKioqKioqKioqICovIDEyNCwgLy8gYHxgIC0gU2VwYXJhdG9yIGNoYXIgdG8gZW5jb2RlIGFueSBrZXkvdmFsdWUgcGFpcnMuXG4gIFNFUEFSQVRPUl9DSEFSOiAvKiAqKiAqLyAnfCcsXG4gIFNMT1Q6IC8qICoqKioqKioqKioqKioqICovIDEyNiwgLy8gYH5gIC0gYHE6c2xvdCcgLSBTbG90IG5hbWVcbiAgU0xPVF9DSEFSOiAvKiAqKioqKioqICovICd+Jyxcbn07XG5cbi8qKlxuICogQ29udmVydCBhIHNlZ21lbnQtbG9jYWwgdm5vZGUgaW5kZXggaW50byBhIGtleSBmb3IgdGhlIHJvb3QgY29udGFpbmVyJ3Mgc2hhcmVkIHFWTm9kZVJlZnMgbWFwLlxuICpcbiAqIE91dC1vZi1vcmRlciBTdXNwZW5zZSBzZWdtZW50cyBlYWNoIHN0YXJ0IGNvdW50aW5nIHZub2RlIHJlZnMgZnJvbSAwLCBidXQgdGhlIGNsaWVudCBtZXJnZXMgYWxsXG4gKiBzZWdtZW50IHJlZnMgaW50byBvbmUgcm9vdC1sZXZlbCBtYXAuIFRoaXMgdXNlcyBhIENhbnRvci1zdHlsZSBwYWlyaW5nIGZ1bmN0aW9uIGZvciB0aGVcbiAqIHplcm8tYmFzZWQgcGFpciBgKHNlZ21lbnRJbmRleCwgbG9jYWxJbmRleClgLCB0aGVuIG1ha2VzIGl0IG5lZ2F0aXZlIHNvIHNlZ21lbnQgcmVmcyBjYW5ub3RcbiAqIGNvbGxpZGUgd2l0aCByb290IHJlZnMsIHdoaWNoIGFyZSBub24tbmVnYXRpdmUuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogLSBTZWdtZW50IDEsIGxvY2FsIDAgLT4gLTFcbiAqIC0gU2VnbWVudCAyLCBsb2NhbCAwIC0+IC0yXG4gKiAtIFNlZ21lbnQgMSwgbG9jYWwgMSAtPiAtM1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VnbWVudFZOb2RlUmVmSWQgPSAoc2VnbWVudElkOiBzdHJpbmcsIGxvY2FsSW5kZXg6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNlZ21lbnRJbmRleCA9IHBhcnNlSW50KHNlZ21lbnRJZCwgMTApIC0gMTtcbiAgY29uc3QgZGlhZ29uYWwgPSBzZWdtZW50SW5kZXggKyBsb2NhbEluZGV4O1xuICByZXR1cm4gLSgoZGlhZ29uYWwgKiAoZGlhZ29uYWwgKyAxKSkgLyAyICsgbG9jYWxJbmRleCArIDEpO1xufTtcbiJdfQ==","import { VNodeDataSeparator } from '../vnode-data-types';\nexport function escapeHTML(html) {\n    let escapedHTML = '';\n    const length = html.length;\n    let idx = 0;\n    let lastIdx = idx;\n    for (; idx < length; idx++) {\n        // We get the charCode NOT string. String would allocate memory.\n        const ch = html.charCodeAt(idx);\n        // Every time we concat a string we allocate memory. We want to minimize that.\n        if (ch === 60 /* < */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&lt;';\n        }\n        else if (ch === 62 /* > */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&gt;';\n        }\n        else if (ch === 38 /* & */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&amp;';\n        }\n        else if (ch === 34 /* \" */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&quot;';\n        }\n        else if (ch === 39 /* ' */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&#39;';\n        }\n        else {\n            continue;\n        }\n        lastIdx = idx + 1;\n    }\n    if (lastIdx === 0) {\n        // This is most common case, just return previous string no memory allocation.\n        return html;\n    }\n    else {\n        // Add the tail of replacement.\n        return escapedHTML + html.substring(lastIdx);\n    }\n}\nexport function encodeVNodeDataString(str) {\n    let escapedHTML = '';\n    const length = str.length;\n    let idx = 0;\n    let lastIdx = idx;\n    for (; idx < length; idx++) {\n        // We get the charCode NOT string. String would allocate memory.\n        const ch = str.charCodeAt(idx);\n        // Every time we concat a string we allocate memory. We want to minimize that.\n        if (ch >= VNodeDataSeparator.ADVANCE_1 && ch <= VNodeDataSeparator.ADVANCE_8192) {\n            escapedHTML += str.substring(lastIdx, idx) + '\\\\' + str.charAt(idx);\n        }\n        else {\n            continue;\n        }\n        lastIdx = idx + 1;\n    }\n    if (lastIdx === 0) {\n        // This is most common case, just return previous string no memory allocation.\n        return str;\n    }\n    else {\n        // Add the tail of replacement.\n        return escapedHTML + str.substring(lastIdx);\n    }\n}\nexport function encodeVNodeDataKey(str) {\n    const encoded = encodeURI(str);\n    let encodedKey = '';\n    const length = encoded.length;\n    let idx = 0;\n    let lastIdx = idx;\n    for (; idx < length; idx++) {\n        // We get the charCode NOT string. String would allocate memory.\n        const ch = encoded.charCodeAt(idx);\n        let replacement = null;\n        if (ch === 59 /* ; */) {\n            replacement = '%3B';\n        }\n        else if (ch === 61 /* = */) {\n            replacement = '%3D';\n        }\n        else if (ch === 63 /* ? */) {\n            replacement = '%3F';\n        }\n        else if (ch === 64 /* @ */) {\n            replacement = '%40';\n        }\n        else if (ch === 126 /* ~ */) {\n            replacement = '%7E';\n        }\n        else {\n            continue;\n        }\n        encodedKey += encoded.substring(lastIdx, idx) + replacement;\n        lastIdx = idx + 1;\n    }\n    if (lastIdx === 0) {\n        // This is most common case, just return previous string no memory allocation.\n        return encoded;\n    }\n    else {\n        // Add the tail of replacement.\n        return encodedKey + encoded.substring(lastIdx);\n    }\n}\nexport function decodeVNodeDataString(str) {\n    let result = '';\n    for (let i = 0; i < str.length; i++) {\n        if (str.charAt(i) === '\\\\' && i + 1 < str.length) {\n            result += str.charAt(i + 1);\n            i++;\n        }\n        else {\n            result += str.charAt(i);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmFjdGVyLWVzY2FwaW5nLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9jaGFyYWN0ZXItZXNjYXBpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3JDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUNsQixPQUFPLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMzQixnRUFBZ0U7UUFDaEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyw4RUFBOEU7UUFDOUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3ZELENBQUM7YUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDekQsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUztRQUNYLENBQUM7UUFDRCxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsOEVBQThFO1FBQzlFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDTiwrQkFBK0I7UUFDL0IsT0FBTyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFXO0lBQy9DLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUNsQixPQUFPLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMzQixnRUFBZ0U7UUFDaEUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQiw4RUFBOEU7UUFDOUUsSUFBSSxFQUFFLElBQUksa0JBQWtCLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoRixXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTO1FBQ1gsQ0FBQztRQUNELE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQiw4RUFBOEU7UUFDOUUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO1NBQU0sQ0FBQztRQUNOLCtCQUErQjtRQUMvQixPQUFPLFdBQVcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVc7SUFDNUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUNsQixPQUFPLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMzQixnRUFBZ0U7UUFDaEUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLFdBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ3RDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVM7UUFDWCxDQUFDO1FBQ0QsVUFBVSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUM1RCxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsOEVBQThFO1FBQzlFLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7U0FBTSxDQUFDO1FBQ04sK0JBQStCO1FBQy9CLE9BQU8sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsR0FBVztJQUMvQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVk5vZGVEYXRhU2VwYXJhdG9yIH0gZnJvbSAnLi4vdm5vZGUtZGF0YS10eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIVE1MKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBlc2NhcGVkSFRNTCA9ICcnO1xuICBjb25zdCBsZW5ndGggPSBodG1sLmxlbmd0aDtcbiAgbGV0IGlkeCA9IDA7XG4gIGxldCBsYXN0SWR4ID0gaWR4O1xuICBmb3IgKDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgIC8vIFdlIGdldCB0aGUgY2hhckNvZGUgTk9UIHN0cmluZy4gU3RyaW5nIHdvdWxkIGFsbG9jYXRlIG1lbW9yeS5cbiAgICBjb25zdCBjaCA9IGh0bWwuY2hhckNvZGVBdChpZHgpO1xuICAgIC8vIEV2ZXJ5IHRpbWUgd2UgY29uY2F0IGEgc3RyaW5nIHdlIGFsbG9jYXRlIG1lbW9yeS4gV2Ugd2FudCB0byBtaW5pbWl6ZSB0aGF0LlxuICAgIGlmIChjaCA9PT0gNjAgLyogPCAqLykge1xuICAgICAgZXNjYXBlZEhUTUwgKz0gaHRtbC5zdWJzdHJpbmcobGFzdElkeCwgaWR4KSArICcmbHQ7JztcbiAgICB9IGVsc2UgaWYgKGNoID09PSA2MiAvKiA+ICovKSB7XG4gICAgICBlc2NhcGVkSFRNTCArPSBodG1sLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpICsgJyZndDsnO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDM4IC8qICYgKi8pIHtcbiAgICAgIGVzY2FwZWRIVE1MICs9IGh0bWwuc3Vic3RyaW5nKGxhc3RJZHgsIGlkeCkgKyAnJmFtcDsnO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDM0IC8qIFwiICovKSB7XG4gICAgICBlc2NhcGVkSFRNTCArPSBodG1sLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpICsgJyZxdW90Oyc7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMzkgLyogJyAqLykge1xuICAgICAgZXNjYXBlZEhUTUwgKz0gaHRtbC5zdWJzdHJpbmcobGFzdElkeCwgaWR4KSArICcmIzM5Oyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsYXN0SWR4ID0gaWR4ICsgMTtcbiAgfVxuICBpZiAobGFzdElkeCA9PT0gMCkge1xuICAgIC8vIFRoaXMgaXMgbW9zdCBjb21tb24gY2FzZSwganVzdCByZXR1cm4gcHJldmlvdXMgc3RyaW5nIG5vIG1lbW9yeSBhbGxvY2F0aW9uLlxuICAgIHJldHVybiBodG1sO1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZCB0aGUgdGFpbCBvZiByZXBsYWNlbWVudC5cbiAgICByZXR1cm4gZXNjYXBlZEhUTUwgKyBodG1sLnN1YnN0cmluZyhsYXN0SWR4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVk5vZGVEYXRhU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGVzY2FwZWRIVE1MID0gJyc7XG4gIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gIGxldCBpZHggPSAwO1xuICBsZXQgbGFzdElkeCA9IGlkeDtcbiAgZm9yICg7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAvLyBXZSBnZXQgdGhlIGNoYXJDb2RlIE5PVCBzdHJpbmcuIFN0cmluZyB3b3VsZCBhbGxvY2F0ZSBtZW1vcnkuXG4gICAgY29uc3QgY2ggPSBzdHIuY2hhckNvZGVBdChpZHgpO1xuICAgIC8vIEV2ZXJ5IHRpbWUgd2UgY29uY2F0IGEgc3RyaW5nIHdlIGFsbG9jYXRlIG1lbW9yeS4gV2Ugd2FudCB0byBtaW5pbWl6ZSB0aGF0LlxuICAgIGlmIChjaCA+PSBWTm9kZURhdGFTZXBhcmF0b3IuQURWQU5DRV8xICYmIGNoIDw9IFZOb2RlRGF0YVNlcGFyYXRvci5BRFZBTkNFXzgxOTIpIHtcbiAgICAgIGVzY2FwZWRIVE1MICs9IHN0ci5zdWJzdHJpbmcobGFzdElkeCwgaWR4KSArICdcXFxcJyArIHN0ci5jaGFyQXQoaWR4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxhc3RJZHggPSBpZHggKyAxO1xuICB9XG4gIGlmIChsYXN0SWR4ID09PSAwKSB7XG4gICAgLy8gVGhpcyBpcyBtb3N0IGNvbW1vbiBjYXNlLCBqdXN0IHJldHVybiBwcmV2aW91cyBzdHJpbmcgbm8gbWVtb3J5IGFsbG9jYXRpb24uXG4gICAgcmV0dXJuIHN0cjtcbiAgfSBlbHNlIHtcbiAgICAvLyBBZGQgdGhlIHRhaWwgb2YgcmVwbGFjZW1lbnQuXG4gICAgcmV0dXJuIGVzY2FwZWRIVE1MICsgc3RyLnN1YnN0cmluZyhsYXN0SWR4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVk5vZGVEYXRhS2V5KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVVSSShzdHIpO1xuICBsZXQgZW5jb2RlZEtleSA9ICcnO1xuICBjb25zdCBsZW5ndGggPSBlbmNvZGVkLmxlbmd0aDtcbiAgbGV0IGlkeCA9IDA7XG4gIGxldCBsYXN0SWR4ID0gaWR4O1xuICBmb3IgKDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgIC8vIFdlIGdldCB0aGUgY2hhckNvZGUgTk9UIHN0cmluZy4gU3RyaW5nIHdvdWxkIGFsbG9jYXRlIG1lbW9yeS5cbiAgICBjb25zdCBjaCA9IGVuY29kZWQuY2hhckNvZGVBdChpZHgpO1xuICAgIGxldCByZXBsYWNlbWVudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNoID09PSA1OSAvKiA7ICovKSB7XG4gICAgICByZXBsYWNlbWVudCA9ICclM0InO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDYxIC8qID0gKi8pIHtcbiAgICAgIHJlcGxhY2VtZW50ID0gJyUzRCc7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gNjMgLyogPyAqLykge1xuICAgICAgcmVwbGFjZW1lbnQgPSAnJTNGJztcbiAgICB9IGVsc2UgaWYgKGNoID09PSA2NCAvKiBAICovKSB7XG4gICAgICByZXBsYWNlbWVudCA9ICclNDAnO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDEyNiAvKiB+ICovKSB7XG4gICAgICByZXBsYWNlbWVudCA9ICclN0UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZW5jb2RlZEtleSArPSBlbmNvZGVkLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpICsgcmVwbGFjZW1lbnQ7XG4gICAgbGFzdElkeCA9IGlkeCArIDE7XG4gIH1cbiAgaWYgKGxhc3RJZHggPT09IDApIHtcbiAgICAvLyBUaGlzIGlzIG1vc3QgY29tbW9uIGNhc2UsIGp1c3QgcmV0dXJuIHByZXZpb3VzIHN0cmluZyBubyBtZW1vcnkgYWxsb2NhdGlvbi5cbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfSBlbHNlIHtcbiAgICAvLyBBZGQgdGhlIHRhaWwgb2YgcmVwbGFjZW1lbnQuXG4gICAgcmV0dXJuIGVuY29kZWRLZXkgKyBlbmNvZGVkLnN1YnN0cmluZyhsYXN0SWR4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVk5vZGVEYXRhU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHIuY2hhckF0KGkpID09PSAnXFxcXCcgJiYgaSArIDEgPCBzdHIubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpICsgMSk7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBzdHIuY2hhckF0KGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19","/** State factory of the component. */\nexport const OnRenderProp = 'q:renderFn';\n/** Target DOM element for external projection rendering. */\nexport const QTargetElement = 'q:targetEl';\n/** Component style content prefix */\nexport const ComponentStylesPrefixContent = '⚡️';\n/** `<some-element q:slot=\"...\">` */\nexport const QSlot = 'q:slot';\nexport const QSlotParent = 'q:sparent';\nexport const QSlotS = 'q:s';\nexport const QStatePatchAttr = 'q:patch';\nexport const QStatePatchAttrSelector = '[q\\\\:patch]';\nexport const QSuspenseResolved = 'q:r';\nexport const QSuspenseResultParent = 'q:rp';\nexport const QStyle = 'q:style';\nexport const QStyleSelector = 'style[q\\\\:style]';\nexport const QStyleSSelector = 'style[q\\\\:sstyle]';\nexport const QStylesAllSelector = QStyleSelector + ',' + QStyleSSelector;\nexport const QScopedStyle = 'q:sstyle';\nexport const QCtxAttr = 'q:ctx';\nexport const QBackRefs = 'q:brefs';\nexport const QFuncsPrefix = 'qFuncs_';\nexport const getQFuncs = (document, hash) => {\n    return document[QFuncsPrefix + hash] || [];\n};\nexport const QRenderAttr = 'q:render';\nexport const QRuntimeAttr = 'q:runtime';\nexport const QVersionAttr = 'q:version';\nexport const QBaseAttr = 'q:base';\nexport const QLocaleAttr = 'q:locale';\nexport const QManifestHashAttr = 'q:manifest-hash';\nexport const QInstanceAttr = 'q:instance';\nexport const QContainerIsland = 'q:container-island';\nexport const QContainerIslandEnd = '/' + QContainerIsland;\nexport const QIgnore = 'q:ignore';\nexport const QIgnoreEnd = '/' + QIgnore;\nexport const QContainerAttr = 'q:container';\nexport const QContainerAttrEnd = '/' + QContainerAttr;\nexport const QCursorBoundary = 'q:cursorBoundary';\nexport const QTemplate = 'q:template';\n// the same selector should be inside the qwik loader\n// and the same selector should be inside the qwik router spa-shim and spa-init\nexport const QContainerSelector = '[q\\\\:container]:not([q\\\\:container=' +\n    \"html\" /* QContainerValue.HTML */ +\n    ']):not([q\\\\:container=' +\n    \"text\" /* QContainerValue.TEXT */ +\n    '])';\n// Node namespaces\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\nexport const MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n// Attributes namespaces\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const XML_NS = 'http://www.w3.org/XML/1998/namespace';\nexport const RenderEvent = 'qRender';\nexport const TaskEvent = 'qTask';\n/** `<q:slot name=\"...\">` */\nexport const QDefaultSlot = '';\n/**\n * Attribute to mark that this VNode has a pointer to itself from the `qwik/json` state.\n *\n * As the VNode get materialized the vnode now becomes eligible for mutation. Once the vnode mutates\n * the `VNode` references from the `qwik/json` may become invalid. For this reason, these references\n * need to be eagerly resolved. `VNODE_REF` stores a pointer to \"this\" vnode. This allows the system\n * to eagerly resolve these pointes as the vnodes are materialized.\n */\nexport const ELEMENT_ID = 'q:id';\nexport const ELEMENT_KEY = 'q:key';\nexport const ELEMENT_PROPS = 'q:props';\nexport const ELEMENT_SEQ = 'q:seq';\nexport const ELEMENT_SEQ_IDX = 'q:seqIdx';\nexport const ELEMENT_BACKPATCH_DATA = 'qwik/backpatch';\nexport const ITERATION_ITEM_SINGLE = 'q:p'; // Single iteration parameter (not an array)\nexport const ITERATION_ITEM_MULTI = 'q:ps'; // Multiple iteration parameters (array)\n/** Non serializable markers - always begins with `:` character */\nexport const NON_SERIALIZABLE_MARKER_PREFIX = ':';\nexport const USE_ON_LOCAL = NON_SERIALIZABLE_MARKER_PREFIX + 'on';\nexport const USE_ON_LOCAL_SEQ_IDX = NON_SERIALIZABLE_MARKER_PREFIX + 'onIdx';\nexport const USE_ON_LOCAL_FLAGS = NON_SERIALIZABLE_MARKER_PREFIX + 'onFlags';\nexport const NEAREST_CURSOR_BOUNDARY = NON_SERIALIZABLE_MARKER_PREFIX + 'nearestCursorBoundary';\nexport const Q_PROPS_SEPARATOR = ':';\nexport const dangerouslySetInnerHTML = 'dangerouslySetInnerHTML';\nexport const qwikInspectorAttr = 'data-qwik-inspector';\nexport const debugStyleScopeIdPrefixAttr = '__scopedStyleIdPrefix__';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvbWFya2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQztBQUV6Qyw0REFBNEQ7QUFDNUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUUzQyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDO0FBRWpELG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLEdBQUcsR0FBRyxHQUFHLGVBQWUsQ0FBQztBQUN6RSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sU0FB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QUFHLDhCQUE4QixHQUFHLElBQUksQ0FBQztBQUNsRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyw4QkFBOEIsR0FBRyxPQUFPLENBQUM7QUFDN0UsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsOEJBQThCLEdBQUcsU0FBUyxDQUFDO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLDhCQUE4QixHQUFHLHVCQUF1QixDQUFDO0FBRWhHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyx5QkFBeUIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFFDb250YWluZXJWYWx1ZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqIFN0YXRlIGZhY3Rvcnkgb2YgdGhlIGNvbXBvbmVudC4gKi9cbmV4cG9ydCBjb25zdCBPblJlbmRlclByb3AgPSAncTpyZW5kZXJGbic7XG5cbi8qKiBUYXJnZXQgRE9NIGVsZW1lbnQgZm9yIGV4dGVybmFsIHByb2plY3Rpb24gcmVuZGVyaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFFUYXJnZXRFbGVtZW50ID0gJ3E6dGFyZ2V0RWwnO1xuXG4vKiogQ29tcG9uZW50IHN0eWxlIGNvbnRlbnQgcHJlZml4ICovXG5leHBvcnQgY29uc3QgQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCA9ICfimqHvuI8nO1xuXG4vKiogYDxzb21lLWVsZW1lbnQgcTpzbG90PVwiLi4uXCI+YCAqL1xuZXhwb3J0IGNvbnN0IFFTbG90ID0gJ3E6c2xvdCc7XG5leHBvcnQgY29uc3QgUVNsb3RQYXJlbnQgPSAncTpzcGFyZW50JztcbmV4cG9ydCBjb25zdCBRU2xvdFMgPSAncTpzJztcbmV4cG9ydCBjb25zdCBRU3RhdGVQYXRjaEF0dHIgPSAncTpwYXRjaCc7XG5leHBvcnQgY29uc3QgUVN0YXRlUGF0Y2hBdHRyU2VsZWN0b3IgPSAnW3FcXFxcOnBhdGNoXSc7XG5leHBvcnQgY29uc3QgUVN1c3BlbnNlUmVzb2x2ZWQgPSAncTpyJztcbmV4cG9ydCBjb25zdCBRU3VzcGVuc2VSZXN1bHRQYXJlbnQgPSAncTpycCc7XG5leHBvcnQgY29uc3QgUVN0eWxlID0gJ3E6c3R5bGUnO1xuZXhwb3J0IGNvbnN0IFFTdHlsZVNlbGVjdG9yID0gJ3N0eWxlW3FcXFxcOnN0eWxlXSc7XG5leHBvcnQgY29uc3QgUVN0eWxlU1NlbGVjdG9yID0gJ3N0eWxlW3FcXFxcOnNzdHlsZV0nO1xuZXhwb3J0IGNvbnN0IFFTdHlsZXNBbGxTZWxlY3RvciA9IFFTdHlsZVNlbGVjdG9yICsgJywnICsgUVN0eWxlU1NlbGVjdG9yO1xuZXhwb3J0IGNvbnN0IFFTY29wZWRTdHlsZSA9ICdxOnNzdHlsZSc7XG5leHBvcnQgY29uc3QgUUN0eEF0dHIgPSAncTpjdHgnO1xuZXhwb3J0IGNvbnN0IFFCYWNrUmVmcyA9ICdxOmJyZWZzJztcbmV4cG9ydCBjb25zdCBRRnVuY3NQcmVmaXggPSAncUZ1bmNzXyc7XG5cbmV4cG9ydCBjb25zdCBnZXRRRnVuY3MgPSAoXG4gIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgaGFzaDogc3RyaW5nXG4pOiBBcnJheTwoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPiA9PiB7XG4gIHJldHVybiAoZG9jdW1lbnQgYXMgYW55KVtRRnVuY3NQcmVmaXggKyBoYXNoXSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBRUmVuZGVyQXR0ciA9ICdxOnJlbmRlcic7XG5leHBvcnQgY29uc3QgUVJ1bnRpbWVBdHRyID0gJ3E6cnVudGltZSc7XG5leHBvcnQgY29uc3QgUVZlcnNpb25BdHRyID0gJ3E6dmVyc2lvbic7XG5leHBvcnQgY29uc3QgUUJhc2VBdHRyID0gJ3E6YmFzZSc7XG5leHBvcnQgY29uc3QgUUxvY2FsZUF0dHIgPSAncTpsb2NhbGUnO1xuZXhwb3J0IGNvbnN0IFFNYW5pZmVzdEhhc2hBdHRyID0gJ3E6bWFuaWZlc3QtaGFzaCc7XG5leHBvcnQgY29uc3QgUUluc3RhbmNlQXR0ciA9ICdxOmluc3RhbmNlJztcbmV4cG9ydCBjb25zdCBRQ29udGFpbmVySXNsYW5kID0gJ3E6Y29udGFpbmVyLWlzbGFuZCc7XG5leHBvcnQgY29uc3QgUUNvbnRhaW5lcklzbGFuZEVuZCA9ICcvJyArIFFDb250YWluZXJJc2xhbmQ7XG5leHBvcnQgY29uc3QgUUlnbm9yZSA9ICdxOmlnbm9yZSc7XG5leHBvcnQgY29uc3QgUUlnbm9yZUVuZCA9ICcvJyArIFFJZ25vcmU7XG5leHBvcnQgY29uc3QgUUNvbnRhaW5lckF0dHIgPSAncTpjb250YWluZXInO1xuZXhwb3J0IGNvbnN0IFFDb250YWluZXJBdHRyRW5kID0gJy8nICsgUUNvbnRhaW5lckF0dHI7XG5leHBvcnQgY29uc3QgUUN1cnNvckJvdW5kYXJ5ID0gJ3E6Y3Vyc29yQm91bmRhcnknO1xuXG5leHBvcnQgY29uc3QgUVRlbXBsYXRlID0gJ3E6dGVtcGxhdGUnO1xuXG4vLyB0aGUgc2FtZSBzZWxlY3RvciBzaG91bGQgYmUgaW5zaWRlIHRoZSBxd2lrIGxvYWRlclxuLy8gYW5kIHRoZSBzYW1lIHNlbGVjdG9yIHNob3VsZCBiZSBpbnNpZGUgdGhlIHF3aWsgcm91dGVyIHNwYS1zaGltIGFuZCBzcGEtaW5pdFxuZXhwb3J0IGNvbnN0IFFDb250YWluZXJTZWxlY3RvciA9XG4gICdbcVxcXFw6Y29udGFpbmVyXTpub3QoW3FcXFxcOmNvbnRhaW5lcj0nICtcbiAgUUNvbnRhaW5lclZhbHVlLkhUTUwgK1xuICAnXSk6bm90KFtxXFxcXDpjb250YWluZXI9JyArXG4gIFFDb250YWluZXJWYWx1ZS5URVhUICtcbiAgJ10pJztcblxuLy8gTm9kZSBuYW1lc3BhY2VzXG5leHBvcnQgY29uc3QgSFRNTF9OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbmV4cG9ydCBjb25zdCBTVkdfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuZXhwb3J0IGNvbnN0IE1BVEhfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG5cbi8vIEF0dHJpYnV0ZXMgbmFtZXNwYWNlc1xuZXhwb3J0IGNvbnN0IFhMSU5LX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xuZXhwb3J0IGNvbnN0IFhNTF9OUyA9ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyRXZlbnQgPSAncVJlbmRlcic7XG5leHBvcnQgY29uc3QgVGFza0V2ZW50ID0gJ3FUYXNrJztcblxuLyoqIGA8cTpzbG90IG5hbWU9XCIuLi5cIj5gICovXG5leHBvcnQgY29uc3QgUURlZmF1bHRTbG90ID0gJyc7XG5cbi8qKlxuICogQXR0cmlidXRlIHRvIG1hcmsgdGhhdCB0aGlzIFZOb2RlIGhhcyBhIHBvaW50ZXIgdG8gaXRzZWxmIGZyb20gdGhlIGBxd2lrL2pzb25gIHN0YXRlLlxuICpcbiAqIEFzIHRoZSBWTm9kZSBnZXQgbWF0ZXJpYWxpemVkIHRoZSB2bm9kZSBub3cgYmVjb21lcyBlbGlnaWJsZSBmb3IgbXV0YXRpb24uIE9uY2UgdGhlIHZub2RlIG11dGF0ZXNcbiAqIHRoZSBgVk5vZGVgIHJlZmVyZW5jZXMgZnJvbSB0aGUgYHF3aWsvanNvbmAgbWF5IGJlY29tZSBpbnZhbGlkLiBGb3IgdGhpcyByZWFzb24sIHRoZXNlIHJlZmVyZW5jZXNcbiAqIG5lZWQgdG8gYmUgZWFnZXJseSByZXNvbHZlZC4gYFZOT0RFX1JFRmAgc3RvcmVzIGEgcG9pbnRlciB0byBcInRoaXNcIiB2bm9kZS4gVGhpcyBhbGxvd3MgdGhlIHN5c3RlbVxuICogdG8gZWFnZXJseSByZXNvbHZlIHRoZXNlIHBvaW50ZXMgYXMgdGhlIHZub2RlcyBhcmUgbWF0ZXJpYWxpemVkLlxuICovXG5leHBvcnQgY29uc3QgRUxFTUVOVF9JRCA9ICdxOmlkJztcbmV4cG9ydCBjb25zdCBFTEVNRU5UX0tFWSA9ICdxOmtleSc7XG5leHBvcnQgY29uc3QgRUxFTUVOVF9QUk9QUyA9ICdxOnByb3BzJztcbmV4cG9ydCBjb25zdCBFTEVNRU5UX1NFUSA9ICdxOnNlcSc7XG5leHBvcnQgY29uc3QgRUxFTUVOVF9TRVFfSURYID0gJ3E6c2VxSWR4JztcbmV4cG9ydCBjb25zdCBFTEVNRU5UX0JBQ0tQQVRDSF9EQVRBID0gJ3F3aWsvYmFja3BhdGNoJztcblxuZXhwb3J0IGNvbnN0IElURVJBVElPTl9JVEVNX1NJTkdMRSA9ICdxOnAnOyAvLyBTaW5nbGUgaXRlcmF0aW9uIHBhcmFtZXRlciAobm90IGFuIGFycmF5KVxuZXhwb3J0IGNvbnN0IElURVJBVElPTl9JVEVNX01VTFRJID0gJ3E6cHMnOyAvLyBNdWx0aXBsZSBpdGVyYXRpb24gcGFyYW1ldGVycyAoYXJyYXkpXG5cbi8qKiBOb24gc2VyaWFsaXphYmxlIG1hcmtlcnMgLSBhbHdheXMgYmVnaW5zIHdpdGggYDpgIGNoYXJhY3RlciAqL1xuZXhwb3J0IGNvbnN0IE5PTl9TRVJJQUxJWkFCTEVfTUFSS0VSX1BSRUZJWCA9ICc6JztcbmV4cG9ydCBjb25zdCBVU0VfT05fTE9DQUwgPSBOT05fU0VSSUFMSVpBQkxFX01BUktFUl9QUkVGSVggKyAnb24nO1xuZXhwb3J0IGNvbnN0IFVTRV9PTl9MT0NBTF9TRVFfSURYID0gTk9OX1NFUklBTElaQUJMRV9NQVJLRVJfUFJFRklYICsgJ29uSWR4JztcbmV4cG9ydCBjb25zdCBVU0VfT05fTE9DQUxfRkxBR1MgPSBOT05fU0VSSUFMSVpBQkxFX01BUktFUl9QUkVGSVggKyAnb25GbGFncyc7XG5leHBvcnQgY29uc3QgTkVBUkVTVF9DVVJTT1JfQk9VTkRBUlkgPSBOT05fU0VSSUFMSVpBQkxFX01BUktFUl9QUkVGSVggKyAnbmVhcmVzdEN1cnNvckJvdW5kYXJ5JztcblxuZXhwb3J0IGNvbnN0IFFfUFJPUFNfU0VQQVJBVE9SID0gJzonO1xuXG5leHBvcnQgY29uc3QgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xuZXhwb3J0IGNvbnN0IHF3aWtJbnNwZWN0b3JBdHRyID0gJ2RhdGEtcXdpay1pbnNwZWN0b3InO1xuZXhwb3J0IGNvbnN0IGRlYnVnU3R5bGVTY29wZUlkUHJlZml4QXR0ciA9ICdfX3Njb3BlZFN0eWxlSWRQcmVmaXhfXyc7XG4iXX0=","import { isDev, isServer } from '@qwik.dev/core/build';\nexport const MAX_RETRY_ON_PROMISE_COUNT = 100;\nexport const isPromise = (value) => {\n    // not using \"value instanceof Promise\" to have zone.js support\n    return !!value && typeof value == 'object' && typeof value.then === 'function';\n};\nexport const safeCall = (call, thenFn, rejectFn) => {\n    try {\n        const result = call();\n        if (isPromise(result)) {\n            return result.then(thenFn, rejectFn);\n        }\n        else {\n            return thenFn(result);\n        }\n    }\n    catch (e) {\n        return rejectFn(e);\n    }\n};\nexport const maybeThen = (valueOrPromise, thenFn) => {\n    return isPromise(valueOrPromise)\n        ? valueOrPromise.then(thenFn)\n        : thenFn(valueOrPromise);\n};\nexport const maybeThenMap = (array, thenMapFn, thenFn) => {\n    const length = array.length;\n    const mappedArray = [];\n    let idx = 0;\n    const drain = () => {\n        let result;\n        do {\n            const item = array[idx];\n            result = isPromise(item) ? item.then(thenMapFn) : thenMapFn(item);\n            if (isPromise(result)) {\n                return result.then((value) => {\n                    mappedArray[idx] = value;\n                    return drain();\n                });\n            }\n            else {\n                mappedArray[idx] = result;\n                idx++;\n            }\n        } while (idx < length);\n        return mappedArray;\n    };\n    return maybeThen(drain(), thenFn);\n};\nexport const promiseAll = (promises) => {\n    const hasPromise = promises.some(isPromise);\n    if (hasPromise) {\n        return Promise.all(promises);\n    }\n    return promises;\n};\nexport const promiseAllLazy = (promises) => {\n    if (promises.length > 0) {\n        return Promise.all(promises);\n    }\n    return promises;\n};\nexport const isNotNullable = (v) => {\n    return v != null;\n};\nexport const delay = (timeout) => {\n    return new Promise((resolve) => {\n        setTimeout(resolve, timeout);\n    });\n};\nconst checkError = (e) => {\n    if (isServer && e instanceof ReferenceError && e.message.includes('window')) {\n        e.message = 'It seems like you forgot to add \"if (isBrowser) {...}\" here:' + e.message;\n    }\n};\nconst justThrow = (e) => {\n    throw e;\n};\n/**\n * Retries a function that throws a promise. If you pass `onError`, you're responsible for handling\n * errors.\n */\nexport function retryOnPromise(fn, onError = justThrow) {\n    let ok = false;\n    let result;\n    try {\n        result = fn();\n        ok = true;\n    }\n    catch (e) {\n        result = e;\n    }\n    if (!isPromise(result)) {\n        // Synchronous function or error, no need to retry\n        if (ok) {\n            return result;\n        }\n        isDev && checkError(result);\n        return onError(result);\n    }\n    let retryCount = MAX_RETRY_ON_PROMISE_COUNT;\n    const retry = async (p) => {\n        while (isPromise(p)) {\n            try {\n                await p;\n                // We waited for the thrown promise, now try again\n                return await fn();\n            }\n            catch (err) {\n                if (isPromise(err)) {\n                    if (!--retryCount) {\n                        p = new Error('Exceeded max retry count in retryOnPromise');\n                        break;\n                    }\n                    else {\n                        p = err;\n                    }\n                }\n                else {\n                    p = err;\n                    break;\n                }\n            }\n        }\n        isDev && checkError(p);\n        return onError(p);\n    };\n    return ok ? result.catch(retry) : retry(result);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWlzZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL3Byb21pc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdkQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFJLEtBQVUsRUFBdUIsRUFBRTtJQUM5RCwrREFBK0Q7SUFDL0QsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ2pGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUN0QixJQUE2QixFQUM3QixNQUFzRCxFQUN0RCxRQUFvRCxFQUM3QixFQUFFO0lBQ3pCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDLE1BQWEsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsY0FBaUMsRUFDakMsTUFBOEMsRUFDM0IsRUFBRTtJQUNyQixPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFDOUIsQ0FBQyxD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LENBQUMsNENBQTRDLENBQUMsQ0FBQzt3QkFDNUQsTUFBTTtvQkFDUixDQUFDO3lCQUFNLENBQUM7d0JBQ04sQ0FBQyxHQUFHLEdBQUcsQ0FBQztvQkFDVixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixDQUFDLEdBQUcsR0FBWSxDQUFDO29CQUNqQixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBVSxDQUFDLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUF1QixDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2LCBpc1NlcnZlciB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB0eXBlIHsgVmFsdWVPclByb21pc2UgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9SRVRSWV9PTl9QUk9NSVNFX0NPVU5UID0gMTAwO1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlID0gPFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlPFQ+ID0+IHtcbiAgLy8gbm90IHVzaW5nIFwidmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlXCIgdG8gaGF2ZSB6b25lLmpzIHN1cHBvcnRcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhZmVDYWxsID0gPFQsIEIsIEM+KFxuICBjYWxsOiAoKSA9PiBWYWx1ZU9yUHJvbWlzZTxUPixcbiAgdGhlbkZuOiB7IGYoYXJnOiBBd2FpdGVkPFQ+KTogVmFsdWVPclByb21pc2U8Qj4gfVsnZiddLFxuICByZWplY3RGbjogeyBmKHJlYXNvbjogYW55KTogVmFsdWVPclByb21pc2U8Qz4gfVsnZiddXG4pOiBWYWx1ZU9yUHJvbWlzZTxCIHwgQz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGwoKTtcbiAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiByZXN1bHQudGhlbih0aGVuRm4gYXMgYW55LCByZWplY3RGbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGVuRm4ocmVzdWx0IGFzIGFueSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHJlamVjdEZuKGUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWF5YmVUaGVuID0gPFQsIEI+KFxuICB2YWx1ZU9yUHJvbWlzZTogVmFsdWVPclByb21pc2U8VD4sXG4gIHRoZW5GbjogKGFyZzogQXdhaXRlZDxUPikgPT4gVmFsdWVPclByb21pc2U8Qj5cbik6IFZhbHVlT3JQcm9taXNlPEI+ID0+IHtcbiAgcmV0dXJuIGlzUHJvbWlzZSh2YWx1ZU9yUHJvbWlzZSlcbiAgICA/IHZhbHVlT3JQcm9taXNlLnRoZW4odGhlbkZuIGFzIGFueSlcbiAgICA6IHRoZW5Gbih2YWx1ZU9yUHJvbWlzZSBhcyBhbnkpO1xufTtcblxuZXhwb3J0IGNvbnN0IG1heWJlVGhlbk1hcCA9IDxULCBNQVBfUkVULCBSRVQ+KFxuICBhcnJheTogVmFsdWVPclByb21pc2U8VD5bXSxcbiAgdGhlbk1hcEZuOiAoaXRlbTogVCkgPT4gVmFsdWVPclByb21pc2U8TUFQX1JFVD4sXG4gIHRoZW5GbjogKGl0ZW1zOiBNQVBfUkVUW10pID0+IFZhbHVlT3JQcm9taXNlPFJFVD5cbik6IFZhbHVlT3JQcm9taXNlPFJFVD4gPT4ge1xuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGNvbnN0IG1hcHBlZEFycmF5OiBNQVBfUkVUW10gPSBbXTtcbiAgbGV0IGlkeCA9IDA7XG4gIGNvbnN0IGRyYWluID0gKCk6IFZhbHVlT3JQcm9taXNlPE1BUF9SRVRbXT4gPT4ge1xuICAgIGxldCByZXN1bHQ6IFZhbHVlT3JQcm9taXNlPE1BUF9SRVQ+O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBhcnJheVtpZHhdO1xuICAgICAgcmVzdWx0ID0gaXNQcm9taXNlKGl0ZW0pID8gaXRlbS50aGVuKHRoZW5NYXBGbikgOiB0aGVuTWFwRm4oaXRlbSk7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIG1hcHBlZEFycmF5W2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gZHJhaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXBwZWRBcnJheVtpZHhdID0gcmVzdWx0O1xuICAgICAgICBpZHgrKztcbiAgICAgIH1cbiAgICB9IHdoaWxlIChpZHggPCBsZW5ndGgpO1xuICAgIHJldHVybiBtYXBwZWRBcnJheTtcbiAgfTtcbiAgcmV0dXJuIG1heWJlVGhlbihkcmFpbigpLCB0aGVuRm4pO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb21pc2VBbGwgPSA8VCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSB8IFtdPihcbiAgcHJvbWlzZXM6IFRcbik6IFZhbHVlT3JQcm9taXNlPHsgLXJlYWRvbmx5IFtQIGluIGtleW9mIFRdOiBBd2FpdGVkPFRbUF0+IH0+ID0+IHtcbiAgY29uc3QgaGFzUHJvbWlzZSA9IHByb21pc2VzLnNvbWUoaXNQcm9taXNlKTtcbiAgaWYgKGhhc1Byb21pc2UpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG4gIHJldHVybiBwcm9taXNlcyBhcyBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvbWlzZUFsbExhenkgPSA8VCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSB8IFtdPihcbiAgcHJvbWlzZXM6IFRcbik6IFZhbHVlT3JQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpIGFzIGFueTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZXMgYXMgYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTm90TnVsbGFibGUgPSA8VD4odjogVCk6IHYgaXMgTm9uTnVsbGFibGU8VD4gPT4ge1xuICByZXR1cm4gdiAhPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGF5ID0gKHRpbWVvdXQ6IG51bWJlcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNoZWNrRXJyb3IgPSAoZTogRXJyb3IpID0+IHtcbiAgaWYgKGlzU2VydmVyICYmIGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3dpbmRvdycpKSB7XG4gICAgZS5tZXNzYWdlID0gJ0l0IHNlZW1zIGxpa2UgeW91IGZvcmdvdCB0byBhZGQgXCJpZiAoaXNCcm93c2VyKSB7Li4ufVwiIGhlcmU6JyArIGUubWVzc2FnZTtcbiAgfVxufTtcbmNvbnN0IGp1c3RUaHJvdyA9IChlOiBhbnkpID0+IHtcbiAgdGhyb3cgZTtcbn07XG5cbi8qKlxuICogUmV0cmllcyBhIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEgcHJvbWlzZS4gSWYgeW91IHBhc3MgYG9uRXJyb3JgLCB5b3UncmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nXG4gKiBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXRyeU9uUHJvbWlzZTxUPihcbiAgZm46ICgpID0+IFZhbHVlT3JQcm9taXNlPFQ+LFxuICBvbkVycm9yOiAoZTogYW55KSA9PiBWYWx1ZU9yUHJvbWlzZTxUPiA9IGp1c3RUaHJvd1xuKTogVmFsdWVPclByb21pc2U8VD4ge1xuICBsZXQgb2sgPSBmYWxzZTtcbiAgbGV0IHJlc3VsdDogVmFsdWVPclByb21pc2U8VD4gfCBFcnJvcjtcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBmbigpO1xuICAgIG9rID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlc3VsdCA9IGUgYXMgRXJyb3I7XG4gIH1cblxuICBpZiAoIWlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgLy8gU3luY2hyb25vdXMgZnVuY3Rpb24gb3IgZXJyb3IsIG5vIG5lZWQgdG8gcmV0cnlcbiAgICBpZiAob2spIHtcbiAgICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgICB9XG4gICAgaXNEZXYgJiYgY2hlY2tFcnJvcihyZXN1bHQgYXMgRXJyb3IpO1xuICAgIHJldHVybiBvbkVycm9yKHJlc3VsdCk7XG4gIH1cblxuICBsZXQgcmV0cnlDb3VudDogbnVtYmVyID0gTUFYX1JFVFJZX09OX1BST01JU0VfQ09VTlQ7XG4gIGNvbnN0IHJldHJ5ID0gYXN5bmMgKHA6IFByb21pc2U8dm9pZD4gfCBFcnJvcik6IFByb21pc2U8VD4gPT4ge1xuICAgIHdoaWxlIChpc1Byb21pc2U8dm9pZD4ocCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIC8vIFdlIHdhaXRlZCBmb3IgdGhlIHRocm93biBwcm9taXNlLCBub3cgdHJ5IGFnYWluXG4gICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc1Byb21pc2U8dm9pZD4oZXJyKSkge1xuICAgICAgICAgIGlmICghLS1yZXRyeUNvdW50KSB7XG4gICAgICAgICAgICBwID0gbmV3IEVycm9yKCdFeGNlZWRlZCBtYXggcmV0cnkgY291bnQgaW4gcmV0cnlPblByb21pc2UnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwID0gZXJyIGFzIEVycm9yO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXNEZXYgJiYgY2hlY2tFcnJvcihwIGFzIEVycm9yKTtcbiAgICByZXR1cm4gb25FcnJvcihwKTtcbiAgfTtcblxuICByZXR1cm4gb2sgPyByZXN1bHQuY2F0Y2gocmV0cnkpIDogcmV0cnkocmVzdWx0IGFzIFByb21pc2U8dm9pZD4pO1xufVxuIl19","import { ComponentStylesPrefixContent } from './markers';\nexport const styleContent = (styleId) => {\n    return ComponentStylesPrefixContent + styleId;\n};\nexport function hasClassAttr(props) {\n    return 'class' in props;\n}\nexport function isClassAttr(key) {\n    return key === 'class';\n}\nexport function getScopedStyleIdsAsPrefix(scopedStyleIds) {\n    return Array.from(scopedStyleIds)\n        .map((styleId) => styleContent(styleId))\n        .join(' ');\n}\nexport function convertScopedStyleIdsToArray(scopedStyleIds) {\n    return scopedStyleIds?.split(' ') ?? null;\n}\nexport function convertStyleIdsToString(scopedStyleIds) {\n    return Array.from(scopedStyleIds).join(' ');\n}\nexport const addComponentStylePrefix = (styleId) => {\n    if (styleId) {\n        let idx = 0;\n        do {\n            styleId = styleId.substring(0, idx) + styleContent(styleId.substring(idx));\n        } while ((idx = styleId.indexOf(' ', idx) + 1) !== 0);\n    }\n    return styleId || null;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLXN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvc2NvcGVkLXN0eWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7SUFDdEQsT0FBTyw0QkFBNEIsR0FBRyxPQUFPLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFZO0lBQ3ZDLE9BQU8sT0FBTyxJQUFJLEtBQUssQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFXO0lBQ3JDLE9BQU8sR0FBRyxLQUFLLE9BQU8sQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLGNBQTJCO0lBQ25FLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDOUIsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxjQUE4QjtJQUN6RSxPQUFPLGNBQWMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsY0FBMkI7SUFDakUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxPQUF1QixFQUFpQixFQUFFO0lBQ2hGLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixHQUFHLENBQUM7WUFDRixPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3hELENBQUM7SUFDRCxPQUFPLE9BQU8sSUFBSSxJQUFJLENBQUM7QUFDekIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4uL2pzeC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdHlsZXNQcmVmaXhDb250ZW50IH0gZnJvbSAnLi9tYXJrZXJzJztcblxuZXhwb3J0IGNvbnN0IHN0eWxlQ29udGVudCA9IChzdHlsZUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCArIHN0eWxlSWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2xhc3NBdHRyKHByb3BzOiBQcm9wcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2NsYXNzJyBpbiBwcm9wcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NBdHRyKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkgPT09ICdjbGFzcyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY29wZWRTdHlsZUlkc0FzUHJlZml4KHNjb3BlZFN0eWxlSWRzOiBTZXQ8c3RyaW5nPik6IHN0cmluZyB7XG4gIHJldHVybiBBcnJheS5mcm9tKHNjb3BlZFN0eWxlSWRzKVxuICAgIC5tYXAoKHN0eWxlSWQpID0+IHN0eWxlQ29udGVudChzdHlsZUlkKSlcbiAgICAuam9pbignICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNjb3BlZFN0eWxlSWRzVG9BcnJheShzY29wZWRTdHlsZUlkcz86IHN0cmluZyB8IG51bGwpOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB7XG4gIHJldHVybiBzY29wZWRTdHlsZUlkcz8uc3BsaXQoJyAnKSA/PyBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN0eWxlSWRzVG9TdHJpbmcoc2NvcGVkU3R5bGVJZHM6IFNldDxzdHJpbmc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oc2NvcGVkU3R5bGVJZHMpLmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZENvbXBvbmVudFN0eWxlUHJlZml4ID0gKHN0eWxlSWQ/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmIChzdHlsZUlkKSB7XG4gICAgbGV0IGlkeCA9IDA7XG4gICAgZG8ge1xuICAgICAgc3R5bGVJZCA9IHN0eWxlSWQuc3Vic3RyaW5nKDAsIGlkeCkgKyBzdHlsZUNvbnRlbnQoc3R5bGVJZC5zdWJzdHJpbmcoaWR4KSk7XG4gICAgfSB3aGlsZSAoKGlkeCA9IHN0eWxlSWQuaW5kZXhPZignICcsIGlkeCkgKyAxKSAhPT0gMCk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlSWQgfHwgbnVsbDtcbn07XG4iXX0=","/**\n * Think of `-` as an escape character which makes the next character uppercase. `--` is just `-`.\n *\n * Rules for JSX property event names starting with `on`:\n *\n * - Are case insensitive: `onClick$` is same `onclick$`\n * - A `--` is `-`: `dbl--click` => `dbl-click`\n * - Become case sensitive if prefixed by `-`: `-Click` is `Click`\n * - A `-` (not at the beginning) makes next character uppercase: `dbl-click` => `dblClick`\n */\nexport const EVENT_SUFFIX = '$';\nexport const DOM_CONTENT_LOADED_EVENT = 'DOMContentLoaded';\nexport const isJsxPropertyAnEventName = (name) => {\n    return (name.endsWith(EVENT_SUFFIX) &&\n        (name.startsWith(\"on\" /* EventNameJSXScope.on */) ||\n            name.startsWith(\"window:on\" /* EventNameJSXScope.window */) ||\n            name.startsWith(\"document:on\" /* EventNameJSXScope.document */)));\n};\nexport const isHtmlAttributeAnEventName = (name) => {\n    return (name.charCodeAt(0) === 113 /* q */ &&\n        name.charCodeAt(1) === 45 /* - */ &&\n        (name.charCodeAt(3) === 58 /* : */ ||\n            (name.charCodeAt(3) === 112 /* p */ && name.charCodeAt(4) === 58)) /* : */);\n};\nexport function jsxEventToHtmlAttribute(jsxEvent, isPassive = false) {\n    if (jsxEvent.endsWith(EVENT_SUFFIX)) {\n        const [prefix, idx] = getEventScopeDataFromJsxEvent(jsxEvent, isPassive);\n        if (idx !== -1) {\n            return prefix + normalizeJsxEventName(jsxEvent.slice(idx, -1));\n        }\n    }\n    return null; // Return null if not matching expected format\n}\nexport function createEventName(event, prefix = '') {\n    const eventName = fromCamelToKebabCase(event);\n    return prefix + eventName;\n}\nexport function getEventScopeDataFromJsxEvent(eventName, isPassive = false) {\n    let prefix;\n    let idx = -1;\n    // set prefix and idx based on the scope\n    if (eventName.startsWith(\"on\" /* EventNameJSXScope.on */)) {\n        prefix = isPassive ? \"q-ep:\" /* EventNameHtmlScope.onPassive */ : \"q-e:\" /* EventNameHtmlScope.on */;\n        idx = 2;\n    }\n    else if (eventName.startsWith(\"window:on\" /* EventNameJSXScope.window */)) {\n        prefix = isPassive ? \"q-wp:\" /* EventNameHtmlScope.windowPassive */ : \"q-w:\" /* EventNameHtmlScope.window */;\n        idx = 9;\n    }\n    else if (eventName.startsWith(\"document:on\" /* EventNameJSXScope.document */)) {\n        prefix = isPassive ? \"q-dp:\" /* EventNameHtmlScope.documentPassive */ : \"q-d:\" /* EventNameHtmlScope.document */;\n        idx = 11;\n    }\n    return [prefix, idx];\n}\nexport const normalizeJsxEventName = (name) => {\n    return name === DOM_CONTENT_LOADED_EVENT\n        ? '-d-o-m-content-loaded'\n        : createEventName(name.charAt(0) === '-'\n            ? // marker for case sensitive event name\n                name.slice(1)\n            : name.toLowerCase());\n};\nexport const isDash = (charCode) => charCode === 45; /* - */\nexport const getEventNameScopeFromJsxEvent = (name) => {\n    const index = name.indexOf(':');\n    return index !== -1 ? name.substring(0, index) : '';\n};\nexport function isPreventDefault(key) {\n    return key.startsWith('preventdefault:');\n}\n/** Converts a camelCase string to kebab-case. This is used for event names. */\nexport const fromCamelToKebabCase = (text) => {\n    return text.replace(/([A-Z-])/g, (a) => '-' + a.toLowerCase());\n};\n/** E.g. `\"q-e:click\"` => `['e', 'click']`, `\"q-ep:click\"` => `['ep', 'click']` */\nexport const getEventDataFromHtmlAttribute = (htmlKey) => {\n    const separatorIndex = htmlKey.indexOf(':');\n    return [htmlKey.slice(2, separatorIndex), htmlKey.slice(separatorIndex + 1)];\n};\n/** E.g. `\"e:click\"`, `\"w:load\"` */\nexport const getScopedEventName = (scope, eventName) => scope + ':' + eventName;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbmFtZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL2V2ZW50LW5hbWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQWlCSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsSUFBWSxFQUFXLEVBQUU7SUFDaEUsT0FBTyxDQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzNCLENBQUMsSUFBSSxDQUFDLFVBQVUsaUNBQXNCO1lBQ3BDLElBQUksQ0FBQyxVQUFVLDRDQUEwQjtZQUN6QyxJQUFJLENBQUMsVUFBVSxnREFBNEIsQ0FBQyxDQUMvQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRTtJQUNsRSxPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTztRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPO1FBQ2pDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTztZQUNoQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUM3RSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFFBQWdCLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDekUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFekUsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLE9BQU8sTUFBTSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsOENBQThDO0FBQzdELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWEsRUFBRSxNQUFNLEdBQUcsRUFBRTtJQUN4RCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsU0FBaUIsRUFDakIsU0FBUyxHQUFHLEtBQUs7SUFFakIsSUFBSSxNQUFzQyxDQUFDO0lBQzNDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2Isd0NBQXdDO0lBQ3hDLElBQUksU0FBUyxDQUFDLFVBQVUsaUNBQXNCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsNENBQThCLENBQUMsbUNBQXNCLENBQUM7UUFDMUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7U0FBTSxJQUFJLFNBQVMsQ0FBQyxVQUFVLDRDQUEwQixFQUFFLENBQUM7UUFDMUQsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLGdEQUFrQyxDQUFDLHVDQUEwQixDQUFDO1FBQ2xGLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO1NBQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxnREFBNEIsRUFBRSxDQUFDO1FBQzVELE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxrREFBb0MsQ0FBQyx5Q0FBNEIsQ0FBQztRQUN0RixHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUNELE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7SUFDNUQsT0FBTyxJQUFJLEtBQUssd0JBQXdCO1FBQ3RDLENBQUMsQ0FBQyx1QkFBdUI7UUFDekIsQ0FBQyxDQUFDLGVBQWUsQ0FDYixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7WUFDcEIsQ0FBQyxDQUFDLHVDQUF1QztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUN2QixDQUFDO0FBQ1IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBZ0IsRUFBVyxFQUFFLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU87QUFFN0UsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtJQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtJQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQyxDQUFDO0FBRUYsa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsT0FBZSxFQUFvQixFQUFFO0lBQ2pGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDO0FBRUYsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBYSxFQUFFLFNBQWlCLEVBQVUsRUFBRSxDQUM3RSxLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmsgb2YgYC1gIGFzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgd2hpY2ggbWFrZXMgdGhlIG5leHQgY2hhcmFjdGVyIHVwcGVyY2FzZS4gYC0tYCBpcyBqdXN0IGAtYC5cbiAqXG4gKiBSdWxlcyBmb3IgSlNYIHByb3BlcnR5IGV2ZW50IG5hbWVzIHN0YXJ0aW5nIHdpdGggYG9uYDpcbiAqXG4gKiAtIEFyZSBjYXNlIGluc2Vuc2l0aXZlOiBgb25DbGljayRgIGlzIHNhbWUgYG9uY2xpY2skYFxuICogLSBBIGAtLWAgaXMgYC1gOiBgZGJsLS1jbGlja2AgPT4gYGRibC1jbGlja2BcbiAqIC0gQmVjb21lIGNhc2Ugc2Vuc2l0aXZlIGlmIHByZWZpeGVkIGJ5IGAtYDogYC1DbGlja2AgaXMgYENsaWNrYFxuICogLSBBIGAtYCAobm90IGF0IHRoZSBiZWdpbm5pbmcpIG1ha2VzIG5leHQgY2hhcmFjdGVyIHVwcGVyY2FzZTogYGRibC1jbGlja2AgPT4gYGRibENsaWNrYFxuICovXG5cbmV4cG9ydCBjb25zdCBlbnVtIEV2ZW50TmFtZUpTWFNjb3BlIHtcbiAgb24gPSAnb24nLFxuICB3aW5kb3cgPSAnd2luZG93Om9uJyxcbiAgZG9jdW1lbnQgPSAnZG9jdW1lbnQ6b24nLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBFdmVudE5hbWVIdG1sU2NvcGUge1xuICBvbiA9ICdxLWU6JyxcbiAgb25QYXNzaXZlID0gJ3EtZXA6JyxcbiAgd2luZG93ID0gJ3EtdzonLFxuICB3aW5kb3dQYXNzaXZlID0gJ3Etd3A6JyxcbiAgZG9jdW1lbnQgPSAncS1kOicsXG4gIGRvY3VtZW50UGFzc2l2ZSA9ICdxLWRwOicsXG59XG5cbmV4cG9ydCBjb25zdCBFVkVOVF9TVUZGSVggPSAnJCc7XG5leHBvcnQgY29uc3QgRE9NX0NPTlRFTlRfTE9BREVEX0VWRU5UID0gJ0RPTUNvbnRlbnRMb2FkZWQnO1xuXG5leHBvcnQgY29uc3QgaXNKc3hQcm9wZXJ0eUFuRXZlbnROYW1lID0gKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIG5hbWUuZW5kc1dpdGgoRVZFTlRfU1VGRklYKSAmJlxuICAgIChuYW1lLnN0YXJ0c1dpdGgoRXZlbnROYW1lSlNYU2NvcGUub24pIHx8XG4gICAgICBuYW1lLnN0YXJ0c1dpdGgoRXZlbnROYW1lSlNYU2NvcGUud2luZG93KSB8fFxuICAgICAgbmFtZS5zdGFydHNXaXRoKEV2ZW50TmFtZUpTWFNjb3BlLmRvY3VtZW50KSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0h0bWxBdHRyaWJ1dGVBbkV2ZW50TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICBuYW1lLmNoYXJDb2RlQXQoMCkgPT09IDExMyAvKiBxICovICYmXG4gICAgbmFtZS5jaGFyQ29kZUF0KDEpID09PSA0NSAvKiAtICovICYmXG4gICAgKG5hbWUuY2hhckNvZGVBdCgzKSA9PT0gNTggLyogOiAqLyB8fFxuICAgICAgKG5hbWUuY2hhckNvZGVBdCgzKSA9PT0gMTEyIC8qIHAgKi8gJiYgbmFtZS5jaGFyQ29kZUF0KDQpID09PSA1OCkpIC8qIDogKi9cbiAgKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZShqc3hFdmVudDogc3RyaW5nLCBpc1Bhc3NpdmUgPSBmYWxzZSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoanN4RXZlbnQuZW5kc1dpdGgoRVZFTlRfU1VGRklYKSkge1xuICAgIGNvbnN0IFtwcmVmaXgsIGlkeF0gPSBnZXRFdmVudFNjb3BlRGF0YUZyb21Kc3hFdmVudChqc3hFdmVudCwgaXNQYXNzaXZlKTtcblxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICByZXR1cm4gcHJlZml4ICsgbm9ybWFsaXplSnN4RXZlbnROYW1lKGpzeEV2ZW50LnNsaWNlKGlkeCwgLTEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7IC8vIFJldHVybiBudWxsIGlmIG5vdCBtYXRjaGluZyBleHBlY3RlZCBmb3JtYXRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50TmFtZShldmVudDogc3RyaW5nLCBwcmVmaXggPSAnJyk6IHN0cmluZyB7XG4gIGNvbnN0IGV2ZW50TmFtZSA9IGZyb21DYW1lbFRvS2ViYWJDYXNlKGV2ZW50KTtcbiAgcmV0dXJuIHByZWZpeCArIGV2ZW50TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50U2NvcGVEYXRhRnJvbUpzeEV2ZW50KFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgaXNQYXNzaXZlID0gZmFsc2Vcbik6IFtFdmVudE5hbWVIdG1sU2NvcGUgfCB1bmRlZmluZWQsIG51bWJlcl0ge1xuICBsZXQgcHJlZml4OiBFdmVudE5hbWVIdG1sU2NvcGUgfCB1bmRlZmluZWQ7XG4gIGxldCBpZHggPSAtMTtcbiAgLy8gc2V0IHByZWZpeCBhbmQgaWR4IGJhc2VkIG9uIHRoZSBzY29wZVxuICBpZiAoZXZlbnROYW1lLnN0YXJ0c1dpdGgoRXZlbnROYW1lSlNYU2NvcGUub24pKSB7XG4gICAgcHJlZml4ID0gaXNQYXNzaXZlID8gRXZlbnROYW1lSHRtbFNjb3BlLm9uUGFzc2l2ZSA6IEV2ZW50TmFtZUh0bWxTY29wZS5vbjtcbiAgICBpZHggPSAyO1xuICB9IGVsc2UgaWYgKGV2ZW50TmFtZS5zdGFydHNXaXRoKEV2ZW50TmFtZUpTWFNjb3BlLndpbmRvdykpIHtcbiAgICBwcmVmaXggPSBpc1Bhc3NpdmUgPyBFdmVudE5hbWVIdG1sU2NvcGUud2luZG93UGFzc2l2ZSA6IEV2ZW50TmFtZUh0bWxTY29wZS53aW5kb3c7XG4gICAgaWR4ID0gOTtcbiAgfSBlbHNlIGlmIChldmVudE5hbWUuc3RhcnRzV2l0aChFdmVudE5hbWVKU1hTY29wZS5kb2N1bWVudCkpIHtcbiAgICBwcmVmaXggPSBpc1Bhc3NpdmUgPyBFdmVudE5hbWVIdG1sU2NvcGUuZG9jdW1lbnRQYXNzaXZlIDogRXZlbnROYW1lSHRtbFNjb3BlLmRvY3VtZW50O1xuICAgIGlkeCA9IDExO1xuICB9XG4gIHJldHVybiBbcHJlZml4LCBpZHhdO1xufVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplSnN4RXZlbnROYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBuYW1lID09PSBET01fQ09OVEVOVF9MT0FERURfRVZFTlRcbiAgICA/ICctZC1vLW0tY29udGVudC1sb2FkZWQnXG4gICAgOiBjcmVhdGVFdmVudE5hbWUoXG4gICAgICAgIG5hbWUuY2hhckF0KDApID09PSAnLSdcbiAgICAgICAgICA/IC8vIG1hcmtlciBmb3IgY2FzZSBzZW5zaXRpdmUgZXZlbnQgbmFtZVxuICAgICAgICAgICAgbmFtZS5zbGljZSgxKVxuICAgICAgICAgIDogbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGFzaCA9IChjaGFyQ29kZTogbnVtYmVyKTogYm9vbGVhbiA9PiBjaGFyQ29kZSA9PT0gNDU7IC8qIC0gKi9cblxuZXhwb3J0IGNvbnN0IGdldEV2ZW50TmFtZVNjb3BlRnJvbUpzeEV2ZW50ID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGluZGV4ID0gbmFtZS5pbmRleE9mKCc6Jyk7XG4gIHJldHVybiBpbmRleCAhPT0gLTEgPyBuYW1lLnN1YnN0cmluZygwLCBpbmRleCkgOiAnJztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXZlbnREZWZhdWx0KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aCgncHJldmVudGRlZmF1bHQ6Jyk7XG59XG5cbi8qKiBDb252ZXJ0cyBhIGNhbWVsQ2FzZSBzdHJpbmcgdG8ga2ViYWItY2FzZS4gVGhpcyBpcyB1c2VkIGZvciBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCBjb25zdCBmcm9tQ2FtZWxUb0tlYmFiQ2FzZSA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC8oW0EtWi1dKS9nLCAoYSkgPT4gJy0nICsgYS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbi8qKiBFLmcuIGBcInEtZTpjbGlja1wiYCA9PiBgWydlJywgJ2NsaWNrJ11gLCBgXCJxLWVwOmNsaWNrXCJgID0+IGBbJ2VwJywgJ2NsaWNrJ11gICovXG5leHBvcnQgY29uc3QgZ2V0RXZlbnREYXRhRnJvbUh0bWxBdHRyaWJ1dGUgPSAoaHRtbEtleTogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSA9PiB7XG4gIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gaHRtbEtleS5pbmRleE9mKCc6Jyk7XG4gIHJldHVybiBbaHRtbEtleS5zbGljZSgyLCBzZXBhcmF0b3JJbmRleCksIGh0bWxLZXkuc2xpY2Uoc2VwYXJhdG9ySW5kZXggKyAxKV07XG59O1xuXG4vKiogRS5nLiBgXCJlOmNsaWNrXCJgLCBgXCJ3OmxvYWRcImAgKi9cbmV4cG9ydCBjb25zdCBnZXRTY29wZWRFdmVudE5hbWUgPSAoc2NvcGU6IHN0cmluZywgZXZlbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc2NvcGUgKyAnOicgKyBldmVudE5hbWU7XG4iXX0=","/** CSS properties which accept numbers but are not in units of \"px\". */\nconst unitlessNumbers = new Set([\n    'animationIterationCount',\n    'aspectRatio',\n    'borderImageOutset',\n    'borderImageSlice',\n    'borderImageWidth',\n    'boxFlex',\n    'boxFlexGroup',\n    'boxOrdinalGroup',\n    'columnCount',\n    'columns',\n    'flex',\n    'flexGrow',\n    'flexShrink',\n    'gridArea',\n    'gridRow',\n    'gridRowEnd',\n    'gridRowStart',\n    'gridColumn',\n    'gridColumnEnd',\n    'gridColumnStart',\n    'fontWeight',\n    'lineClamp',\n    'lineHeight',\n    'opacity',\n    'order',\n    'orphans',\n    'scale',\n    'tabSize',\n    'widows',\n    'zIndex',\n    'zoom',\n    'MozAnimationIterationCount', // Known Prefixed Properties\n    'MozBoxFlex', // TODO: Remove these since they shouldn't be used in modern code\n    'msFlex',\n    'msFlexPositive',\n    'WebkitAnimationIterationCount',\n    'WebkitBoxFlex',\n    'WebkitBoxOrdinalGroup',\n    'WebkitColumnCount',\n    'WebkitColumns',\n    'WebkitFlex',\n    'WebkitFlexGrow',\n    'WebkitFlexShrink',\n    'WebkitLineClamp',\n]);\nexport const isUnitlessNumber = (name) => {\n    return unitlessNumbers.has(name);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdGxlc3NfbnVtYmVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy91bml0bGVzc19udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0VBQXdFO0FBQ3hFLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzlCLHlCQUF5QjtJQUN6QixhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsU0FBUztJQUNULGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsYUFBYTtJQUNiLFNBQVM7SUFDVCxNQUFNO0lBQ04sVUFBVTtJQUNWLFlBQVk7SUFDWixVQUFVO0lBQ1YsU0FBUztJQUNULFlBQVk7SUFDWixjQUFjO0lBQ2QsWUFBWTtJQUNaLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTiw0QkFBNEIsRUFBRSw0QkFBNEI7SUFDMUQsWUFBWSxFQUFFLGlFQUFpRTtJQUMvRSxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLCtCQUErQjtJQUMvQixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0NBQ2xCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFXLEVBQUU7SUFDeEQsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuICovXG5jb25zdCB1bml0bGVzc051bWJlcnMgPSBuZXcgU2V0KFtcbiAgJ2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JyxcbiAgJ2FzcGVjdFJhdGlvJyxcbiAgJ2JvcmRlckltYWdlT3V0c2V0JyxcbiAgJ2JvcmRlckltYWdlU2xpY2UnLFxuICAnYm9yZGVySW1hZ2VXaWR0aCcsXG4gICdib3hGbGV4JyxcbiAgJ2JveEZsZXhHcm91cCcsXG4gICdib3hPcmRpbmFsR3JvdXAnLFxuICAnY29sdW1uQ291bnQnLFxuICAnY29sdW1ucycsXG4gICdmbGV4JyxcbiAgJ2ZsZXhHcm93JyxcbiAgJ2ZsZXhTaHJpbmsnLFxuICAnZ3JpZEFyZWEnLFxuICAnZ3JpZFJvdycsXG4gICdncmlkUm93RW5kJyxcbiAgJ2dyaWRSb3dTdGFydCcsXG4gICdncmlkQ29sdW1uJyxcbiAgJ2dyaWRDb2x1bW5FbmQnLFxuICAnZ3JpZENvbHVtblN0YXJ0JyxcbiAgJ2ZvbnRXZWlnaHQnLFxuICAnbGluZUNsYW1wJyxcbiAgJ2xpbmVIZWlnaHQnLFxuICAnb3BhY2l0eScsXG4gICdvcmRlcicsXG4gICdvcnBoYW5zJyxcbiAgJ3NjYWxlJyxcbiAgJ3RhYlNpemUnLFxuICAnd2lkb3dzJyxcbiAgJ3pJbmRleCcsXG4gICd6b29tJyxcbiAgJ01vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgLy8gS25vd24gUHJlZml4ZWQgUHJvcGVydGllc1xuICAnTW96Qm94RmxleCcsIC8vIFRPRE86IFJlbW92ZSB0aGVzZSBzaW5jZSB0aGV5IHNob3VsZG4ndCBiZSB1c2VkIGluIG1vZGVybiBjb2RlXG4gICdtc0ZsZXgnLFxuICAnbXNGbGV4UG9zaXRpdmUnLFxuICAnV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLFxuICAnV2Via2l0Qm94RmxleCcsXG4gICdXZWJraXRCb3hPcmRpbmFsR3JvdXAnLFxuICAnV2Via2l0Q29sdW1uQ291bnQnLFxuICAnV2Via2l0Q29sdW1ucycsXG4gICdXZWJraXRGbGV4JyxcbiAgJ1dlYmtpdEZsZXhHcm93JyxcbiAgJ1dlYmtpdEZsZXhTaHJpbmsnLFxuICAnV2Via2l0TGluZUNsYW1wJyxcbl0pO1xuXG5leHBvcnQgY29uc3QgaXNVbml0bGVzc051bWJlciA9IChuYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHVuaXRsZXNzTnVtYmVycy5oYXMobmFtZSk7XG59O1xuIl19","export const hashCode = (text, hash = 0) => {\n    for (let i = 0; i < text.length; i++) {\n        const chr = text.charCodeAt(i);\n        hash = (hash << 5) - hash + chr;\n        hash |= 0; // Convert to 32bit integer\n    }\n    return Number(Math.abs(hash)).toString(36);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF9jb2RlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9oYXNoX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQWUsQ0FBQyxFQUFFLEVBQUU7SUFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7SUFDeEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGhhc2hDb2RlID0gKHRleHQ6IHN0cmluZywgaGFzaDogbnVtYmVyID0gMCkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaHIgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIGNocjtcbiAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICB9XG4gIHJldHVybiBOdW1iZXIoTWF0aC5hYnMoaGFzaCkpLnRvU3RyaW5nKDM2KTtcbn07XG4iXX0=","import { qError } from '../error/error';\nimport { isPreventDefault } from './event-names';\nimport { isClassAttr } from './scoped-styles';\nimport { isArray, isString } from './types';\nimport { isUnitlessNumber } from './unitless_number';\nimport { assertQrl } from '../qrl/qrl-utils';\nimport { hashCode } from './hash_code';\nexport const serializeClass = (obj) => {\n    if (!obj) {\n        return '';\n    }\n    if (isString(obj)) {\n        return obj.trim();\n    }\n    const classes = [];\n    if (isArray(obj)) {\n        for (let i = 0; i < obj.length; i++) {\n            const o = obj[i];\n            const classList = serializeClass(o);\n            if (classList) {\n                classes.push(classList);\n            }\n        }\n    }\n    else {\n        for (const [key, value] of Object.entries(obj)) {\n            if (value) {\n                classes.push(key.trim());\n            }\n        }\n    }\n    return classes.join(' ');\n};\n// Unlike fromCamelToKebabCase, this leaves `-` so that `background-color` stays `background-color`\nconst fromCamelToKebabCaseWithDash = (text) => {\n    return text.replace(/([A-Z])/g, '-$1').toLowerCase();\n};\nexport const stringifyStyle = (obj) => {\n    if (obj == null) {\n        return '';\n    }\n    if (typeof obj == 'object') {\n        if (isArray(obj)) {\n            throw qError(0 /* QError.stringifyClassOrStyle */, [obj, 'style']);\n        }\n        else {\n            const chunks = [];\n            for (const key in obj) {\n                if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                    const value = obj[key];\n                    if (value != null && typeof value !== 'function') {\n                        if (key.startsWith('--')) {\n                            chunks.push(key + ':' + value);\n                        }\n                        else {\n                            chunks.push(fromCamelToKebabCaseWithDash(key) + ':' + setValueForStyle(key, value));\n                        }\n                    }\n                }\n            }\n            return chunks.join(';');\n        }\n    }\n    return String(obj);\n};\nexport const serializeBooleanOrNumberAttribute = (value) => {\n    return value != null ? String(value) : null;\n};\nexport function serializeAttribute(key, value, styleScopedId) {\n    if (isClassAttr(key)) {\n        const serializedClass = serializeClass(value);\n        value = styleScopedId\n            ? styleScopedId + (serializedClass.length ? ' ' + serializedClass : serializedClass)\n            : serializedClass;\n    }\n    else if (key === 'style') {\n        value = stringifyStyle(value);\n    }\n    else if (isEnumeratedBooleanAttribute(key) || typeof value === 'number') {\n        // aria attrs, tabindex etc.\n        value = serializeBooleanOrNumberAttribute(value);\n    }\n    else if (value === false || value == null) {\n        value = null;\n    }\n    else if (value === true && isPreventDefault(key)) {\n        value = '';\n    }\n    return value;\n}\nfunction isEnumeratedBooleanAttribute(key) {\n    return isAriaAttribute(key) || ['spellcheck', 'draggable', 'contenteditable'].includes(key);\n}\nexport const setValueForStyle = (styleName, value) => {\n    if (typeof value === 'number' && value !== 0 && !isUnitlessNumber(styleName)) {\n        return value + 'px';\n    }\n    return value;\n};\nexport function isAriaAttribute(prop) {\n    return prop.startsWith('aria-');\n}\nexport const styleKey = (qStyles, index) => {\n    assertQrl(qStyles);\n    return `${hashCode(qStyles.$hash$)}-${index}`;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9zdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBYyxFQUFVLEVBQUU7SUFDdkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUks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QUFDLENBQUM7QUFFRixNQUFNLFVBQVUsZUFBZSxDQUFDLElBQVk7SUFDMUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEtBQWEsRUFBVSxFQUFFO0lBQ3RFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENsYXNzTGlzdCB9IGZyb20gJy4uL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgaXNQcmV2ZW50RGVmYXVsdCB9IGZyb20gJy4vZXZlbnQtbmFtZXMnO1xuaW1wb3J0IHsgaXNDbGFzc0F0dHIgfSBmcm9tICcuL3Njb3BlZC1zdHlsZXMnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzVW5pdGxlc3NOdW1iZXIgfSBmcm9tICcuL3VuaXRsZXNzX251bWJlcic7XG5pbXBvcnQgeyBhc3NlcnRRcmwgfSBmcm9tICcuLi9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgaGFzaENvZGUgfSBmcm9tICcuL2hhc2hfY29kZSc7XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVDbGFzcyA9IChvYmo6IENsYXNzTGlzdCk6IHN0cmluZyA9PiB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgcmV0dXJuIG9iai50cmltKCk7XG4gIH1cblxuICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbyA9IG9ialtpXTtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHNlcmlhbGl6ZUNsYXNzKG8pO1xuICAgICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goY2xhc3NMaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChrZXkudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG59O1xuXG4vLyBVbmxpa2UgZnJvbUNhbWVsVG9LZWJhYkNhc2UsIHRoaXMgbGVhdmVzIGAtYCBzbyB0aGF0IGBiYWNrZ3JvdW5kLWNvbG9yYCBzdGF5cyBgYmFja2dyb3VuZC1jb2xvcmBcbmNvbnN0IGZyb21DYW1lbFRvS2ViYWJDYXNlV2l0aERhc2ggPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvKFtBLVpdKS9nLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnlTdHlsZSA9IChvYmo6IGFueSk6IHN0cmluZyA9PiB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc3RyaW5naWZ5Q2xhc3NPclN0eWxlLCBbb2JqLCAnc3R5bGUnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJy0tJykpIHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goa2V5ICsgJzonICsgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goZnJvbUNhbWVsVG9LZWJhYkNhc2VXaXRoRGFzaChrZXkpICsgJzonICsgc2V0VmFsdWVGb3JTdHlsZShrZXksIHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2h1bmtzLmpvaW4oJzsnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUJvb2xlYW5Pck51bWJlckF0dHJpYnV0ZSA9ICh2YWx1ZTogYW55KSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKSA6IG51bGw7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgc3R5bGVTY29wZWRJZD86IHN0cmluZyB8IG51bGxcbik6IHN0cmluZyB8IG51bGwgfCBib29sZWFuIHtcbiAgaWYgKGlzQ2xhc3NBdHRyKGtleSkpIHtcbiAgICBjb25zdCBzZXJpYWxpemVkQ2xhc3MgPSBzZXJpYWxpemVDbGFzcyh2YWx1ZSBhcyBDbGFzc0xpc3QpO1xuICAgIHZhbHVlID0gc3R5bGVTY29wZWRJZFxuICAgICAgPyBzdHlsZVNjb3BlZElkICsgKHNlcmlhbGl6ZWRDbGFzcy5sZW5ndGggPyAnICcgKyBzZXJpYWxpemVkQ2xhc3MgOiBzZXJpYWxpemVkQ2xhc3MpXG4gICAgICA6IHNlcmlhbGl6ZWRDbGFzcztcbiAgfSBlbHNlIGlmIChrZXkgPT09ICdzdHlsZScpIHtcbiAgICB2YWx1ZSA9IHN0cmluZ2lmeVN0eWxlKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRCb29sZWFuQXR0cmlidXRlKGtleSkgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIC8vIGFyaWEgYXR0cnMsIHRhYmluZGV4IGV0Yy5cbiAgICB2YWx1ZSA9IHNlcmlhbGl6ZUJvb2xlYW5Pck51bWJlckF0dHJpYnV0ZSh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IHRydWUgJiYgaXNQcmV2ZW50RGVmYXVsdChrZXkpKSB7XG4gICAgdmFsdWUgPSAnJztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzRW51bWVyYXRlZEJvb2xlYW5BdHRyaWJ1dGUoa2V5OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGlzQXJpYUF0dHJpYnV0ZShrZXkpIHx8IFsnc3BlbGxjaGVjaycsICdkcmFnZ2FibGUnLCAnY29udGVudGVkaXRhYmxlJ10uaW5jbHVkZXMoa2V5KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZhbHVlRm9yU3R5bGUgPSAoc3R5bGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIWlzVW5pdGxlc3NOdW1iZXIoc3R5bGVOYW1lKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJpYUF0dHJpYnV0ZShwcm9wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb3Auc3RhcnRzV2l0aCgnYXJpYS0nKTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0eWxlS2V5ID0gKHFTdHlsZXM6IFFSTDxzdHJpbmc+LCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgYXNzZXJ0UXJsKHFTdHlsZXMpO1xuICByZXR1cm4gYCR7aGFzaENvZGUocVN0eWxlcy4kaGFzaCQpfS0ke2luZGV4fWA7XG59O1xuIl19","/**\n * Creates a function that schedules `fn` to run as a microtask. Microtasks run before browser\n * paint, preventing flickering.\n */\nexport const createMicroTask = (fn) => {\n    return () => queueMicrotask(fn);\n};\n/**\n * Creates a function that schedules `fn` to run as a macrotask. Macrotasks yield to the browser,\n * allowing paint and user input. Used for time-slicing to avoid blocking the main thread.\n */\nexport const createMacroTask = (fn) => {\n    let macroTask;\n    if (typeof MessageChannel !== 'undefined') {\n        const channel = new MessageChannel();\n        channel.port1.onmessage = () => fn();\n        macroTask = () => channel.port2.postMessage(null);\n    }\n    else {\n        macroTask = () => setTimeout(fn);\n    }\n    return macroTask;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dC10aWNrLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9wbGF0Zm9ybS9uZXh0LXRpY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBYyxFQUFFLEVBQUU7SUFDaEQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBYyxFQUFFLEVBQUU7SUFDaEQsSUFBSSxTQUFxQixDQUFDO0lBQzFCLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztTQUFNLENBQUM7UUFDTixTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHNjaGVkdWxlcyBgZm5gIHRvIHJ1biBhcyBhIG1pY3JvdGFzay4gTWljcm90YXNrcyBydW4gYmVmb3JlIGJyb3dzZXJcbiAqIHBhaW50LCBwcmV2ZW50aW5nIGZsaWNrZXJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVNaWNyb1Rhc2sgPSAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgcmV0dXJuICgpID0+IHF1ZXVlTWljcm90YXNrKGZuKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgc2NoZWR1bGVzIGBmbmAgdG8gcnVuIGFzIGEgbWFjcm90YXNrLiBNYWNyb3Rhc2tzIHlpZWxkIHRvIHRoZSBicm93c2VyLFxuICogYWxsb3dpbmcgcGFpbnQgYW5kIHVzZXIgaW5wdXQuIFVzZWQgZm9yIHRpbWUtc2xpY2luZyB0byBhdm9pZCBibG9ja2luZyB0aGUgbWFpbiB0aHJlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVNYWNyb1Rhc2sgPSAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgbGV0IG1hY3JvVGFzazogKCkgPT4gdm9pZDtcbiAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoKSA9PiBmbigpO1xuICAgIG1hY3JvVGFzayA9ICgpID0+IGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UobnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgbWFjcm9UYXNrID0gKCkgPT4gc2V0VGltZW91dChmbik7XG4gIH1cbiAgcmV0dXJuIG1hY3JvVGFzaztcbn07XG4iXX0=","// keep this import from core/build so the cjs build works\nimport { isServer } from '@qwik.dev/core/build';\nimport { qError } from '../error/error';\nimport { getSymbolHash } from '../qrl/qrl-utils';\nimport { QBaseAttr } from '../utils/markers';\nimport { qDynamicPlatform } from '../utils/qdev';\nexport const createPlatform = () => {\n    return {\n        isServer,\n        importSymbol(containerEl, url, symbolName) {\n            if (isServer) {\n                const hash = getSymbolHash(symbolName);\n                const regSym = globalThis.__qwik_reg_symbols?.get(hash);\n                if (regSym) {\n                    return regSym;\n                }\n                // we never lazy import on the server\n                throw qError(6 /* QError.dynamicImportFailed */, [symbolName]);\n            }\n            if (!url) {\n                throw qError(14 /* QError.qrlMissingChunk */, [symbolName]);\n            }\n            if (!containerEl) {\n                throw qError(13 /* QError.qrlMissingContainer */, [url, symbolName]);\n            }\n            const urlDoc = toUrl(containerEl.ownerDocument, containerEl, url).toString();\n            const urlCopy = new URL(urlDoc);\n            urlCopy.hash = '';\n            const importURL = urlCopy.href;\n            return import(/* @vite-ignore */ importURL).then((mod) => {\n                return mod[symbolName];\n            });\n        },\n        raf: (fn) => {\n            return new Promise((resolve) => {\n                requestAnimationFrame(() => {\n                    resolve(fn());\n                });\n            });\n        },\n        chunkForSymbol(symbolName, chunk) {\n            return [symbolName, chunk ?? '_'];\n        },\n    };\n};\n/**\n * Convert relative base URI and relative URL into a fully qualified URL.\n *\n * @param base -`QRL`s are relative, and therefore they need a base for resolution.\n *\n *   - `Element` use `base.ownerDocument.baseURI`\n *   - `Document` use `base.baseURI`\n *   - `string` use `base` as is\n *   - `QConfig` use `base.baseURI`\n *\n * @param url - Relative URL\n * @returns Fully qualified URL.\n */\nexport const toUrl = (doc, containerEl, url) => {\n    const baseURI = doc.baseURI;\n    const base = new URL(containerEl.getAttribute(QBaseAttr) ?? baseURI, baseURI);\n    return new URL(url, base);\n};\nlet _platform = /*#__PURE__ */ createPlatform();\n// <docs markdown=\"./readme.md#setPlatform\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ./readme.md#setPlatform instead and run `pnpm docs.sync`)\n/**\n * Sets the `CorePlatform`.\n *\n * This is useful to override the platform in tests to change the behavior of,\n * `requestAnimationFrame`, and import resolution.\n *\n * @param doc - The document of the application for which the platform is needed.\n * @param platform - The platform to use.\n * @public\n */\n// </docs>\nexport const setPlatform = (plt) => (_platform = plt);\n// <docs markdown=\"./readme.md#getPlatform\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ./readme.md#getPlatform instead and run `pnpm docs.sync`)\n/**\n * Retrieve the `CorePlatform`.\n *\n * The `CorePlatform` is also responsible for retrieving the Manifest, that contains mappings from\n * symbols to javascript import chunks. For this reason, `CorePlatform` can't be global, but is\n * specific to the application currently running. On server it is possible that many different\n * applications are running in a single server instance, and for this reason the `CorePlatform` is\n * associated with the application document.\n *\n * @param docOrNode - The document (or node) of the application for which the platform is needed.\n * @public\n */\n// </docs>\nexport const getPlatform = () => {\n    return _platform;\n};\nexport const isServerPlatform = () => {\n    if (qDynamicPlatform) {\n        return _platform.isServer;\n    }\n    return false;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3BsYXRmb3JtL3BsYXRmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRDtBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFpQixFQUFFO0lBQy9DLE9BQU87UUFDTCxRQUFRO1FBQ1IsWUFBWSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVTtZQUN2QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxNQUFNLEdBQUksVUFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QscUNBQXFDO2dCQUNyQyxNQUFNLE1BQU0scUNBQTZCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sTUFBTSxrQ0FBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sTUFBTSxzQ0FBNkIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3ZELE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ1YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM3QixxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSztZQUM5QixPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQWEsRUFBRSxXQUFvQixFQUFFLEdBQWlCLEVBQU8sRUFBRTtJQUNuRixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGLElBQUksU0FBUyxHQUFHLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUVoRCw0Q0FBNEM7QUFDNUMseUNBQXlDO0FBQ3pDLGtFQUFrRTtBQUNsRTs7Ozs7Ozs7O0dBU0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFFcEUsNENBQTRDO0FBQzVDLHlDQUF5QztBQUN6QyxrRUFBa0U7QUFDbEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEdBQWlCLEVBQUU7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO0lBQ25DLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8ga2VlcCB0aGlzIGltcG9ydCBmcm9tIGNvcmUvYnVpbGQgc28gdGhlIGNqcyBidWlsZCB3b3Jrc1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4uL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IGdldFN5bWJvbEhhc2ggfSBmcm9tICcuLi9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB7IFFCYXNlQXR0ciB9IGZyb20gJy4uL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgcUR5bmFtaWNQbGF0Zm9ybSB9IGZyb20gJy4uL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHR5cGUgeyBDb3JlUGxhdGZvcm0gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsYXRmb3JtID0gKCk6IENvcmVQbGF0Zm9ybSA9PiB7XG4gIHJldHVybiB7XG4gICAgaXNTZXJ2ZXIsXG4gICAgaW1wb3J0U3ltYm9sKGNvbnRhaW5lckVsLCB1cmwsIHN5bWJvbE5hbWUpIHtcbiAgICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgICBjb25zdCBoYXNoID0gZ2V0U3ltYm9sSGFzaChzeW1ib2xOYW1lKTtcbiAgICAgICAgY29uc3QgcmVnU3ltID0gKGdsb2JhbFRoaXMgYXMgYW55KS5fX3F3aWtfcmVnX3N5bWJvbHM/LmdldChoYXNoKTtcbiAgICAgICAgaWYgKHJlZ1N5bSkge1xuICAgICAgICAgIHJldHVybiByZWdTeW07XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgbmV2ZXIgbGF6eSBpbXBvcnQgb24gdGhlIHNlcnZlclxuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLmR5bmFtaWNJbXBvcnRGYWlsZWQsIFtzeW1ib2xOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnFybE1pc3NpbmdDaHVuaywgW3N5bWJvbE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29udGFpbmVyRWwpIHtcbiAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5xcmxNaXNzaW5nQ29udGFpbmVyLCBbdXJsLCBzeW1ib2xOYW1lXSk7XG4gICAgICB9XG4gICAgICBjb25zdCB1cmxEb2MgPSB0b1VybChjb250YWluZXJFbC5vd25lckRvY3VtZW50LCBjb250YWluZXJFbCwgdXJsKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgdXJsQ29weSA9IG5ldyBVUkwodXJsRG9jKTtcbiAgICAgIHVybENvcHkuaGFzaCA9ICcnO1xuICAgICAgY29uc3QgaW1wb3J0VVJMID0gdXJsQ29weS5ocmVmO1xuICAgICAgcmV0dXJuIGltcG9ydCgvKiBAdml0ZS1pZ25vcmUgKi8gaW1wb3J0VVJMKS50aGVuKChtb2QpID0+IHtcbiAgICAgICAgcmV0dXJuIG1vZFtzeW1ib2xOYW1lXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcmFmOiAoZm4pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaHVua0ZvclN5bWJvbChzeW1ib2xOYW1lLCBjaHVuaykge1xuICAgICAgcmV0dXJuIFtzeW1ib2xOYW1lLCBjaHVuayA/PyAnXyddO1xuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnQgcmVsYXRpdmUgYmFzZSBVUkkgYW5kIHJlbGF0aXZlIFVSTCBpbnRvIGEgZnVsbHkgcXVhbGlmaWVkIFVSTC5cbiAqXG4gKiBAcGFyYW0gYmFzZSAtYFFSTGBzIGFyZSByZWxhdGl2ZSwgYW5kIHRoZXJlZm9yZSB0aGV5IG5lZWQgYSBiYXNlIGZvciByZXNvbHV0aW9uLlxuICpcbiAqICAgLSBgRWxlbWVudGAgdXNlIGBiYXNlLm93bmVyRG9jdW1lbnQuYmFzZVVSSWBcbiAqICAgLSBgRG9jdW1lbnRgIHVzZSBgYmFzZS5iYXNlVVJJYFxuICogICAtIGBzdHJpbmdgIHVzZSBgYmFzZWAgYXMgaXNcbiAqICAgLSBgUUNvbmZpZ2AgdXNlIGBiYXNlLmJhc2VVUklgXG4gKlxuICogQHBhcmFtIHVybCAtIFJlbGF0aXZlIFVSTFxuICogQHJldHVybnMgRnVsbHkgcXVhbGlmaWVkIFVSTC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRvVXJsID0gKGRvYzogRG9jdW1lbnQsIGNvbnRhaW5lckVsOiBFbGVtZW50LCB1cmw6IHN0cmluZyB8IFVSTCk6IFVSTCA9PiB7XG4gIGNvbnN0IGJhc2VVUkkgPSBkb2MuYmFzZVVSSTtcbiAgY29uc3QgYmFzZSA9IG5ldyBVUkwoY29udGFpbmVyRWwuZ2V0QXR0cmlidXRlKFFCYXNlQXR0cikgPz8gYmFzZVVSSSwgYmFzZVVSSSk7XG4gIHJldHVybiBuZXcgVVJMKHVybCwgYmFzZSk7XG59O1xuXG5sZXQgX3BsYXRmb3JtID0gLyojX19QVVJFX18gKi8gY3JlYXRlUGxhdGZvcm0oKTtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuL3JlYWRtZS5tZCNzZXRQbGF0Zm9ybVwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4vcmVhZG1lLm1kI3NldFBsYXRmb3JtIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBTZXRzIHRoZSBgQ29yZVBsYXRmb3JtYC5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCB0byBvdmVycmlkZSB0aGUgcGxhdGZvcm0gaW4gdGVzdHMgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZixcbiAqIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLCBhbmQgaW1wb3J0IHJlc29sdXRpb24uXG4gKlxuICogQHBhcmFtIGRvYyAtIFRoZSBkb2N1bWVudCBvZiB0aGUgYXBwbGljYXRpb24gZm9yIHdoaWNoIHRoZSBwbGF0Zm9ybSBpcyBuZWVkZWQuXG4gKiBAcGFyYW0gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gdG8gdXNlLlxuICogQHB1YmxpY1xuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3Qgc2V0UGxhdGZvcm0gPSAocGx0OiBDb3JlUGxhdGZvcm0pID0+IChfcGxhdGZvcm0gPSBwbHQpO1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4vcmVhZG1lLm1kI2dldFBsYXRmb3JtXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi9yZWFkbWUubWQjZ2V0UGxhdGZvcm0gaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFJldHJpZXZlIHRoZSBgQ29yZVBsYXRmb3JtYC5cbiAqXG4gKiBUaGUgYENvcmVQbGF0Zm9ybWAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgcmV0cmlldmluZyB0aGUgTWFuaWZlc3QsIHRoYXQgY29udGFpbnMgbWFwcGluZ3MgZnJvbVxuICogc3ltYm9scyB0byBqYXZhc2NyaXB0IGltcG9ydCBjaHVua3MuIEZvciB0aGlzIHJlYXNvbiwgYENvcmVQbGF0Zm9ybWAgY2FuJ3QgYmUgZ2xvYmFsLCBidXQgaXNcbiAqIHNwZWNpZmljIHRvIHRoZSBhcHBsaWNhdGlvbiBjdXJyZW50bHkgcnVubmluZy4gT24gc2VydmVyIGl0IGlzIHBvc3NpYmxlIHRoYXQgbWFueSBkaWZmZXJlbnRcbiAqIGFwcGxpY2F0aW9ucyBhcmUgcnVubmluZyBpbiBhIHNpbmdsZSBzZXJ2ZXIgaW5zdGFuY2UsIGFuZCBmb3IgdGhpcyByZWFzb24gdGhlIGBDb3JlUGxhdGZvcm1gIGlzXG4gKiBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSBkb2NPck5vZGUgLSBUaGUgZG9jdW1lbnQgKG9yIG5vZGUpIG9mIHRoZSBhcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhlIHBsYXRmb3JtIGlzIG5lZWRlZC5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IGdldFBsYXRmb3JtID0gKCk6IENvcmVQbGF0Zm9ybSA9PiB7XG4gIHJldHVybiBfcGxhdGZvcm07XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZXJ2ZXJQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKHFEeW5hbWljUGxhdGZvcm0pIHtcbiAgICByZXR1cm4gX3BsYXRmb3JtLmlzU2VydmVyO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=","import { isServer } from '@qwik.dev/core/build';\nimport { qTest } from '../shared/utils/qdev';\nimport { isServerPlatform } from '../shared/platform/platform';\nconst hasDocument = typeof document !== 'undefined';\nexport const isBrowser = (qTest ? !isServerPlatform() : !isServer) && hasDocument;\n// Browser-specific setup\nexport const doc = isBrowser ? document : undefined;\nexport const config = {\n    $DEBUG$: false,\n    $maxIdlePreloads$: 25,\n};\n// Determine which rel attribute to use based on browser support\nexport const rel = isBrowser && doc.createElement('link').relList?.supports?.('modulepreload')\n    ? 'modulePreload'\n    : 'preload';\nexport const isJSRegex = /\\.[mc]?js$/;\nexport const yieldInterval = 1000 / 60;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3ByZWxvYWRlci9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCxNQUFNLFdBQVcsR0FBRyxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDO0FBRWxGLHlCQUF5QjtBQUN6QixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVUsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLEtBQUs7SUFDZCxpQkFBaUIsRUFBRSxFQUFFO0NBQ3RCLENBQUM7QUFFRixnRUFBZ0U7QUFDaEUsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUNkLFNBQVMsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxlQUFlLENBQUM7SUFDekUsQ0FBQyxDQUFDLGVBQWU7SUFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUVoQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBxVGVzdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuXG5jb25zdCBoYXNEb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBjb25zdCBpc0Jyb3dzZXIgPSAocVRlc3QgPyAhaXNTZXJ2ZXJQbGF0Zm9ybSgpIDogIWlzU2VydmVyKSAmJiBoYXNEb2N1bWVudDtcblxuLy8gQnJvd3Nlci1zcGVjaWZpYyBzZXR1cFxuZXhwb3J0IGNvbnN0IGRvYyA9IGlzQnJvd3NlciA/IGRvY3VtZW50IDogdW5kZWZpbmVkITtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHtcbiAgJERFQlVHJDogZmFsc2UsXG4gICRtYXhJZGxlUHJlbG9hZHMkOiAyNSxcbn07XG5cbi8vIERldGVybWluZSB3aGljaCByZWwgYXR0cmlidXRlIHRvIHVzZSBiYXNlZCBvbiBicm93c2VyIHN1cHBvcnRcbmV4cG9ydCBjb25zdCByZWwgPVxuICBpc0Jyb3dzZXIgJiYgZG9jLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKS5yZWxMaXN0Py5zdXBwb3J0cz8uKCdtb2R1bGVwcmVsb2FkJylcbiAgICA/ICdtb2R1bGVQcmVsb2FkJ1xuICAgIDogJ3ByZWxvYWQnO1xuXG5leHBvcnQgY29uc3QgaXNKU1JlZ2V4ID0gL1xcLlttY10/anMkLztcblxuZXhwb3J0IGNvbnN0IHlpZWxkSW50ZXJ2YWwgPSAxMDAwIC8gNjA7XG4iXX0=","export const BundleImportState_None = 0;\nexport const BundleImportState_Queued = 1;\nexport const BundleImportState_Preload = 2;\nexport const BundleImportState_Alias = 3;\nexport const BundleImportState_Loaded = 4;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcHJlbG9hZGVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFDMUMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQnVuZGxlSW1wb3J0U3RhdGVfTm9uZSA9IDA7XG5leHBvcnQgY29uc3QgQnVuZGxlSW1wb3J0U3RhdGVfUXVldWVkID0gMTtcbmV4cG9ydCBjb25zdCBCdW5kbGVJbXBvcnRTdGF0ZV9QcmVsb2FkID0gMjtcbmV4cG9ydCBjb25zdCBCdW5kbGVJbXBvcnRTdGF0ZV9BbGlhcyA9IDM7XG5leHBvcnQgY29uc3QgQnVuZGxlSW1wb3J0U3RhdGVfTG9hZGVkID0gNDtcblxuZXhwb3J0IHR5cGUgQnVuZGxlSW5mbyA9IHtcbiAgJGludmVyc2VQcm9iYWJpbGl0eSQ6IG51bWJlcjtcbiAgLy8gVE9ETyBjaGVjayBpZiBmb3IgcGVyZm9ybWFuY2Ugd2Ugc2hvdWxkIHVzZSByZWZzIGluc3RlYWQgb2YgaWRzXG4gICRkZXBzJD86IEltcG9ydFByb2JhYmlsaXR5W107XG59O1xuXG5leHBvcnQgdHlwZSBCdW5kbGVJbXBvcnQgPSBCdW5kbGVJbmZvICYge1xuICAkbmFtZSQ6IHN0cmluZztcbiAgJHN0YXRlJDogbnVtYmVyO1xuICAkY3JlYXRlZFRzJDogbnVtYmVyO1xuICAkd2FpdGVkTXMkOiBudW1iZXI7XG4gICRsb2FkZWRNcyQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEJ1bmRsZUltcG9ydHMgPSBNYXA8c3RyaW5nLCBCdW5kbGVJbXBvcnQ+O1xuXG5leHBvcnQgdHlwZSBJbXBvcnRQcm9iYWJpbGl0eSA9IHtcbiAgLyoqIEJ1bmRsZSBuYW1lICovXG4gICRuYW1lJDogc3RyaW5nO1xuICAvKiogUHJvYmFiaWxpdHkgKi9cbiAgJGltcG9ydFByb2JhYmlsaXR5JDogbnVtYmVyO1xuICAvKiogUHJvYmFiaWxpdHkgYWRqdXN0IGZhY3RvciAqL1xuICAkZmFjdG9yJDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQnVuZGxlR3JhcGggPSBNYXA8c3RyaW5nLCBJbXBvcnRQcm9iYWJpbGl0eVtdPjtcbiJdfQ==","import { createMacroTask } from '../shared/platform/next-tick';\nimport { config, isJSRegex, isBrowser, yieldInterval } from './constants';\nimport { adjustProbabilities, bundles, shouldResetFactor, nextTriggerMacroTask } from './queue';\nimport { BundleImportState_None, BundleImportState_Alias } from './types';\nexport let base;\nexport let graph;\nconst makeBundle = (name, deps) => {\n    return {\n        $name$: name,\n        $state$: isJSRegex.test(name) ? BundleImportState_None : BundleImportState_Alias,\n        $deps$: shouldResetFactor ? deps?.map((d) => ({ ...d, $factor$: 1 })) : deps,\n        $inverseProbability$: 1,\n        $createdTs$: performance.now(),\n        $waitedMs$: 0,\n        $loadedMs$: 0,\n    };\n};\nexport const parseBundleGraph = (serialized) => {\n    const graph = new Map();\n    let i = 0;\n    while (i < serialized.length) {\n        const name = serialized[i++];\n        const deps = [];\n        let idx;\n        let probability = 1;\n        while (((idx = serialized[i]), typeof idx === 'number')) {\n            if (idx < 0) {\n                probability = -idx / 10;\n            }\n            else {\n                deps.push({\n                    $name$: serialized[idx],\n                    $importProbability$: probability,\n                    $factor$: 1,\n                });\n            }\n            i++;\n        }\n        graph.set(name, deps);\n    }\n    return graph;\n};\nexport const getBundle = (name) => {\n    let bundle = bundles.get(name);\n    if (!bundle) {\n        let deps;\n        if (graph) {\n            deps = graph.get(name);\n            if (!deps) {\n                return;\n            }\n            if (!deps.length) {\n                deps = undefined;\n            }\n        }\n        bundle = makeBundle(name, deps);\n        bundles.set(name, bundle);\n    }\n    return bundle;\n};\n/** Used in browser */\nexport const loadBundleGraph = (basePath, serializedResponse, opts) => {\n    if (opts) {\n        if ('P' in opts) {\n            config.$maxIdlePreloads$ = opts['P'];\n        }\n    }\n    if (!isBrowser || basePath == null) {\n        return;\n    }\n    base = basePath;\n    if (serializedResponse) {\n        serializedResponse\n            .then((r) => r.text())\n            .then((text) => {\n            graph = parseBundleGraph(JSON.parse(text));\n            const toAdjust = [];\n            for (const [name, deps] of graph.entries()) {\n                const bundle = getBundle(name);\n                bundle.$deps$ = deps;\n                if (bundle.$inverseProbability$ < 1) {\n                    toAdjust.push([bundle, bundle.$inverseProbability$]);\n                    bundle.$inverseProbability$ = 1;\n                }\n            }\n            if (!toAdjust.length) {\n                nextTriggerMacroTask();\n                return;\n            }\n            let i = 0;\n            const continueAdjust = createMacroTask(() => {\n                const deadline = performance.now() + yieldInterval;\n                while (i < toAdjust.length) {\n                    const [bundle, inverseProbability] = toAdjust[i];\n                    i++;\n                    adjustProbabilities(bundle, inverseProbability);\n                    if (i < toAdjust.length && performance.now() >= deadline) {\n                        continueAdjust();\n                        return;\n                    }\n                }\n                nextTriggerMacroTask();\n            });\n            continueAdjust();\n        })\n            .catch(console.warn);\n    }\n};\n/** Used during SSR */\nexport const initPreloader = (serializedBundleGraph) => {\n    if (base != null || !serializedBundleGraph) {\n        return;\n    }\n    base = '';\n    graph = parseBundleGraph(serializedBundleGraph);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLWdyYXBoLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3ByZWxvYWRlci9idW5kbGUtZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUUsTUFBTSxDQUFDLElBQUksSUFBd0IsQ0FBQztBQUNwQyxNQUFNLENBQUMsSUFBSSxLQUFrQixDQUFDO0FBRTlCLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQTBCLEVBQUUsRUFBRTtJQUM5RCxPQUFPO1FBQ0wsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUNoRixNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzVFLG9CQUFvQixFQUFFLENBQUM7UUFDdkIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDOUIsVUFBVSxFQUFFLENBQUM7UUFDYixVQUFVLEVBQUUsQ0FBQztLQUNkLENBQUM7QUFDSixDQUFD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LE9BQU87b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO2dCQUNELG9CQUFvQixFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7WUFDSCxjQUFjLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixzQkFBc0I7QUFDdEIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMscUJBQTJDLEVBQUUsRUFBRTtJQUMzRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNDLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZU1hY3JvVGFzayB9IGZyb20gJy4uL3NoYXJlZC9wbGF0Zm9ybS9uZXh0LXRpY2snO1xuaW1wb3J0IHsgY29uZmlnLCBpc0pTUmVnZXgsIGlzQnJvd3NlciwgeWllbGRJbnRlcnZhbCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkanVzdFByb2JhYmlsaXRpZXMsIGJ1bmRsZXMsIHNob3VsZFJlc2V0RmFjdG9yLCBuZXh0VHJpZ2dlck1hY3JvVGFzayB9IGZyb20gJy4vcXVldWUnO1xuaW1wb3J0IHR5cGUgeyBCdW5kbGVHcmFwaCwgQnVuZGxlSW1wb3J0LCBJbXBvcnRQcm9iYWJpbGl0eSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQnVuZGxlSW1wb3J0U3RhdGVfTm9uZSwgQnVuZGxlSW1wb3J0U3RhdGVfQWxpYXMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGxldCBiYXNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IGdyYXBoOiBCdW5kbGVHcmFwaDtcblxuY29uc3QgbWFrZUJ1bmRsZSA9IChuYW1lOiBzdHJpbmcsIGRlcHM/OiBJbXBvcnRQcm9iYWJpbGl0eVtdKSA9PiB7XG4gIHJldHVybiB7XG4gICAgJG5hbWUkOiBuYW1lLFxuICAgICRzdGF0ZSQ6IGlzSlNSZWdleC50ZXN0KG5hbWUpID8gQnVuZGxlSW1wb3J0U3RhdGVfTm9uZSA6IEJ1bmRsZUltcG9ydFN0YXRlX0FsaWFzLFxuICAgICRkZXBzJDogc2hvdWxkUmVzZXRGYWN0b3IgPyBkZXBzPy5tYXAoKGQpID0+ICh7IC4uLmQsICRmYWN0b3IkOiAxIH0pKSA6IGRlcHMsXG4gICAgJGludmVyc2VQcm9iYWJpbGl0eSQ6IDEsXG4gICAgJGNyZWF0ZWRUcyQ6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICR3YWl0ZWRNcyQ6IDAsXG4gICAgJGxvYWRlZE1zJDogMCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUJ1bmRsZUdyYXBoID0gKHNlcmlhbGl6ZWQ6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IHtcbiAgY29uc3QgZ3JhcGg6IEJ1bmRsZUdyYXBoID0gbmV3IE1hcCgpO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgc2VyaWFsaXplZC5sZW5ndGgpIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWFsaXplZFtpKytdIGFzIHN0cmluZztcbiAgICBjb25zdCBkZXBzOiBJbXBvcnRQcm9iYWJpbGl0eVtdID0gW107XG4gICAgbGV0IGlkeDogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGxldCBwcm9iYWJpbGl0eSA9IDE7XG4gICAgd2hpbGUgKCgoaWR4ID0gc2VyaWFsaXplZFtpXSksIHR5cGVvZiBpZHggPT09ICdudW1iZXInKSkge1xuICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgcHJvYmFiaWxpdHkgPSAtaWR4IC8gMTA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXBzLnB1c2goe1xuICAgICAgICAgICRuYW1lJDogc2VyaWFsaXplZFtpZHhdIGFzIHN0cmluZyxcbiAgICAgICAgICAkaW1wb3J0UHJvYmFiaWxpdHkkOiBwcm9iYWJpbGl0eSxcbiAgICAgICAgICAkZmFjdG9yJDogMSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIGdyYXBoLnNldChuYW1lLCBkZXBzKTtcbiAgfVxuICByZXR1cm4gZ3JhcGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QnVuZGxlID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICBsZXQgYnVuZGxlID0gYnVuZGxlcy5nZXQobmFtZSk7XG4gIGlmICghYnVuZGxlKSB7XG4gICAgbGV0IGRlcHM6IEltcG9ydFByb2JhYmlsaXR5W10gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGdyYXBoKSB7XG4gICAgICBkZXBzID0gZ3JhcGguZ2V0KG5hbWUpO1xuICAgICAgaWYgKCFkZXBzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghZGVwcy5sZW5ndGgpIHtcbiAgICAgICAgZGVwcyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVuZGxlID0gbWFrZUJ1bmRsZShuYW1lLCBkZXBzKTtcbiAgICBidW5kbGVzLnNldChuYW1lLCBidW5kbGUpO1xuICB9XG4gIHJldHVybiBidW5kbGU7XG59O1xuXG4vKiogVXNlZCBpbiBicm93c2VyICovXG5leHBvcnQgY29uc3QgbG9hZEJ1bmRsZUdyYXBoID0gKFxuICBiYXNlUGF0aDogc3RyaW5nLFxuICBzZXJpYWxpemVkUmVzcG9uc2U/OiBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaD4sXG4gIG9wdHM/OiB7XG4gICAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBwcmVsb2FkIGxpbmtzICovXG4gICAgUD86IG51bWJlcjtcbiAgfVxuKSA9PiB7XG4gIGlmIChvcHRzKSB7XG4gICAgaWYgKCdQJyBpbiBvcHRzKSB7XG4gICAgICBjb25maWcuJG1heElkbGVQcmVsb2FkcyQgPSBvcHRzWydQJ10gYXMgbnVtYmVyO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzQnJvd3NlciB8fCBiYXNlUGF0aCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2UgPSBiYXNlUGF0aDtcblxuICBpZiAoc2VyaWFsaXplZFJlc3BvbnNlKSB7XG4gICAgc2VyaWFsaXplZFJlc3BvbnNlXG4gICAgICAudGhlbigocikgPT4gci50ZXh0KCkpXG4gICAgICAudGhlbigodGV4dCkgPT4ge1xuICAgICAgICBncmFwaCA9IHBhcnNlQnVuZGxlR3JhcGgoSlNPTi5wYXJzZSh0ZXh0KSk7XG4gICAgICAgIGNvbnN0IHRvQWRqdXN0OiBbQnVuZGxlSW1wb3J0LCBudW1iZXJdW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGVwc10gb2YgZ3JhcGguZW50cmllcygpKSB7XG4gICAgICAgICAgY29uc3QgYnVuZGxlID0gZ2V0QnVuZGxlKG5hbWUpITtcbiAgICAgICAgICBidW5kbGUuJGRlcHMkID0gZGVwcztcbiAgICAgICAgICBpZiAoYnVuZGxlLiRpbnZlcnNlUHJvYmFiaWxpdHkkIDwgMSkge1xuICAgICAgICAgICAgdG9BZGp1c3QucHVzaChbYnVuZGxlLCBidW5kbGUuJGludmVyc2VQcm9iYWJpbGl0eSRdKTtcbiAgICAgICAgICAgIGJ1bmRsZS4kaW52ZXJzZVByb2JhYmlsaXR5JCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdG9BZGp1c3QubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dFRyaWdnZXJNYWNyb1Rhc2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBjb25zdCBjb250aW51ZUFkanVzdCA9IGNyZWF0ZU1hY3JvVGFzaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVhZGxpbmUgPSBwZXJmb3JtYW5jZS5ub3coKSArIHlpZWxkSW50ZXJ2YWw7XG4gICAgICAgICAgd2hpbGUgKGkgPCB0b0FkanVzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IFtidW5kbGUsIGludmVyc2VQcm9iYWJpbGl0eV0gPSB0b0FkanVzdFtpXTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGFkanVzdFByb2JhYmlsaXRpZXMoYnVuZGxlLCBpbnZlcnNlUHJvYmFiaWxpdHkpO1xuICAgICAgICAgICAgaWYgKGkgPCB0b0FkanVzdC5sZW5ndGggJiYgcGVyZm9ybWFuY2Uubm93KCkgPj0gZGVhZGxpbmUpIHtcbiAgICAgICAgICAgICAgY29udGludWVBZGp1c3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0VHJpZ2dlck1hY3JvVGFzaygpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWVBZGp1c3QoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goY29uc29sZS53YXJuKTtcbiAgfVxufTtcblxuLyoqIFVzZWQgZHVyaW5nIFNTUiAqL1xuZXhwb3J0IGNvbnN0IGluaXRQcmVsb2FkZXIgPSAoc2VyaWFsaXplZEJ1bmRsZUdyYXBoPzogKHN0cmluZyB8IG51bWJlcilbXSkgPT4ge1xuICBpZiAoYmFzZSAhPSBudWxsIHx8ICFzZXJpYWxpemVkQnVuZGxlR3JhcGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYmFzZSA9ICcnO1xuICBncmFwaCA9IHBhcnNlQnVuZGxlR3JhcGgoc2VyaWFsaXplZEJ1bmRsZUdyYXBoKTtcbn07XG4iXX0=","import { base, getBundle } from './bundle-graph';\nimport { config, doc, isBrowser, rel, yieldInterval } from './constants';\nimport { BundleImportState_Loaded, BundleImportState_None, BundleImportState_Preload, BundleImportState_Queued, } from './types';\nimport { createMacroTask } from '../shared/platform/next-tick';\nexport const bundles = new Map();\nexport let shouldResetFactor;\nlet queueDirty;\nlet preloadCount = 0;\nconst queue = [];\nexport const nextTriggerMacroTask = createMacroTask(trigger);\nexport const nextAdjustmentMacroTask = createMacroTask(processPendingAdjustments);\nlet isTriggerScheduled = false;\nlet isAdjustmentScheduled = false;\nlet isProcessingAdjustments = false;\nconst adjustmentStack = [];\nexport const sortQueue = () => {\n    if (queueDirty) {\n        queue.sort((a, b) => a.$inverseProbability$ - b.$inverseProbability$);\n        queueDirty = false;\n    }\n};\n/**\n * This is called when a bundle is queued, or finished loading.\n *\n * Because Chrome doesn't treat new modulepreloads as higher priority, we only make\n * maxSimultaneousPreloads links available at a time, so that when a new high priority bundle comes\n * in, it is soon preloaded.\n *\n * We make sure to first preload the high priority items.\n */\nfunction trigger() {\n    isTriggerScheduled = false;\n    if (!queue.length) {\n        return;\n    }\n    sortQueue();\n    const deadline = performance.now() + yieldInterval;\n    let shouldYield = false;\n    while (queue.length) {\n        const bundle = queue[0];\n        const inverseProbability = bundle.$inverseProbability$;\n        const probability = 1 - inverseProbability;\n        // We want to preload all the transitive static (1) and dynamic (0.99) dependencies, throttled by the user defined maxIdlePreloads.\n        if (probability >= 0.99 || preloadCount < config.$maxIdlePreloads$) {\n            queue.shift();\n            preloadOne(bundle);\n            if (performance.now() >= deadline) {\n                shouldYield = true;\n                break;\n            }\n        }\n        else {\n            break;\n        }\n    }\n    if (shouldYield && queue.length && !isTriggerScheduled) {\n        isTriggerScheduled = true;\n        nextTriggerMacroTask();\n    }\n}\nconst enqueueAdjustment = (bundle, inverseProbability, seen) => {\n    // Keep existing work on the stack hot and append new roots behind it.\n    adjustmentStack.unshift({\n        $bundle$: bundle,\n        $inverseProbability$: inverseProbability,\n        $seen$: seen,\n    });\n};\nconst processAdjustmentFrame = () => {\n    const frame = adjustmentStack[adjustmentStack.length - 1];\n    const bundle = frame.$bundle$;\n    if (frame.$deps$) {\n        const index = frame.$index$;\n        if (index >= frame.$deps$.length) {\n            adjustmentStack.pop();\n            return false;\n        }\n        const dep = frame.$deps$[index];\n        frame.$index$ = index + 1;\n        const depBundle = getBundle(dep.$name$);\n        if (depBundle.$inverseProbability$ === 0) {\n            return true;\n        }\n        const probability = 1 - bundle.$inverseProbability$;\n        let newInverseProbability;\n        if (probability === 1 || probability >= 0.99) {\n            // bundle is requested at max probability, so elevate all its transitive static and dynamic deps to 99% sure\n            newInverseProbability = Math.min(0.01, 1 - dep.$importProbability$);\n        }\n        else {\n            const newInverseImportProbability = 1 - dep.$importProbability$ * probability;\n            /** We need to undo the previous adjustment */\n            const prevAdjust = dep.$factor$;\n            const factor = newInverseImportProbability / prevAdjust;\n            // limit organic probability to 98%\n            newInverseProbability = Math.max(0.02, depBundle.$inverseProbability$ * factor);\n            dep.$factor$ = factor;\n        }\n        adjustmentStack.push({\n            $bundle$: depBundle,\n            $inverseProbability$: newInverseProbability,\n            $seen$: frame.$seen$,\n        });\n        return true;\n    }\n    if (frame.$seen$?.has(bundle)) {\n        adjustmentStack.pop();\n        return false;\n    }\n    const previousInverseProbability = bundle.$inverseProbability$;\n    bundle.$inverseProbability$ = frame.$inverseProbability$;\n    // Don't propagate tiny changes\n    if (previousInverseProbability - bundle.$inverseProbability$ < 0.01) {\n        adjustmentStack.pop();\n        return false;\n    }\n    if (\n    // don't queue until we have initialized the preloader\n    base != null &&\n        bundle.$state$ < BundleImportState_Preload) {\n        if (bundle.$state$ === BundleImportState_None) {\n            bundle.$state$ = BundleImportState_Queued;\n            queue.push(bundle);\n        }\n        // It's in the queue, so we need to re-sort it\n        queueDirty = true;\n    }\n    if (bundle.$deps$?.length) {\n        const seen = frame.$seen$ || new Set();\n        seen.add(bundle);\n        frame.$seen$ = seen;\n        frame.$deps$ = bundle.$deps$;\n        frame.$index$ = 0;\n        return false;\n    }\n    adjustmentStack.pop();\n    return false;\n};\nfunction processPendingAdjustments() {\n    if (isProcessingAdjustments || !adjustmentStack.length) {\n        return;\n    }\n    isAdjustmentScheduled = false;\n    isProcessingAdjustments = true;\n    const deadline = isBrowser ? performance.now() + yieldInterval : 0;\n    let processed = false;\n    while (adjustmentStack.length) {\n        processed = true;\n        const checkDeadline = processAdjustmentFrame();\n        if (isBrowser && checkDeadline && performance.now() >= deadline) {\n            if (!isAdjustmentScheduled) {\n                isAdjustmentScheduled = true;\n                nextAdjustmentMacroTask();\n            }\n            break;\n        }\n    }\n    isProcessingAdjustments = false;\n    if (processed && isBrowser) {\n        nextTriggerMacroTask();\n    }\n}\nconst preloadOne = (bundle) => {\n    if (bundle.$state$ >= BundleImportState_Preload) {\n        return;\n    }\n    preloadCount++;\n    const start = performance.now();\n    bundle.$waitedMs$ = start - bundle.$createdTs$;\n    bundle.$state$ = BundleImportState_Preload;\n    const link = doc.createElement('link');\n    // Only bundles with state none are js bundles\n    link.href = new URL(`${base}${bundle.$name$}`, doc.baseURI).toString();\n    link.rel = rel;\n    // Needed when rel is 'preload'\n    link.as = 'script';\n    // Handle completion of the preload\n    link.onload = link.onerror = () => {\n        preloadCount--;\n        const end = performance.now();\n        bundle.$loadedMs$ = end - start;\n        bundle.$state$ = BundleImportState_Loaded;\n        // Keep the <head> clean\n        link.remove();\n        // More bundles may be ready to preload\n        nextTriggerMacroTask();\n    };\n    doc.head.appendChild(link);\n};\n/**\n * Adjust the probability of a bundle based on the probability of its dependent bundles, and queue\n * it if it's likely enough to be preloaded.\n *\n * Note that if the probability is 100%, we treat the dynamic imports as 99% sure, and both will be\n * preloaded without limit.\n *\n * We also limit \"organic\" probability to 98% so they don't get unlimited preloads.\n */\nexport const adjustProbabilities = (bundle, newInverseProbability, seen) => {\n    enqueueAdjustment(bundle, newInverseProbability, seen);\n    if (isBrowser) {\n        nextAdjustmentMacroTask();\n    }\n    else {\n        processPendingAdjustments();\n    }\n};\nexport const handleBundle = (name, inverseProbability) => {\n    const bundle = getBundle(name);\n    if (bundle) {\n        enqueueAdjustment(bundle, inverseProbability);\n    }\n};\nexport const preload = (item, probability) => {\n    if (!item?.length) {\n        return;\n    }\n    const inverseProbability = probability ? 1 - probability : 0.4;\n    if (Array.isArray(item)) {\n        // We must process in reverse order to ensure first bundles are handled first\n        for (let i = item.length - 1; i >= 0; i--) {\n            const bundle = item[i];\n            handleBundle(bundle, inverseProbability);\n        }\n    }\n    else {\n        handleBundle(item, inverseProbability);\n    }\n    if (isBrowser) {\n        nextAdjustmentMacroTask();\n    }\n    else {\n        processPendingAdjustments();\n    }\n};\nif (isBrowser) {\n    // Get early hints from qwikloader\n    document.addEventListener('qsymbol', (ev) => {\n        const { symbol, href } = ev.detail;\n        // the qrl class doesn't emit href, we don't need to preload\n        if (href) {\n            const hash = symbol.slice(symbol.lastIndexOf('_') + 1);\n            preload(hash, 1);\n        }\n    });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcHJlbG9hZGVyL3F1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLHdCQUF3QixHQUN6QixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFrQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxJQUFJLGlCQUEwQixDQUFDO0FBQ3RDLElBQUksVUFBbUIsQ0FBQztBQUN4QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDbEYsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDbEMsSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFVcEMsTUFBTSxlQUFlLEdBQXNCLEVBQUUsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO0lBQzVCLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLENB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QztRQUN4RCw0REFBNEQ7UUFDNUQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiYXNlLCBnZXRCdW5kbGUgfSBmcm9tICcuL2J1bmRsZS1ncmFwaCc7XG5pbXBvcnQgeyBjb25maWcsIGRvYywgaXNCcm93c2VyLCByZWwsIHlpZWxkSW50ZXJ2YWwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEJ1bmRsZUltcG9ydCwgQnVuZGxlSW1wb3J0cywgSW1wb3J0UHJvYmFiaWxpdHkgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEJ1bmRsZUltcG9ydFN0YXRlX0xvYWRlZCxcbiAgQnVuZGxlSW1wb3J0U3RhdGVfTm9uZSxcbiAgQnVuZGxlSW1wb3J0U3RhdGVfUHJlbG9hZCxcbiAgQnVuZGxlSW1wb3J0U3RhdGVfUXVldWVkLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUXdpa1N5bWJvbEV2ZW50IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1ldmVudHMnO1xuaW1wb3J0IHsgY3JlYXRlTWFjcm9UYXNrIH0gZnJvbSAnLi4vc2hhcmVkL3BsYXRmb3JtL25leHQtdGljayc7XG5cbmV4cG9ydCBjb25zdCBidW5kbGVzOiBCdW5kbGVJbXBvcnRzID0gbmV3IE1hcCgpO1xuZXhwb3J0IGxldCBzaG91bGRSZXNldEZhY3RvcjogYm9vbGVhbjtcbmxldCBxdWV1ZURpcnR5OiBib29sZWFuO1xubGV0IHByZWxvYWRDb3VudCA9IDA7XG5jb25zdCBxdWV1ZTogQnVuZGxlSW1wb3J0W10gPSBbXTtcblxuZXhwb3J0IGNvbnN0IG5leHRUcmlnZ2VyTWFjcm9UYXNrID0gY3JlYXRlTWFjcm9UYXNrKHRyaWdnZXIpO1xuZXhwb3J0IGNvbnN0IG5leHRBZGp1c3RtZW50TWFjcm9UYXNrID0gY3JlYXRlTWFjcm9UYXNrKHByb2Nlc3NQZW5kaW5nQWRqdXN0bWVudHMpO1xubGV0IGlzVHJpZ2dlclNjaGVkdWxlZCA9IGZhbHNlO1xubGV0IGlzQWRqdXN0bWVudFNjaGVkdWxlZCA9IGZhbHNlO1xubGV0IGlzUHJvY2Vzc2luZ0FkanVzdG1lbnRzID0gZmFsc2U7XG5cbnR5cGUgQWRqdXN0bWVudEZyYW1lID0ge1xuICAkYnVuZGxlJDogQnVuZGxlSW1wb3J0O1xuICAkaW52ZXJzZVByb2JhYmlsaXR5JDogbnVtYmVyO1xuICAkc2VlbiQ/OiBTZXQ8QnVuZGxlSW1wb3J0PjtcbiAgJGRlcHMkPzogSW1wb3J0UHJvYmFiaWxpdHlbXTtcbiAgJGluZGV4JD86IG51bWJlcjtcbn07XG5cbmNvbnN0IGFkanVzdG1lbnRTdGFjazogQWRqdXN0bWVudEZyYW1lW10gPSBbXTtcblxuZXhwb3J0IGNvbnN0IHNvcnRRdWV1ZSA9ICgpID0+IHtcbiAgaWYgKHF1ZXVlRGlydHkpIHtcbiAgICBxdWV1ZS5zb3J0KChhLCBiKSA9PiBhLiRpbnZlcnNlUHJvYmFiaWxpdHkkIC0gYi4kaW52ZXJzZVByb2JhYmlsaXR5JCk7XG4gICAgcXVldWVEaXJ0eSA9IGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBidW5kbGUgaXMgcXVldWVkLCBvciBmaW5pc2hlZCBsb2FkaW5nLlxuICpcbiAqIEJlY2F1c2UgQ2hyb21lIGRvZXNuJ3QgdHJlYXQgbmV3IG1vZHVsZXByZWxvYWRzIGFzIGhpZ2hlciBwcmlvcml0eSwgd2Ugb25seSBtYWtlXG4gKiBtYXhTaW11bHRhbmVvdXNQcmVsb2FkcyBsaW5rcyBhdmFpbGFibGUgYXQgYSB0aW1lLCBzbyB0aGF0IHdoZW4gYSBuZXcgaGlnaCBwcmlvcml0eSBidW5kbGUgY29tZXNcbiAqIGluLCBpdCBpcyBzb29uIHByZWxvYWRlZC5cbiAqXG4gKiBXZSBtYWtlIHN1cmUgdG8gZmlyc3QgcHJlbG9hZCB0aGUgaGlnaCBwcmlvcml0eSBpdGVtcy5cbiAqL1xuZnVuY3Rpb24gdHJpZ2dlcigpIHtcbiAgaXNUcmlnZ2VyU2NoZWR1bGVkID0gZmFsc2U7XG4gIGlmICghcXVldWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNvcnRRdWV1ZSgpO1xuICBjb25zdCBkZWFkbGluZSA9IHBlcmZvcm1hbmNlLm5vdygpICsgeWllbGRJbnRlcnZhbDtcbiAgbGV0IHNob3VsZFlpZWxkID0gZmFsc2U7XG4gIHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcbiAgICBjb25zdCBidW5kbGUgPSBxdWV1ZVswXTtcbiAgICBjb25zdCBpbnZlcnNlUHJvYmFiaWxpdHkgPSBidW5kbGUuJGludmVyc2VQcm9iYWJpbGl0eSQ7XG4gICAgY29uc3QgcHJvYmFiaWxpdHkgPSAxIC0gaW52ZXJzZVByb2JhYmlsaXR5O1xuICAgIC8vIFdlIHdhbnQgdG8gcHJlbG9hZCBhbGwgdGhlIHRyYW5zaXRpdmUgc3RhdGljICgxKSBhbmQgZHluYW1pYyAoMC45OSkgZGVwZW5kZW5jaWVzLCB0aHJvdHRsZWQgYnkgdGhlIHVzZXIgZGVmaW5lZCBtYXhJZGxlUHJlbG9hZHMuXG4gICAgaWYgKHByb2JhYmlsaXR5ID49IDAuOTkgfHwgcHJlbG9hZENvdW50IDwgY29uZmlnLiRtYXhJZGxlUHJlbG9hZHMkKSB7XG4gICAgICBxdWV1ZS5zaGlmdCgpO1xuICAgICAgcHJlbG9hZE9uZShidW5kbGUpO1xuICAgICAgaWYgKHBlcmZvcm1hbmNlLm5vdygpID49IGRlYWRsaW5lKSB7XG4gICAgICAgIHNob3VsZFlpZWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoc2hvdWxkWWllbGQgJiYgcXVldWUubGVuZ3RoICYmICFpc1RyaWdnZXJTY2hlZHVsZWQpIHtcbiAgICBpc1RyaWdnZXJTY2hlZHVsZWQgPSB0cnVlO1xuICAgIG5leHRUcmlnZ2VyTWFjcm9UYXNrKCk7XG4gIH1cbn1cblxuY29uc3QgZW5xdWV1ZUFkanVzdG1lbnQgPSAoXG4gIGJ1bmRsZTogQnVuZGxlSW1wb3J0LFxuICBpbnZlcnNlUHJvYmFiaWxpdHk6IG51bWJlcixcbiAgc2Vlbj86IFNldDxCdW5kbGVJbXBvcnQ+XG4pID0+IHtcbiAgLy8gS2VlcCBleGlzdGluZyB3b3JrIG9uIHRoZSBzdGFjayBob3QgYW5kIGFwcGVuZCBuZXcgcm9vdHMgYmVoaW5kIGl0LlxuICBhZGp1c3RtZW50U3RhY2sudW5zaGlmdCh7XG4gICAgJGJ1bmRsZSQ6IGJ1bmRsZSxcbiAgICAkaW52ZXJzZVByb2JhYmlsaXR5JDogaW52ZXJzZVByb2JhYmlsaXR5LFxuICAgICRzZWVuJDogc2VlbixcbiAgfSk7XG59O1xuXG5jb25zdCBwcm9jZXNzQWRqdXN0bWVudEZyYW1lID0gKCkgPT4ge1xuICBjb25zdCBmcmFtZSA9IGFkanVzdG1lbnRTdGFja1thZGp1c3RtZW50U3RhY2subGVuZ3RoIC0gMV0hO1xuICBjb25zdCBidW5kbGUgPSBmcmFtZS4kYnVuZGxlJDtcblxuICBpZiAoZnJhbWUuJGRlcHMkKSB7XG4gICAgY29uc3QgaW5kZXggPSBmcmFtZS4kaW5kZXgkITtcbiAgICBpZiAoaW5kZXggPj0gZnJhbWUuJGRlcHMkLmxlbmd0aCkge1xuICAgICAgYWRqdXN0bWVudFN0YWNrLnBvcCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcCA9IGZyYW1lLiRkZXBzJFtpbmRleF07XG4gICAgZnJhbWUuJGluZGV4JCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGRlcEJ1bmRsZSA9IGdldEJ1bmRsZShkZXAuJG5hbWUkKSE7XG4gICAgaWYgKGRlcEJ1bmRsZS4kaW52ZXJzZVByb2JhYmlsaXR5JCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvYmFiaWxpdHkgPSAxIC0gYnVuZGxlLiRpbnZlcnNlUHJvYmFiaWxpdHkkO1xuICAgIGxldCBuZXdJbnZlcnNlUHJvYmFiaWxpdHk6IG51bWJlcjtcbiAgICBpZiAocHJvYmFiaWxpdHkgPT09IDEgfHwgcHJvYmFiaWxpdHkgPj0gMC45OSkge1xuICAgICAgLy8gYnVuZGxlIGlzIHJlcXVlc3RlZCBhdCBtYXggcHJvYmFiaWxpdHksIHNvIGVsZXZhdGUgYWxsIGl0cyB0cmFuc2l0aXZlIHN0YXRpYyBhbmQgZHluYW1pYyBkZXBzIHRvIDk5JSBzdXJlXG4gICAgICBuZXdJbnZlcnNlUHJvYmFiaWxpdHkgPSBNYXRoLm1pbigwLjAxLCAxIC0gZGVwLiRpbXBvcnRQcm9iYWJpbGl0eSQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdJbnZlcnNlSW1wb3J0UHJvYmFiaWxpdHkgPSAxIC0gZGVwLiRpbXBvcnRQcm9iYWJpbGl0eSQgKiBwcm9iYWJpbGl0eTtcbiAgICAgIC8qKiBXZSBuZWVkIHRvIHVuZG8gdGhlIHByZXZpb3VzIGFkanVzdG1lbnQgKi9cbiAgICAgIGNvbnN0IHByZXZBZGp1c3QgPSBkZXAuJGZhY3RvciQ7XG4gICAgICBjb25zdCBmYWN0b3IgPSBuZXdJbnZlcnNlSW1wb3J0UHJvYmFiaWxpdHkgLyBwcmV2QWRqdXN0O1xuICAgICAgLy8gbGltaXQgb3JnYW5pYyBwcm9iYWJpbGl0eSB0byA5OCVcbiAgICAgIG5ld0ludmVyc2VQcm9iYWJpbGl0eSA9IE1hdGgubWF4KDAuMDIsIGRlcEJ1bmRsZS4kaW52ZXJzZVByb2JhYmlsaXR5JCAqIGZhY3Rvcik7XG4gICAgICBkZXAuJGZhY3RvciQgPSBmYWN0b3I7XG4gICAgfVxuXG4gICAgYWRqdXN0bWVudFN0YWNrLnB1c2goe1xuICAgICAgJGJ1bmRsZSQ6IGRlcEJ1bmRsZSxcbiAgICAgICRpbnZlcnNlUHJvYmFiaWxpdHkkOiBuZXdJbnZlcnNlUHJvYmFiaWxpdHksXG4gICAgICAkc2VlbiQ6IGZyYW1lLiRzZWVuJCxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChmcmFtZS4kc2VlbiQ/LmhhcyhidW5kbGUpKSB7XG4gICAgYWRqdXN0bWVudFN0YWNrLnBvcCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzSW52ZXJzZVByb2JhYmlsaXR5ID0gYnVuZGxlLiRpbnZlcnNlUHJvYmFiaWxpdHkkO1xuICBidW5kbGUuJGludmVyc2VQcm9iYWJpbGl0eSQgPSBmcmFtZS4kaW52ZXJzZVByb2JhYmlsaXR5JDtcbiAgLy8gRG9uJ3QgcHJvcGFnYXRlIHRpbnkgY2hhbmdlc1xuICBpZiAocHJldmlvdXNJbnZlcnNlUHJvYmFiaWxpdHkgLSBidW5kbGUuJGludmVyc2VQcm9iYWJpbGl0eSQgPCAwLjAxKSB7XG4gICAgYWRqdXN0bWVudFN0YWNrLnBvcCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAvLyBkb24ndCBxdWV1ZSB1bnRpbCB3ZSBoYXZlIGluaXRpYWxpemVkIHRoZSBwcmVsb2FkZXJcbiAgICBiYXNlICE9IG51bGwgJiZcbiAgICBidW5kbGUuJHN0YXRlJCA8IEJ1bmRsZUltcG9ydFN0YXRlX1ByZWxvYWRcbiAgKSB7XG4gICAgaWYgKGJ1bmRsZS4kc3RhdGUkID09PSBCdW5kbGVJbXBvcnRTdGF0ZV9Ob25lKSB7XG4gICAgICBidW5kbGUuJHN0YXRlJCA9IEJ1bmRsZUltcG9ydFN0YXRlX1F1ZXVlZDtcbiAgICAgIHF1ZXVlLnB1c2goYnVuZGxlKTtcbiAgICB9XG5cbiAgICAvLyBJdCdzIGluIHRoZSBxdWV1ZSwgc28gd2UgbmVlZCB0byByZS1zb3J0IGl0XG4gICAgcXVldWVEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBpZiAoYnVuZGxlLiRkZXBzJD8ubGVuZ3RoKSB7XG4gICAgY29uc3Qgc2VlbiA9IGZyYW1lLiRzZWVuJCB8fCBuZXcgU2V0PEJ1bmRsZUltcG9ydD4oKTtcbiAgICBzZWVuLmFkZChidW5kbGUpO1xuICAgIGZyYW1lLiRzZWVuJCA9IHNlZW47XG4gICAgZnJhbWUuJGRlcHMkID0gYnVuZGxlLiRkZXBzJDtcbiAgICBmcmFtZS4kaW5kZXgkID0gMDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhZGp1c3RtZW50U3RhY2sucG9wKCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHByb2Nlc3NQZW5kaW5nQWRqdXN0bWVudHMoKSB7XG4gIGlmIChpc1Byb2Nlc3NpbmdBZGp1c3RtZW50cyB8fCAhYWRqdXN0bWVudFN0YWNrLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlzQWRqdXN0bWVudFNjaGVkdWxlZCA9IGZhbHNlO1xuICBpc1Byb2Nlc3NpbmdBZGp1c3RtZW50cyA9IHRydWU7XG4gIGNvbnN0IGRlYWRsaW5lID0gaXNCcm93c2VyID8gcGVyZm9ybWFuY2Uubm93KCkgKyB5aWVsZEludGVydmFsIDogMDtcbiAgbGV0IHByb2Nlc3NlZCA9IGZhbHNlO1xuXG4gIHdoaWxlIChhZGp1c3RtZW50U3RhY2subGVuZ3RoKSB7XG4gICAgcHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICBjb25zdCBjaGVja0RlYWRsaW5lID0gcHJvY2Vzc0FkanVzdG1lbnRGcmFtZSgpO1xuICAgIGlmIChpc0Jyb3dzZXIgJiYgY2hlY2tEZWFkbGluZSAmJiBwZXJmb3JtYW5jZS5ub3coKSA+PSBkZWFkbGluZSkge1xuICAgICAgaWYgKCFpc0FkanVzdG1lbnRTY2hlZHVsZWQpIHtcbiAgICAgICAgaXNBZGp1c3RtZW50U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgbmV4dEFkanVzdG1lbnRNYWNyb1Rhc2soKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlzUHJvY2Vzc2luZ0FkanVzdG1lbnRzID0gZmFsc2U7XG5cbiAgaWYgKHByb2Nlc3NlZCAmJiBpc0Jyb3dzZXIpIHtcbiAgICBuZXh0VHJpZ2dlck1hY3JvVGFzaygpO1xuICB9XG59XG5cbmNvbnN0IHByZWxvYWRPbmUgPSAoYnVuZGxlOiBCdW5kbGVJbXBvcnQpID0+IHtcbiAgaWYgKGJ1bmRsZS4kc3RhdGUkID49IEJ1bmRsZUltcG9ydFN0YXRlX1ByZWxvYWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJlbG9hZENvdW50Kys7XG5cbiAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgYnVuZGxlLiR3YWl0ZWRNcyQgPSBzdGFydCAtIGJ1bmRsZS4kY3JlYXRlZFRzJDtcbiAgYnVuZGxlLiRzdGF0ZSQgPSBCdW5kbGVJbXBvcnRTdGF0ZV9QcmVsb2FkO1xuXG4gIGNvbnN0IGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAvLyBPbmx5IGJ1bmRsZXMgd2l0aCBzdGF0ZSBub25lIGFyZSBqcyBidW5kbGVzXG4gIGxpbmsuaHJlZiA9IG5ldyBVUkwoYCR7YmFzZX0ke2J1bmRsZS4kbmFtZSR9YCwgZG9jLmJhc2VVUkkpLnRvU3RyaW5nKCk7XG4gIGxpbmsucmVsID0gcmVsO1xuICAvLyBOZWVkZWQgd2hlbiByZWwgaXMgJ3ByZWxvYWQnXG4gIGxpbmsuYXMgPSAnc2NyaXB0JztcbiAgLy8gSGFuZGxlIGNvbXBsZXRpb24gb2YgdGhlIHByZWxvYWRcbiAgbGluay5vbmxvYWQgPSBsaW5rLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgcHJlbG9hZENvdW50LS07XG4gICAgY29uc3QgZW5kID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgYnVuZGxlLiRsb2FkZWRNcyQgPSBlbmQgLSBzdGFydDtcbiAgICBidW5kbGUuJHN0YXRlJCA9IEJ1bmRsZUltcG9ydFN0YXRlX0xvYWRlZDtcbiAgICAvLyBLZWVwIHRoZSA8aGVhZD4gY2xlYW5cbiAgICBsaW5rLnJlbW92ZSgpO1xuICAgIC8vIE1vcmUgYnVuZGxlcyBtYXkgYmUgcmVhZHkgdG8gcHJlbG9hZFxuICAgIG5leHRUcmlnZ2VyTWFjcm9UYXNrKCk7XG4gIH07XG5cbiAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG59O1xuXG4vKipcbiAqIEFkanVzdCB0aGUgcHJvYmFiaWxpdHkgb2YgYSBidW5kbGUgYmFzZWQgb24gdGhlIHByb2JhYmlsaXR5IG9mIGl0cyBkZXBlbmRlbnQgYnVuZGxlcywgYW5kIHF1ZXVlXG4gKiBpdCBpZiBpdCdzIGxpa2VseSBlbm91Z2ggdG8gYmUgcHJlbG9hZGVkLlxuICpcbiAqIE5vdGUgdGhhdCBpZiB0aGUgcHJvYmFiaWxpdHkgaXMgMTAwJSwgd2UgdHJlYXQgdGhlIGR5bmFtaWMgaW1wb3J0cyBhcyA5OSUgc3VyZSwgYW5kIGJvdGggd2lsbCBiZVxuICogcHJlbG9hZGVkIHdpdGhvdXQgbGltaXQuXG4gKlxuICogV2UgYWxzbyBsaW1pdCBcIm9yZ2FuaWNcIiBwcm9iYWJpbGl0eSB0byA5OCUgc28gdGhleSBkb24ndCBnZXQgdW5saW1pdGVkIHByZWxvYWRzLlxuICovXG5leHBvcnQgY29uc3QgYWRqdXN0UHJvYmFiaWxpdGllcyA9IChcbiAgYnVuZGxlOiBCdW5kbGVJbXBvcnQsXG4gIG5ld0ludmVyc2VQcm9iYWJpbGl0eTogbnVtYmVyLFxuICBzZWVuPzogU2V0PEJ1bmRsZUltcG9ydD5cbikgPT4ge1xuICBlbnF1ZXVlQWRqdXN0bWVudChidW5kbGUsIG5ld0ludmVyc2VQcm9iYWJpbGl0eSwgc2Vlbik7XG4gIGlmIChpc0Jyb3dzZXIpIHtcbiAgICBuZXh0QWRqdXN0bWVudE1hY3JvVGFzaygpO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3NQZW5kaW5nQWRqdXN0bWVudHMoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUJ1bmRsZSA9IChuYW1lOiBzdHJpbmcsIGludmVyc2VQcm9iYWJpbGl0eTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGJ1bmRsZSA9IGdldEJ1bmRsZShuYW1lKTtcbiAgaWYgKGJ1bmRsZSkge1xuICAgIGVucXVldWVBZGp1c3RtZW50KGJ1bmRsZSwgaW52ZXJzZVByb2JhYmlsaXR5KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHByZWxvYWQgPSAoaXRlbTogc3RyaW5nIHwgc3RyaW5nW10sIHByb2JhYmlsaXR5PzogbnVtYmVyKSA9PiB7XG4gIGlmICghaXRlbT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGludmVyc2VQcm9iYWJpbGl0eSA9IHByb2JhYmlsaXR5ID8gMSAtIHByb2JhYmlsaXR5IDogMC40O1xuICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgIC8vIFdlIG11c3QgcHJvY2VzcyBpbiByZXZlcnNlIG9yZGVyIHRvIGVuc3VyZSBmaXJzdCBidW5kbGVzIGFyZSBoYW5kbGVkIGZpcnN0XG4gICAgZm9yIChsZXQgaSA9IGl0ZW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IGl0ZW1baV07XG4gICAgICBoYW5kbGVCdW5kbGUoYnVuZGxlLCBpbnZlcnNlUHJvYmFiaWxpdHkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVCdW5kbGUoaXRlbSwgaW52ZXJzZVByb2JhYmlsaXR5KTtcbiAgfVxuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgbmV4dEFkanVzdG1lbnRNYWNyb1Rhc2soKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzUGVuZGluZ0FkanVzdG1lbnRzKCk7XG4gIH1cbn07XG5cbmlmIChpc0Jyb3dzZXIpIHtcbiAgLy8gR2V0IGVhcmx5IGhpbnRzIGZyb20gcXdpa2xvYWRlclxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdxc3ltYm9sJywgKGV2KSA9PiB7XG4gICAgY29uc3QgeyBzeW1ib2wsIGhyZWYgfSA9IChldiBhcyBRd2lrU3ltYm9sRXZlbnQpLmRldGFpbDtcbiAgICAvLyB0aGUgcXJsIGNsYXNzIGRvZXNuJ3QgZW1pdCBocmVmLCB3ZSBkb24ndCBuZWVkIHRvIHByZWxvYWRcbiAgICBpZiAoaHJlZikge1xuICAgICAgY29uc3QgaGFzaCA9IHN5bWJvbC5zbGljZShzeW1ib2wubGFzdEluZGV4T2YoJ18nKSArIDEpO1xuICAgICAgcHJlbG9hZChoYXNoLCAxKTtcbiAgICB9XG4gIH0pO1xufVxuIl19","export const isObjectEmpty = (obj) => {\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            return false;\n        }\n    }\n    return true;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvb2JqZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUE0QixFQUFFLEVBQUU7SUFDNUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgaXNPYmplY3RFbXB0eSA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbiJdfQ==","/** @internal */\nexport const stringifyRootRefPath = (path) => {\n    let text = String(path[0]);\n    for (let i = 1; i < path.length; i++) {\n        text += ' ' + path[i];\n    }\n    return text;\n};\n/** @internal */\nexport const writeStringRootRef = (writer, id) => writer.write(String(id));\n/** @internal */\nexport const writeStringRootRefPath = (writer, path) => writer.write(stringifyRootRefPath(path));\n/** @internal */\nexport const createStringStreamWriter = (write) => ({\n    write,\n    writeRootRef(id) {\n        return writeStringRootRef(this, id);\n    },\n    writeRootRefPath(path) {\n        return writeStringRootRefPath(this, path);\n    },\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXdyaXRlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zc3Ivc3RyZWFtLXdyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFjLEVBQVUsRUFBRTtJQUM3RCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsTUFBbUMsRUFDbkMsRUFBVSxFQUN5QixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVqRSxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsTUFBbUMsRUFDbkMsSUFBYyxFQUNxQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRWpGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUN0QyxLQUE0QixFQUNILEVBQUUsQ0FBQyxDQUFDO0lBQzdCLEtBQUs7SUFDTCxZQUFZLENBQUMsRUFBRTtRQUNiLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ25CLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNTUkludGVybmFsU3RyZWFtV3JpdGVyLCBTdHJlYW1Xcml0ZXIgfSBmcm9tICcuL3Nzci10eXBlcyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnlSb290UmVmUGF0aCA9IChwYXRoOiBudW1iZXJbXSk6IHN0cmluZyA9PiB7XG4gIGxldCB0ZXh0ID0gU3RyaW5nKHBhdGhbMF0pO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICB0ZXh0ICs9ICcgJyArIHBhdGhbaV07XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgd3JpdGVTdHJpbmdSb290UmVmID0gKFxuICB3cml0ZXI6IFBpY2s8U3RyZWFtV3JpdGVyLCAnd3JpdGUnPixcbiAgaWQ6IG51bWJlclxuKTogUmV0dXJuVHlwZTxTdHJlYW1Xcml0ZXJbJ3dyaXRlJ10+ID0+IHdyaXRlci53cml0ZShTdHJpbmcoaWQpKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHdyaXRlU3RyaW5nUm9vdFJlZlBhdGggPSAoXG4gIHdyaXRlcjogUGljazxTdHJlYW1Xcml0ZXIsICd3cml0ZSc+LFxuICBwYXRoOiBudW1iZXJbXVxuKTogUmV0dXJuVHlwZTxTdHJlYW1Xcml0ZXJbJ3dyaXRlJ10+ID0+IHdyaXRlci53cml0ZShzdHJpbmdpZnlSb290UmVmUGF0aChwYXRoKSk7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTdHJpbmdTdHJlYW1Xcml0ZXIgPSAoXG4gIHdyaXRlOiBTdHJlYW1Xcml0ZXJbJ3dyaXRlJ11cbik6IFNTUkludGVybmFsU3RyZWFtV3JpdGVyID0+ICh7XG4gIHdyaXRlLFxuICB3cml0ZVJvb3RSZWYoaWQpIHtcbiAgICByZXR1cm4gd3JpdGVTdHJpbmdSb290UmVmKHRoaXMsIGlkKTtcbiAgfSxcbiAgd3JpdGVSb290UmVmUGF0aChwYXRoKSB7XG4gICAgcmV0dXJuIHdyaXRlU3RyaW5nUm9vdFJlZlBhdGgodGhpcywgcGF0aCk7XG4gIH0sXG59KTtcbiJdfQ==","// Pre-allocated common strings to reduce allocation overhead\nexport const LT = '<';\nexport const GT = '>';\nexport const CLOSE_TAG = '</';\nexport const ESCAPED_CLOSE_TAG = '<\\\\/';\nexport const SPACE = ' ';\nexport const ATTR_EQUALS_QUOTE = '=\"';\nexport const QUOTE = '\"';\nexport const EMPTY_ATTR = '=\"\"';\nexport const BRACKET_OPEN = '[';\nexport const BRACKET_CLOSE = ']';\nexport const PAREN_CLOSE = ')';\nexport const COMMA = ',';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWNvbnN0LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zc3ItY29uc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDL0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFByZS1hbGxvY2F0ZWQgY29tbW9uIHN0cmluZ3MgdG8gcmVkdWNlIGFsbG9jYXRpb24gb3ZlcmhlYWRcbmV4cG9ydCBjb25zdCBMVCA9ICc8JztcbmV4cG9ydCBjb25zdCBHVCA9ICc+JztcbmV4cG9ydCBjb25zdCBDTE9TRV9UQUcgPSAnPC8nO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRURfQ0xPU0VfVEFHID0gJzxcXFxcLyc7XG5leHBvcnQgY29uc3QgU1BBQ0UgPSAnICc7XG5leHBvcnQgY29uc3QgQVRUUl9FUVVBTFNfUVVPVEUgPSAnPVwiJztcbmV4cG9ydCBjb25zdCBRVU9URSA9ICdcIic7XG5leHBvcnQgY29uc3QgRU1QVFlfQVRUUiA9ICc9XCJcIic7XG5leHBvcnQgY29uc3QgQlJBQ0tFVF9PUEVOID0gJ1snO1xuZXhwb3J0IGNvbnN0IEJSQUNLRVRfQ0xPU0UgPSAnXSc7XG5leHBvcnQgY29uc3QgUEFSRU5fQ0xPU0UgPSAnKSc7XG5leHBvcnQgY29uc3QgQ09NTUEgPSAnLCc7XG4iXX0=","/**\n * QWIK_VERSION\n *\n * @public\n */\nexport const version = globalThis.QWIK_VERSION;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUksVUFBa0IsQ0FBQyxZQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBRV0lLX1ZFUlNJT05cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gKGdsb2JhbFRoaXMgYXMgYW55KS5RV0lLX1ZFUlNJT04gYXMgc3RyaW5nO1xuIl19","export const isNode = (value) => {\n    return value && typeof value.nodeType === 'number';\n};\nexport const isDocument = (value) => {\n    return value.nodeType === 9;\n};\nexport const isElement = (value) => {\n    return value.nodeType === 1;\n};\nexport const isText = (value) => {\n    return value.nodeType === 3;\n};\nexport const isComment = (value) => {\n    return value.nodeType === 8;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQWlCLEVBQUU7SUFDbEQsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFXLEVBQXFCLEVBQUU7SUFDM0QsT0FBUSxLQUFhLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQW9CLEVBQUU7SUFDM0QsT0FBUSxLQUFhLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFxQixFQUFpQixFQUFFO0lBQzdELE9BQVEsS0FBYSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBcUIsRUFBb0IsRUFBRTtJQUNuRSxPQUFRLEtBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc05vZGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIE5vZGUgPT4ge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLm5vZGVUeXBlID09PSAnbnVtYmVyJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RvY3VtZW50ID0gKHZhbHVlOiBOb2RlKTogdmFsdWUgaXMgRG9jdW1lbnQgPT4ge1xuICByZXR1cm4gKHZhbHVlIGFzIGFueSkubm9kZVR5cGUgPT09IDk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbGVtZW50ID0gKHZhbHVlOiBvYmplY3QpOiB2YWx1ZSBpcyBFbGVtZW50ID0+IHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm5vZGVUeXBlID09PSAxO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGV4dCA9ICh2YWx1ZTogTm9kZSB8IEVsZW1lbnQpOiB2YWx1ZSBpcyBUZXh0ID0+IHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm5vZGVUeXBlID09PSAzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tbWVudCA9ICh2YWx1ZTogTm9kZSB8IEVsZW1lbnQpOiB2YWx1ZSBpcyBDb21tZW50ID0+IHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm5vZGVUeXBlID09PSA4O1xufTtcbiJdfQ==","/** @internal */\nexport const getRootContainer = (container) => {\n    const rootContainer = container.$rootContainer$;\n    return rootContainer || container;\n};\n/** @internal */\nexport const isOutOfOrderSegmentContainer = (container) => {\n    return container.$isOutOfOrderSegment$;\n};\n/** @internal */\nexport const isSameContainer = (left, right) => {\n    return getRootContainer(left) === (right ? getRootContainer(right) : null);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBb0IsRUFBYSxFQUFFO0lBQ2xFLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFDaEQsT0FBTyxhQUFhLElBQUksU0FBUyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLFNBQW9CLEVBQVcsRUFBRTtJQUM1RSxPQUFPLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBZSxFQUFFLEtBQXVCLEVBQVcsRUFBRTtJQUNuRixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb250YWluZXIsIE9ialRvUHJveHlNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5uZXJDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge1xuICAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXA7XG4gIF9kaWRBZGRRd2lrTG9hZGVyPzogYm9vbGVhbjtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGdldFJvb3RDb250YWluZXIgPSAoY29udGFpbmVyOiBDb250YWluZXIpOiBDb250YWluZXIgPT4ge1xuICBjb25zdCByb290Q29udGFpbmVyID0gY29udGFpbmVyLiRyb290Q29udGFpbmVyJDtcbiAgcmV0dXJuIHJvb3RDb250YWluZXIgfHwgY29udGFpbmVyO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGlzT3V0T2ZPcmRlclNlZ21lbnRDb250YWluZXIgPSAoY29udGFpbmVyOiBDb250YWluZXIpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGNvbnRhaW5lci4kaXNPdXRPZk9yZGVyU2VnbWVudCQ7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgaXNTYW1lQ29udGFpbmVyID0gKGxlZnQ6IENvbnRhaW5lciwgcmlnaHQ6IENvbnRhaW5lciB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGdldFJvb3RDb250YWluZXIobGVmdCkgPT09IChyaWdodCA/IGdldFJvb3RDb250YWluZXIocmlnaHQpIDogbnVsbCk7XG59O1xuIl19","/** @internal */\nexport const _EFFECT_BACK_REF = Symbol('backRef');\n/** Class for back reference to the EffectSubscription */\nexport class BackRef {\n    [_EFFECT_BACK_REF] = undefined;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3JlZi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL2JhY2tyZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVsRCx5REFBeUQ7QUFDekQsTUFBTSxPQUFnQixPQUFPO0lBQzNCLENBQUMsZ0JBQWdCLENBQUMsR0FBOEIsU0FBUyxDQUFDO0NBQzNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9FRkZFQ1RfQkFDS19SRUYgPSBTeW1ib2woJ2JhY2tSZWYnKTtcblxuLyoqIENsYXNzIGZvciBiYWNrIHJlZmVyZW5jZSB0byB0aGUgRWZmZWN0U3Vic2NyaXB0aW9uICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFja1JlZiB7XG4gIFtfRUZGRUNUX0JBQ0tfUkVGXTogTWFwPGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbn1cbiJdfQ==","import { isDev } from '@qwik.dev/core/build';\nimport { HTML_NS, MATH_NS, Q_PROPS_SEPARATOR, SVG_NS, XLINK_NS, XML_NS, } from '../shared/utils/markers';\nimport { getDomContainerFromQContainerElement } from './dom-container';\nimport { ensureElementVNode, fastNamespaceURI, shouldIgnoreChildren, vnode_getDomParentVNode, vnode_getElementName, vnode_getFirstChild, vnode_isElementVNode, } from './vnode-utils';\nexport const isForeignObjectElement = (elementName) => {\n    return isDev ? elementName.toLowerCase() === 'foreignobject' : elementName === 'foreignObject';\n};\nexport const isSvgElement = (elementName) => elementName === 'svg' || isForeignObjectElement(elementName);\nexport const isMathElement = (elementName) => elementName === 'math';\nexport const vnode_isDefaultNamespace = (vnode) => {\n    const flags = vnode.flags;\n    return (flags & 1536 /* VNodeFlags.NAMESPACE_MASK */) === 0;\n};\nexport const vnode_getElementNamespaceFlags = (element) => {\n    const namespace = fastNamespaceURI(element);\n    switch (namespace) {\n        case SVG_NS:\n            return 512 /* VNodeFlags.NS_svg */;\n        case MATH_NS:\n            return 1024 /* VNodeFlags.NS_math */;\n        default:\n            return 0 /* VNodeFlags.NS_html */;\n    }\n};\n/** This function clones an element with a different namespace, including the children */\nfunction cloneDomTreeWithNamespace(element, elementName, namespace, deep = false) {\n    const newElement = element.ownerDocument.createElementNS(namespace, elementName);\n    // Copy all attributes\n    for (let i = 0; i < element.attributes.length; i++) {\n        const attr = element.attributes[i];\n        if (attr.name !== Q_PROPS_SEPARATOR) {\n            newElement.setAttribute(attr.name, attr.value);\n        }\n    }\n    if (deep) {\n        // Recursively clone all child nodes\n        for (let i = 0; i < element.childNodes.length; i++) {\n            const child = element.childNodes[i];\n            const nodeType = child.nodeType;\n            if (nodeType === 3 /* Node.TEXT_NODE */) {\n                newElement.appendChild(child.cloneNode());\n            }\n            else if (nodeType === 1 /* Node.ELEMENT_NODE */) {\n                newElement.appendChild(cloneDomTreeWithNamespace(child, child.localName, namespace, deep));\n            }\n        }\n    }\n    return newElement;\n}\n/**\n * This function clones an ElementVNode with a different namespace, including the children. This\n * traverse the tree using depth-first search and clones the elements using\n * `cloneElementWithNamespace`.\n */\nexport function vnode_cloneElementWithNamespace(elementVNode, parentVNode, namespace, namespaceFlag) {\n    ensureElementVNode(elementVNode);\n    let vCursor = elementVNode;\n    let vParent = null;\n    let rootElement = null;\n    let parentElement = null;\n    while (vCursor) {\n        let childElement = null;\n        let newChildElement = null;\n        if (vnode_isElementVNode(vCursor)) {\n            // Clone the element\n            childElement = vCursor.node;\n            const childElementTag = vnode_getElementName(vCursor);\n            // We need to check if the parent is a foreignObject element\n            // and get a new namespace data.\n            const vCursorParent = vCursor.parent;\n            // For the first vNode parentNode is not parent from vNode tree, but parent from DOM tree\n            // this is because vNode is not moved yet.\n            // rootElement is null only for the first vNode\n            const vCursorDomParent = rootElement == null\n                ? parentVNode\n                : vCursorParent && vnode_getDomParentVNode(vCursorParent, true);\n            if (vCursorDomParent) {\n                const namespaceData = getNewElementNamespaceData(vCursorDomParent, vnode_getElementName(vCursor));\n                namespace = namespaceData.elementNamespace;\n                namespaceFlag = namespaceData.elementNamespaceFlag;\n            }\n            const vFirstChild = vnode_getFirstChild(vCursor);\n            newChildElement = cloneDomTreeWithNamespace(childElement, childElementTag, namespace, \n            // deep if there is no vnode children, children are probably inserted via innerHTML\n            !vFirstChild);\n            childElement.remove();\n            if (rootElement == null) {\n                rootElement = newChildElement;\n            }\n            if (parentElement) {\n                parentElement.appendChild(newChildElement);\n            }\n            // Descend into children\n            // We need first get the first child, if any\n            // Then we can overwrite the cursor with newly created element.\n            // This is because we need to materialize the children before we assign new element\n            vCursor.node = newChildElement;\n            // Set correct namespace flag\n            vCursor.flags &= -1537 /* VNodeFlags.NEGATED_NAMESPACE_MASK */;\n            vCursor.flags |= namespaceFlag;\n            if (vFirstChild) {\n                vCursor = vFirstChild;\n                parentElement = newChildElement;\n                continue;\n            }\n            else if (shouldIgnoreChildren(childElement)) {\n                // If we should ignore children of the element this means that the element is a container\n                // We need to get the first child of the container\n                const container = getDomContainerFromQContainerElement(childElement);\n                if (container) {\n                    const innerContainerFirstVNode = vnode_getFirstChild(container.rootVNode);\n                    if (innerContainerFirstVNode) {\n                        vCursor = innerContainerFirstVNode;\n                        parentElement = newChildElement;\n                        continue;\n                    }\n                }\n            }\n        }\n        if (vCursor === elementVNode) {\n            // we are where we started, this means that vNode has no children, so we are done.\n            return rootElement;\n        }\n        // Out of children, go to next sibling\n        const vNextSibling = vCursor.nextSibling;\n        if (vNextSibling) {\n            vCursor = vNextSibling;\n            continue;\n        }\n        // Out of siblings, go to parent\n        vParent = vCursor.parent;\n        while (vParent) {\n            if (vParent === elementVNode) {\n                // We are back where we started, we are done.\n                return rootElement;\n            }\n            const vNextParentSibling = vParent.nextSibling;\n            if (vNextParentSibling) {\n                vCursor = vNextParentSibling;\n                return rootElement;\n            }\n            vParent = vParent.parent;\n        }\n        if (vParent == null) {\n            // We are done.\n            return rootElement;\n        }\n    }\n    return rootElement;\n}\n// reuse the same object to avoid creating new objects on every call\nconst NEW_NAMESPACE_DATA = {\n    elementNamespace: HTML_NS,\n    elementNamespaceFlag: 0 /* VNodeFlags.NS_html */,\n};\nexport function getNewElementNamespaceData(domParentVNode, tagOrVNode) {\n    const parentIsDefaultNamespace = domParentVNode\n        ? !!vnode_getElementName(domParentVNode) && vnode_isDefaultNamespace(domParentVNode)\n        : true;\n    const parentIsForeignObject = !parentIsDefaultNamespace\n        ? isForeignObjectElement(vnode_getElementName(domParentVNode))\n        : false;\n    let elementNamespace = HTML_NS;\n    let elementNamespaceFlag = 0 /* VNodeFlags.NS_html */;\n    const isElementVNodeOrString = typeof tagOrVNode === 'string' || vnode_isElementVNode(tagOrVNode);\n    if (isElementVNodeOrString && isSvg(tagOrVNode)) {\n        elementNamespace = SVG_NS;\n        elementNamespaceFlag = 512 /* VNodeFlags.NS_svg */;\n    }\n    else if (isElementVNodeOrString && isMath(tagOrVNode)) {\n        elementNamespace = MATH_NS;\n        elementNamespaceFlag = 1024 /* VNodeFlags.NS_math */;\n    }\n    else if (domParentVNode && !parentIsForeignObject && !parentIsDefaultNamespace) {\n        const isParentSvg = (domParentVNode.flags & 512 /* VNodeFlags.NS_svg */) !== 0;\n        const isParentMath = (domParentVNode.flags & 1024 /* VNodeFlags.NS_math */) !== 0;\n        elementNamespace = isParentSvg ? SVG_NS : isParentMath ? MATH_NS : HTML_NS;\n        elementNamespaceFlag = domParentVNode.flags & 1536 /* VNodeFlags.NAMESPACE_MASK */;\n    }\n    NEW_NAMESPACE_DATA.elementNamespace = elementNamespace;\n    NEW_NAMESPACE_DATA.elementNamespaceFlag = elementNamespaceFlag;\n    return NEW_NAMESPACE_DATA;\n}\nfunction isSvg(tagOrVNode) {\n    if (typeof tagOrVNode === 'string') {\n        return isSvgElement(tagOrVNode);\n    }\n    if (vnode_isElementVNode(tagOrVNode)) {\n        return (isSvgElement(vnode_getElementName(tagOrVNode)) || (tagOrVNode.flags & 512 /* VNodeFlags.NS_svg */) !== 0);\n    }\n    return false;\n}\nfunction isMath(tagOrVNode) {\n    if (typeof tagOrVNode === 'string') {\n        return isMathElement(tagOrVNode);\n    }\n    if (vnode_isElementVNode(tagOrVNode)) {\n        return (isMathElement(vnode_getElementName(tagOrVNode)) ||\n            (tagOrVNode.flags & 1024 /* VNodeFlags.NS_math */) !== 0);\n    }\n    return false;\n}\nexport function getAttributeNamespace(attributeName) {\n    switch (attributeName) {\n        case 'xlink:href':\n        case 'xlink:actuate':\n        case 'xlink:arcrole':\n        case 'xlink:role':\n        case 'xlink:show':\n        case 'xlink:title':\n        case 'xlink:type':\n            return XLINK_NS;\n        case 'xml:base':\n        case 'xml:lang':\n        case 'xml:space':\n            return XML_NS;\n        default:\n            return null;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtbmFtZXNwYWNlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC92bm9kZS1uYW1lc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZFLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSxlQUFlLENBQUM7QUFJdkIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxXQUFtQixFQUFFLEVBQUU7SUFDNUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUM7QUFDakcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQ2xELFdBQVcsS0FBSyxLQUFLLElBQUksc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQW1CLEVBQVcsRUFBRTtJQUN2RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzFCLE9B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LENBQUM7UUFDbkMsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksb0JBQW9CLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQ0wsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9DLENBQUMsVUFBVSxDQUFDLEtBQUssZ0NBQXFCLENBQUMsS0FBSyxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBT0QsTUFBTSxVQUFVLHFCQUFxQixDQUFDLGFBQXFCO0lBQ3pELFFBQVEsYUFBYSxFQUFFLENBQUM7UUFDdEIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxlQUFlLENBQUM7UUFDckIsS0FBSyxlQUFlLENBQUM7UUFDckIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxhQUFhLENBQUM7UUFDbkIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxRQUFRLENBQUM7UUFDbEIsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxNQUFNLENBQUM7UUFDaEI7WUFDRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHtcbiAgSFRNTF9OUyxcbiAgTUFUSF9OUyxcbiAgUV9QUk9QU19TRVBBUkFUT1IsXG4gIFNWR19OUyxcbiAgWExJTktfTlMsXG4gIFhNTF9OUyxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgZ2V0RG9tQ29udGFpbmVyRnJvbVFDb250YWluZXJFbGVtZW50IH0gZnJvbSAnLi9kb20tY29udGFpbmVyJztcbmltcG9ydCB7IFZOb2RlRmxhZ3MgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIGVuc3VyZUVsZW1lbnRWTm9kZSxcbiAgZmFzdE5hbWVzcGFjZVVSSSxcbiAgc2hvdWxkSWdub3JlQ2hpbGRyZW4sXG4gIHZub2RlX2dldERvbVBhcmVudFZOb2RlLFxuICB2bm9kZV9nZXRFbGVtZW50TmFtZSxcbiAgdm5vZGVfZ2V0Rmlyc3RDaGlsZCxcbiAgdm5vZGVfaXNFbGVtZW50Vk5vZGUsXG59IGZyb20gJy4vdm5vZGUtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50Vk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvZWxlbWVudC12bm9kZSc7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlJztcblxuZXhwb3J0IGNvbnN0IGlzRm9yZWlnbk9iamVjdEVsZW1lbnQgPSAoZWxlbWVudE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gaXNEZXYgPyBlbGVtZW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZm9yZWlnbm9iamVjdCcgOiBlbGVtZW50TmFtZSA9PT0gJ2ZvcmVpZ25PYmplY3QnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU3ZnRWxlbWVudCA9IChlbGVtZW50TmFtZTogc3RyaW5nKSA9PlxuICBlbGVtZW50TmFtZSA9PT0gJ3N2ZycgfHwgaXNGb3JlaWduT2JqZWN0RWxlbWVudChlbGVtZW50TmFtZSk7XG5cbmV4cG9ydCBjb25zdCBpc01hdGhFbGVtZW50ID0gKGVsZW1lbnROYW1lOiBzdHJpbmcpID0+IGVsZW1lbnROYW1lID09PSAnbWF0aCc7XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9pc0RlZmF1bHROYW1lc3BhY2UgPSAodm5vZGU6IEVsZW1lbnRWTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBmbGFncyA9IHZub2RlLmZsYWdzO1xuICByZXR1cm4gKGZsYWdzICYgVk5vZGVGbGFncy5OQU1FU1BBQ0VfTUFTSykgPT09IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0RWxlbWVudE5hbWVzcGFjZUZsYWdzID0gKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgY29uc3QgbmFtZXNwYWNlID0gZmFzdE5hbWVzcGFjZVVSSShlbGVtZW50KTtcbiAgc3dpdGNoIChuYW1lc3BhY2UpIHtcbiAgICBjYXNlIFNWR19OUzpcbiAgICAgIHJldHVybiBWTm9kZUZsYWdzLk5TX3N2ZztcbiAgICBjYXNlIE1BVEhfTlM6XG4gICAgICByZXR1cm4gVk5vZGVGbGFncy5OU19tYXRoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gVk5vZGVGbGFncy5OU19odG1sO1xuICB9XG59O1xuXG4vKiogVGhpcyBmdW5jdGlvbiBjbG9uZXMgYW4gZWxlbWVudCB3aXRoIGEgZGlmZmVyZW50IG5hbWVzcGFjZSwgaW5jbHVkaW5nIHRoZSBjaGlsZHJlbiAqL1xuZnVuY3Rpb24gY2xvbmVEb21UcmVlV2l0aE5hbWVzcGFjZShcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgZWxlbWVudE5hbWU6IHN0cmluZyxcbiAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gIGRlZXAgPSBmYWxzZVxuKTogRWxlbWVudCB7XG4gIGNvbnN0IG5ld0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSwgZWxlbWVudE5hbWUpO1xuXG4gIC8vIENvcHkgYWxsIGF0dHJpYnV0ZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhdHRyID0gZWxlbWVudC5hdHRyaWJ1dGVzW2ldO1xuICAgIGlmIChhdHRyLm5hbWUgIT09IFFfUFJPUFNfU0VQQVJBVE9SKSB7XG4gICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWVwKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY2xvbmUgYWxsIGNoaWxkIG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgICAgY29uc3Qgbm9kZVR5cGUgPSBjaGlsZC5ub2RlVHlwZTtcbiAgICAgIGlmIChub2RlVHlwZSA9PT0gMyAvKiBOb2RlLlRFWFRfTk9ERSAqLykge1xuICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZSgpKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09IDEgLyogTm9kZS5FTEVNRU5UX05PREUgKi8pIHtcbiAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChcbiAgICAgICAgICBjbG9uZURvbVRyZWVXaXRoTmFtZXNwYWNlKGNoaWxkIGFzIEVsZW1lbnQsIChjaGlsZCBhcyBFbGVtZW50KS5sb2NhbE5hbWUsIG5hbWVzcGFjZSwgZGVlcClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNsb25lcyBhbiBFbGVtZW50Vk5vZGUgd2l0aCBhIGRpZmZlcmVudCBuYW1lc3BhY2UsIGluY2x1ZGluZyB0aGUgY2hpbGRyZW4uIFRoaXNcbiAqIHRyYXZlcnNlIHRoZSB0cmVlIHVzaW5nIGRlcHRoLWZpcnN0IHNlYXJjaCBhbmQgY2xvbmVzIHRoZSBlbGVtZW50cyB1c2luZ1xuICogYGNsb25lRWxlbWVudFdpdGhOYW1lc3BhY2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfY2xvbmVFbGVtZW50V2l0aE5hbWVzcGFjZShcbiAgZWxlbWVudFZOb2RlOiBFbGVtZW50Vk5vZGUsXG4gIHBhcmVudFZOb2RlOiBFbGVtZW50Vk5vZGUsXG4gIG5hbWVzcGFjZTogc3RyaW5nLFxuICBuYW1lc3BhY2VGbGFnOiBWTm9kZUZsYWdzXG4pIHtcbiAgZW5zdXJlRWxlbWVudFZOb2RlKGVsZW1lbnRWTm9kZSk7XG4gIGxldCB2Q3Vyc29yOiBWTm9kZSB8IG51bGwgPSBlbGVtZW50Vk5vZGU7XG4gIGxldCB2UGFyZW50OiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICBsZXQgcm9vdEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgbGV0IHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgd2hpbGUgKHZDdXJzb3IpIHtcbiAgICBsZXQgY2hpbGRFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IG5ld0NoaWxkRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2Q3Vyc29yKSkge1xuICAgICAgLy8gQ2xvbmUgdGhlIGVsZW1lbnRcbiAgICAgIGNoaWxkRWxlbWVudCA9IHZDdXJzb3Iubm9kZTtcbiAgICAgIGNvbnN0IGNoaWxkRWxlbWVudFRhZyA9IHZub2RlX2dldEVsZW1lbnROYW1lKHZDdXJzb3IpO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXJlbnQgaXMgYSBmb3JlaWduT2JqZWN0IGVsZW1lbnRcbiAgICAgIC8vIGFuZCBnZXQgYSBuZXcgbmFtZXNwYWNlIGRhdGEuXG4gICAgICBjb25zdCB2Q3Vyc29yUGFyZW50ID0gdkN1cnNvci5wYXJlbnQ7XG4gICAgICAvLyBGb3IgdGhlIGZpcnN0IHZOb2RlIHBhcmVudE5vZGUgaXMgbm90IHBhcmVudCBmcm9tIHZOb2RlIHRyZWUsIGJ1dCBwYXJlbnQgZnJvbSBET00gdHJlZVxuICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlIHZOb2RlIGlzIG5vdCBtb3ZlZCB5ZXQuXG4gICAgICAvLyByb290RWxlbWVudCBpcyBudWxsIG9ubHkgZm9yIHRoZSBmaXJzdCB2Tm9kZVxuICAgICAgY29uc3QgdkN1cnNvckRvbVBhcmVudCA9XG4gICAgICAgIHJvb3RFbGVtZW50ID09IG51bGxcbiAgICAgICAgICA/IHBhcmVudFZOb2RlXG4gICAgICAgICAgOiB2Q3Vyc29yUGFyZW50ICYmIHZub2RlX2dldERvbVBhcmVudFZOb2RlKHZDdXJzb3JQYXJlbnQsIHRydWUpO1xuICAgICAgaWYgKHZDdXJzb3JEb21QYXJlbnQpIHtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlRGF0YSA9IGdldE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhKFxuICAgICAgICAgIHZDdXJzb3JEb21QYXJlbnQsXG4gICAgICAgICAgdm5vZGVfZ2V0RWxlbWVudE5hbWUodkN1cnNvcilcbiAgICAgICAgKTtcbiAgICAgICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlRGF0YS5lbGVtZW50TmFtZXNwYWNlO1xuICAgICAgICBuYW1lc3BhY2VGbGFnID0gbmFtZXNwYWNlRGF0YS5lbGVtZW50TmFtZXNwYWNlRmxhZztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZGaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Q3Vyc29yKTtcblxuICAgICAgbmV3Q2hpbGRFbGVtZW50ID0gY2xvbmVEb21UcmVlV2l0aE5hbWVzcGFjZShcbiAgICAgICAgY2hpbGRFbGVtZW50LFxuICAgICAgICBjaGlsZEVsZW1lbnRUYWcsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgLy8gZGVlcCBpZiB0aGVyZSBpcyBubyB2bm9kZSBjaGlsZHJlbiwgY2hpbGRyZW4gYXJlIHByb2JhYmx5IGluc2VydGVkIHZpYSBpbm5lckhUTUxcbiAgICAgICAgIXZGaXJzdENoaWxkXG4gICAgICApO1xuXG4gICAgICBjaGlsZEVsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICAgIGlmIChyb290RWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFbGVtZW50ID0gbmV3Q2hpbGRFbGVtZW50O1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChuZXdDaGlsZEVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXNjZW5kIGludG8gY2hpbGRyZW5cbiAgICAgIC8vIFdlIG5lZWQgZmlyc3QgZ2V0IHRoZSBmaXJzdCBjaGlsZCwgaWYgYW55XG5cbiAgICAgIC8vIFRoZW4gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgY3Vyc29yIHdpdGggbmV3bHkgY3JlYXRlZCBlbGVtZW50LlxuICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgdGhlIGNoaWxkcmVuIGJlZm9yZSB3ZSBhc3NpZ24gbmV3IGVsZW1lbnRcbiAgICAgIHZDdXJzb3Iubm9kZSA9IG5ld0NoaWxkRWxlbWVudDtcbiAgICAgIC8vIFNldCBjb3JyZWN0IG5hbWVzcGFjZSBmbGFnXG4gICAgICB2Q3Vyc29yLmZsYWdzICY9IFZOb2RlRmxhZ3MuTkVHQVRFRF9OQU1FU1BBQ0VfTUFTSztcbiAgICAgIHZDdXJzb3IuZmxhZ3MgfD0gbmFtZXNwYWNlRmxhZztcbiAgICAgIGlmICh2Rmlyc3RDaGlsZCkge1xuICAgICAgICB2Q3Vyc29yID0gdkZpcnN0Q2hpbGQ7XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPSBuZXdDaGlsZEVsZW1lbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChzaG91bGRJZ25vcmVDaGlsZHJlbihjaGlsZEVsZW1lbnQpKSB7XG4gICAgICAgIC8vIElmIHdlIHNob3VsZCBpZ25vcmUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnQgdGhpcyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGlzIGEgY29udGFpbmVyXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZ2V0IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lckZyb21RQ29udGFpbmVyRWxlbWVudChjaGlsZEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICBjb25zdCBpbm5lckNvbnRhaW5lckZpcnN0Vk5vZGUgPSB2bm9kZV9nZXRGaXJzdENoaWxkKGNvbnRhaW5lci5yb290Vk5vZGUpO1xuICAgICAgICAgIGlmIChpbm5lckNvbnRhaW5lckZpcnN0Vk5vZGUpIHtcbiAgICAgICAgICAgIHZDdXJzb3IgPSBpbm5lckNvbnRhaW5lckZpcnN0Vk5vZGU7XG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50ID0gbmV3Q2hpbGRFbGVtZW50O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2Q3Vyc29yID09PSBlbGVtZW50Vk5vZGUpIHtcbiAgICAgIC8vIHdlIGFyZSB3aGVyZSB3ZSBzdGFydGVkLCB0aGlzIG1lYW5zIHRoYXQgdk5vZGUgaGFzIG5vIGNoaWxkcmVuLCBzbyB3ZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gICAgLy8gT3V0IG9mIGNoaWxkcmVuLCBnbyB0byBuZXh0IHNpYmxpbmdcbiAgICBjb25zdCB2TmV4dFNpYmxpbmcgPSB2Q3Vyc29yLm5leHRTaWJsaW5nIGFzIFZOb2RlIHwgbnVsbDtcbiAgICBpZiAodk5leHRTaWJsaW5nKSB7XG4gICAgICB2Q3Vyc29yID0gdk5leHRTaWJsaW5nO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIE91dCBvZiBzaWJsaW5ncywgZ28gdG8gcGFyZW50XG4gICAgdlBhcmVudCA9IHZDdXJzb3IucGFyZW50O1xuICAgIHdoaWxlICh2UGFyZW50KSB7XG4gICAgICBpZiAodlBhcmVudCA9PT0gZWxlbWVudFZOb2RlKSB7XG4gICAgICAgIC8vIFdlIGFyZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIHdlIGFyZSBkb25lLlxuICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCB2TmV4dFBhcmVudFNpYmxpbmcgPSB2UGFyZW50Lm5leHRTaWJsaW5nIGFzIFZOb2RlIHwgbnVsbDtcbiAgICAgIGlmICh2TmV4dFBhcmVudFNpYmxpbmcpIHtcbiAgICAgICAgdkN1cnNvciA9IHZOZXh0UGFyZW50U2libGluZztcbiAgICAgICAgcmV0dXJuIHJvb3RFbGVtZW50O1xuICAgICAgfVxuICAgICAgdlBhcmVudCA9IHZQYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICBpZiAodlBhcmVudCA9PSBudWxsKSB7XG4gICAgICAvLyBXZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG4vLyByZXVzZSB0aGUgc2FtZSBvYmplY3QgdG8gYXZvaWQgY3JlYXRpbmcgbmV3IG9iamVjdHMgb24gZXZlcnkgY2FsbFxuY29uc3QgTkVXX05BTUVTUEFDRV9EQVRBOiBOZXdFbGVtZW50TmFtZXNwYWNlRGF0YSA9IHtcbiAgZWxlbWVudE5hbWVzcGFjZTogSFRNTF9OUyxcbiAgZWxlbWVudE5hbWVzcGFjZUZsYWc6IFZOb2RlRmxhZ3MuTlNfaHRtbCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdFbGVtZW50TmFtZXNwYWNlRGF0YShcbiAgZG9tUGFyZW50Vk5vZGU6IEVsZW1lbnRWTm9kZSB8IG51bGwsXG4gIGVsZW1lbnROYW1lOiBzdHJpbmdcbik6IE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhKFxuICBkb21QYXJlbnRWTm9kZTogRWxlbWVudFZOb2RlIHwgbnVsbCxcbiAgdm5vZGU6IFZOb2RlXG4pOiBOZXdFbGVtZW50TmFtZXNwYWNlRGF0YTtcbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdFbGVtZW50TmFtZXNwYWNlRGF0YShcbiAgZG9tUGFyZW50Vk5vZGU6IEVsZW1lbnRWTm9kZSB8IG51bGwsXG4gIHRhZ09yVk5vZGU6IHN0cmluZyB8IFZOb2RlXG4pOiBOZXdFbGVtZW50TmFtZXNwYWNlRGF0YSB7XG4gIGNvbnN0IHBhcmVudElzRGVmYXVsdE5hbWVzcGFjZSA9IGRvbVBhcmVudFZOb2RlXG4gICAgPyAhIXZub2RlX2dldEVsZW1lbnROYW1lKGRvbVBhcmVudFZOb2RlKSAmJiB2bm9kZV9pc0RlZmF1bHROYW1lc3BhY2UoZG9tUGFyZW50Vk5vZGUpXG4gICAgOiB0cnVlO1xuICBjb25zdCBwYXJlbnRJc0ZvcmVpZ25PYmplY3QgPSAhcGFyZW50SXNEZWZhdWx0TmFtZXNwYWNlXG4gICAgPyBpc0ZvcmVpZ25PYmplY3RFbGVtZW50KHZub2RlX2dldEVsZW1lbnROYW1lKGRvbVBhcmVudFZOb2RlISkpXG4gICAgOiBmYWxzZTtcblxuICBsZXQgZWxlbWVudE5hbWVzcGFjZSA9IEhUTUxfTlM7XG4gIGxldCBlbGVtZW50TmFtZXNwYWNlRmxhZyA9IFZOb2RlRmxhZ3MuTlNfaHRtbDtcblxuICBjb25zdCBpc0VsZW1lbnRWTm9kZU9yU3RyaW5nID0gdHlwZW9mIHRhZ09yVk5vZGUgPT09ICdzdHJpbmcnIHx8IHZub2RlX2lzRWxlbWVudFZOb2RlKHRhZ09yVk5vZGUpO1xuXG4gIGlmIChpc0VsZW1lbnRWTm9kZU9yU3RyaW5nICYmIGlzU3ZnKHRhZ09yVk5vZGUpKSB7XG4gICAgZWxlbWVudE5hbWVzcGFjZSA9IFNWR19OUztcbiAgICBlbGVtZW50TmFtZXNwYWNlRmxhZyA9IFZOb2RlRmxhZ3MuTlNfc3ZnO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudFZOb2RlT3JTdHJpbmcgJiYgaXNNYXRoKHRhZ09yVk5vZGUpKSB7XG4gICAgZWxlbWVudE5hbWVzcGFjZSA9IE1BVEhfTlM7XG4gICAgZWxlbWVudE5hbWVzcGFjZUZsYWcgPSBWTm9kZUZsYWdzLk5TX21hdGg7XG4gIH0gZWxzZSBpZiAoZG9tUGFyZW50Vk5vZGUgJiYgIXBhcmVudElzRm9yZWlnbk9iamVjdCAmJiAhcGFyZW50SXNEZWZhdWx0TmFtZXNwYWNlKSB7XG4gICAgY29uc3QgaXNQYXJlbnRTdmcgPSAoZG9tUGFyZW50Vk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLk5TX3N2ZykgIT09IDA7XG4gICAgY29uc3QgaXNQYXJlbnRNYXRoID0gKGRvbVBhcmVudFZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5OU19tYXRoKSAhPT0gMDtcblxuICAgIGVsZW1lbnROYW1lc3BhY2UgPSBpc1BhcmVudFN2ZyA/IFNWR19OUyA6IGlzUGFyZW50TWF0aCA/IE1BVEhfTlMgOiBIVE1MX05TO1xuICAgIGVsZW1lbnROYW1lc3BhY2VGbGFnID0gZG9tUGFyZW50Vk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLk5BTUVTUEFDRV9NQVNLO1xuICB9XG5cbiAgTkVXX05BTUVTUEFDRV9EQVRBLmVsZW1lbnROYW1lc3BhY2UgPSBlbGVtZW50TmFtZXNwYWNlO1xuICBORVdfTkFNRVNQQUNFX0RBVEEuZWxlbWVudE5hbWVzcGFjZUZsYWcgPSBlbGVtZW50TmFtZXNwYWNlRmxhZztcbiAgcmV0dXJuIE5FV19OQU1FU1BBQ0VfREFUQTtcbn1cblxuZnVuY3Rpb24gaXNTdmcodGFnT3JWTm9kZTogc3RyaW5nIHwgVk5vZGUpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiB0YWdPclZOb2RlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpc1N2Z0VsZW1lbnQodGFnT3JWTm9kZSk7XG4gIH1cbiAgaWYgKHZub2RlX2lzRWxlbWVudFZOb2RlKHRhZ09yVk5vZGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzU3ZnRWxlbWVudCh2bm9kZV9nZXRFbGVtZW50TmFtZSh0YWdPclZOb2RlKSkgfHwgKHRhZ09yVk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLk5TX3N2ZykgIT09IDBcbiAgICApO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNNYXRoKHRhZ09yVk5vZGU6IHN0cmluZyB8IFZOb2RlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgdGFnT3JWTm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaXNNYXRoRWxlbWVudCh0YWdPclZOb2RlKTtcbiAgfVxuICBpZiAodm5vZGVfaXNFbGVtZW50Vk5vZGUodGFnT3JWTm9kZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNNYXRoRWxlbWVudCh2bm9kZV9nZXRFbGVtZW50TmFtZSh0YWdPclZOb2RlKSkgfHxcbiAgICAgICh0YWdPclZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5OU19tYXRoKSAhPT0gMFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgTmV3RWxlbWVudE5hbWVzcGFjZURhdGEge1xuICBlbGVtZW50TmFtZXNwYWNlOiBzdHJpbmc7XG4gIGVsZW1lbnROYW1lc3BhY2VGbGFnOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOYW1lc3BhY2UoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAoYXR0cmlidXRlTmFtZSkge1xuICAgIGNhc2UgJ3hsaW5rOmhyZWYnOlxuICAgIGNhc2UgJ3hsaW5rOmFjdHVhdGUnOlxuICAgIGNhc2UgJ3hsaW5rOmFyY3JvbGUnOlxuICAgIGNhc2UgJ3hsaW5rOnJvbGUnOlxuICAgIGNhc2UgJ3hsaW5rOnNob3cnOlxuICAgIGNhc2UgJ3hsaW5rOnRpdGxlJzpcbiAgICBjYXNlICd4bGluazp0eXBlJzpcbiAgICAgIHJldHVybiBYTElOS19OUztcbiAgICBjYXNlICd4bWw6YmFzZSc6XG4gICAgY2FzZSAneG1sOmxhbmcnOlxuICAgIGNhc2UgJ3htbDpzcGFjZSc6XG4gICAgICByZXR1cm4gWE1MX05TO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19","export const mergeMaps = (map1, map2) => {\n    for (const [k, v] of map2) {\n        map1.set(k, v);\n    }\n    return map1;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBTyxJQUFlLEVBQUUsSUFBZSxFQUFhLEVBQUU7SUFDN0UsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBtZXJnZU1hcHMgPSA8SywgVj4obWFwMTogTWFwPEssIFY+LCBtYXAyOiBNYXA8SywgVj4pOiBNYXA8SywgVj4gPT4ge1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBtYXAyKSB7XG4gICAgbWFwMS5zZXQoaywgdik7XG4gIH1cbiAgcmV0dXJuIG1hcDE7XG59O1xuIl19","import { vnode_toString } from '../../client/vnode-utils';\nimport { _EFFECT_BACK_REF } from '../../reactive-primitives/backref';\nimport { isDev } from '@qwik.dev/core/build';\n/** @internal */\nexport class VNode {\n    flags;\n    parent;\n    previousSibling;\n    nextSibling;\n    props;\n    [_EFFECT_BACK_REF] = undefined;\n    slotParent = null;\n    dirty = 0 /* ChoreBits.NONE */;\n    dirtyChildren = null;\n    nextDirtyChildIndex = 0;\n    constructor(flags, parent, previousSibling, nextSibling, props) {\n        this.flags = flags;\n        this.parent = parent;\n        this.previousSibling = previousSibling;\n        this.nextSibling = nextSibling;\n        this.props = props;\n    }\n    // TODO: this creates debug issues\n    toString() {\n        if (isDev) {\n            return vnode_toString.call(this);\n        }\n        return Object.prototype.toString.call(this);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3Zub2RlL3Zub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFN0MsZ0JBQWdCO0FBQ2hCLE1BQU0sT0FBZ0IsS0FBSztJQVNoQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBWlQsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUE4QixTQUFTLENBQUM7SUFFMUQsVUFBVSxHQUFpQixJQUFJLENBQUM7SUFDaEMsS0FBSywwQkFBNkI7SUFDbEMsYUFBYSxHQUFtQixJQUFJLENBQUM7SUFDckMsbUJBQW1CLEdBQVcsQ0FBQyxDQUFDO0lBRWhDLFlBQ1MsS0FBaUIsRUFDakIsTUFBb0IsRUFDcEIsZUFBeUMsRUFDekMsV0FBcUMsRUFDckMsS0FBbUI7UUFKbkIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQUN6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBMEI7UUFDckMsVUFBSyxHQUFMLEtBQUssQ0FBYztJQUN6QixDQUFDO0lBRUosa0NBQWtDO0lBQ2xDLFFBQVE7UUFDTixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFZOb2RlRmxhZ3MgfSBmcm9tICcuLi8uLi9jbGllbnQvdHlwZXMnO1xuaW1wb3J0IHsgdm5vZGVfdG9TdHJpbmcgfSBmcm9tICcuLi8uLi9jbGllbnQvdm5vZGUtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4uL2pzeC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBDaG9yZUJpdHMgfSBmcm9tICcuL2VudW1zL2Nob3JlLWJpdHMuZW51bSc7XG5pbXBvcnQgeyBCYWNrUmVmLCBfRUZGRUNUX0JBQ0tfUkVGIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9iYWNrcmVmJztcbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVk5vZGUgaW1wbGVtZW50cyBCYWNrUmVmIHtcbiAgW19FRkZFQ1RfQkFDS19SRUZdOiBNYXA8YW55LCBhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIHNsb3RQYXJlbnQ6IFZOb2RlIHwgbnVsbCA9IG51bGw7XG4gIGRpcnR5OiBDaG9yZUJpdHMgPSBDaG9yZUJpdHMuTk9ORTtcbiAgZGlydHlDaGlsZHJlbjogVk5vZGVbXSB8IG51bGwgPSBudWxsO1xuICBuZXh0RGlydHlDaGlsZEluZGV4OiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBmbGFnczogVk5vZGVGbGFncyxcbiAgICBwdWJsaWMgcGFyZW50OiBWTm9kZSB8IG51bGwsXG4gICAgcHVibGljIHByZXZpb3VzU2libGluZzogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHB1YmxpYyBuZXh0U2libGluZzogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHB1YmxpYyBwcm9wczogUHJvcHMgfCBudWxsXG4gICkge31cblxuICAvLyBUT0RPOiB0aGlzIGNyZWF0ZXMgZGVidWcgaXNzdWVzXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKGlzRGV2KSB7XG4gICAgICByZXR1cm4gdm5vZGVfdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfVxufVxuIl19","import { VNode } from './vnode';\n/** @internal */\nexport class VirtualVNode extends VNode {\n    key;\n    firstChild;\n    lastChild;\n    constructor(key, flags, parent, previousSibling, nextSibling, props, firstChild, lastChild) {\n        super(flags, parent, previousSibling, nextSibling, props);\n        this.key = key;\n        this.firstChild = firstChild;\n        this.lastChild = lastChild;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC12bm9kZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdm5vZGUvdmlydHVhbC12bm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDLGdCQUFnQjtBQUNoQixNQUFNLE9BQU8sWUFBYSxTQUFRLEtBQUs7SUFFNUI7SUFNQTtJQUNBO0lBUlQsWUFDUyxHQUFrQixFQUN6QixLQUFpQixFQUNqQixNQUEwQyxFQUMxQyxlQUF5QyxFQUN6QyxXQUFxQyxFQUNyQyxLQUFtQixFQUNaLFVBQW9DLEVBQ3BDLFNBQW1DO1FBRTFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFUbkQsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQU1sQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUEwQjtJQUc1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFZOb2RlRmxhZ3MgfSBmcm9tICcuLi8uLi9jbGllbnQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4uL2pzeC9qc3gtcnVudGltZSc7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRWTm9kZSB9IGZyb20gJy4vZWxlbWVudC12bm9kZSc7XG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJy4vdm5vZGUnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgVmlydHVhbFZOb2RlIGV4dGVuZHMgVk5vZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga2V5OiBzdHJpbmcgfCBudWxsLFxuICAgIGZsYWdzOiBWTm9kZUZsYWdzLFxuICAgIHBhcmVudDogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlIHwgbnVsbCxcbiAgICBwcmV2aW91c1NpYmxpbmc6IFZOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBuZXh0U2libGluZzogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHByb3BzOiBQcm9wcyB8IG51bGwsXG4gICAgcHVibGljIGZpcnN0Q2hpbGQ6IFZOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBwdWJsaWMgbGFzdENoaWxkOiBWTm9kZSB8IG51bGwgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoZmxhZ3MsIHBhcmVudCwgcHJldmlvdXNTaWJsaW5nLCBuZXh0U2libGluZywgcHJvcHMpO1xuICB9XG59XG4iXX0=","import { VirtualVNode } from './virtual-vnode';\n/** @internal */\nexport class ElementVNode extends VirtualVNode {\n    node;\n    elementName;\n    constructor(key, flags, parent, previousSibling, nextSibling, props, firstChild, lastChild, node, elementName) {\n        super(key, flags, parent, previousSibling, nextSibling, props, firstChild, lastChild);\n        this.node = node;\n        this.elementName = elementName;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC12bm9kZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdm5vZGUvZWxlbWVudC12bm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsZ0JBQWdCO0FBQ2hCLE1BQU0sT0FBTyxZQUFhLFNBQVEsWUFBWTtJQVVuQztJQUNBO0lBVlQsWUFDRSxHQUFrQixFQUNsQixLQUFpQixFQUNqQixNQUEwQyxFQUMxQyxlQUF5QyxFQUN6QyxXQUFxQyxFQUNyQyxLQUFtQixFQUNuQixVQUFvQyxFQUNwQyxTQUFtQyxFQUM1QixJQUFhLEVBQ2IsV0FBK0I7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUgvRSxTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ2IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBR3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVk5vZGVGbGFncyB9IGZyb20gJy4uLy4uL2NsaWVudC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IFZpcnR1YWxWTm9kZSB9IGZyb20gJy4vdmlydHVhbC12bm9kZSc7XG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJy4vdm5vZGUnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgRWxlbWVudFZOb2RlIGV4dGVuZHMgVmlydHVhbFZOb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAga2V5OiBzdHJpbmcgfCBudWxsLFxuICAgIGZsYWdzOiBWTm9kZUZsYWdzLFxuICAgIHBhcmVudDogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlIHwgbnVsbCxcbiAgICBwcmV2aW91c1NpYmxpbmc6IFZOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBuZXh0U2libGluZzogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHByb3BzOiBQcm9wcyB8IG51bGwsXG4gICAgZmlyc3RDaGlsZDogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGxhc3RDaGlsZDogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHB1YmxpYyBub2RlOiBFbGVtZW50LFxuICAgIHB1YmxpYyBlbGVtZW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKGtleSwgZmxhZ3MsIHBhcmVudCwgcHJldmlvdXNTaWJsaW5nLCBuZXh0U2libGluZywgcHJvcHMsIGZpcnN0Q2hpbGQsIGxhc3RDaGlsZCk7XG4gIH1cbn1cbiJdfQ==","import { VNode } from './vnode';\n/** @internal */\nexport class TextVNode extends VNode {\n    node;\n    text;\n    constructor(flags, parent, previousSibling, nextSibling, \n    // normal text nodes don't have props, but we keep it because it can be a cursor\n    props, node, text) {\n        super(flags, parent, previousSibling, nextSibling, props);\n        this.node = node;\n        this.text = text;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC12bm9kZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdm5vZGUvdGV4dC12bm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDLGdCQUFnQjtBQUNoQixNQUFNLE9BQU8sU0FBVSxTQUFRLEtBQUs7SUFRekI7SUFDQTtJQVJULFlBQ0UsS0FBaUIsRUFDakIsTUFBb0IsRUFDcEIsZUFBeUMsRUFDekMsV0FBcUM7SUFDckMsZ0ZBQWdGO0lBQ2hGLEtBQW1CLEVBQ1osSUFBaUIsRUFDakIsSUFBd0I7UUFFL0IsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUhuRCxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFNBQUksR0FBSixJQUFJLENBQW9CO0lBR2pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVk5vZGVGbGFncyB9IGZyb20gJy4uLy4uL2NsaWVudC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnLi92bm9kZSc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjbGFzcyBUZXh0Vk5vZGUgZXh0ZW5kcyBWTm9kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGZsYWdzOiBWTm9kZUZsYWdzLFxuICAgIHBhcmVudDogVk5vZGUgfCBudWxsLFxuICAgIHByZXZpb3VzU2libGluZzogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIG5leHRTaWJsaW5nOiBWTm9kZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgLy8gbm9ybWFsIHRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBwcm9wcywgYnV0IHdlIGtlZXAgaXQgYmVjYXVzZSBpdCBjYW4gYmUgYSBjdXJzb3JcbiAgICBwcm9wczogUHJvcHMgfCBudWxsLFxuICAgIHB1YmxpYyBub2RlOiBUZXh0IHwgbnVsbCxcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKGZsYWdzLCBwYXJlbnQsIHByZXZpb3VzU2libGluZywgbmV4dFNpYmxpbmcsIHByb3BzKTtcbiAgfVxufVxuIl19","/**\n * @file Cursor queue management for cursor-based scheduling.\n *\n *   Maintains a priority queue of cursors sorted by priority (lower = higher priority).\n */\nimport { vnode_isDescendantOf } from '../../client/vnode-utils';\nimport { getCursorData, mergeCursorJournalAndBoundaries } from './cursor-props';\n/** Global cursor queue array. Cursors are sorted by priority. */\nconst globalCursorQueue = [];\nconst pausedCursorQueue = [];\n/**\n * Adds a cursor to the global queue.\n *\n * @param cursor - The cursor to add\n */\nexport function addCursorToQueue(container, cursor) {\n    const priority = getCursorData(cursor).priority;\n    let insertIndex = globalCursorQueue.length;\n    for (let i = 0; i < globalCursorQueue.length; i++) {\n        const existingPriority = getCursorData(globalCursorQueue[i]).priority;\n        if (priority < existingPriority) {\n            insertIndex = i;\n            break;\n        }\n    }\n    globalCursorQueue.splice(insertIndex, 0, cursor);\n    container.$pendingCount$++;\n    container.$renderPromise$ ||= new Promise((r) => (container.$resolveRenderPromise$ = r));\n}\n/**\n * Gets the highest priority cursor (lowest priority number) from the queue.\n *\n * @returns The highest priority cursor, or null if queue is empty\n */\nexport function getHighestPriorityCursor() {\n    for (let i = 0; i < globalCursorQueue.length; i++) {\n        const cursor = globalCursorQueue[i];\n        let isDescendantOfPaused = false;\n        for (let j = 0; j < pausedCursorQueue.length; j++) {\n            const pausedCursor = pausedCursorQueue[j];\n            if (vnode_isDescendantOf(cursor, pausedCursor)) {\n                isDescendantOfPaused = true;\n                break;\n            }\n        }\n        if (!isDescendantOfPaused) {\n            return cursor;\n        }\n    }\n    return null;\n}\nexport function pauseCursor(cursor, container) {\n    pausedCursorQueue.push(cursor);\n    removeCursorFromQueue(cursor, container, true);\n    container.$pendingCount$++;\n}\nexport function resumeCursor(cursor, container) {\n    removeCursorFromPausedQueue(cursor, container);\n    if (!(cursor.flags & 256 /* VNodeFlags.Cursor */)) {\n        return;\n    }\n    addCursorToQueue(container, cursor);\n}\nexport function abandonCursor(container, targetCursorData, cursor) {\n    const oldCursorData = getCursorData(cursor);\n    if (!oldCursorData || oldCursorData === targetCursorData) {\n        return;\n    }\n    removeCursorFromQueue(cursor, container, false);\n    removeCursorFromPausedQueue(cursor, container);\n    mergeCursorJournalAndBoundaries(targetCursorData, oldCursorData);\n    oldCursorData.afterFlushTasks = null;\n    oldCursorData.extraPromises = null;\n    oldCursorData.journal = null;\n    oldCursorData.boundaries = null;\n    oldCursorData.position = null;\n    oldCursorData.promise = null;\n}\n/**\n * Removes a cursor from the global queue.\n *\n * @param cursor - The cursor to remove\n */\nexport function removeCursorFromQueue(cursor, container, keepCursorFlag) {\n    if (!keepCursorFlag) {\n        cursor.flags &= ~256 /* VNodeFlags.Cursor */;\n    }\n    const index = globalCursorQueue.indexOf(cursor);\n    if (index !== -1) {\n        // TODO: we can't use swap-and-remove algorithm because it will break the priority order\n        // // Move last element to the position of the element to remove, then pop\n        // const lastIndex = globalCursorQueue.length - 1;\n        // if (index !== lastIndex) {\n        //   globalCursorQueue[index] = globalCursorQueue[lastIndex];\n        // }\n        // globalCursorQueue.pop();\n        globalCursorQueue.splice(index, 1);\n        container.$pendingCount$--;\n        return true;\n    }\n    return false;\n}\nfunction removeCursorFromPausedQueue(cursor, container) {\n    const index = pausedCursorQueue.indexOf(cursor);\n    if (index === -1) {\n        return false;\n    }\n    const lastIndex = pausedCursorQueue.length - 1;\n    if (index !== lastIndex) {\n        pausedCursorQueue[index] = pausedCursorQueue[lastIndex];\n    }\n    pausedCursorQueue.pop();\n    container.$pendingCount$--;\n    return true;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLXF1ZXVlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9jdXJzb3IvY3Vyc29yLXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFHSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLCtCQUErQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRWpHLGlFQUFpRTtBQUNqRSxNQUFNLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztBQUV2QyxNQUFNLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztBQUV2Qzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFNBQW9CLEVBQUUsTUFBYztJQUNuRSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFFLENBQUMsUUFBUSxDQUFDO0lBQ2pELElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdkUsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE1BQU07UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWpELFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQixTQUFTLENBQUMsZUFBZSxLQUFLLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFF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LEVBQUUsQ0FBQztRQUNqQix3RkFBd0Y7UUFDeEYsMEVBQTBFO1FBQzFFLGtEQUFrRDtRQUNsRCw2QkFBNkI7UUFDN0IsNkRBQTZEO1FBQzdELElBQUk7UUFDSiwyQkFBMkI7UUFDM0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxNQUFjLEVBQUUsU0FBb0I7SUFDdkUsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEIsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgQ3Vyc29yIHF1ZXVlIG1hbmFnZW1lbnQgZm9yIGN1cnNvci1iYXNlZCBzY2hlZHVsaW5nLlxuICpcbiAqICAgTWFpbnRhaW5zIGEgcHJpb3JpdHkgcXVldWUgb2YgY3Vyc29ycyBzb3J0ZWQgYnkgcHJpb3JpdHkgKGxvd2VyID0gaGlnaGVyIHByaW9yaXR5KS5cbiAqL1xuXG5pbXBvcnQgeyBWTm9kZUZsYWdzIH0gZnJvbSAnLi4vLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7IHZub2RlX2lzRGVzY2VuZGFudE9mIH0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDdXJzb3IgfSBmcm9tICcuL2N1cnNvcic7XG5pbXBvcnQgeyBnZXRDdXJzb3JEYXRhLCBtZXJnZUN1cnNvckpvdXJuYWxBbmRCb3VuZGFyaWVzLCB0eXBlIEN1cnNvckRhdGEgfSBmcm9tICcuL2N1cnNvci1wcm9wcyc7XG5cbi8qKiBHbG9iYWwgY3Vyc29yIHF1ZXVlIGFycmF5LiBDdXJzb3JzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkuICovXG5jb25zdCBnbG9iYWxDdXJzb3JRdWV1ZTogQ3Vyc29yW10gPSBbXTtcblxuY29uc3QgcGF1c2VkQ3Vyc29yUXVldWU6IEN1cnNvcltdID0gW107XG5cbi8qKlxuICogQWRkcyBhIGN1cnNvciB0byB0aGUgZ2xvYmFsIHF1ZXVlLlxuICpcbiAqIEBwYXJhbSBjdXJzb3IgLSBUaGUgY3Vyc29yIHRvIGFkZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ3Vyc29yVG9RdWV1ZShjb250YWluZXI6IENvbnRhaW5lciwgY3Vyc29yOiBDdXJzb3IpOiB2b2lkIHtcbiAgY29uc3QgcHJpb3JpdHkgPSBnZXRDdXJzb3JEYXRhKGN1cnNvcikhLnByaW9yaXR5O1xuICBsZXQgaW5zZXJ0SW5kZXggPSBnbG9iYWxDdXJzb3JRdWV1ZS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iYWxDdXJzb3JRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGV4aXN0aW5nUHJpb3JpdHkgPSBnZXRDdXJzb3JEYXRhKGdsb2JhbEN1cnNvclF1ZXVlW2ldKSEucHJpb3JpdHk7XG4gICAgaWYgKHByaW9yaXR5IDwgZXhpc3RpbmdQcmlvcml0eSkge1xuICAgICAgaW5zZXJ0SW5kZXggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2xvYmFsQ3Vyc29yUXVldWUuc3BsaWNlKGluc2VydEluZGV4LCAwLCBjdXJzb3IpO1xuXG4gIGNvbnRhaW5lci4kcGVuZGluZ0NvdW50JCsrO1xuICBjb250YWluZXIuJHJlbmRlclByb21pc2UkIHx8PSBuZXcgUHJvbWlzZSgocikgPT4gKGNvbnRhaW5lci4kcmVzb2x2ZVJlbmRlclByb21pc2UkID0gcikpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgY3Vyc29yIChsb3dlc3QgcHJpb3JpdHkgbnVtYmVyKSBmcm9tIHRoZSBxdWV1ZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgaGlnaGVzdCBwcmlvcml0eSBjdXJzb3IsIG9yIG51bGwgaWYgcXVldWUgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUN1cnNvcigpOiBDdXJzb3IgfCBudWxsIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iYWxDdXJzb3JRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnNvciA9IGdsb2JhbEN1cnNvclF1ZXVlW2ldO1xuICAgIGxldCBpc0Rlc2NlbmRhbnRPZlBhdXNlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXVzZWRDdXJzb3JRdWV1ZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcGF1c2VkQ3Vyc29yID0gcGF1c2VkQ3Vyc29yUXVldWVbal07XG4gICAgICBpZiAodm5vZGVfaXNEZXNjZW5kYW50T2YoY3Vyc29yLCBwYXVzZWRDdXJzb3IpKSB7XG4gICAgICAgIGlzRGVzY2VuZGFudE9mUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0Rlc2NlbmRhbnRPZlBhdXNlZCkge1xuICAgICAgcmV0dXJuIGN1cnNvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdXNlQ3Vyc29yKGN1cnNvcjogQ3Vyc29yLCBjb250YWluZXI6IENvbnRhaW5lcik6IHZvaWQge1xuICBwYXVzZWRDdXJzb3JRdWV1ZS5wdXNoKGN1cnNvcik7XG4gIHJlbW92ZUN1cnNvckZyb21RdWV1ZShjdXJzb3IsIGNvbnRhaW5lciwgdHJ1ZSk7XG4gIGNvbnRhaW5lci4kcGVuZGluZ0NvdW50JCsrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdW1lQ3Vyc29yKGN1cnNvcjogQ3Vyc29yLCBjb250YWluZXI6IENvbnRhaW5lcik6IHZvaWQge1xuICByZW1vdmVDdXJzb3JGcm9tUGF1c2VkUXVldWUoY3Vyc29yLCBjb250YWluZXIpO1xuICBpZiAoIShjdXJzb3IuZmxhZ3MgJiBWTm9kZUZsYWdzLkN1cnNvcikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWRkQ3Vyc29yVG9RdWV1ZShjb250YWluZXIsIGN1cnNvcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmFuZG9uQ3Vyc29yKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgdGFyZ2V0Q3Vyc29yRGF0YTogQ3Vyc29yRGF0YSxcbiAgY3Vyc29yOiBDdXJzb3Jcbik6IHZvaWQge1xuICBjb25zdCBvbGRDdXJzb3JEYXRhID0gZ2V0Q3Vyc29yRGF0YShjdXJzb3IpO1xuICBpZiAoIW9sZEN1cnNvckRhdGEgfHwgb2xkQ3Vyc29yRGF0YSA9PT0gdGFyZ2V0Q3Vyc29yRGF0YSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlbW92ZUN1cnNvckZyb21RdWV1ZShjdXJzb3IsIGNvbnRhaW5lciwgZmFsc2UpO1xuICByZW1vdmVDdXJzb3JGcm9tUGF1c2VkUXVldWUoY3Vyc29yLCBjb250YWluZXIpO1xuICBtZXJnZUN1cnNvckpvdXJuYWxBbmRCb3VuZGFyaWVzKHRhcmdldEN1cnNvckRhdGEsIG9sZEN1cnNvckRhdGEpO1xuXG4gIG9sZEN1cnNvckRhdGEuYWZ0ZXJGbHVzaFRhc2tzID0gbnVsbDtcbiAgb2xkQ3Vyc29yRGF0YS5leHRyYVByb21pc2VzID0gbnVsbDtcbiAgb2xkQ3Vyc29yRGF0YS5qb3VybmFsID0gbnVsbDtcbiAgb2xkQ3Vyc29yRGF0YS5ib3VuZGFyaWVzID0gbnVsbDtcbiAgb2xkQ3Vyc29yRGF0YS5wb3NpdGlvbiA9IG51bGw7XG4gIG9sZEN1cnNvckRhdGEucHJvbWlzZSA9IG51bGw7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIGN1cnNvciBmcm9tIHRoZSBnbG9iYWwgcXVldWUuXG4gKlxuICogQHBhcmFtIGN1cnNvciAtIFRoZSBjdXJzb3IgdG8gcmVtb3ZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDdXJzb3JGcm9tUXVldWUoXG4gIGN1cnNvcjogQ3Vyc29yLFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAga2VlcEN1cnNvckZsYWc/OiBib29sZWFuXG4pOiBib29sZWFuIHtcbiAgaWYgKCFrZWVwQ3Vyc29yRmxhZykge1xuICAgIGN1cnNvci5mbGFncyAmPSB+Vk5vZGVGbGFncy5DdXJzb3I7XG4gIH1cbiAgY29uc3QgaW5kZXggPSBnbG9iYWxDdXJzb3JRdWV1ZS5pbmRleE9mKGN1cnNvcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAvLyBUT0RPOiB3ZSBjYW4ndCB1c2Ugc3dhcC1hbmQtcmVtb3ZlIGFsZ29yaXRobSBiZWNhdXNlIGl0IHdpbGwgYnJlYWsgdGhlIHByaW9yaXR5IG9yZGVyXG4gICAgLy8gLy8gTW92ZSBsYXN0IGVsZW1lbnQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZSwgdGhlbiBwb3BcbiAgICAvLyBjb25zdCBsYXN0SW5kZXggPSBnbG9iYWxDdXJzb3JRdWV1ZS5sZW5ndGggLSAxO1xuICAgIC8vIGlmIChpbmRleCAhPT0gbGFzdEluZGV4KSB7XG4gICAgLy8gICBnbG9iYWxDdXJzb3JRdWV1ZVtpbmRleF0gPSBnbG9iYWxDdXJzb3JRdWV1ZVtsYXN0SW5kZXhdO1xuICAgIC8vIH1cbiAgICAvLyBnbG9iYWxDdXJzb3JRdWV1ZS5wb3AoKTtcbiAgICBnbG9iYWxDdXJzb3JRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNvbnRhaW5lci4kcGVuZGluZ0NvdW50JC0tO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ3Vyc29yRnJvbVBhdXNlZFF1ZXVlKGN1cnNvcjogQ3Vyc29yLCBjb250YWluZXI6IENvbnRhaW5lcik6IGJvb2xlYW4ge1xuICBjb25zdCBpbmRleCA9IHBhdXNlZEN1cnNvclF1ZXVlLmluZGV4T2YoY3Vyc29yKTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBsYXN0SW5kZXggPSBwYXVzZWRDdXJzb3JRdWV1ZS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggIT09IGxhc3RJbmRleCkge1xuICAgIHBhdXNlZEN1cnNvclF1ZXVlW2luZGV4XSA9IHBhdXNlZEN1cnNvclF1ZXVlW2xhc3RJbmRleF07XG4gIH1cbiAgcGF1c2VkQ3Vyc29yUXVldWUucG9wKCk7XG4gIGNvbnRhaW5lci4kcGVuZGluZ0NvdW50JC0tO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==","import { isCursor } from './cursor';\nimport { removeCursorFromQueue } from './cursor-queue';\nexport const cursorDatas = new WeakMap();\n/** Key used to store pending node prop updates in vNode props. */\nexport const NODE_PROPS_DATA_KEY = ':nodeProps';\nexport const NODE_DIFF_DATA_KEY = ':nodeDiff';\nexport const ERROR_DATA_KEY = ':errorData';\nexport const HOST_SIGNAL = ':signal';\nexport const INLINE_COMPONENT_DATA_KEY = ':inlineComponentData';\n/**\n * Sets the cursor position in a cursor vNode.\n *\n * @param vNode - The cursor vNode\n * @param position - The vNode position to set, or null for root\n */\nexport function setCursorPosition(container, cursorData, position) {\n    cursorData.position = position;\n    if (position && isCursor(position)) {\n        mergeCursors(container, cursorData, position);\n    }\n}\nfunction mergeCursors(container, newCursorData, oldCursor) {\n    // delete from global cursors queue\n    removeCursorFromQueue(oldCursor, container);\n    const oldCursorData = getCursorData(oldCursor);\n    mergeCursorData(newCursorData, oldCursorData);\n}\nexport function mergeCursorData(newCursorData, oldCursorData) {\n    if (oldCursorData === newCursorData) {\n        // same cursor data, no need to merge\n        return;\n    }\n    // merge after flush tasks\n    const oldAfterFlushTasks = oldCursorData.afterFlushTasks;\n    if (oldAfterFlushTasks && oldAfterFlushTasks.length > 0) {\n        const newAfterFlushTasks = newCursorData.afterFlushTasks;\n        if (newAfterFlushTasks) {\n            newAfterFlushTasks.push(...oldAfterFlushTasks);\n        }\n        else {\n            newCursorData.afterFlushTasks = oldAfterFlushTasks;\n        }\n    }\n    // merge extra promises\n    const oldExtraPromises = oldCursorData.extraPromises;\n    if (oldExtraPromises && oldExtraPromises.length > 0) {\n        const newExtraPromises = newCursorData.extraPromises;\n        if (newExtraPromises) {\n            newExtraPromises.push(...oldExtraPromises);\n        }\n        else {\n            newCursorData.extraPromises = oldExtraPromises;\n        }\n    }\n    mergeCursorJournalAndBoundaries(newCursorData, oldCursorData);\n}\nexport function mergeCursorJournalAndBoundaries(newCursorData, oldCursorData) {\n    if (oldCursorData === newCursorData) {\n        return;\n    }\n    // merge journal\n    const oldJournal = oldCursorData.journal;\n    if (oldJournal && oldJournal.length > 0) {\n        const newJournal = newCursorData.journal;\n        if (newJournal) {\n            newJournal.push(...oldJournal);\n        }\n        else {\n            newCursorData.journal = oldJournal;\n        }\n    }\n    // merge cursor boundaries\n    const oldBoundaries = oldCursorData.boundaries;\n    if (__EXPERIMENTAL__.suspense && oldBoundaries && oldBoundaries.length > 0) {\n        const newBoundaries = (newCursorData.boundaries ||= []);\n        for (let i = 0; i < oldBoundaries.length; i++) {\n            const boundary = oldBoundaries[i];\n            if (!newBoundaries.includes(boundary)) {\n                newBoundaries.push(boundary);\n            }\n        }\n    }\n}\n/**\n * Gets the cursor data from a vNode.\n *\n * @param vNode - The vNode\n * @returns The cursor data, or null if none or not a cursor\n */\nexport function getCursorData(vNode) {\n    return cursorDatas.get(vNode) ?? null;\n}\n/**\n * Sets the cursor data on a vNode.\n *\n * @param vNode - The vNode\n * @param cursorData - The cursor data to set, or null to clear\n */\nexport function setCursorData(vNode, cursorData) {\n    cursorDatas.set(vNode, cursorData);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLXByb3BzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9jdXJzb3IvY3Vyc29yLXByb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQWUsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksT0FBTyxFQUFzQixDQUFDO0FBRTdELGtFQUFrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxzQkFBc0IsQ0FBQztBQWFoRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsU0FBb0IsRUFDcEIsVUFBc0IsRUFDdEIsUUFBc0I7SUFFdEIsVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDL0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkMsWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxTQUFvQixFQUFFLGFBQXlCLEVBQUUsU0FBZ0I7SUFDckYsbUNBQW1DO0lBQ25DLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFFLENBQUM7SUFFaEQsZUFB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QztBQUN4QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQVksRUFBRSxVQUFzQjtJQUNoRSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQWUsRUFBRSxVQUFXLENBQUMsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4uL3Zub2RlL3Zub2RlJztcbmltcG9ydCB7IGlzQ3Vyc29yLCB0eXBlIEN1cnNvciB9IGZyb20gJy4vY3Vyc29yJztcbmltcG9ydCB7IHJlbW92ZUN1cnNvckZyb21RdWV1ZSB9IGZyb20gJy4vY3Vyc29yLXF1ZXVlJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBWTm9kZUpvdXJuYWwgfSBmcm9tICcuLi8uLi9jbGllbnQvdm5vZGUtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBUYXNrIH0gZnJvbSAnLi4vLi4vdXNlL3VzZS10YXNrJztcbmltcG9ydCB0eXBlIHsgQ3Vyc29yQm91bmRhcnkgfSBmcm9tICcuLi8uLi91c2UvdXNlLWN1cnNvci1ib3VuZGFyeSc7XG5cbmV4cG9ydCBjb25zdCBjdXJzb3JEYXRhcyA9IG5ldyBXZWFrTWFwPEN1cnNvciwgQ3Vyc29yRGF0YT4oKTtcblxuLyoqIEtleSB1c2VkIHRvIHN0b3JlIHBlbmRpbmcgbm9kZSBwcm9wIHVwZGF0ZXMgaW4gdk5vZGUgcHJvcHMuICovXG5leHBvcnQgY29uc3QgTk9ERV9QUk9QU19EQVRBX0tFWSA9ICc6bm9kZVByb3BzJztcbmV4cG9ydCBjb25zdCBOT0RFX0RJRkZfREFUQV9LRVkgPSAnOm5vZGVEaWZmJztcbmV4cG9ydCBjb25zdCBFUlJPUl9EQVRBX0tFWSA9ICc6ZXJyb3JEYXRhJztcbmV4cG9ydCBjb25zdCBIT1NUX1NJR05BTCA9ICc6c2lnbmFsJztcbmV4cG9ydCBjb25zdCBJTkxJTkVfQ09NUE9ORU5UX0RBVEFfS0VZID0gJzppbmxpbmVDb21wb25lbnREYXRhJztcblxuZXhwb3J0IGludGVyZmFjZSBDdXJzb3JEYXRhIHtcbiAgYWZ0ZXJGbHVzaFRhc2tzOiBUYXNrW10gfCBudWxsO1xuICBleHRyYVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gfCBudWxsO1xuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwgfCBudWxsO1xuICBjb250YWluZXI6IENvbnRhaW5lcjtcbiAgcG9zaXRpb246IFZOb2RlIHwgbnVsbDtcbiAgcHJpb3JpdHk6IG51bWJlcjtcbiAgcHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGw7XG4gIGJvdW5kYXJpZXM6IEN1cnNvckJvdW5kYXJ5W10gfCBudWxsO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiBhIGN1cnNvciB2Tm9kZS5cbiAqXG4gKiBAcGFyYW0gdk5vZGUgLSBUaGUgY3Vyc29yIHZOb2RlXG4gKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgdk5vZGUgcG9zaXRpb24gdG8gc2V0LCBvciBudWxsIGZvciByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDdXJzb3JQb3NpdGlvbihcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGN1cnNvckRhdGE6IEN1cnNvckRhdGEsXG4gIHBvc2l0aW9uOiBWTm9kZSB8IG51bGxcbik6IHZvaWQge1xuICBjdXJzb3JEYXRhLnBvc2l0aW9uID0gcG9zaXRpb247XG4gIGlmIChwb3NpdGlvbiAmJiBpc0N1cnNvcihwb3NpdGlvbikpIHtcbiAgICBtZXJnZUN1cnNvcnMoY29udGFpbmVyLCBjdXJzb3JEYXRhLCBwb3NpdGlvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VDdXJzb3JzKGNvbnRhaW5lcjogQ29udGFpbmVyLCBuZXdDdXJzb3JEYXRhOiBDdXJzb3JEYXRhLCBvbGRDdXJzb3I6IFZOb2RlKTogdm9pZCB7XG4gIC8vIGRlbGV0ZSBmcm9tIGdsb2JhbCBjdXJzb3JzIHF1ZXVlXG4gIHJlbW92ZUN1cnNvckZyb21RdWV1ZShvbGRDdXJzb3IsIGNvbnRhaW5lcik7XG4gIGNvbnN0IG9sZEN1cnNvckRhdGEgPSBnZXRDdXJzb3JEYXRhKG9sZEN1cnNvcikhO1xuXG4gIG1lcmdlQ3Vyc29yRGF0YShuZXdDdXJzb3JEYXRhLCBvbGRDdXJzb3JEYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ3Vyc29yRGF0YShuZXdDdXJzb3JEYXRhOiBDdXJzb3JEYXRhLCBvbGRDdXJzb3JEYXRhOiBDdXJzb3JEYXRhKTogdm9pZCB7XG4gIGlmIChvbGRDdXJzb3JEYXRhID09PSBuZXdDdXJzb3JEYXRhKSB7XG4gICAgLy8gc2FtZSBjdXJzb3IgZGF0YSwgbm8gbmVlZCB0byBtZXJnZVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG1lcmdlIGFmdGVyIGZsdXNoIHRhc2tzXG4gIGNvbnN0IG9sZEFmdGVyRmx1c2hUYXNrcyA9IG9sZEN1cnNvckRhdGEuYWZ0ZXJGbHVzaFRhc2tzO1xuICBpZiAob2xkQWZ0ZXJGbHVzaFRhc2tzICYmIG9sZEFmdGVyRmx1c2hUYXNrcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbmV3QWZ0ZXJGbHVzaFRhc2tzID0gbmV3Q3Vyc29yRGF0YS5hZnRlckZsdXNoVGFza3M7XG4gICAgaWYgKG5ld0FmdGVyRmx1c2hUYXNrcykge1xuICAgICAgbmV3QWZ0ZXJGbHVzaFRhc2tzLnB1c2goLi4ub2xkQWZ0ZXJGbHVzaFRhc2tzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Q3Vyc29yRGF0YS5hZnRlckZsdXNoVGFza3MgPSBvbGRBZnRlckZsdXNoVGFza3M7XG4gICAgfVxuICB9XG4gIC8vIG1lcmdlIGV4dHJhIHByb21pc2VzXG4gIGNvbnN0IG9sZEV4dHJhUHJvbWlzZXMgPSBvbGRDdXJzb3JEYXRhLmV4dHJhUHJvbWlzZXM7XG4gIGlmIChvbGRFeHRyYVByb21pc2VzICYmIG9sZEV4dHJhUHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5ld0V4dHJhUHJvbWlzZXMgPSBuZXdDdXJzb3JEYXRhLmV4dHJhUHJvbWlzZXM7XG4gICAgaWYgKG5ld0V4dHJhUHJvbWlzZXMpIHtcbiAgICAgIG5ld0V4dHJhUHJvbWlzZXMucHVzaCguLi5vbGRFeHRyYVByb21pc2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Q3Vyc29yRGF0YS5leHRyYVByb21pc2VzID0gb2xkRXh0cmFQcm9taXNlcztcbiAgICB9XG4gIH1cbiAgbWVyZ2VDdXJzb3JKb3VybmFsQW5kQm91bmRhcmllcyhuZXdDdXJzb3JEYXRhLCBvbGRDdXJzb3JEYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ3Vyc29ySm91cm5hbEFuZEJvdW5kYXJpZXMoXG4gIG5ld0N1cnNvckRhdGE6IEN1cnNvckRhdGEsXG4gIG9sZEN1cnNvckRhdGE6IEN1cnNvckRhdGFcbik6IHZvaWQge1xuICBpZiAob2xkQ3Vyc29yRGF0YSA9PT0gbmV3Q3Vyc29yRGF0YSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG1lcmdlIGpvdXJuYWxcbiAgY29uc3Qgb2xkSm91cm5hbCA9IG9sZEN1cnNvckRhdGEuam91cm5hbDtcbiAgaWYgKG9sZEpvdXJuYWwgJiYgb2xkSm91cm5hbC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbmV3Sm91cm5hbCA9IG5ld0N1cnNvckRhdGEuam91cm5hbDtcbiAgICBpZiAobmV3Sm91cm5hbCkge1xuICAgICAgbmV3Sm91cm5hbC5wdXNoKC4uLm9sZEpvdXJuYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDdXJzb3JEYXRhLmpvdXJuYWwgPSBvbGRKb3VybmFsO1xuICAgIH1cbiAgfVxuICAvLyBtZXJnZSBjdXJzb3IgYm91bmRhcmllc1xuICBjb25zdCBvbGRCb3VuZGFyaWVzID0gb2xkQ3Vyc29yRGF0YS5ib3VuZGFyaWVzO1xuICBpZiAoX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSAmJiBvbGRCb3VuZGFyaWVzICYmIG9sZEJvdW5kYXJpZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5ld0JvdW5kYXJpZXMgPSAobmV3Q3Vyc29yRGF0YS5ib3VuZGFyaWVzIHx8PSBbXSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRCb3VuZGFyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBib3VuZGFyeSA9IG9sZEJvdW5kYXJpZXNbaV07XG4gICAgICBpZiAoIW5ld0JvdW5kYXJpZXMuaW5jbHVkZXMoYm91bmRhcnkpKSB7XG4gICAgICAgIG5ld0JvdW5kYXJpZXMucHVzaChib3VuZGFyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3Vyc29yIGRhdGEgZnJvbSBhIHZOb2RlLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFRoZSB2Tm9kZVxuICogQHJldHVybnMgVGhlIGN1cnNvciBkYXRhLCBvciBudWxsIGlmIG5vbmUgb3Igbm90IGEgY3Vyc29yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJzb3JEYXRhKHZOb2RlOiBWTm9kZSk6IEN1cnNvckRhdGEgfCBudWxsIHtcbiAgcmV0dXJuIGN1cnNvckRhdGFzLmdldCh2Tm9kZSkgPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJzb3IgZGF0YSBvbiBhIHZOb2RlLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFRoZSB2Tm9kZVxuICogQHBhcmFtIGN1cnNvckRhdGEgLSBUaGUgY3Vyc29yIGRhdGEgdG8gc2V0LCBvciBudWxsIHRvIGNsZWFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDdXJzb3JEYXRhKHZOb2RlOiBWTm9kZSwgY3Vyc29yRGF0YTogQ3Vyc29yRGF0YSk6IHZvaWQge1xuICBjdXJzb3JEYXRhcy5zZXQodk5vZGUgYXMgQ3Vyc29yLCBjdXJzb3JEYXRhISk7XG59XG4iXX0=","/**\n * # ================================\n *\n * Signal Types\n *\n * # ================================\n */\n/**\n * Special value used to mark that a given signal needs to be computed. This is essentially a\n * \"marked as dirty\" flag.\n */\nexport const NEEDS_COMPUTATION = Symbol('invalid');\n/**\n * An effect consumer plus type of effect, back references to producers and additional data\n *\n * An effect can be trigger by one or more of signal inputs. The first step of re-running an effect\n * is to clear its subscriptions so that the effect can re add new set of subscriptions. In order to\n * clear the subscriptions we need to store them here.\n *\n * Imagine you have effect such as:\n *\n * ```\n * function effect1() {\n *   console.log(signalA.value ? signalB.value : 'default');\n * }\n * ```\n *\n * In the above case the `signalB` needs to be unsubscribed when `signalA` is falsy. We do this by\n * always clearing all of the subscriptions\n *\n * The `EffectSubscription` stores\n *\n * ```\n * subscription1 = [effectConsumer1, EffectProperty.COMPONENT, Set[(signalA, signalB)]];\n * ```\n *\n * The `signal1` and `signal2` back references are needed to \"clear\" existing subscriptions.\n *\n * Both `signalA` as well as `signalB` will have a reference to `subscription` to the so that the\n * effect can be scheduled if either `signalA` or `signalB` triggers. The `subscription1` is shared\n * between the signals.\n *\n * The second position `EffectProperty|string` store the property name of the effect.\n *\n * - Property name of the VNode\n * - `EffectProperty.COMPONENT` if component\n * - `EffectProperty.VNODE` if VNode\n */\nexport class EffectSubscription {\n    consumer;\n    property;\n    backRef;\n    data;\n    constructor(consumer, property, backRef = null, data = null) {\n        this.consumer = consumer;\n        this.property = property;\n        this.backRef = backRef;\n        this.data = data;\n    }\n}\n/**\n * # ================================\n *\n * Store Types\n *\n * # ================================\n */\nexport const STORE_TARGET = Symbol('store.target');\nexport const STORE_HANDLER = Symbol('store.handler');\nexport const STORE_ALL_PROPS = Symbol('store.all');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQTs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBUSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUErSXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFFcEI7SUFDQTtJQUNBO0lBQ0E7SUFKVCxZQUNTLFFBQWtCLEVBQ2xCLFFBQWlDLEVBQ2pDLFVBQXFDLElBQUksRUFDekMsT0FBZ0MsSUFBSTtRQUhwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQXlCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWtDO1FBQ3pDLFNBQUksR0FBSixJQUFJLENBQWdDO0lBQzFDLENBQUM7Q0FDTDtBQTJERDs7Ozs7O0dBTUc7QUFFSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGFzaywgVHJhY2tlciB9IGZyb20gJy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQgdHlwZSB7IFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsSW1wbCB9IGZyb20gJy4vaW1wbC9zaWduYWwtaW1wbCc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVyU3ltYm9sIH0gZnJvbSAnLi4vc2hhcmVkL3NlcmRlcy92ZXJpZnknO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEZuIH0gZnJvbSAnLi4vdXNlL3VzZS1jb21wdXRlZCc7XG5pbXBvcnQgdHlwZSB7IEFzeW5jRm4gfSBmcm9tICcuLi91c2UvdXNlLWFzeW5jJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBTZXJpYWxpemF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92bm9kZSc7XG5pbXBvcnQgdHlwZSB7IElTc3JOb2RlIH0gZnJvbSAnLi4vc3NyL3Nzci10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFByb3BzUHJveHkgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Byb3BzLXByb3h5JztcblxuLyoqXG4gKiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogU2lnbmFsIFR5cGVzXG4gKlxuICogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogU3BlY2lhbCB2YWx1ZSB1c2VkIHRvIG1hcmsgdGhhdCBhIGdpdmVuIHNpZ25hbCBuZWVkcyB0byBiZSBjb21wdXRlZC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhXG4gKiBcIm1hcmtlZCBhcyBkaXJ0eVwiIGZsYWcuXG4gKi9cbmV4cG9ydCBjb25zdCBORUVEU19DT01QVVRBVElPTjogYW55ID0gU3ltYm9sKCdpbnZhbGlkJyk7XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVRUkw8VD4gPSBRUkxJbnRlcm5hbDxDb21wdXRlZEZuPFQ+PjtcbmV4cG9ydCB0eXBlIEFzeW5jQ3R4PFQgPSB1bmtub3duPiA9IHtcbiAgdHJhY2s6IFRyYWNrZXI7XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNsZWFudXAgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGFzeW5jIGNvbXB1dGF0aW9uIGlzIGFib3J0ZWQgb3IgY29tcGxldGVkLlxuICAgKiBUaGUgbmV4dCBpbnZvY2F0aW9uIHdpbGwgYXdhaXQgdGhlIHByZXZpb3VzIGNsZWFudXAuIElmIHlvdSBkbyBub3Qgd2FudCB0aGlzLCBkbyBub3QgcmV0dXJuIGFcbiAgICogUHJvbWlzZS5cbiAgICovXG4gIGNsZWFudXA6IChjYWxsYmFjazogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBIGxhemlseSBjcmVhdGVkIEFib3J0U2lnbmFsLCBmb3IgaW50ZXJydXB0aW5nIHRoZSBhc3luYyBjb21wdXRhdGlvbiB3aGVuIG5lZWRlZCwgZS5nLiB3aGVuIHRoZVxuICAgKiBjb21wb25lbnQgaXMgdW5tb3VudGVkIG9yIHRoZSBjb21wdXRhdGlvbiBpcyBpbnZhbGlkYXRlZC4gUGFzcyBpdCB0byBgZmV0Y2hgIG9yIG90aGVyIEFQSXMgdGhhdFxuICAgKiBzdXBwb3J0IGl0IHRvIGVuc3VyZSB0aGF0IHVubmVjZXNzYXJ5IHdvcmsgaXMgbm90IHBlcmZvcm1lZC5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIGNvbXB1dGF0aW9uLCBpZiBhbnkgKi9cbiAgcmVhZG9ubHkgcHJldmlvdXM6IFQgfCB1bmRlZmluZWQ7XG4gIC8qKiBFeHRyYSBpbmZvIHBhc3NlZCB0byBgaW52YWxpZGF0ZShpbmZvKWAgZm9yIHRoaXMgY29tcHV0YXRpb24sIGlmIGFueS4gKi9cbiAgcmVhZG9ubHkgaW5mbz86IHVua25vd247XG59O1xuZXhwb3J0IHR5cGUgQXN5bmNRUkw8VD4gPSBRUkxJbnRlcm5hbDxBc3luY0ZuPFQ+PjtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRPcHRpb25zIHtcbiAgc2VyaWFsaXphdGlvblN0cmF0ZWd5PzogU2VyaWFsaXphdGlvblN0cmF0ZWd5O1xuICBjb250YWluZXI/OiBDb250YWluZXI7XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jU2lnbmFsT3B0aW9uczxUPiBleHRlbmRzIENvbXB1dGVkT3B0aW9ucyB7XG4gIC8qKiBMaWtlIHVzZVNpZ25hbCdzIGBpbml0aWFsYDsgcHJldmVudHMgdGhlIHRocm93IG9uIGZpcnN0IHJlYWQgd2hlbiB1bmluaXRpYWxpemVkICovXG4gIGluaXRpYWw/OiBUIHwgKCgpID0+IFQpO1xuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBjb21wdXRhdGlvbnMuIFVzZSBgMGAgZm9yIHVubGltaXRlZC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYDFgLlxuICAgKi9cbiAgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGVuIHN1YnNjcmliZXJzIGRyb3AgdG8gMCwgcnVuIGNsZWFudXAgaW4gdGhlIG5leHQgdGljaywgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgZnVuY3Rpb25cbiAgICogaW5wdXRzIHRvIGNoYW5nZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYCwgbWVhbmluZyBjbGVhbnVwIGhhcHBlbnMgb25seSB3aGVuIGlucHV0cyBjaGFuZ2UuXG4gICAqL1xuICBlYWdlckNsZWFudXA/OiBib29sZWFuO1xuICAvKipcbiAgICogVGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHZhbHVlIGV4cGlyZXMuXG4gICAqXG4gICAqIFdoZW4gdGhlIHZhbHVlIGV4cGlyZXMgYW5kIHN1YnNjcmliZXJzIGV4aXN0LCB0aGUgc2lnbmFsIGlzIGludmFsaWRhdGVkLiBJZiBgcG9sbGAgaXMgYHRydWVgXG4gICAqIChkZWZhdWx0KSwgdGhlIGZ1bmN0aW9uIGlzIHJlLXJ1biBhdXRvbWF0aWNhbGx5LiBJZiBgcG9sbGAgaXMgYGZhbHNlYCwgdGhlIHZhbHVlIGlzIG1hcmtlZFxuICAgKiBzdGFsZSBhbmQgcmVjb21wdXRhdGlvbiBoYXBwZW5zIHdoZW4gcmVhZGluZyBgLnZhbHVlYCBvciBgLmxvYWRpbmdgLlxuICAgKlxuICAgKiBgMGAgKGRlZmF1bHQpIG1lYW5zIG5vIGV4cGlyYXRpb24uXG4gICAqL1xuICBleHBpcmVzPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHJlLXJ1biB0aGUgZnVuY3Rpb24gd2hlbiB0aGUgdmFsdWUgZXhwaXJlcy4gT25seSByZWxldmFudCB3aGVuXG4gICAqIGBleHBpcmVzYCBpcyBzZXQuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHBvbGw/OiBib29sZWFuO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBleHBpcmVzYCBhbmQgYHBvbGxgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgdjIgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBhc3luYyBjb21wdXRhdGlvbiBpcyBwb3N0cG9uZWQgdG8gdGhlIGJyb3dzZXIuIE9uIFNTUiwgdGhlIHNpZ25hbCByZW1haW5zXG4gICAqIElOVkFMSUQgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uLiBPbiB0aGUgY2xpZW50LCBpdCB3aWxsIGNvbXB1dGUgb24gZmlyc3QgcmVhZC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGNsaWVudE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIHByZXZpb3VzIHZhbHVlIGlzIGtlcHQgd2hpbGUgdGhlIHNpZ25hbCByZS1jb21wdXRlcyBhZnRlclxuICAgKiBpbnZhbGlkYXRpb24sIHNvIHJlYWRzIHJldHVybiBzdGFsZSBkYXRhIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBwcm9taXNlLiBSZWFjdGl2aXR5IHdpbGwgdGhlblxuICAgKiB1cGRhdGUgdGhlIHJlYWRlcnMgd2hlbiB0aGUgbmV3IHZhbHVlIGlzIHJlYWR5LlxuICAgKlxuICAgKiBXaGVuIGZhbHNlLCBpbnZhbGlkYXRpb24gY2xlYXJzIHRoZSB2YWx1ZSBzbyByZWFkcyB0aHJvdyB0aGUgY29tcHV0YXRpb24gcHJvbWlzZSAobGlrZSB0aGVcbiAgICogaW5pdGlhbCBsb2FkKSwgd2hpY2ggaXMgdXNlZnVsIGZvciBuYXZpZ2F0aW9ucyB3aGVyZSBzaG93aW5nIG9sZCBkYXRhIHdvdWxkIGJlIGNvbmZ1c2luZy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHBvbGxpbmcgaW52YWxpZGF0aW9ucyAoYGV4cGlyZXNgIHdpdGggYHBvbGw6IHRydWVgKSBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uXG4gICAqIGFuZCB3aWxsIGtlZXAgdGhlIG9sZCB2YWx1ZSB3aGlsZSB0aGUgbmV3IHZhbHVlIGlzIGxvYWRpbmcsIHRvIGF2b2lkIGZsYXNoaW5nIGxvYWRlcnMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIG9ubHkgYWZmZWN0cyBtYW51YWwgaW52YWxpZGF0aW9ucyB2aWEgYGludmFsaWRhdGUoKWAsIGFuZCBub24tcG9sbGluZyBleHBpcmF0aW9uc1xuICAgKiAoYHBvbGw6IGZhbHNlYCwgb3IgdGhlcmUgYXJlIG5vIHN1YnNjcmliZXJzKS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgYWxsb3dTdGFsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBhc3luYyBjb21wdXRhdGlvbiB0byBjb21wbGV0ZS4gSWYgZXhjZWVkZWQsIHRoZVxuICAgKiBjb21wdXRhdGlvbiBpcyBhYm9ydGVkIGFuZCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqXG4gICAqIElmIGAwYCwgbm8gdGltZW91dCBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgMGAuXG4gICAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBTaWduYWxGbGFncyB7XG4gIElOVkFMSUQgPSAxLFxuICBSVU5fRUZGRUNUUyA9IDIsXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFdyYXBwZWRTaWduYWxGbGFncyB7XG4gIC8vIHNob3VsZCBzdWJzY3JpYmUgdG8gdmFsdWUgYW5kIGJlIHVud3JhcHBlZCBmb3IgUHJvcHNQcm94eVxuICBVTldSQVAgPSA0LFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3Mge1xuICBTRVJJQUxJWkFUSU9OX1NUUkFURUdZX05FVkVSID0gOCxcbiAgU0VSSUFMSVpBVElPTl9TVFJBVEVHWV9BTFdBWVMgPSAxNixcbiAgU0VSSUFMSVpBVElPTl9BTExfU1RSQVRFR0lFUyA9IFNFUklBTElaQVRJT05fU1RSQVRFR1lfTkVWRVIgfCBTRVJJQUxJWkFUSU9OX1NUUkFURUdZX0FMV0FZUyxcbiAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgaW4gdGhlIGZ1dHVyZVxuICAvLyBTRVJJQUxJWkFUSU9OX1NUUkFURUdZX0FVVE8gPSBTRVJJQUxJWkFUSU9OX1NUUkFURUdZX05FVkVSIHwgU0VSSUFMSVpBVElPTl9TVFJBVEVHWV9BTFdBWVMsXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEFzeW5jU2lnbmFsRmxhZ3Mge1xuICBFQUdFUl9DTEVBTlVQID0gMzIsXG4gIENMSUVOVF9PTkxZID0gNjQsXG4gIENMRUFSX09OX0lOVkFMSURBVEUgPSAxMjgsXG4gIE5PX1BPTEwgPSAyNTYsXG59XG5cbmV4cG9ydCB0eXBlIEFsbFNpZ25hbEZsYWdzID1cbiAgfCBTaWduYWxGbGFnc1xuICB8IFdyYXBwZWRTaWduYWxGbGFnc1xuICB8IFNlcmlhbGl6YXRpb25TaWduYWxGbGFnc1xuICB8IEFzeW5jU2lnbmFsRmxhZ3M7XG5cbi8qKlxuICogRWZmZWN0IGlzIHNvbWV0aGluZyB3aGljaCBuZWVkcyB0byBoYXBwZW4gKHNpZGUtZWZmZWN0KSBkdWUgdG8gc2lnbmFsIHZhbHVlIGNoYW5nZS5cbiAqXG4gKiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgZWZmZWN0czpcbiAqXG4gKiAtIGBUYXNrYDogYHVzZVRhc2tgLCBgdXNlVmlzaWJsZVRhc2tgLCBgdXNlUmVzb3VyY2VgXG4gKiAtIGBWTm9kZWAgYW5kIGBJU3NyTm9kZWA6IEVpdGhlciBhIGNvbXBvbmVudCBvciBgPFNpZ25hbD5gXG4gKiAtIGBTaWduYWwyYDogQSBkZXJpdmVkIHNpZ25hbCB3aGljaCBjb250YWlucyBhIGNvbXB1dGF0aW9uIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDb25zdW1lciA9IFRhc2sgfCBWTm9kZSB8IFNpZ25hbEltcGwgfCBJU3NyTm9kZTtcblxuLyoqXG4gKiBBbiBlZmZlY3QgY29uc3VtZXIgcGx1cyB0eXBlIG9mIGVmZmVjdCwgYmFjayByZWZlcmVuY2VzIHRvIHByb2R1Y2VycyBhbmQgYWRkaXRpb25hbCBkYXRhXG4gKlxuICogQW4gZWZmZWN0IGNhbiBiZSB0cmlnZ2VyIGJ5IG9uZSBvciBtb3JlIG9mIHNpZ25hbCBpbnB1dHMuIFRoZSBmaXJzdCBzdGVwIG9mIHJlLXJ1bm5pbmcgYW4gZWZmZWN0XG4gKiBpcyB0byBjbGVhciBpdHMgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IHRoZSBlZmZlY3QgY2FuIHJlIGFkZCBuZXcgc2V0IG9mIHN1YnNjcmlwdGlvbnMuIEluIG9yZGVyIHRvXG4gKiBjbGVhciB0aGUgc3Vic2NyaXB0aW9ucyB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gaGVyZS5cbiAqXG4gKiBJbWFnaW5lIHlvdSBoYXZlIGVmZmVjdCBzdWNoIGFzOlxuICpcbiAqIGBgYFxuICogZnVuY3Rpb24gZWZmZWN0MSgpIHtcbiAqICAgY29uc29sZS5sb2coc2lnbmFsQS52YWx1ZSA/IHNpZ25hbEIudmFsdWUgOiAnZGVmYXVsdCcpO1xuICogfVxuICogYGBgXG4gKlxuICogSW4gdGhlIGFib3ZlIGNhc2UgdGhlIGBzaWduYWxCYCBuZWVkcyB0byBiZSB1bnN1YnNjcmliZWQgd2hlbiBgc2lnbmFsQWAgaXMgZmFsc3kuIFdlIGRvIHRoaXMgYnlcbiAqIGFsd2F5cyBjbGVhcmluZyBhbGwgb2YgdGhlIHN1YnNjcmlwdGlvbnNcbiAqXG4gKiBUaGUgYEVmZmVjdFN1YnNjcmlwdGlvbmAgc3RvcmVzXG4gKlxuICogYGBgXG4gKiBzdWJzY3JpcHRpb24xID0gW2VmZmVjdENvbnN1bWVyMSwgRWZmZWN0UHJvcGVydHkuQ09NUE9ORU5ULCBTZXRbKHNpZ25hbEEsIHNpZ25hbEIpXV07XG4gKiBgYGBcbiAqXG4gKiBUaGUgYHNpZ25hbDFgIGFuZCBgc2lnbmFsMmAgYmFjayByZWZlcmVuY2VzIGFyZSBuZWVkZWQgdG8gXCJjbGVhclwiIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuXG4gKlxuICogQm90aCBgc2lnbmFsQWAgYXMgd2VsbCBhcyBgc2lnbmFsQmAgd2lsbCBoYXZlIGEgcmVmZXJlbmNlIHRvIGBzdWJzY3JpcHRpb25gIHRvIHRoZSBzbyB0aGF0IHRoZVxuICogZWZmZWN0IGNhbiBiZSBzY2hlZHVsZWQgaWYgZWl0aGVyIGBzaWduYWxBYCBvciBgc2lnbmFsQmAgdHJpZ2dlcnMuIFRoZSBgc3Vic2NyaXB0aW9uMWAgaXMgc2hhcmVkXG4gKiBiZXR3ZWVuIHRoZSBzaWduYWxzLlxuICpcbiAqIFRoZSBzZWNvbmQgcG9zaXRpb24gYEVmZmVjdFByb3BlcnR5fHN0cmluZ2Agc3RvcmUgdGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIGVmZmVjdC5cbiAqXG4gKiAtIFByb3BlcnR5IG5hbWUgb2YgdGhlIFZOb2RlXG4gKiAtIGBFZmZlY3RQcm9wZXJ0eS5DT01QT05FTlRgIGlmIGNvbXBvbmVudFxuICogLSBgRWZmZWN0UHJvcGVydHkuVk5PREVgIGlmIFZOb2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBFZmZlY3RTdWJzY3JpcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29uc3VtZXI6IENvbnN1bWVyLFxuICAgIHB1YmxpYyBwcm9wZXJ0eTogRWZmZWN0UHJvcGVydHkgfCBzdHJpbmcsXG4gICAgcHVibGljIGJhY2tSZWY6IFNldDxFZmZlY3RCYWNrUmVmPiB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBkYXRhOiBTdWJzY3JpcHRpb25EYXRhIHwgbnVsbCA9IG51bGxcbiAgKSB7fVxufVxuXG5leHBvcnQgdHlwZSBFZmZlY3RCYWNrUmVmID0gU2lnbmFsSW1wbCB8IFN0b3JlVGFyZ2V0IHwgUHJvcHNQcm94eTtcblxuZXhwb3J0IGNvbnN0IGVudW0gRWZmZWN0UHJvcGVydHkge1xuICBDT01QT05FTlQgPSAnOicsXG4gIFZOT0RFID0gJy4nLFxufVxuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplckFyZ09iamVjdDxULCBTPiA9IHtcbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgd2l0aCBpbml0aWFsIG9yIHNlcmlhbGl6ZWQgZGF0YSB0byByZWNvbnN0cnVjdCBhbiBvYmplY3QuIElmIG5vXG4gICAqIGBpbml0aWFsRGF0YWAgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqIFRoaXMgbXVzdCBub3QgcmV0dXJuIGEgUHJvbWlzZS5cbiAgICovXG4gIGRlc2VyaWFsaXplOiAoZGF0YTogQXdhaXRlZDxTPikgPT4gVDtcbiAgLyoqIFRoZSBpbml0aWFsIHZhbHVlIHRvIHVzZSB3aGVuIGRlc2VyaWFsaXppbmcuICovXG4gIGluaXRpYWw/OiBTIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBvYmplY3QgdG8gZ2V0IHRoZSBzZXJpYWxpemVkIGRhdGEuIFlvdSBjYW4gcmV0dXJuIGEgUHJvbWlzZSBpZiB5b3VcbiAgICogbmVlZCB0byBkbyBhc3luYyB3b3JrLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0IG1heSBiZSBhbnl0aGluZyB0aGF0IFF3aWsgY2FuIHNlcmlhbGl6ZS5cbiAgICpcbiAgICogSWYgeW91IGRvIG5vdCBwcm92aWRlIGl0LCB0aGUgb2JqZWN0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBgdW5kZWZpbmVkYC4gSG93ZXZlciwgaWYgdGhlIG9iamVjdFxuICAgKiBoYXMgYSBgW1NlcmlhbGl6ZXJTeW1ib2xdYCBwcm9wZXJ0eSwgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlcmlhbGl6ZXIgaW5zdGVhZC5cbiAgICovXG4gIHNlcmlhbGl6ZT86IChvYmo6IFQpID0+IFM7XG59O1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgY3VzdG9tIG9iamVjdHMuXG4gKlxuICogSWYgeW91IG5lZWQgdG8gdXNlIHNjb3BlZCBzdGF0ZSwgeW91IGNhbiBwYXNzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBvYmplY3QuIFRoZSBmdW5jdGlvbiB3aWxsXG4gKiBiZSBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSwgYW5kIHlvdSBjYW4gcmV0dXJuIGEgbmV3IHZhbHVlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplckFyZzxULCBTPiA9XG4gIHwgU2VyaWFsaXplckFyZ09iamVjdDxULCBTPlxuICB8ICgoKSA9PiBTZXJpYWxpemVyQXJnT2JqZWN0PFQsIFM+ICYge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gcmVhY3RpdmUgc3RhdGUgdXNlZCBkdXJpbmcgYGRlc2VyaWFsaXplYCBjaGFuZ2VzLiBZb3UgbWF5IG11dGF0ZSB0aGVcbiAgICAgICAqIGN1cnJlbnQgb2JqZWN0LCBvciByZXR1cm4gYSBuZXcgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIElmIGl0IHJldHVybnMgYSB2YWx1ZSwgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIG5ldyB2YWx1ZSwgYW5kIGxpc3RlbmVycyB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgICAqIElmIG5vIGNoYW5nZSBoYXBwZW5lZCwgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAgICpcbiAgICAgICAqIElmIHlvdSBtdXRhdGUgdGhlIGN1cnJlbnQgb2JqZWN0LCB5b3UgbXVzdCByZXR1cm4gaXQgc28gdGhhdCBpdCB3aWxsIHRyaWdnZXIgbGlzdGVuZXJzLlxuICAgICAgICovXG4gICAgICB1cGRhdGU/OiAoY3VycmVudDogVCkgPT4gVCB8IHZvaWQ7XG4gICAgfSk7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbVNlcmlhbGl6YWJsZTxUIGV4dGVuZHMgeyBbU2VyaWFsaXplclN5bWJvbF06IChvYmo6IGFueSkgPT4gYW55IH0sIFM+ID0ge1xuICBbU2VyaWFsaXplclN5bWJvbF06IChvYmo6IFQpID0+IFM7XG59O1xuXG4vKipcbiAqICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBTdG9yZSBUeXBlc1xuICpcbiAqICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5leHBvcnQgY29uc3QgU1RPUkVfVEFSR0VUID0gU3ltYm9sKCdzdG9yZS50YXJnZXQnKTtcbmV4cG9ydCBjb25zdCBTVE9SRV9IQU5ETEVSID0gU3ltYm9sKCdzdG9yZS5oYW5kbGVyJyk7XG5leHBvcnQgY29uc3QgU1RPUkVfQUxMX1BST1BTID0gU3ltYm9sKCdzdG9yZS5hbGwnKTtcblxuZXhwb3J0IHR5cGUgU3RvcmVUYXJnZXQgPSBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCBhbnk+O1xuXG5leHBvcnQgY29uc3QgZW51bSBTdG9yZUZsYWdzIHtcbiAgTk9ORSA9IDAsXG4gIFJFQ1VSU0lWRSA9IDEsXG4gIElNTVVUQUJMRSA9IDIsXG59XG4iXX0=","import { isServer } from '@qwik.dev/core/build';\nimport { QBackRefs } from '../shared/utils/markers';\nimport { EffectSubscription } from './types';\nimport { _EFFECT_BACK_REF } from './backref';\nexport function getSubscriber(effect, prop, data) {\n    if (!effect[_EFFECT_BACK_REF]) {\n        if (isServer && isSsrNode(effect)) {\n            effect.setProp(QBackRefs, new Map());\n        }\n        else {\n            effect[_EFFECT_BACK_REF] = new Map();\n        }\n    }\n    const subMap = effect[_EFFECT_BACK_REF];\n    let sub = subMap.get(prop);\n    if (!sub) {\n        sub = new EffectSubscription(effect, prop);\n        subMap.set(prop, sub);\n    }\n    if (data) {\n        sub.data = data;\n    }\n    return sub;\n}\nexport function isSsrNode(value) {\n    return '__brand__' in value && value.__brand__ === 'SsrNode';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmliZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQTRCLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxXQUFXLENBQUM7QUFHM0QsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsTUFBZ0IsRUFDaEIsSUFBNkIsRUFDN0IsSUFBdUI7SUFFdkIsSUFBSSxDQUFFLE1BQWtCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNMLE1BQWtCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUksTUFBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsSUFBSSxHQUFHLEdBQXVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsR0FBRyxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLFdBQVcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgUUJhY2tSZWZzIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHR5cGUgeyBJU3NyTm9kZSB9IGZyb20gJy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHsgQ29uc3VtZXIsIEVmZmVjdFByb3BlcnR5LCBFZmZlY3RTdWJzY3JpcHRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IF9FRkZFQ1RfQkFDS19SRUYsIHR5cGUgQmFja1JlZiB9IGZyb20gJy4vYmFja3JlZic7XG5pbXBvcnQgdHlwZSB7IFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1kYXRhJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN1YnNjcmliZXIoXG4gIGVmZmVjdDogQ29uc3VtZXIsXG4gIHByb3A6IEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLFxuICBkYXRhPzogU3Vic2NyaXB0aW9uRGF0YVxuKTogRWZmZWN0U3Vic2NyaXB0aW9uIHtcbiAgaWYgKCEoZWZmZWN0IGFzIEJhY2tSZWYpW19FRkZFQ1RfQkFDS19SRUZdKSB7XG4gICAgaWYgKGlzU2VydmVyICYmIGlzU3NyTm9kZShlZmZlY3QpKSB7XG4gICAgICBlZmZlY3Quc2V0UHJvcChRQmFja1JlZnMsIG5ldyBNYXAoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIChlZmZlY3QgYXMgQmFja1JlZilbX0VGRkVDVF9CQUNLX1JFRl0gPSBuZXcgTWFwKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHN1Yk1hcCA9IChlZmZlY3QgYXMgYW55KVtfRUZGRUNUX0JBQ0tfUkVGXTtcbiAgbGV0IHN1YjogRWZmZWN0U3Vic2NyaXB0aW9uID0gc3ViTWFwLmdldChwcm9wKTtcbiAgaWYgKCFzdWIpIHtcbiAgICBzdWIgPSBuZXcgRWZmZWN0U3Vic2NyaXB0aW9uKGVmZmVjdCwgcHJvcCk7XG4gICAgc3ViTWFwLnNldChwcm9wLCBzdWIpO1xuICB9XG4gIGlmIChkYXRhKSB7XG4gICAgc3ViLmRhdGEgPSBkYXRhO1xuICB9XG4gIHJldHVybiBzdWI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Nzck5vZGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIElTc3JOb2RlIHtcbiAgcmV0dXJuICdfX2JyYW5kX18nIGluIHZhbHVlICYmIHZhbHVlLl9fYnJhbmRfXyA9PT0gJ1Nzck5vZGUnO1xufVxuIl19","import { addStoreEffect, getStoreHandler, getStoreTarget, isStore, } from '../../reactive-primitives/impl/store';\nimport { getSubscriber } from '../../reactive-primitives/subscriber';\nimport { STORE_ALL_PROPS } from '../../reactive-primitives/types';\nimport { isSignal } from '../../reactive-primitives/utils';\nimport { qError } from '../../shared/error/error';\nimport { isPromise } from '../../shared/utils/promises';\nimport { isFunction, isObject } from '../../shared/utils/types';\nimport { invoke, newInvokeContext } from '../use-core';\nexport const trackFn = (target, container) => (obj, prop) => {\n    const ctx = newInvokeContext();\n    ctx.$effectSubscriber$ = getSubscriber(target, \":\" /* EffectProperty.COMPONENT */);\n    ctx.$container$ = container || undefined;\n    return invoke(ctx, () => {\n        if (isFunction(obj)) {\n            return obj();\n        }\n        if (prop) {\n            return obj[prop];\n        }\n        else if (isSignal(obj)) {\n            return obj.value;\n        }\n        else if (isObject(obj) && isStore(obj)) {\n            // TODO: handle props proxy\n            // track whole store\n            addStoreEffect(getStoreTarget(obj), STORE_ALL_PROPS, getStoreHandler(obj), ctx.$effectSubscriber$);\n            return obj;\n        }\n        else {\n            throw qError(2 /* QError.trackObjectWithoutProp */);\n        }\n    });\n};\n/**\n * This adds $destroy$ to the target if a cleanup function is registered. It must be called before\n * running any computations again.\n */\nexport const cleanupFn = (target, handleError) => {\n    let cleanupFns = null;\n    const cleanup = (fn) => {\n        if (typeof fn == 'function') {\n            if (!cleanupFns) {\n                cleanupFns = [];\n                target.$destroy$ = () => {\n                    target.$destroy$ = null;\n                    let cleanupPromises = null;\n                    for (let i = 0; i < cleanupFns.length; i++) {\n                        const fn = cleanupFns[i];\n                        try {\n                            const result = fn();\n                            if (isPromise(result)) {\n                                (cleanupPromises ||= []).push(result.catch(handleError));\n                            }\n                        }\n                        catch (err) {\n                            handleError(err);\n                        }\n                    }\n                    cleanupFns = null;\n                    if (cleanupPromises?.length) {\n                        return Promise.all(cleanupPromises).then(() => undefined);\n                    }\n                };\n            }\n            cleanupFns.push(fn);\n        }\n    };\n    return [cleanup, cleanupFns ?? []];\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXRpbHMvdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEVBQ2QsT0FBTyxHQUNSLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBa0IsZUFBZSxFQUFpQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFVLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUF1QixNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJdkQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUNsQixDQUFDLE1BQWdCLEVBQUUsU0FBMkIsRUFBVyxFQUFFLENBQzNELENBQUMsR0FBK0MsRUFBRSxJQUFhLEVBQUUsRUFBRTtJQUNqRSxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUMsTUFBTSxxQ0FBMkIsQ0FBQztJQUN6RSxHQUFHLENBQUMsV0FBVyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUM7SUFDekMsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUN0QixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE9BQVEsR0FBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLDJCQUEyQjtZQUMzQixvQkFBb0I7WUFDcEIsY0FBYyxDQUNaLGNBQWMsQ0FBQyxHQUFHLENBQUUsRUFDcEIsZUFBZSxFQUNmLGVBQWUsQ0FBQyxHQUFHLENBQUUsRUFDckIsR0FBRyxDQUFDLGtCQUFtQixDQUN4QixDQUFDO1lBQ0YsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSx1Q0FBK0IsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFSjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsTUFBUyxFQUNULFdBQW1DLEVBQytDLEVBQUU7SUFDcEYsSUFBSSxVQUFVLEdBQTBDLElBQUksQ0FBQztJQUM3RCxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQThCLEVBQUUsRUFBRTtRQUNqRCxJQUFJLE9BQU8sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7b0JBQ3RCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUN4QixJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO29CQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUM1QyxNQUFNLEVBQUUsR0FBRyxVQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLElBQUksQ0FBQzs0QkFDSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQzs0QkFDcEIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQ0FDdEIsQ0FBQyxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDM0QsQ0FBQzt3QkFDSCxDQUFDO3dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7NEJBQ2IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQixDQUFDO29CQUNILENBQUM7b0JBQ0QsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDbEIsSUFBSSxlQUFlLEVBQUUsTUFBTSxFQUFFLENBQUM7d0JBQzVCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzVELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFkZFN0b3JlRWZmZWN0LFxuICBnZXRTdG9yZUhhbmRsZXIsXG4gIGdldFN0b3JlVGFyZ2V0LFxuICBpc1N0b3JlLFxufSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHsgZ2V0U3Vic2NyaWJlciB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc3Vic2NyaWJlcic7XG5pbXBvcnQgeyBFZmZlY3RQcm9wZXJ0eSwgU1RPUkVfQUxMX1BST1BTLCB0eXBlIENvbnN1bWVyIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBpc1NpZ25hbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvdXRpbHMnO1xuaW1wb3J0IHsgcUVycm9yLCBRRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCB0eXBlIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IGludm9rZSwgbmV3SW52b2tlQ29udGV4dCB9IGZyb20gJy4uL3VzZS1jb3JlJztcbmltcG9ydCB7IHR5cGUgVHJhY2tlciB9IGZyb20gJy4uL3VzZS10YXNrJztcbmltcG9ydCB0eXBlIHsgRGVzdHJveWFibGUgfSBmcm9tICcuL2Rlc3Ryb3lhYmxlJztcblxuZXhwb3J0IGNvbnN0IHRyYWNrRm4gPVxuICAodGFyZ2V0OiBDb25zdW1lciwgY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsKTogVHJhY2tlciA9PlxuICAob2JqOiAoKCkgPT4gdW5rbm93bikgfCBvYmplY3QgfCBTaWduYWw8dW5rbm93bj4sIHByb3A/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBjdHggPSBuZXdJbnZva2VDb250ZXh0KCk7XG4gICAgY3R4LiRlZmZlY3RTdWJzY3JpYmVyJCA9IGdldFN1YnNjcmliZXIodGFyZ2V0LCBFZmZlY3RQcm9wZXJ0eS5DT01QT05FTlQpO1xuICAgIGN0eC4kY29udGFpbmVyJCA9IGNvbnRhaW5lciB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGludm9rZShjdHgsICgpID0+IHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iaigpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIChvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmIChpc1NpZ25hbChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KG9iaikgJiYgaXNTdG9yZShvYmopKSB7XG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBwcm9wcyBwcm94eVxuICAgICAgICAvLyB0cmFjayB3aG9sZSBzdG9yZVxuICAgICAgICBhZGRTdG9yZUVmZmVjdChcbiAgICAgICAgICBnZXRTdG9yZVRhcmdldChvYmopISxcbiAgICAgICAgICBTVE9SRV9BTExfUFJPUFMsXG4gICAgICAgICAgZ2V0U3RvcmVIYW5kbGVyKG9iaikhLFxuICAgICAgICAgIGN0eC4kZWZmZWN0U3Vic2NyaWJlciQhXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnRyYWNrT2JqZWN0V2l0aG91dFByb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFRoaXMgYWRkcyAkZGVzdHJveSQgdG8gdGhlIHRhcmdldCBpZiBhIGNsZWFudXAgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZC4gSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlXG4gKiBydW5uaW5nIGFueSBjb21wdXRhdGlvbnMgYWdhaW4uXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhbnVwRm4gPSA8VCBleHRlbmRzIERlc3Ryb3lhYmxlPihcbiAgdGFyZ2V0OiBULFxuICBoYW5kbGVFcnJvcjogKGVycjogdW5rbm93bikgPT4gdm9pZFxuKTogWyhjYWxsYmFjazogKCkgPT4gVmFsdWVPclByb21pc2U8dm9pZD4pID0+IHZvaWQsICgoKSA9PiBWYWx1ZU9yUHJvbWlzZTx2b2lkPilbXV0gPT4ge1xuICBsZXQgY2xlYW51cEZuczogKCgpID0+IFZhbHVlT3JQcm9taXNlPHZvaWQ+KVtdIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGNsZWFudXAgPSAoZm46ICgpID0+IFZhbHVlT3JQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoIWNsZWFudXBGbnMpIHtcbiAgICAgICAgY2xlYW51cEZucyA9IFtdO1xuICAgICAgICB0YXJnZXQuJGRlc3Ryb3kkID0gKCkgPT4ge1xuICAgICAgICAgIHRhcmdldC4kZGVzdHJveSQgPSBudWxsO1xuICAgICAgICAgIGxldCBjbGVhbnVwUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xlYW51cEZucyEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gY2xlYW51cEZucyFbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbigpO1xuICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAoY2xlYW51cFByb21pc2VzIHx8PSBbXSkucHVzaChyZXN1bHQuY2F0Y2goaGFuZGxlRXJyb3IpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsZWFudXBGbnMgPSBudWxsO1xuICAgICAgICAgIGlmIChjbGVhbnVwUHJvbWlzZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNsZWFudXBQcm9taXNlcykudGhlbigoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNsZWFudXBGbnMucHVzaChmbik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gW2NsZWFudXAsIGNsZWFudXBGbnMgPz8gW11dO1xufTtcbiJdfQ==","import { isDev, isServer } from '@qwik.dev/core/build';\nimport { pad, qwikDebugToString } from '../../debug';\nimport { assertTrue } from '../../shared/error/assert';\nimport { qError } from '../../shared/error/error';\nimport { isSameContainer } from '../../shared/utils/container';\nimport { qDev, qTest } from '../../shared/utils/qdev';\nimport { tryGetInvokeContext } from '../../use/use-core';\nimport { addQrlToSerializationCtx, ensureContainsBackRef, ensureContainsSubscription, getEffectSerializationContainer, scheduleEffects, } from '../utils';\nimport { isServerPlatform } from '../../shared/platform/platform';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('SIGNAL', ...args.map(qwikDebugToString));\nexport class SignalImpl {\n    $untrackedValue$;\n    /** Store a list of effects which are dependent on this signal. */\n    $effects$ = undefined;\n    $container$ = null;\n    $wrappedSignal$ = null;\n    constructor(container, value) {\n        this.$container$ = container || tryGetInvokeContext()?.$container$ || null;\n        this.$untrackedValue$ = value;\n        DEBUG && log('new', this);\n    }\n    /**\n     * Use this to trigger running subscribers, for example when the calculated value has mutated but\n     * remained the same object\n     */\n    trigger() {\n        scheduleEffects(this.$container$, this, this.$effects$);\n    }\n    /** @deprecated Use `trigger()` instead */\n    force() {\n        scheduleEffects(this.$container$, this, this.$effects$);\n    }\n    // We need this to be getter/setter so subclasses can override them\n    get untrackedValue() {\n        return this.$untrackedValue$;\n    }\n    set untrackedValue(value) {\n        this.$untrackedValue$ = value;\n    }\n    get value() {\n        // Important: first read, then subscribe. Otherwise, initial compute invalidation will cause the reading subscriber to be marked invalid.\n        const val = this.untrackedValue;\n        const ctx = tryGetInvokeContext();\n        if (!ctx) {\n            DEBUG && log('read->no-ctx', pad('\\n' + this.toString(), '  '));\n            return val;\n        }\n        if (this.$container$ === null) {\n            // Grab the container now we have access to it\n            this.$container$ = ctx.$container$;\n        }\n        else {\n            isDev &&\n                assertTrue(!ctx.$container$ || isSameContainer(ctx.$container$, this.$container$), 'Do not use signals across containers');\n        }\n        const effectSubscriber = ctx.$effectSubscriber$;\n        if (effectSubscriber) {\n            // Let's make sure that we have a reference to this effect.\n            // Adding reference is essentially adding a subscription, so if the signal\n            // changes we know who to notify.\n            const isOnServer = qTest ? isServerPlatform() : isServer;\n            const effects = (this.$effects$ ||= new Set());\n            const shouldRecordExternalRootEffect = __EXPERIMENTAL__.suspense && isOnServer;\n            ensureContainsSubscription(effects, effectSubscriber);\n            // But when effect is scheduled in needs to be able to know which signals\n            // to unsubscribe from. So we need to store the reference from the effect back\n            // to this signal.\n            ensureContainsBackRef(effectSubscriber, this);\n            if (isOnServer) {\n                const serializationContainer = getEffectSerializationContainer(ctx.$container$, this.$container$);\n                if (shouldRecordExternalRootEffect) {\n                    serializationContainer?.$recordExternalRootEffect$?.(this, effectSubscriber, null);\n                }\n                addQrlToSerializationCtx(effectSubscriber, serializationContainer);\n            }\n            DEBUG && log('read->sub', pad('\\n' + this.toString(), '  '));\n        }\n        else {\n            DEBUG && log('read no sub', pad('\\n' + this.toString(), '  '));\n        }\n        return val;\n    }\n    set value(value) {\n        if (value !== this.$untrackedValue$) {\n            DEBUG &&\n                log('Signal.set', this.$untrackedValue$, '->', value, pad('\\n' + this.toString(), '  '), this.$effects$ ? 'subs: ' + this.$effects$.size : 'no subs');\n            this.$untrackedValue$ = value;\n            scheduleEffects(this.$container$, this, this.$effects$);\n        }\n    }\n    // prevent accidental use as value\n    valueOf() {\n        if (qDev) {\n            throw qError(28 /* QError.cannotCoerceSignal */);\n        }\n    }\n    toString() {\n        if (isDev) {\n            try {\n                return (`[${this.constructor.name}${this.$flags$ & 1 /* SignalFlags.INVALID */ ? ' INVALID' : ''} ${this.$untrackedValue$}]` +\n                    (Array.from(this.$effects$ || [])\n                        .map((e) => '\\n -> ' + pad(qwikDebugToString(e.consumer), '    '))\n                        .join('\\n') || ''));\n            }\n            catch (e) {\n                return `[${this.constructor.name} <cannot stringify>]`;\n            }\n        }\n        else {\n            return this.constructor.name;\n        }\n    }\n    toJSON() {\n        return { value: this.$untrackedValue$ };\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLWltcGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3NpZ25hbC1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBVSxNQUFNLDBCQUEwQixDQUFDO0FBRTFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQiwrQkFBK0IsRUFDL0IsZUFBZSxHQUNoQixNQUFNLFVBQVUsQ0FBQztBQUlsQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDcEIsc0NBQXNDO0FBQ3RDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFFdEYsTUFBTSxPQUFPLFVBQVU7SUFDckIsZ0JBQWdCLENBQUk7SUFFcEIsa0VBQWtFO0lBQ2xFLFNBQVMsR0FBd0MsU0FBUyxDQUFDO0lBQzNELFdBQVcsR0FBcUIsSUFBSSxD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QUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUksSUFBWSxDQUFDLE9BQU8sOEJBQXNCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztvQkFDckgsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO3lCQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3lCQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQ3JCLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHNCQUFzQixDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNO1FBQ0osT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiwgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBwYWQsIHF3aWtEZWJ1Z1RvU3RyaW5nIH0gZnJvbSAnLi4vLi4vZGVidWcnO1xuaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgcUVycm9yLCBRRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNTYW1lQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzL2NvbnRhaW5lcic7XG5pbXBvcnQgeyBxRGV2LCBxVGVzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IHRyeUdldEludm9rZUNvbnRleHQgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHtcbiAgYWRkUXJsVG9TZXJpYWxpemF0aW9uQ3R4LFxuICBlbnN1cmVDb250YWluc0JhY2tSZWYsXG4gIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uLFxuICBnZXRFZmZlY3RTZXJpYWxpemF0aW9uQ29udGFpbmVyLFxuICBzY2hlZHVsZUVmZmVjdHMsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBTaWduYWxGbGFncywgdHlwZSBFZmZlY3RTdWJzY3JpcHRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRTaWduYWxJbXBsIH0gZnJvbSAnLi93cmFwcGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuaW1wb3J0IHR5cGUgeyBTU1JTZWdtZW50Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc3NyL3Nzci10eXBlcyc7XG5cbmNvbnN0IERFQlVHID0gZmFsc2U7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuY29uc3QgbG9nID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZygnU0lHTkFMJywgLi4uYXJncy5tYXAocXdpa0RlYnVnVG9TdHJpbmcpKTtcblxuZXhwb3J0IGNsYXNzIFNpZ25hbEltcGw8VCA9IGFueT4gaW1wbGVtZW50cyBTaWduYWw8VD4ge1xuICAkdW50cmFja2VkVmFsdWUkOiBUO1xuXG4gIC8qKiBTdG9yZSBhIGxpc3Qgb2YgZWZmZWN0cyB3aGljaCBhcmUgZGVwZW5kZW50IG9uIHRoaXMgc2lnbmFsLiAqL1xuICAkZWZmZWN0cyQ6IHVuZGVmaW5lZCB8IFNldDxFZmZlY3RTdWJzY3JpcHRpb24+ID0gdW5kZWZpbmVkO1xuICAkY29udGFpbmVyJDogQ29udGFpbmVyIHwgbnVsbCA9IG51bGw7XG4gICR3cmFwcGVkU2lnbmFsJDogV3JhcHBlZFNpZ25hbEltcGw8VD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IENvbnRhaW5lciB8IG51bGwgfCB1bmRlZmluZWQsIHZhbHVlOiBUKSB7XG4gICAgdGhpcy4kY29udGFpbmVyJCA9IGNvbnRhaW5lciB8fCB0cnlHZXRJbnZva2VDb250ZXh0KCk/LiRjb250YWluZXIkIHx8IG51bGw7XG4gICAgdGhpcy4kdW50cmFja2VkVmFsdWUkID0gdmFsdWU7XG4gICAgREVCVUcgJiYgbG9nKCduZXcnLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byB0cmlnZ2VyIHJ1bm5pbmcgc3Vic2NyaWJlcnMsIGZvciBleGFtcGxlIHdoZW4gdGhlIGNhbGN1bGF0ZWQgdmFsdWUgaGFzIG11dGF0ZWQgYnV0XG4gICAqIHJlbWFpbmVkIHRoZSBzYW1lIG9iamVjdFxuICAgKi9cbiAgdHJpZ2dlcigpIHtcbiAgICBzY2hlZHVsZUVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgdGhpcy4kZWZmZWN0cyQpO1xuICB9XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYHRyaWdnZXIoKWAgaW5zdGVhZCAqL1xuICBmb3JjZSgpIHtcbiAgICBzY2hlZHVsZUVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgdGhpcy4kZWZmZWN0cyQpO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGdldHRlci9zZXR0ZXIgc28gc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhlbVxuICBnZXQgdW50cmFja2VkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuJHVudHJhY2tlZFZhbHVlJDtcbiAgfVxuICBzZXQgdW50cmFja2VkVmFsdWUodmFsdWU6IFQpIHtcbiAgICB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICAvLyBJbXBvcnRhbnQ6IGZpcnN0IHJlYWQsIHRoZW4gc3Vic2NyaWJlLiBPdGhlcndpc2UsIGluaXRpYWwgY29tcHV0ZSBpbnZhbGlkYXRpb24gd2lsbCBjYXVzZSB0aGUgcmVhZGluZyBzdWJzY3JpYmVyIHRvIGJlIG1hcmtlZCBpbnZhbGlkLlxuICAgIGNvbnN0IHZhbCA9IHRoaXMudW50cmFja2VkVmFsdWU7XG4gICAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICAgIGlmICghY3R4KSB7XG4gICAgICBERUJVRyAmJiBsb2coJ3JlYWQtPm5vLWN0eCcsIHBhZCgnXFxuJyArIHRoaXMudG9TdHJpbmcoKSwgJyAgJykpO1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuJGNvbnRhaW5lciQgPT09IG51bGwpIHtcbiAgICAgIC8vIEdyYWIgdGhlIGNvbnRhaW5lciBub3cgd2UgaGF2ZSBhY2Nlc3MgdG8gaXRcbiAgICAgIHRoaXMuJGNvbnRhaW5lciQgPSBjdHguJGNvbnRhaW5lciQhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0RldiAmJlxuICAgICAgICBhc3NlcnRUcnVlKFxuICAgICAgICAgICFjdHguJGNvbnRhaW5lciQgfHwgaXNTYW1lQ29udGFpbmVyKGN0eC4kY29udGFpbmVyJCwgdGhpcy4kY29udGFpbmVyJCksXG4gICAgICAgICAgJ0RvIG5vdCB1c2Ugc2lnbmFscyBhY3Jvc3MgY29udGFpbmVycydcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZWZmZWN0U3Vic2NyaWJlciA9IGN0eC4kZWZmZWN0U3Vic2NyaWJlciQ7XG4gICAgaWYgKGVmZmVjdFN1YnNjcmliZXIpIHtcbiAgICAgIC8vIExldCdzIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gdGhpcyBlZmZlY3QuXG4gICAgICAvLyBBZGRpbmcgcmVmZXJlbmNlIGlzIGVzc2VudGlhbGx5IGFkZGluZyBhIHN1YnNjcmlwdGlvbiwgc28gaWYgdGhlIHNpZ25hbFxuICAgICAgLy8gY2hhbmdlcyB3ZSBrbm93IHdobyB0byBub3RpZnkuXG4gICAgICBjb25zdCBpc09uU2VydmVyID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcjtcbiAgICAgIGNvbnN0IGVmZmVjdHMgPSAodGhpcy4kZWZmZWN0cyQgfHw9IG5ldyBTZXQoKSk7XG4gICAgICBjb25zdCBzaG91bGRSZWNvcmRFeHRlcm5hbFJvb3RFZmZlY3QgPSBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIGlzT25TZXJ2ZXI7XG5cbiAgICAgIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uKGVmZmVjdHMsIGVmZmVjdFN1YnNjcmliZXIpO1xuICAgICAgLy8gQnV0IHdoZW4gZWZmZWN0IGlzIHNjaGVkdWxlZCBpbiBuZWVkcyB0byBiZSBhYmxlIHRvIGtub3cgd2hpY2ggc2lnbmFsc1xuICAgICAgLy8gdG8gdW5zdWJzY3JpYmUgZnJvbS4gU28gd2UgbmVlZCB0byBzdG9yZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGVmZmVjdCBiYWNrXG4gICAgICAvLyB0byB0aGlzIHNpZ25hbC5cbiAgICAgIGVuc3VyZUNvbnRhaW5zQmFja1JlZihlZmZlY3RTdWJzY3JpYmVyLCB0aGlzKTtcblxuICAgICAgaWYgKGlzT25TZXJ2ZXIpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXphdGlvbkNvbnRhaW5lciA9IGdldEVmZmVjdFNlcmlhbGl6YXRpb25Db250YWluZXIoXG4gICAgICAgICAgY3R4LiRjb250YWluZXIkLFxuICAgICAgICAgIHRoaXMuJGNvbnRhaW5lciRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNob3VsZFJlY29yZEV4dGVybmFsUm9vdEVmZmVjdCkge1xuICAgICAgICAgIChzZXJpYWxpemF0aW9uQ29udGFpbmVyIGFzIFNTUlNlZ21lbnRDb250YWluZXIgfCBudWxsKT8uJHJlY29yZEV4dGVybmFsUm9vdEVmZmVjdCQ/LihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBlZmZlY3RTdWJzY3JpYmVyLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkUXJsVG9TZXJpYWxpemF0aW9uQ3R4KGVmZmVjdFN1YnNjcmliZXIsIHNlcmlhbGl6YXRpb25Db250YWluZXIpO1xuICAgICAgfVxuICAgICAgREVCVUcgJiYgbG9nKCdyZWFkLT5zdWInLCBwYWQoJ1xcbicgKyB0aGlzLnRvU3RyaW5nKCksICcgICcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgREVCVUcgJiYgbG9nKCdyZWFkIG5vIHN1YicsIHBhZCgnXFxuJyArIHRoaXMudG9TdHJpbmcoKSwgJyAgJykpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQpIHtcbiAgICAgIERFQlVHICYmXG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnU2lnbmFsLnNldCcsXG4gICAgICAgICAgdGhpcy4kdW50cmFja2VkVmFsdWUkLFxuICAgICAgICAgICctPicsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcGFkKCdcXG4nICsgdGhpcy50b1N0cmluZygpLCAnICAnKSxcbiAgICAgICAgICB0aGlzLiRlZmZlY3RzJCA/ICdzdWJzOiAnICsgdGhpcy4kZWZmZWN0cyQuc2l6ZSA6ICdubyBzdWJzJ1xuICAgICAgICApO1xuICAgICAgdGhpcy4kdW50cmFja2VkVmFsdWUkID0gdmFsdWU7XG4gICAgICBzY2hlZHVsZUVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgdGhpcy4kZWZmZWN0cyQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCB1c2UgYXMgdmFsdWVcbiAgdmFsdWVPZigpIHtcbiAgICBpZiAocURldikge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5jYW5ub3RDb2VyY2VTaWduYWwpO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGlmIChpc0Rldikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSR7KHRoaXMgYXMgYW55KS4kZmxhZ3MkICYgU2lnbmFsRmxhZ3MuSU5WQUxJRCA/ICcgSU5WQUxJRCcgOiAnJ30gJHt0aGlzLiR1bnRyYWNrZWRWYWx1ZSR9XWAgK1xuICAgICAgICAgIChBcnJheS5mcm9tKHRoaXMuJGVmZmVjdHMkIHx8IFtdKVxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gJ1xcbiAtPiAnICsgcGFkKHF3aWtEZWJ1Z1RvU3RyaW5nKGUuY29uc3VtZXIpLCAnICAgICcpKVxuICAgICAgICAgICAgLmpvaW4oJ1xcbicpIHx8ICcnKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gYFske3RoaXMuY29uc3RydWN0b3IubmFtZX0gPGNhbm5vdCBzdHJpbmdpZnk+XWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxuICB9XG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdGhpcy4kdW50cmFja2VkVmFsdWUkIH07XG4gIH1cbn1cbiJdfQ==","import { isDev } from '@qwik.dev/core/build';\nimport { qwikDebugToString } from '../../debug';\nimport { assertFalse } from '../../shared/error/assert';\nimport { qError } from '../../shared/error/error';\nimport { isPromise, retryOnPromise } from '../../shared/utils/promises';\nimport { invokeApply, newInvokeContext, tryGetInvokeContext } from '../../use/use-core';\nimport { _EFFECT_BACK_REF } from '../backref';\nimport { clearEffectSubscription } from '../cleanup';\nimport { getSubscriber } from '../subscriber';\nimport { NEEDS_COMPUTATION, } from '../types';\nimport { throwIfQRLNotResolved } from '../utils';\nimport { SignalImpl } from './signal-impl';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('COMPUTED SIGNAL', ...args.map(qwikDebugToString));\n/**\n * A signal which is computed from other signals.\n *\n * The value is available synchronously, but the computation is done lazily.\n */\nexport class ComputedSignalImpl extends SignalImpl {\n    /**\n     * The compute function is stored here.\n     *\n     * The computed functions must be executed synchronously (because of this we need to eagerly\n     * resolve the QRL during the mark dirty phase so that any call to it will be synchronous). )\n     */\n    $computeQrl$;\n    $flags$;\n    [_EFFECT_BACK_REF] = undefined;\n    constructor(container, fn, \n    // We need a separate flag to know when the computation needs running because\n    // we need the old value to know if effects need running after computation\n    flags = 1 /* SignalFlags.INVALID */ |\n        16 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_ALWAYS */) {\n        // The value is used for comparison when signals trigger, which can only happen\n        // when it was calculated before. Therefore we can pass whatever we like.\n        super(container || tryGetInvokeContext()?.$container$, NEEDS_COMPUTATION);\n        this.$computeQrl$ = fn;\n        this.$flags$ = flags;\n    }\n    invalidate() {\n        this.$flags$ |= 1 /* SignalFlags.INVALID */;\n        const ctx = newInvokeContext();\n        ctx.$container$ = this.$container$ || undefined;\n        // @ts-expect-error it's confused about args any[] vs []\n        const running = retryOnPromise(invokeApply.bind(this, ctx, this.$computeIfNeeded$));\n        if (running) {\n            running.catch((err) => {\n                if (this.$container$) {\n                    this.$container$.handleError(err, null);\n                }\n                else {\n                    console.error('Error during computation', err);\n                }\n            });\n        }\n    }\n    get untrackedValue() {\n        this.$computeIfNeeded$();\n        isDev && assertFalse(this.$untrackedValue$ === NEEDS_COMPUTATION, 'Invalid state');\n        return this.$untrackedValue$;\n    }\n    set untrackedValue(value) {\n        this.$untrackedValue$ = value;\n    }\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return;\n        }\n        const computeQrl = this.$computeQrl$;\n        throwIfQRLNotResolved(computeQrl);\n        const ctx = tryGetInvokeContext();\n        const previousEffectSubscription = ctx?.$effectSubscriber$;\n        if (ctx) {\n            const effectSubscriber = getSubscriber(this, \".\" /* EffectProperty.VNODE */);\n            clearEffectSubscription(this.$container$, effectSubscriber);\n            ctx.$effectSubscriber$ = effectSubscriber;\n        }\n        try {\n            const untrackedValue = computeQrl.getFn(ctx)();\n            if (isPromise(untrackedValue)) {\n                throw qError(29 /* QError.computedNotSync */, [\n                    computeQrl.dev ? computeQrl.dev.file : '',\n                    computeQrl.$hash$,\n                ]);\n            }\n            DEBUG && log('Signal.$compute$', untrackedValue);\n            this.$flags$ &= ~1 /* SignalFlags.INVALID */;\n            super.value = untrackedValue;\n        }\n        finally {\n            if (ctx) {\n                ctx.$effectSubscriber$ = previousEffectSubscription;\n            }\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZWQtc2lnbmFsLWltcGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL2NvbXB1dGVkLXNpZ25hbC1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0sWUFBWSxDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFJTCxpQkFBaUIsR0FHbEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLHNDQUFzQztBQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFFL0Y7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxrQkFDWCxTQUFRLFVBQWE7SUFHckI7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUk7SUFDaEIsT0FBTyxDQUF5QztJQUNoRCxDQUFDLGdCQUFnQixDQUFDLEdBQWlFLFNBQVMsQ0FBQztJQUU3RixZQUNFLFNBQTJCLEVBQzNCLEVBQUs7SUFDTCw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLFFBQWdEO3VFQUNRO1FBRXhELCtFQUErRTtRQUMvRSx5RUFBeUU7UUFDekUsS0FBSyxDQUFDLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE9BQU8sK0JBQXVCLENBQUM7UUFDcEMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO1FBQ2hELHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxLQUFRO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLDhCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDckMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEMsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQztRQUMzRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsSUFBSSxpQ0FBdUIsQ0FBQztZQUNuRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsV0FBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsR0FBRyxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBTyxFQUFPLENBQUM7WUFDM0QsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxNQUFNLGtDQUF5QjtvQkFDbkMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pDLFVBQVUsQ0FBQyxNQUFNO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsS0FBSyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUVqRCxJQUFJLENBQUMsT0FBTyxJQUFJLDRCQUFvQixDQUFDO1lBQ3JDLEtBQUssQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO1FBQy9CLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsR0FBRyxDQUFDLGtCQUFrQixHQUFHLDBCQUEwQixDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBxd2lrRGVidWdUb1N0cmluZyB9IGZyb20gJy4uLy4uL2RlYnVnJztcbmltcG9ydCB7IGFzc2VydEZhbHNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4uLy4uL3NoYXJlZC9lcnJvci9lcnJvcic7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNQcm9taXNlLCByZXRyeU9uUHJvbWlzZSB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgeyBpbnZva2VBcHBseSwgbmV3SW52b2tlQ29udGV4dCwgdHJ5R2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBfRUZGRUNUX0JBQ0tfUkVGLCB0eXBlIEJhY2tSZWYgfSBmcm9tICcuLi9iYWNrcmVmJztcbmltcG9ydCB7IGNsZWFyRWZmZWN0U3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vY2xlYW51cCc7XG5pbXBvcnQgeyBnZXRTdWJzY3JpYmVyIH0gZnJvbSAnLi4vc3Vic2NyaWJlcic7XG5pbXBvcnQge1xuICBDb21wdXRlUVJMLFxuICBFZmZlY3RQcm9wZXJ0eSxcbiAgRWZmZWN0U3Vic2NyaXB0aW9uLFxuICBORUVEU19DT01QVVRBVElPTixcbiAgU2VyaWFsaXphdGlvblNpZ25hbEZsYWdzLFxuICBTaWduYWxGbGFncyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdGhyb3dJZlFSTE5vdFJlc29sdmVkIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2lnbmFsSW1wbCB9IGZyb20gJy4vc2lnbmFsLWltcGwnO1xuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbmNvbnN0IGxvZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2coJ0NPTVBVVEVEIFNJR05BTCcsIC4uLmFyZ3MubWFwKHF3aWtEZWJ1Z1RvU3RyaW5nKSk7XG5cbi8qKlxuICogQSBzaWduYWwgd2hpY2ggaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBzaWduYWxzLlxuICpcbiAqIFRoZSB2YWx1ZSBpcyBhdmFpbGFibGUgc3luY2hyb25vdXNseSwgYnV0IHRoZSBjb21wdXRhdGlvbiBpcyBkb25lIGxhemlseS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXB1dGVkU2lnbmFsSW1wbDxULCBTIGV4dGVuZHMgUVJMSW50ZXJuYWwgPSBDb21wdXRlUVJMPFQ+PlxuICBleHRlbmRzIFNpZ25hbEltcGw8VD5cbiAgaW1wbGVtZW50cyBCYWNrUmVmXG57XG4gIC8qKlxuICAgKiBUaGUgY29tcHV0ZSBmdW5jdGlvbiBpcyBzdG9yZWQgaGVyZS5cbiAgICpcbiAgICogVGhlIGNvbXB1dGVkIGZ1bmN0aW9ucyBtdXN0IGJlIGV4ZWN1dGVkIHN5bmNocm9ub3VzbHkgKGJlY2F1c2Ugb2YgdGhpcyB3ZSBuZWVkIHRvIGVhZ2VybHlcbiAgICogcmVzb2x2ZSB0aGUgUVJMIGR1cmluZyB0aGUgbWFyayBkaXJ0eSBwaGFzZSBzbyB0aGF0IGFueSBjYWxsIHRvIGl0IHdpbGwgYmUgc3luY2hyb25vdXMpLiApXG4gICAqL1xuICAkY29tcHV0ZVFybCQ6IFM7XG4gICRmbGFncyQ6IFNpZ25hbEZsYWdzIHwgU2VyaWFsaXphdGlvblNpZ25hbEZsYWdzO1xuICBbX0VGRkVDVF9CQUNLX1JFRl06IE1hcDxFZmZlY3RQcm9wZXJ0eSB8IHN0cmluZywgRWZmZWN0U3Vic2NyaXB0aW9uPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb250YWluZXI6IENvbnRhaW5lciB8IG51bGwsXG4gICAgZm46IFMsXG4gICAgLy8gV2UgbmVlZCBhIHNlcGFyYXRlIGZsYWcgdG8ga25vdyB3aGVuIHRoZSBjb21wdXRhdGlvbiBuZWVkcyBydW5uaW5nIGJlY2F1c2VcbiAgICAvLyB3ZSBuZWVkIHRoZSBvbGQgdmFsdWUgdG8ga25vdyBpZiBlZmZlY3RzIG5lZWQgcnVubmluZyBhZnRlciBjb21wdXRhdGlvblxuICAgIGZsYWdzOiBTaWduYWxGbGFncyB8IFNlcmlhbGl6YXRpb25TaWduYWxGbGFncyA9IFNpZ25hbEZsYWdzLklOVkFMSUQgfFxuICAgICAgU2VyaWFsaXphdGlvblNpZ25hbEZsYWdzLlNFUklBTElaQVRJT05fU1RSQVRFR1lfQUxXQVlTXG4gICkge1xuICAgIC8vIFRoZSB2YWx1ZSBpcyB1c2VkIGZvciBjb21wYXJpc29uIHdoZW4gc2lnbmFscyB0cmlnZ2VyLCB3aGljaCBjYW4gb25seSBoYXBwZW5cbiAgICAvLyB3aGVuIGl0IHdhcyBjYWxjdWxhdGVkIGJlZm9yZS4gVGhlcmVmb3JlIHdlIGNhbiBwYXNzIHdoYXRldmVyIHdlIGxpa2UuXG4gICAgc3VwZXIoY29udGFpbmVyIHx8IHRyeUdldEludm9rZUNvbnRleHQoKT8uJGNvbnRhaW5lciQsIE5FRURTX0NPTVBVVEFUSU9OKTtcbiAgICB0aGlzLiRjb21wdXRlUXJsJCA9IGZuO1xuICAgIHRoaXMuJGZsYWdzJCA9IGZsYWdzO1xuICB9XG5cbiAgaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLiRmbGFncyQgfD0gU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICBjb25zdCBjdHggPSBuZXdJbnZva2VDb250ZXh0KCk7XG4gICAgY3R4LiRjb250YWluZXIkID0gdGhpcy4kY29udGFpbmVyJCB8fCB1bmRlZmluZWQ7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBpdCdzIGNvbmZ1c2VkIGFib3V0IGFyZ3MgYW55W10gdnMgW11cbiAgICBjb25zdCBydW5uaW5nID0gcmV0cnlPblByb21pc2UoaW52b2tlQXBwbHkuYmluZCh0aGlzLCBjdHgsIHRoaXMuJGNvbXB1dGVJZk5lZWRlZCQpKTtcbiAgICBpZiAocnVubmluZykge1xuICAgICAgcnVubmluZy5jYXRjaCgoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLiRjb250YWluZXIkKSB7XG4gICAgICAgICAgdGhpcy4kY29udGFpbmVyJC5oYW5kbGVFcnJvcihlcnIsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBjb21wdXRhdGlvbicsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1bnRyYWNrZWRWYWx1ZSgpIHtcbiAgICB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgaXNEZXYgJiYgYXNzZXJ0RmFsc2UodGhpcy4kdW50cmFja2VkVmFsdWUkID09PSBORUVEU19DT01QVVRBVElPTiwgJ0ludmFsaWQgc3RhdGUnKTtcbiAgICByZXR1cm4gdGhpcy4kdW50cmFja2VkVmFsdWUkO1xuICB9XG4gIHNldCB1bnRyYWNrZWRWYWx1ZSh2YWx1ZTogVCkge1xuICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IHZhbHVlO1xuICB9XG5cbiAgJGNvbXB1dGVJZk5lZWRlZCQoKSB7XG4gICAgaWYgKCEodGhpcy4kZmxhZ3MkICYgU2lnbmFsRmxhZ3MuSU5WQUxJRCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29tcHV0ZVFybCA9IHRoaXMuJGNvbXB1dGVRcmwkO1xuICAgIHRocm93SWZRUkxOb3RSZXNvbHZlZChjb21wdXRlUXJsKTtcblxuICAgIGNvbnN0IGN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgICBjb25zdCBwcmV2aW91c0VmZmVjdFN1YnNjcmlwdGlvbiA9IGN0eD8uJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgIGlmIChjdHgpIHtcbiAgICAgIGNvbnN0IGVmZmVjdFN1YnNjcmliZXIgPSBnZXRTdWJzY3JpYmVyKHRoaXMsIEVmZmVjdFByb3BlcnR5LlZOT0RFKTtcbiAgICAgIGNsZWFyRWZmZWN0U3Vic2NyaXB0aW9uKHRoaXMuJGNvbnRhaW5lciQhLCBlZmZlY3RTdWJzY3JpYmVyKTtcbiAgICAgIGN0eC4kZWZmZWN0U3Vic2NyaWJlciQgPSBlZmZlY3RTdWJzY3JpYmVyO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdW50cmFja2VkVmFsdWUgPSAoY29tcHV0ZVFybC5nZXRGbihjdHgpIGFzIFMpKCkgYXMgVDtcbiAgICAgIGlmIChpc1Byb21pc2UodW50cmFja2VkVmFsdWUpKSB7XG4gICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IuY29tcHV0ZWROb3RTeW5jLCBbXG4gICAgICAgICAgY29tcHV0ZVFybC5kZXYgPyBjb21wdXRlUXJsLmRldi5maWxlIDogJycsXG4gICAgICAgICAgY29tcHV0ZVFybC4kaGFzaCQsXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgREVCVUcgJiYgbG9nKCdTaWduYWwuJGNvbXB1dGUkJywgdW50cmFja2VkVmFsdWUpO1xuXG4gICAgICB0aGlzLiRmbGFncyQgJj0gflNpZ25hbEZsYWdzLklOVkFMSUQ7XG4gICAgICBzdXBlci52YWx1ZSA9IHVudHJhY2tlZFZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGN0eC4kZWZmZWN0U3Vic2NyaWJlciQgPSBwcmV2aW91c0VmZmVjdFN1YnNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { isBrowser, isDev, isServer } from '@qwik.dev/core/build';\nimport { qTest } from '../../shared/utils/qdev';\nimport { qwikDebugToString } from '../../debug';\nimport { assertTrue } from '../../shared/error/assert';\nimport { qError } from '../../shared/error/error';\nimport { isServerPlatform } from '../../shared/platform/platform';\nimport { isPromise, maybeThen, retryOnPromise } from '../../shared/utils/promises';\nimport { tryGetInvokeContext } from '../../use/use-core';\nimport { trackFn } from '../../use/utils/tracker';\nimport { _EFFECT_BACK_REF } from '../backref';\nimport { NEEDS_COMPUTATION, } from '../types';\nimport { addQrlToSerializationCtx, ensureContainsBackRef, ensureContainsSubscription, scheduleEffects, } from '../utils';\nimport { ComputedSignalImpl } from './computed-signal-impl';\nconst DEBUG = false;\nconst log = (...args) => \n// eslint-disable-next-line no-console\nconsole.log('ASYNC COMPUTED SIGNAL', ...args.map(qwikDebugToString));\n/** Retains job metadata and also serves as the argument for the compute function */\nclass AsyncJob {\n    $signal$;\n    /** First holds the compute promise and then the cleanup promise */\n    $promise$ = null;\n    $cleanupRequested$ = false;\n    $canWrite$ = true;\n    constructor($signal$, info, $infoVersion$) {\n        this.$signal$ = $signal$;\n        if (info !== undefined) {\n            this.info = info;\n            this.$infoVersion$ = $infoVersion$;\n        }\n    }\n    get track() {\n        return (this.$track$ ||= trackFn(this.$signal$, this.$signal$.$container$));\n    }\n    get abortSignal() {\n        return (this.$abortController$ ||= new AbortController()).signal;\n    }\n    /** Backward compatible cache method for resource */\n    cache() {\n        isDev &&\n            console.error('useResource cache() method does not do anything. Use `useAsync$` instead of `useResource$`, use the `expires` option for polling behavior.');\n    }\n    get previous() {\n        const val = this.$signal$.$untrackedValue$;\n        if (val !== NEEDS_COMPUTATION) {\n            return val;\n        }\n    }\n    cleanup(callback) {\n        if (typeof callback === 'function') {\n            (this.$cleanups$ ||= []).push(callback);\n        }\n    }\n}\n/**\n * # ================================\n *\n * AsyncSignalImpl\n *\n * # ================================\n *\n * @internal\n */\nexport class AsyncSignalImpl extends ComputedSignalImpl {\n    $untrackedLoading$ = false;\n    $untrackedError$ = undefined;\n    $current$ = null;\n    [_EFFECT_BACK_REF] = undefined;\n    constructor(container, fn, flags = 1 /* SignalFlags.INVALID */ |\n        16 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_ALWAYS */, options) {\n        super(container, fn, flags);\n        if (!options) {\n            return;\n        }\n        // Handle initial value - eagerly evaluate if function, set $untrackedValue$ and $promiseValue$\n        // Do NOT call setValue() which would clear the INVALID flag and prevent async computation\n        const initial = options.initial;\n        if (initial !== undefined) {\n            const initialValue = typeof initial === 'function' ? initial() : initial;\n            this.$untrackedValue$ = initialValue;\n        }\n        const concurrency = options.concurrency;\n        if (concurrency !== undefined && concurrency >= 0 && concurrency !== 1) {\n            this.$concurrency$ = concurrency;\n            this.$jobs$ = [];\n        }\n        const timeout = options.timeout;\n        if (timeout) {\n            this.$timeoutMs$ = timeout;\n        }\n        if (options.eagerCleanup) {\n            this.$flags$ |= 32 /* AsyncSignalFlags.EAGER_CLEANUP */;\n        }\n        if (options.clientOnly) {\n            this.$flags$ |= 64 /* AsyncSignalFlags.CLIENT_ONLY */;\n        }\n        if (options.allowStale === false) {\n            if (isDev && initial !== undefined) {\n                throw new Error('allowStale: false and initial cannot be used together. ' +\n                    'allowStale: false clears the value on invalidation, which conflicts with providing an initial value.');\n            }\n            this.$flags$ |= 128 /* AsyncSignalFlags.CLEAR_ON_INVALIDATE */;\n        }\n        const expires = options.expires ?? (options.interval ? Math.abs(options.interval) : undefined);\n        if (expires) {\n            this.expires = expires;\n        }\n        if (options.poll === false || (options.interval !== undefined && options.interval < 0)) {\n            this.$flags$ |= 256 /* AsyncSignalFlags.NO_POLL */;\n        }\n    }\n    get untrackedValue() {\n        this.$computeIfNeeded$();\n        if (this.$current$?.$promise$) {\n            if (this.$untrackedValue$ === NEEDS_COMPUTATION || (qTest ? isServerPlatform() : isServer)) {\n                DEBUG && log('Throwing promise while computing initial value', this);\n                throw this.$current$?.$promise$;\n            }\n            DEBUG &&\n                log('Returning stale value', this.$untrackedValue$, 'while computing', this.$current$);\n            return this.$untrackedValue$;\n        }\n        if (this.$untrackedError$) {\n            DEBUG && log('Throwing error while reading value', this);\n            throw this.$untrackedError$;\n        }\n        // For clientOnly signals without initial value during SSR, throw if trying to read value\n        // During SSR, clientOnly signals are skipped, so there's no computed value available\n        if ((qTest ? isServerPlatform() : isServer) &&\n            this.$flags$ & 64 /* AsyncSignalFlags.CLIENT_ONLY */ &&\n            this.$untrackedValue$ === NEEDS_COMPUTATION) {\n            throw qError(35 /* QError.asyncClientOnlyValueDuringSSR */);\n        }\n        return this.$untrackedValue$;\n    }\n    set untrackedValue(value) {\n        this.$untrackedValue$ = value;\n    }\n    /**\n     * Read the value, subscribing if in a tracking context. Triggers computation if needed.\n     *\n     * Setting the value will mark the signal as not loading and clear any error, and prevent any\n     * pending computations from writing their results.\n     *\n     * If you want to set the value without affecting loading or error state, set `untrackedValue`\n     * instead and make sure to trigger effects manually if needed.\n     *\n     * If you want to abort pending computations when setting, you have to call `abort()` manually.\n     */\n    get value() {\n        return super.value;\n    }\n    set value(value) {\n        this.$flags$ &= ~1 /* SignalFlags.INVALID */;\n        this.untrackedLoading = false;\n        this.untrackedError = undefined;\n        this.$info$ = undefined;\n        // Prevent pending computations from overwriting this value\n        if (this.$jobs$) {\n            for (let i = 0; i < this.$jobs$.length; i++) {\n                this.$jobs$[i].$canWrite$ = false;\n            }\n        }\n        else if (this.$current$) {\n            this.$current$.$canWrite$ = false;\n        }\n        this.$clearNextPoll$();\n        super.value = value;\n        this.$scheduleNextPoll$();\n    }\n    /**\n     * Loading is true if the signal is still waiting for the promise to resolve, false if the promise\n     * has resolved or rejected.\n     *\n     * Accessing .loading will trigger computation if needed, since it's often used like\n     * `signal.loading ? <Loading /> : signal.value`.\n     */\n    get loading() {\n        const val = this.untrackedLoading;\n        const ctx = tryGetInvokeContext();\n        if (ctx && (this.$container$ ||= ctx.$container$ || null)) {\n            isDev &&\n                assertTrue(!ctx.$container$ || ctx.$container$ === this.$container$, 'Do not use signals across containers');\n            const effectSubscriber = ctx.$effectSubscriber$;\n            if (effectSubscriber) {\n                ensureContainsSubscription((this.$loadingEffects$ ||= new Set()), effectSubscriber);\n                ensureContainsBackRef(effectSubscriber, this);\n                addQrlToSerializationCtx(effectSubscriber, this.$container$);\n            }\n        }\n        return val;\n    }\n    set untrackedLoading(value) {\n        if (value !== this.$untrackedLoading$) {\n            this.$untrackedLoading$ = value;\n            DEBUG && log('Set untrackedLoading', value);\n            scheduleEffects(this.$container$, this, this.$loadingEffects$);\n        }\n    }\n    get untrackedLoading() {\n        // reading `.loading` means someone is interested in the result, so we should trigger the computation. The alternative is eager computation or imperative calls to invalidate; this seems nicer.\n        this.$computeIfNeeded$();\n        // During SSR there's no such thing as loading state, we must render complete results\n        if ((qTest ? isServerPlatform() : isServer) && this.$current$?.$promise$) {\n            DEBUG && log('Throwing loading promise for SSR');\n            throw this.$current$?.$promise$;\n        }\n        return this.$untrackedLoading$;\n    }\n    /** The error that occurred when the signal was resolved. */\n    get error() {\n        const val = this.untrackedError;\n        const ctx = tryGetInvokeContext();\n        if (ctx && (this.$container$ ||= ctx.$container$ || null)) {\n            isDev &&\n                assertTrue(!ctx.$container$ || ctx.$container$ === this.$container$, 'Do not use signals across containers');\n            const effectSubscriber = ctx.$effectSubscriber$;\n            if (effectSubscriber) {\n                ensureContainsSubscription((this.$errorEffects$ ||= new Set()), effectSubscriber);\n                ensureContainsBackRef(effectSubscriber, this);\n                addQrlToSerializationCtx(effectSubscriber, this.$container$);\n            }\n        }\n        return val;\n    }\n    set untrackedError(value) {\n        if (value !== this.$untrackedError$) {\n            this.$untrackedError$ = value;\n            scheduleEffects(this.$container$, this, this.$errorEffects$);\n        }\n    }\n    get untrackedError() {\n        return this.$untrackedError$;\n    }\n    get expires() {\n        return this.$expires$ || 0;\n    }\n    set expires(value) {\n        this.$clearNextPoll$();\n        this.$expires$ = value;\n        if (this.$expires$ && this.$hasSubscribers$()) {\n            this.$scheduleNextPoll$();\n        }\n    }\n    get poll() {\n        return !(this.$flags$ & 256 /* AsyncSignalFlags.NO_POLL */);\n    }\n    set poll(value) {\n        if (value) {\n            this.$flags$ &= ~256 /* AsyncSignalFlags.NO_POLL */;\n        }\n        else {\n            this.$flags$ |= 256 /* AsyncSignalFlags.NO_POLL */;\n        }\n        // Reschedule since poll behavior changed\n        if (this.$expires$ && this.$hasSubscribers$()) {\n            this.$clearNextPoll$();\n            this.$scheduleNextPoll$();\n        }\n    }\n    /** @deprecated Use `expires` and `poll` instead. */\n    get interval() {\n        const expires = this.$expires$ || 0;\n        return this.$flags$ & 256 /* AsyncSignalFlags.NO_POLL */ ? -expires : expires;\n    }\n    set interval(value) {\n        if (value < 0) {\n            this.$flags$ |= 256 /* AsyncSignalFlags.NO_POLL */;\n        }\n        else {\n            this.$flags$ &= ~256 /* AsyncSignalFlags.NO_POLL */;\n        }\n        this.expires = Math.abs(value);\n    }\n    /** Invalidates the signal, causing it to re-compute its value. */\n    async invalidate(info) {\n        if (arguments.length > 0) {\n            this.$info$ = info;\n            this.$infoVersion$ = this.$infoVersion$ === undefined ? 1 : this.$infoVersion$ + 1;\n        }\n        this.$setInvalid$(true, this.$flags$ & 128 /* AsyncSignalFlags.CLEAR_ON_INVALIDATE */);\n    }\n    $setInvalid$(allowRecalc, mustClear) {\n        this.$flags$ |= 1 /* SignalFlags.INVALID */;\n        this.$clearNextPoll$();\n        if (mustClear) {\n            this.$untrackedValue$ = NEEDS_COMPUTATION;\n        }\n        if (allowRecalc &&\n            (this.$effects$?.size || this.$loadingEffects$?.size || this.$errorEffects$?.size)) {\n            // compute in next microtask\n            Promise.resolve().then(() => this.$computeIfNeeded$());\n        }\n    }\n    /** Abort the current computation and run cleanups if needed. */\n    abort(reason) {\n        if (this.$current$) {\n            this.$requestCleanups$(this.$current$, reason);\n        }\n    }\n    /** Schedule eager cleanup on next macro task if no subscribers remain. */\n    $scheduleEagerCleanup$() {\n        if (!(this.$flags$ & 32 /* AsyncSignalFlags.EAGER_CLEANUP */) || this.$hasSubscribers$()) {\n            return;\n        }\n        if (!(qTest ? !isServerPlatform() : isBrowser)) {\n            return;\n        }\n        setTimeout(() => {\n            if (!this.$hasSubscribers$()) {\n                this.abort();\n            }\n        });\n    }\n    /** Returns a promise resolves when the signal finished computing. */\n    async promise() {\n        this.$computeIfNeeded$();\n        // Wait for the current computation to finish, but if we became invalid while running, we need to wait for the new computation instead. So we loop until we are no longer invalid\n        while (this.$current$?.$promise$) {\n            await this.$current$?.$promise$;\n        }\n    }\n    /** Run the computation if needed */\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return;\n        }\n        // Skip computation on SSR for clientOnly signals\n        if ((qTest ? isServerPlatform() : isServer) && this.$flags$ & 64 /* AsyncSignalFlags.CLIENT_ONLY */) {\n            // We must pretend to load, and register as a listener for the captures\n            this.$untrackedLoading$ = true;\n            this.$container$?.serializationCtx.$eagerResume$.add(this);\n            return;\n        }\n        this.$clearNextPoll$();\n        // Clear flag here to make sure the cleanups don't start another compute\n        this.$flags$ &= ~1 /* SignalFlags.INVALID */;\n        const current = this.$current$;\n        if (current) {\n            this.$requestCleanups$(current);\n        }\n        const limit = this.$concurrency$ === 0 ? Number.POSITIVE_INFINITY : (this.$concurrency$ ?? 1);\n        // We only have $jobs$[] when concurrency != 1\n        if (this.$jobs$ ? this.$jobs$.length >= limit : current?.$promise$) {\n            DEBUG && log(`Concurrency limit ${limit} reached, not starting new computation`);\n            // We requested cleanups for all the previous jobs, once one finishes it will be removed from the jobs array and trigger computeIfNeeded\n            // Restore invalid state\n            this.$flags$ |= 1 /* SignalFlags.INVALID */;\n            return;\n        }\n        DEBUG && log('Starting new async computation');\n        // We put the actual computation in a separate method so we can easily retain the promise\n        const infoVersion = this.$infoVersion$;\n        const running = new AsyncJob(this, this.$info$, infoVersion);\n        this.$current$ = running;\n        if (this.$jobs$) {\n            this.$jobs$.push(running);\n        }\n        running.$promise$ = this.$runComputation$(running);\n    }\n    async $runComputation$(running) {\n        const isCurrent = () => running === this.$current$;\n        let fn = this.$computeQrl$.resolved;\n        if (!fn) {\n            // QRL resolution is async — we have to publish loading=true before awaiting so\n            // subscribers know the value isn't ready yet.\n            this.untrackedLoading = true;\n            fn = await this.$computeQrl$.resolve();\n            if (running.$abortController$?.signal.aborted) {\n                DEBUG && log('Computation aborted before it started');\n                running.$promise$ = null;\n                return;\n            }\n        }\n        try {\n            if (this.$timeoutMs$) {\n                this.$computationTimeoutId$ = setTimeout(() => {\n                    const error = new Error(`timeout ${this.$timeoutMs$}ms`);\n                    this.$setError$(running, error);\n                    running.$abortController$?.abort(error);\n                }, this.$timeoutMs$);\n            }\n            // Try to stay sync if possible. Only publish loading=true to subscribers when\n            // the compute is actually asynchronous — a synchronous resolve (e.g. pre-loaded\n            // values injected via _injectAsyncSignalValue) should never transition through a\n            // visible loading state, which on SSR would fire the loading-effect subscribers\n            // (tasks) while the value is still \"loading\" from their perspective.\n            const valuePromise = retryOnPromise(fn.bind(null, running));\n            let value;\n            if (isPromise(valuePromise)) {\n                this.untrackedLoading = true;\n                value = await valuePromise;\n            }\n            else {\n                value = valuePromise;\n            }\n            running.$promise$ = null;\n            if (running.$canWrite$) {\n                const jobs = this.$jobs$;\n                if (jobs) {\n                    let doDisable = false;\n                    for (let i = jobs.length - 1; i >= 0; i--) {\n                        if (jobs[i] === running) {\n                            doDisable = true;\n                        }\n                        else if (doDisable) {\n                            jobs[i].$canWrite$ = false;\n                        }\n                    }\n                }\n                DEBUG && log('Promise resolved', value);\n                // we leave error as-is until result\n                // Note that these assignments run setters\n                this.untrackedError = undefined;\n                /**\n                 * Use super.value instead of this.value to persist invalid state, so that invalidation\n                 * during computation recomputes\n                 */\n                super.value = value;\n            }\n        }\n        catch (err) {\n            running.$promise$ = null;\n            DEBUG && log('Error caught in promise.catch', err);\n            this.$setError$(running, err);\n        }\n        if (isCurrent()) {\n            clearTimeout(this.$computationTimeoutId$);\n            if (running.$infoVersion$ === this.$infoVersion$) {\n                this.$info$ = undefined;\n            }\n            if (this.$flags$ & 1 /* SignalFlags.INVALID */) {\n                DEBUG && log('Computation finished but signal is invalid, re-running');\n                // we became invalid again while running, so we need to re-run the computation to get the new promise\n                this.$computeIfNeeded$();\n            }\n            else {\n                this.untrackedLoading = false;\n                this.$scheduleNextPoll$();\n            }\n        }\n    }\n    /**\n     * Sets the error from the given job. We only accept errors from the current job and we ignore\n     * AbortErrors.\n     */\n    $setError$(job, error) {\n        if (job !== this.$current$ || !job.$canWrite$) {\n            return;\n        }\n        job.$canWrite$ = false;\n        if (error instanceof Error && error.name === 'AbortError') {\n            // AbortError from AbortSignal is a cancellation, not an actual error\n            return;\n        }\n        this.untrackedError = error;\n        // Job failures should be rare and require retrying\n        this.untrackedValue = NEEDS_COMPUTATION;\n    }\n    /** Called after SSR/unmount */\n    async $destroy$() {\n        this.$clearNextPoll$();\n        clearTimeout(this.$computationTimeoutId$);\n        const current = this.$current$;\n        if (current) {\n            this.$requestCleanups$(current);\n        }\n        if (this.$jobs$) {\n            await Promise.all(this.$jobs$.map((job) => job.$promise$));\n        }\n        else {\n            await current?.$promise$;\n        }\n    }\n    $clearNextPoll$() {\n        if (this.$pollTimeoutId$ !== undefined) {\n            clearTimeout(this.$pollTimeoutId$);\n            this.$pollTimeoutId$ = undefined;\n        }\n    }\n    $scheduleNextPoll$() {\n        if ((qTest ? isServerPlatform() : isServer) || !this.$expires$) {\n            return;\n        }\n        this.$clearNextPoll$();\n        const allowRecalc = !(this.$flags$ & 256 /* AsyncSignalFlags.NO_POLL */);\n        // Even when clear on invalidate, we don't clear if we're merely re-running due to polling\n        // We expect to get the new value soon, so we can avoid showing a loading state\n        const mustClear = this.$flags$ & 128 /* AsyncSignalFlags.CLEAR_ON_INVALIDATE */ && !allowRecalc;\n        this.$pollTimeoutId$ = setTimeout(() => this.$setInvalid$(allowRecalc, mustClear), this.$expires$);\n        this.$pollTimeoutId$?.unref?.();\n    }\n    $hasSubscribers$() {\n        return !!(this.$effects$?.size || this.$loadingEffects$?.size || this.$errorEffects$?.size);\n    }\n    $requestCleanups$(job, reason) {\n        if (job.$cleanupRequested$) {\n            return;\n        }\n        DEBUG && log('Requesting cleanups for job', job);\n        job.$cleanupRequested$ = true;\n        job.$abortController$?.abort(reason);\n        job.$promise$ = maybeThen(job.$promise$, () => this.$runCleanups$(job));\n    }\n    /** Clean up and trigger signal compute once complete */\n    $runCleanups$(job) {\n        const cleanups = job.$cleanups$;\n        DEBUG && log('cleanup start', job);\n        const onError = (err) => {\n            const handleError = this.$container$?.handleError;\n            if (handleError) {\n                handleError(err, null);\n            }\n            else {\n                console.error('Error in async signal cleanup', err);\n            }\n        };\n        const onDone = () => {\n            job.$promise$ = null;\n            if (cleanups) {\n                cleanups.length = 0;\n            }\n            DEBUG && log('cleanup finished', job);\n            // Now trigger compute\n            const jobs = this.$jobs$;\n            if (jobs) {\n                const idx = jobs.indexOf(job);\n                if (idx !== -1) {\n                    jobs.splice(idx, 1);\n                }\n            }\n            this.$computeIfNeeded$();\n        };\n        let promiseChain = undefined;\n        if (cleanups) {\n            DEBUG && log('cleanup start for real', job);\n            // Keep this sync-ish so sync functions run immediately.\n            for (let i = 0; i < cleanups.length; i++) {\n                try {\n                    const result = cleanups[i]();\n                    if (isPromise(result)) {\n                        promiseChain = (promiseChain ? promiseChain.then(() => result) : result).catch(onError);\n                    }\n                }\n                catch (err) {\n                    onError(err);\n                }\n            }\n        }\n        if (promiseChain) {\n            return promiseChain.then(onDone);\n        }\n        else {\n            onDone();\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc2lnbmFsLWltcGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL2FzeW5jLXNpZ25hbC1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFnQixNQUFNLFlBQVksQ0FBQztBQUU1RCxPQUFPLEVBS0wsaUJBQWlCLEdBS2xCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNwQixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUU7QUFDN0Isc0NBQXND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Q0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNCcm93c2VyLCBpc0RldiwgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBxVGVzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IHF3aWtEZWJ1Z1RvU3RyaW5nIH0gZnJvbSAnLi4vLi4vZGVidWcnO1xuaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgaXNTZXJ2ZXJQbGF0Zm9ybSB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lciB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBpc1Byb21pc2UsIG1heWJlVGhlbiwgcmV0cnlPblByb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUgeyBTU1JDb250YWluZXIgfSBmcm9tICcuLi8uLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7IHRyeUdldEludm9rZUNvbnRleHQgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHsgdHJhY2tGbiB9IGZyb20gJy4uLy4uL3VzZS91dGlscy90cmFja2VyJztcbmltcG9ydCB7IF9FRkZFQ1RfQkFDS19SRUYsIHR5cGUgQmFja1JlZiB9IGZyb20gJy4uL2JhY2tyZWYnO1xuaW1wb3J0IHR5cGUgeyBBc3luY1NpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHtcbiAgQXN5bmNRUkwsXG4gIEFzeW5jU2lnbmFsRmxhZ3MsXG4gIEVmZmVjdFByb3BlcnR5LFxuICBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIE5FRURTX0NPTVBVVEFUSU9OLFxuICBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MsXG4gIFNpZ25hbEZsYWdzLFxuICB0eXBlIEFzeW5jQ3R4LFxuICB0eXBlIEFzeW5jU2lnbmFsT3B0aW9ucyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgYWRkUXJsVG9TZXJpYWxpemF0aW9uQ3R4LFxuICBlbnN1cmVDb250YWluc0JhY2tSZWYsXG4gIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uLFxuICBzY2hlZHVsZUVmZmVjdHMsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENvbXB1dGVkU2lnbmFsSW1wbCB9IGZyb20gJy4vY29tcHV0ZWQtc2lnbmFsLWltcGwnO1xuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuY29uc3QgbG9nID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZygnQVNZTkMgQ09NUFVURUQgU0lHTkFMJywgLi4uYXJncy5tYXAocXdpa0RlYnVnVG9TdHJpbmcpKTtcblxuLyoqIFJldGFpbnMgam9iIG1ldGFkYXRhIGFuZCBhbHNvIHNlcnZlcyBhcyB0aGUgYXJndW1lbnQgZm9yIHRoZSBjb21wdXRlIGZ1bmN0aW9uICovXG5jbGFzcyBBc3luY0pvYjxUPiBpbXBsZW1lbnRzIEFzeW5jQ3R4PFQ+IHtcbiAgLyoqIEZpcnN0IGhvbGRzIHRoZSBjb21wdXRlIHByb21pc2UgYW5kIHRoZW4gdGhlIGNsZWFudXAgcHJvbWlzZSAqL1xuICAkcHJvbWlzZSQ6IFByb21pc2U8dm9pZD4gfCBudWxsIHwgdm9pZCA9IG51bGw7XG4gICRjbGVhbnVwUmVxdWVzdGVkJDogYm9vbGVhbiA9IGZhbHNlO1xuICAkY2FuV3JpdGUkOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVjbGFyZSAkdHJhY2skOiBBc3luY0N0eDxUPlsndHJhY2snXSB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSAkY2xlYW51cHMkOiBQYXJhbWV0ZXJzPEFzeW5jQ3R4PFQ+WydjbGVhbnVwJ10+WzBdW10gfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgJGFib3J0Q29udHJvbGxlciQ6IEFib3J0Q29udHJvbGxlciB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBpbmZvOiB1bmtub3duO1xuICBkZWNsYXJlICRpbmZvVmVyc2lvbiQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSAkc2lnbmFsJDogQXN5bmNTaWduYWxJbXBsPFQ+LFxuICAgIGluZm86IHVua25vd24sXG4gICAgJGluZm9WZXJzaW9uJDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgICB0aGlzLiRpbmZvVmVyc2lvbiQgPSAkaW5mb1ZlcnNpb24kO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0cmFjaygpOiBBc3luY0N0eDxUPlsndHJhY2snXSB7XG4gICAgcmV0dXJuICh0aGlzLiR0cmFjayQgfHw9IHRyYWNrRm4odGhpcy4kc2lnbmFsJCwgdGhpcy4kc2lnbmFsJC4kY29udGFpbmVyJCkpO1xuICB9XG5cbiAgZ2V0IGFib3J0U2lnbmFsKCk6IEFib3J0U2lnbmFsIHtcbiAgICByZXR1cm4gKHRoaXMuJGFib3J0Q29udHJvbGxlciQgfHw9IG5ldyBBYm9ydENvbnRyb2xsZXIoKSkuc2lnbmFsO1xuICB9XG5cbiAgLyoqIEJhY2t3YXJkIGNvbXBhdGlibGUgY2FjaGUgbWV0aG9kIGZvciByZXNvdXJjZSAqL1xuICBjYWNoZSgpOiB2b2lkIHtcbiAgICBpc0RldiAmJlxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3VzZVJlc291cmNlIGNhY2hlKCkgbWV0aG9kIGRvZXMgbm90IGRvIGFueXRoaW5nLiBVc2UgYHVzZUFzeW5jJGAgaW5zdGVhZCBvZiBgdXNlUmVzb3VyY2UkYCwgdXNlIHRoZSBgZXhwaXJlc2Agb3B0aW9uIGZvciBwb2xsaW5nIGJlaGF2aW9yLidcbiAgICAgICk7XG4gIH1cblxuICBnZXQgcHJldmlvdXMoKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsID0gdGhpcy4kc2lnbmFsJC4kdW50cmFja2VkVmFsdWUkO1xuICAgIGlmICh2YWwgIT09IE5FRURTX0NPTVBVVEFUSU9OKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFudXAoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAodGhpcy4kY2xlYW51cHMkIHx8PSBbXSkucHVzaChjYWxsYmFjayk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIEFzeW5jU2lnbmFsSW1wbFxuICpcbiAqICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEFzeW5jU2lnbmFsSW1wbDxUPlxuICBleHRlbmRzIENvbXB1dGVkU2lnbmFsSW1wbDxULCBBc3luY1FSTDxUPj5cbiAgaW1wbGVtZW50cyBCYWNrUmVmLCBBc3luY1NpZ25hbDxUPlxue1xuICAkdW50cmFja2VkTG9hZGluZyQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgJHVudHJhY2tlZEVycm9yJDogRXJyb3IgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICRjdXJyZW50JDogQXN5bmNKb2I8VD4gfCBudWxsID0gbnVsbDtcblxuICAvLyBPbmx5IGRlY2xhcmUgdGhlc2UgbGVzcyBjb21tb24gcHJvcGVydGllcywgdG8gc2F2ZSBzb21lIG1lbW9yeVxuICBkZWNsYXJlICRqb2JzJDogQXN5bmNKb2I8VD5bXSB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSAkY29uY3VycmVuY3kkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgJGV4cGlyZXMkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgJHRpbWVvdXRNcyQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSAkbG9hZGluZ0VmZmVjdHMkOiB1bmRlZmluZWQgfCBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPjtcbiAgZGVjbGFyZSAkZXJyb3JFZmZlY3RzJDogdW5kZWZpbmVkIHwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj47XG4gIGRlY2xhcmUgJHBvbGxUaW1lb3V0SWQkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSAkY29tcHV0YXRpb25UaW1lb3V0SWQkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSAkaW5mbyQ6IHVua25vd24gfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgJGluZm9WZXJzaW9uJDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIFtfRUZGRUNUX0JBQ0tfUkVGXTogTWFwPEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLCBFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogQ29udGFpbmVyIHwgbnVsbCxcbiAgICBmbjogQXN5bmNRUkw8VD4sXG4gICAgZmxhZ3M6IFNpZ25hbEZsYWdzIHwgU2VyaWFsaXphdGlvblNpZ25hbEZsYWdzID0gU2lnbmFsRmxhZ3MuSU5WQUxJRCB8XG4gICAgICBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MuU0VSSUFMSVpBVElPTl9TVFJBVEVHWV9BTFdBWVMsXG4gICAgb3B0aW9ucz86IEFzeW5jU2lnbmFsT3B0aW9uczxUPlxuICApIHtcbiAgICBzdXBlcihjb250YWluZXIsIGZuLCBmbGFncyk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGluaXRpYWwgdmFsdWUgLSBlYWdlcmx5IGV2YWx1YXRlIGlmIGZ1bmN0aW9uLCBzZXQgJHVudHJhY2tlZFZhbHVlJCBhbmQgJHByb21pc2VWYWx1ZSRcbiAgICAvLyBEbyBOT1QgY2FsbCBzZXRWYWx1ZSgpIHdoaWNoIHdvdWxkIGNsZWFyIHRoZSBJTlZBTElEIGZsYWcgYW5kIHByZXZlbnQgYXN5bmMgY29tcHV0YXRpb25cbiAgICBjb25zdCBpbml0aWFsID0gb3B0aW9ucy5pbml0aWFsO1xuICAgIGlmIChpbml0aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHR5cGVvZiBpbml0aWFsID09PSAnZnVuY3Rpb24nID8gKGluaXRpYWwgYXMgKCkgPT4gVCkoKSA6IGluaXRpYWw7XG4gICAgICB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uY3VycmVuY3kgPSBvcHRpb25zLmNvbmN1cnJlbmN5O1xuICAgIGlmIChjb25jdXJyZW5jeSAhPT0gdW5kZWZpbmVkICYmIGNvbmN1cnJlbmN5ID49IDAgJiYgY29uY3VycmVuY3kgIT09IDEpIHtcbiAgICAgIHRoaXMuJGNvbmN1cnJlbmN5JCA9IGNvbmN1cnJlbmN5O1xuICAgICAgdGhpcy4kam9icyQgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy4kdGltZW91dE1zJCA9IHRpbWVvdXQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVhZ2VyQ2xlYW51cCkge1xuICAgICAgdGhpcy4kZmxhZ3MkIHw9IEFzeW5jU2lnbmFsRmxhZ3MuRUFHRVJfQ0xFQU5VUDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2xpZW50T25seSkge1xuICAgICAgdGhpcy4kZmxhZ3MkIHw9IEFzeW5jU2lnbmFsRmxhZ3MuQ0xJRU5UX09OTFk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFsbG93U3RhbGUgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoaXNEZXYgJiYgaW5pdGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnYWxsb3dTdGFsZTogZmFsc2UgYW5kIGluaXRpYWwgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuICcgK1xuICAgICAgICAgICAgJ2FsbG93U3RhbGU6IGZhbHNlIGNsZWFycyB0aGUgdmFsdWUgb24gaW52YWxpZGF0aW9uLCB3aGljaCBjb25mbGljdHMgd2l0aCBwcm92aWRpbmcgYW4gaW5pdGlhbCB2YWx1ZS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLiRmbGFncyQgfD0gQXN5bmNTaWduYWxGbGFncy5DTEVBUl9PTl9JTlZBTElEQVRFO1xuICAgIH1cbiAgICBjb25zdCBleHBpcmVzID0gb3B0aW9ucy5leHBpcmVzID8/IChvcHRpb25zLmludGVydmFsID8gTWF0aC5hYnMob3B0aW9ucy5pbnRlcnZhbCkgOiB1bmRlZmluZWQpO1xuICAgIGlmIChleHBpcmVzKSB7XG4gICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wb2xsID09PSBmYWxzZSB8fCAob3B0aW9ucy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuaW50ZXJ2YWwgPCAwKSkge1xuICAgICAgdGhpcy4kZmxhZ3MkIHw9IEFzeW5jU2lnbmFsRmxhZ3MuTk9fUE9MTDtcbiAgICB9XG4gIH1cblxuICBnZXQgdW50cmFja2VkVmFsdWUoKSB7XG4gICAgdGhpcy4kY29tcHV0ZUlmTmVlZGVkJCgpO1xuICAgIGlmICh0aGlzLiRjdXJyZW50JD8uJHByb21pc2UkKSB7XG4gICAgICBpZiAodGhpcy4kdW50cmFja2VkVmFsdWUkID09PSBORUVEU19DT01QVVRBVElPTiB8fCAocVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcikpIHtcbiAgICAgICAgREVCVUcgJiYgbG9nKCdUaHJvd2luZyBwcm9taXNlIHdoaWxlIGNvbXB1dGluZyBpbml0aWFsIHZhbHVlJywgdGhpcyk7XG4gICAgICAgIHRocm93IHRoaXMuJGN1cnJlbnQkPy4kcHJvbWlzZSQ7XG4gICAgICB9XG4gICAgICBERUJVRyAmJlxuICAgICAgICBsb2coJ1JldHVybmluZyBzdGFsZSB2YWx1ZScsIHRoaXMuJHVudHJhY2tlZFZhbHVlJCwgJ3doaWxlIGNvbXB1dGluZycsIHRoaXMuJGN1cnJlbnQkKTtcbiAgICAgIHJldHVybiB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQ7XG4gICAgfVxuICAgIGlmICh0aGlzLiR1bnRyYWNrZWRFcnJvciQpIHtcbiAgICAgIERFQlVHICYmIGxvZygnVGhyb3dpbmcgZXJyb3Igd2hpbGUgcmVhZGluZyB2YWx1ZScsIHRoaXMpO1xuICAgICAgdGhyb3cgdGhpcy4kdW50cmFja2VkRXJyb3IkO1xuICAgIH1cbiAgICAvLyBGb3IgY2xpZW50T25seSBzaWduYWxzIHdpdGhvdXQgaW5pdGlhbCB2YWx1ZSBkdXJpbmcgU1NSLCB0aHJvdyBpZiB0cnlpbmcgdG8gcmVhZCB2YWx1ZVxuICAgIC8vIER1cmluZyBTU1IsIGNsaWVudE9ubHkgc2lnbmFscyBhcmUgc2tpcHBlZCwgc28gdGhlcmUncyBubyBjb21wdXRlZCB2YWx1ZSBhdmFpbGFibGVcbiAgICBpZiAoXG4gICAgICAocVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcikgJiZcbiAgICAgIHRoaXMuJGZsYWdzJCAmIEFzeW5jU2lnbmFsRmxhZ3MuQ0xJRU5UX09OTFkgJiZcbiAgICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9PT0gTkVFRFNfQ09NUFVUQVRJT05cbiAgICApIHtcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3IuYXN5bmNDbGllbnRPbmx5VmFsdWVEdXJpbmdTU1IpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4kdW50cmFja2VkVmFsdWUkO1xuICB9XG4gIHNldCB1bnRyYWNrZWRWYWx1ZSh2YWx1ZTogVCkge1xuICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIHZhbHVlLCBzdWJzY3JpYmluZyBpZiBpbiBhIHRyYWNraW5nIGNvbnRleHQuIFRyaWdnZXJzIGNvbXB1dGF0aW9uIGlmIG5lZWRlZC5cbiAgICpcbiAgICogU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBtYXJrIHRoZSBzaWduYWwgYXMgbm90IGxvYWRpbmcgYW5kIGNsZWFyIGFueSBlcnJvciwgYW5kIHByZXZlbnQgYW55XG4gICAqIHBlbmRpbmcgY29tcHV0YXRpb25zIGZyb20gd3JpdGluZyB0aGVpciByZXN1bHRzLlxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIHdpdGhvdXQgYWZmZWN0aW5nIGxvYWRpbmcgb3IgZXJyb3Igc3RhdGUsIHNldCBgdW50cmFja2VkVmFsdWVgXG4gICAqIGluc3RlYWQgYW5kIG1ha2Ugc3VyZSB0byB0cmlnZ2VyIGVmZmVjdHMgbWFudWFsbHkgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBhYm9ydCBwZW5kaW5nIGNvbXB1dGF0aW9ucyB3aGVuIHNldHRpbmcsIHlvdSBoYXZlIHRvIGNhbGwgYGFib3J0KClgIG1hbnVhbGx5LlxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiBzdXBlci52YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIHRoaXMuJGZsYWdzJCAmPSB+U2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICB0aGlzLnVudHJhY2tlZExvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnVudHJhY2tlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuJGluZm8kID0gdW5kZWZpbmVkO1xuICAgIC8vIFByZXZlbnQgcGVuZGluZyBjb21wdXRhdGlvbnMgZnJvbSBvdmVyd3JpdGluZyB0aGlzIHZhbHVlXG4gICAgaWYgKHRoaXMuJGpvYnMkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuJGpvYnMkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuJGpvYnMkW2ldLiRjYW5Xcml0ZSQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuJGN1cnJlbnQkKSB7XG4gICAgICB0aGlzLiRjdXJyZW50JC4kY2FuV3JpdGUkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuJGNsZWFyTmV4dFBvbGwkKCk7XG4gICAgc3VwZXIudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLiRzY2hlZHVsZU5leHRQb2xsJCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRpbmcgaXMgdHJ1ZSBpZiB0aGUgc2lnbmFsIGlzIHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUsIGZhbHNlIGlmIHRoZSBwcm9taXNlXG4gICAqIGhhcyByZXNvbHZlZCBvciByZWplY3RlZC5cbiAgICpcbiAgICogQWNjZXNzaW5nIC5sb2FkaW5nIHdpbGwgdHJpZ2dlciBjb21wdXRhdGlvbiBpZiBuZWVkZWQsIHNpbmNlIGl0J3Mgb2Z0ZW4gdXNlZCBsaWtlXG4gICAqIGBzaWduYWwubG9hZGluZyA/IDxMb2FkaW5nIC8+IDogc2lnbmFsLnZhbHVlYC5cbiAgICovXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudW50cmFja2VkTG9hZGluZztcbiAgICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgaWYgKGN0eCAmJiAodGhpcy4kY29udGFpbmVyJCB8fD0gY3R4LiRjb250YWluZXIkIHx8IG51bGwpKSB7XG4gICAgICBpc0RldiAmJlxuICAgICAgICBhc3NlcnRUcnVlKFxuICAgICAgICAgICFjdHguJGNvbnRhaW5lciQgfHwgY3R4LiRjb250YWluZXIkID09PSB0aGlzLiRjb250YWluZXIkLFxuICAgICAgICAgICdEbyBub3QgdXNlIHNpZ25hbHMgYWNyb3NzIGNvbnRhaW5lcnMnXG4gICAgICAgICk7XG4gICAgICBjb25zdCBlZmZlY3RTdWJzY3JpYmVyID0gY3R4LiRlZmZlY3RTdWJzY3JpYmVyJDtcbiAgICAgIGlmIChlZmZlY3RTdWJzY3JpYmVyKSB7XG4gICAgICAgIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uKCh0aGlzLiRsb2FkaW5nRWZmZWN0cyQgfHw9IG5ldyBTZXQoKSksIGVmZmVjdFN1YnNjcmliZXIpO1xuICAgICAgICBlbnN1cmVDb250YWluc0JhY2tSZWYoZWZmZWN0U3Vic2NyaWJlciwgdGhpcyk7XG4gICAgICAgIGFkZFFybFRvU2VyaWFsaXphdGlvbkN0eChlZmZlY3RTdWJzY3JpYmVyLCB0aGlzLiRjb250YWluZXIkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHNldCB1bnRyYWNrZWRMb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiR1bnRyYWNrZWRMb2FkaW5nJCkge1xuICAgICAgdGhpcy4kdW50cmFja2VkTG9hZGluZyQgPSB2YWx1ZTtcbiAgICAgIERFQlVHICYmIGxvZygnU2V0IHVudHJhY2tlZExvYWRpbmcnLCB2YWx1ZSk7XG4gICAgICBzY2hlZHVsZUVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgdGhpcy4kbG9hZGluZ0VmZmVjdHMkKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdW50cmFja2VkTG9hZGluZygpIHtcbiAgICAvLyByZWFkaW5nIGAubG9hZGluZ2AgbWVhbnMgc29tZW9uZSBpcyBpbnRlcmVzdGVkIGluIHRoZSByZXN1bHQsIHNvIHdlIHNob3VsZCB0cmlnZ2VyIHRoZSBjb21wdXRhdGlvbi4gVGhlIGFsdGVybmF0aXZlIGlzIGVhZ2VyIGNvbXB1dGF0aW9uIG9yIGltcGVyYXRpdmUgY2FsbHMgdG8gaW52YWxpZGF0ZTsgdGhpcyBzZWVtcyBuaWNlci5cbiAgICB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgLy8gRHVyaW5nIFNTUiB0aGVyZSdzIG5vIHN1Y2ggdGhpbmcgYXMgbG9hZGluZyBzdGF0ZSwgd2UgbXVzdCByZW5kZXIgY29tcGxldGUgcmVzdWx0c1xuICAgIGlmICgocVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcikgJiYgdGhpcy4kY3VycmVudCQ/LiRwcm9taXNlJCkge1xuICAgICAgREVCVUcgJiYgbG9nKCdUaHJvd2luZyBsb2FkaW5nIHByb21pc2UgZm9yIFNTUicpO1xuICAgICAgdGhyb3cgdGhpcy4kY3VycmVudCQ/LiRwcm9taXNlJDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuJHVudHJhY2tlZExvYWRpbmckO1xuICB9XG5cbiAgLyoqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoZW4gdGhlIHNpZ25hbCB3YXMgcmVzb2x2ZWQuICovXG4gIGdldCBlcnJvcigpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsID0gdGhpcy51bnRyYWNrZWRFcnJvcjtcbiAgICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgaWYgKGN0eCAmJiAodGhpcy4kY29udGFpbmVyJCB8fD0gY3R4LiRjb250YWluZXIkIHx8IG51bGwpKSB7XG4gICAgICBpc0RldiAmJlxuICAgICAgICBhc3NlcnRUcnVlKFxuICAgICAgICAgICFjdHguJGNvbnRhaW5lciQgfHwgY3R4LiRjb250YWluZXIkID09PSB0aGlzLiRjb250YWluZXIkLFxuICAgICAgICAgICdEbyBub3QgdXNlIHNpZ25hbHMgYWNyb3NzIGNvbnRhaW5lcnMnXG4gICAgICAgICk7XG4gICAgICBjb25zdCBlZmZlY3RTdWJzY3JpYmVyID0gY3R4LiRlZmZlY3RTdWJzY3JpYmVyJDtcbiAgICAgIGlmIChlZmZlY3RTdWJzY3JpYmVyKSB7XG4gICAgICAgIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uKCh0aGlzLiRlcnJvckVmZmVjdHMkIHx8PSBuZXcgU2V0KCkpLCBlZmZlY3RTdWJzY3JpYmVyKTtcbiAgICAgICAgZW5zdXJlQ29udGFpbnNCYWNrUmVmKGVmZmVjdFN1YnNjcmliZXIsIHRoaXMpO1xuICAgICAgICBhZGRRcmxUb1NlcmlhbGl6YXRpb25DdHgoZWZmZWN0U3Vic2NyaWJlciwgdGhpcy4kY29udGFpbmVyJCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBzZXQgdW50cmFja2VkRXJyb3IodmFsdWU6IEVycm9yIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiR1bnRyYWNrZWRFcnJvciQpIHtcbiAgICAgIHRoaXMuJHVudHJhY2tlZEVycm9yJCA9IHZhbHVlO1xuICAgICAgc2NoZWR1bGVFZmZlY3RzKHRoaXMuJGNvbnRhaW5lciQsIHRoaXMsIHRoaXMuJGVycm9yRWZmZWN0cyQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1bnRyYWNrZWRFcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy4kdW50cmFja2VkRXJyb3IkO1xuICB9XG5cbiAgZ2V0IGV4cGlyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuJGV4cGlyZXMkIHx8IDA7XG4gIH1cblxuICBzZXQgZXhwaXJlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy4kY2xlYXJOZXh0UG9sbCQoKTtcbiAgICB0aGlzLiRleHBpcmVzJCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLiRleHBpcmVzJCAmJiB0aGlzLiRoYXNTdWJzY3JpYmVycyQoKSkge1xuICAgICAgdGhpcy4kc2NoZWR1bGVOZXh0UG9sbCQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcG9sbCgpIHtcbiAgICByZXR1cm4gISh0aGlzLiRmbGFncyQgJiBBc3luY1NpZ25hbEZsYWdzLk5PX1BPTEwpO1xuICB9XG5cbiAgc2V0IHBvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuJGZsYWdzJCAmPSB+QXN5bmNTaWduYWxGbGFncy5OT19QT0xMO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRmbGFncyQgfD0gQXN5bmNTaWduYWxGbGFncy5OT19QT0xMO1xuICAgIH1cbiAgICAvLyBSZXNjaGVkdWxlIHNpbmNlIHBvbGwgYmVoYXZpb3IgY2hhbmdlZFxuICAgIGlmICh0aGlzLiRleHBpcmVzJCAmJiB0aGlzLiRoYXNTdWJzY3JpYmVycyQoKSkge1xuICAgICAgdGhpcy4kY2xlYXJOZXh0UG9sbCQoKTtcbiAgICAgIHRoaXMuJHNjaGVkdWxlTmV4dFBvbGwkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZXhwaXJlc2AgYW5kIGBwb2xsYCBpbnN0ZWFkLiAqL1xuICBnZXQgaW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZXhwaXJlcyA9IHRoaXMuJGV4cGlyZXMkIHx8IDA7XG4gICAgcmV0dXJuIHRoaXMuJGZsYWdzJCAmIEFzeW5jU2lnbmFsRmxhZ3MuTk9fUE9MTCA/IC1leHBpcmVzIDogZXhwaXJlcztcbiAgfVxuXG4gIHNldCBpbnRlcnZhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgdGhpcy4kZmxhZ3MkIHw9IEFzeW5jU2lnbmFsRmxhZ3MuTk9fUE9MTDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kZmxhZ3MkICY9IH5Bc3luY1NpZ25hbEZsYWdzLk5PX1BPTEw7XG4gICAgfVxuICAgIHRoaXMuZXhwaXJlcyA9IE1hdGguYWJzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBJbnZhbGlkYXRlcyB0aGUgc2lnbmFsLCBjYXVzaW5nIGl0IHRvIHJlLWNvbXB1dGUgaXRzIHZhbHVlLiAqL1xuICBvdmVycmlkZSBhc3luYyBpbnZhbGlkYXRlKGluZm8/OiB1bmtub3duKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLiRpbmZvJCA9IGluZm87XG4gICAgICB0aGlzLiRpbmZvVmVyc2lvbiQgPSB0aGlzLiRpbmZvVmVyc2lvbiQgPT09IHVuZGVmaW5lZCA/IDEgOiB0aGlzLiRpbmZvVmVyc2lvbiQgKyAxO1xuICAgIH1cbiAgICB0aGlzLiRzZXRJbnZhbGlkJCh0cnVlLCB0aGlzLiRmbGFncyQgJiBBc3luY1NpZ25hbEZsYWdzLkNMRUFSX09OX0lOVkFMSURBVEUpO1xuICB9XG5cbiAgJHNldEludmFsaWQkKGFsbG93UmVjYWxjOiBib29sZWFuLCBtdXN0Q2xlYXI6IGJvb2xlYW4gfCBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLiRmbGFncyQgfD0gU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICB0aGlzLiRjbGVhck5leHRQb2xsJCgpO1xuICAgIGlmIChtdXN0Q2xlYXIpIHtcbiAgICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IE5FRURTX0NPTVBVVEFUSU9OO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbGxvd1JlY2FsYyAmJlxuICAgICAgKHRoaXMuJGVmZmVjdHMkPy5zaXplIHx8IHRoaXMuJGxvYWRpbmdFZmZlY3RzJD8uc2l6ZSB8fCB0aGlzLiRlcnJvckVmZmVjdHMkPy5zaXplKVxuICAgICkge1xuICAgICAgLy8gY29tcHV0ZSBpbiBuZXh0IG1pY3JvdGFza1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBYm9ydCB0aGUgY3VycmVudCBjb21wdXRhdGlvbiBhbmQgcnVuIGNsZWFudXBzIGlmIG5lZWRlZC4gKi9cbiAgYWJvcnQocmVhc29uPzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuJGN1cnJlbnQkKSB7XG4gICAgICB0aGlzLiRyZXF1ZXN0Q2xlYW51cHMkKHRoaXMuJGN1cnJlbnQkLCByZWFzb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTY2hlZHVsZSBlYWdlciBjbGVhbnVwIG9uIG5leHQgbWFjcm8gdGFzayBpZiBubyBzdWJzY3JpYmVycyByZW1haW4uICovXG4gICRzY2hlZHVsZUVhZ2VyQ2xlYW51cCQoKTogdm9pZCB7XG4gICAgaWYgKCEodGhpcy4kZmxhZ3MkICYgQXN5bmNTaWduYWxGbGFncy5FQUdFUl9DTEVBTlVQKSB8fCB0aGlzLiRoYXNTdWJzY3JpYmVycyQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIShxVGVzdCA/ICFpc1NlcnZlclBsYXRmb3JtKCkgOiBpc0Jyb3dzZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLiRoYXNTdWJzY3JpYmVycyQoKSkge1xuICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgc2lnbmFsIGZpbmlzaGVkIGNvbXB1dGluZy4gKi9cbiAgYXN5bmMgcHJvbWlzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGN1cnJlbnQgY29tcHV0YXRpb24gdG8gZmluaXNoLCBidXQgaWYgd2UgYmVjYW1lIGludmFsaWQgd2hpbGUgcnVubmluZywgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV3IGNvbXB1dGF0aW9uIGluc3RlYWQuIFNvIHdlIGxvb3AgdW50aWwgd2UgYXJlIG5vIGxvbmdlciBpbnZhbGlkXG4gICAgd2hpbGUgKHRoaXMuJGN1cnJlbnQkPy4kcHJvbWlzZSQpIHtcbiAgICAgIGF3YWl0IHRoaXMuJGN1cnJlbnQkPy4kcHJvbWlzZSQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJ1biB0aGUgY29tcHV0YXRpb24gaWYgbmVlZGVkICovXG4gICRjb21wdXRlSWZOZWVkZWQkKCk6IHZvaWQge1xuICAgIGlmICghKHRoaXMuJGZsYWdzJCAmIFNpZ25hbEZsYWdzLklOVkFMSUQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFNraXAgY29tcHV0YXRpb24gb24gU1NSIGZvciBjbGllbnRPbmx5IHNpZ25hbHNcbiAgICBpZiAoKHFUZXN0ID8gaXNTZXJ2ZXJQbGF0Zm9ybSgpIDogaXNTZXJ2ZXIpICYmIHRoaXMuJGZsYWdzJCAmIEFzeW5jU2lnbmFsRmxhZ3MuQ0xJRU5UX09OTFkpIHtcbiAgICAgIC8vIFdlIG11c3QgcHJldGVuZCB0byBsb2FkLCBhbmQgcmVnaXN0ZXIgYXMgYSBsaXN0ZW5lciBmb3IgdGhlIGNhcHR1cmVzXG4gICAgICB0aGlzLiR1bnRyYWNrZWRMb2FkaW5nJCA9IHRydWU7XG4gICAgICAodGhpcy4kY29udGFpbmVyJCBhcyBTU1JDb250YWluZXIpPy5zZXJpYWxpemF0aW9uQ3R4LiRlYWdlclJlc3VtZSQuYWRkKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiRjbGVhck5leHRQb2xsJCgpO1xuXG4gICAgLy8gQ2xlYXIgZmxhZyBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgY2xlYW51cHMgZG9uJ3Qgc3RhcnQgYW5vdGhlciBjb21wdXRlXG4gICAgdGhpcy4kZmxhZ3MkICY9IH5TaWduYWxGbGFncy5JTlZBTElEO1xuXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuJGN1cnJlbnQkO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICB0aGlzLiRyZXF1ZXN0Q2xlYW51cHMkKGN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ID0gdGhpcy4kY29uY3VycmVuY3kkID09PSAwID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogKHRoaXMuJGNvbmN1cnJlbmN5JCA/PyAxKTtcbiAgICAvLyBXZSBvbmx5IGhhdmUgJGpvYnMkW10gd2hlbiBjb25jdXJyZW5jeSAhPSAxXG4gICAgaWYgKHRoaXMuJGpvYnMkID8gdGhpcy4kam9icyQubGVuZ3RoID49IGxpbWl0IDogY3VycmVudD8uJHByb21pc2UkKSB7XG4gICAgICBERUJVRyAmJiBsb2coYENvbmN1cnJlbmN5IGxpbWl0ICR7bGltaXR9IHJlYWNoZWQsIG5vdCBzdGFydGluZyBuZXcgY29tcHV0YXRpb25gKTtcbiAgICAgIC8vIFdlIHJlcXVlc3RlZCBjbGVhbnVwcyBmb3IgYWxsIHRoZSBwcmV2aW91cyBqb2JzLCBvbmNlIG9uZSBmaW5pc2hlcyBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgam9icyBhcnJheSBhbmQgdHJpZ2dlciBjb21wdXRlSWZOZWVkZWRcbiAgICAgIC8vIFJlc3RvcmUgaW52YWxpZCBzdGF0ZVxuICAgICAgdGhpcy4kZmxhZ3MkIHw9IFNpZ25hbEZsYWdzLklOVkFMSUQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgREVCVUcgJiYgbG9nKCdTdGFydGluZyBuZXcgYXN5bmMgY29tcHV0YXRpb24nKTtcblxuICAgIC8vIFdlIHB1dCB0aGUgYWN0dWFsIGNvbXB1dGF0aW9uIGluIGEgc2VwYXJhdGUgbWV0aG9kIHNvIHdlIGNhbiBlYXNpbHkgcmV0YWluIHRoZSBwcm9taXNlXG4gICAgY29uc3QgaW5mb1ZlcnNpb24gPSB0aGlzLiRpbmZvVmVyc2lvbiQ7XG4gICAgY29uc3QgcnVubmluZyA9IG5ldyBBc3luY0pvYih0aGlzLCB0aGlzLiRpbmZvJCwgaW5mb1ZlcnNpb24pO1xuICAgIHRoaXMuJGN1cnJlbnQkID0gcnVubmluZztcbiAgICBpZiAodGhpcy4kam9icyQpIHtcbiAgICAgIHRoaXMuJGpvYnMkLnB1c2gocnVubmluZyk7XG4gICAgfVxuICAgIHJ1bm5pbmcuJHByb21pc2UkID0gdGhpcy4kcnVuQ29tcHV0YXRpb24kKHJ1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgJHJ1bkNvbXB1dGF0aW9uJChydW5uaW5nOiBBc3luY0pvYjxUPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzQ3VycmVudCA9ICgpID0+IHJ1bm5pbmcgPT09IHRoaXMuJGN1cnJlbnQkO1xuXG4gICAgbGV0IGZuID0gdGhpcy4kY29tcHV0ZVFybCQucmVzb2x2ZWQ7XG4gICAgaWYgKCFmbikge1xuICAgICAgLy8gUVJMIHJlc29sdXRpb24gaXMgYXN5bmMg4oCUIHdlIGhhdmUgdG8gcHVibGlzaCBsb2FkaW5nPXRydWUgYmVmb3JlIGF3YWl0aW5nIHNvXG4gICAgICAvLyBzdWJzY3JpYmVycyBrbm93IHRoZSB2YWx1ZSBpc24ndCByZWFkeSB5ZXQuXG4gICAgICB0aGlzLnVudHJhY2tlZExvYWRpbmcgPSB0cnVlO1xuICAgICAgZm4gPSBhd2FpdCB0aGlzLiRjb21wdXRlUXJsJC5yZXNvbHZlKCk7XG4gICAgICBpZiAocnVubmluZy4kYWJvcnRDb250cm9sbGVyJD8uc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgREVCVUcgJiYgbG9nKCdDb21wdXRhdGlvbiBhYm9ydGVkIGJlZm9yZSBpdCBzdGFydGVkJyk7XG4gICAgICAgIHJ1bm5pbmcuJHByb21pc2UkID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy4kdGltZW91dE1zJCkge1xuICAgICAgICB0aGlzLiRjb21wdXRhdGlvblRpbWVvdXRJZCQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCAke3RoaXMuJHRpbWVvdXRNcyR9bXNgKTtcbiAgICAgICAgICB0aGlzLiRzZXRFcnJvciQocnVubmluZywgZXJyb3IpO1xuICAgICAgICAgIHJ1bm5pbmcuJGFib3J0Q29udHJvbGxlciQ/LmFib3J0KGVycm9yKTtcbiAgICAgICAgfSwgdGhpcy4kdGltZW91dE1zJCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSB0byBzdGF5IHN5bmMgaWYgcG9zc2libGUuIE9ubHkgcHVibGlzaCBsb2FkaW5nPXRydWUgdG8gc3Vic2NyaWJlcnMgd2hlblxuICAgICAgLy8gdGhlIGNvbXB1dGUgaXMgYWN0dWFsbHkgYXN5bmNocm9ub3VzIOKAlCBhIHN5bmNocm9ub3VzIHJlc29sdmUgKGUuZy4gcHJlLWxvYWRlZFxuICAgICAgLy8gdmFsdWVzIGluamVjdGVkIHZpYSBfaW5qZWN0QXN5bmNTaWduYWxWYWx1ZSkgc2hvdWxkIG5ldmVyIHRyYW5zaXRpb24gdGhyb3VnaCBhXG4gICAgICAvLyB2aXNpYmxlIGxvYWRpbmcgc3RhdGUsIHdoaWNoIG9uIFNTUiB3b3VsZCBmaXJlIHRoZSBsb2FkaW5nLWVmZmVjdCBzdWJzY3JpYmVyc1xuICAgICAgLy8gKHRhc2tzKSB3aGlsZSB0aGUgdmFsdWUgaXMgc3RpbGwgXCJsb2FkaW5nXCIgZnJvbSB0aGVpciBwZXJzcGVjdGl2ZS5cbiAgICAgIGNvbnN0IHZhbHVlUHJvbWlzZSA9IHJldHJ5T25Qcm9taXNlKGZuLmJpbmQobnVsbCwgcnVubmluZykpO1xuICAgICAgbGV0IHZhbHVlOiBUO1xuICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZVByb21pc2UpKSB7XG4gICAgICAgIHRoaXMudW50cmFja2VkTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHZhbHVlID0gYXdhaXQgdmFsdWVQcm9taXNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHJ1bm5pbmcuJHByb21pc2UkID0gbnVsbDtcblxuICAgICAgaWYgKHJ1bm5pbmcuJGNhbldyaXRlJCkge1xuICAgICAgICBjb25zdCBqb2JzID0gdGhpcy4kam9icyQ7XG4gICAgICAgIGlmIChqb2JzKSB7XG4gICAgICAgICAgbGV0IGRvRGlzYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBqb2JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoam9ic1tpXSA9PT0gcnVubmluZykge1xuICAgICAgICAgICAgICBkb0Rpc2FibGUgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkb0Rpc2FibGUpIHtcbiAgICAgICAgICAgICAgam9ic1tpXS4kY2FuV3JpdGUkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgREVCVUcgJiYgbG9nKCdQcm9taXNlIHJlc29sdmVkJywgdmFsdWUpO1xuICAgICAgICAvLyB3ZSBsZWF2ZSBlcnJvciBhcy1pcyB1bnRpbCByZXN1bHRcblxuICAgICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgYXNzaWdubWVudHMgcnVuIHNldHRlcnNcbiAgICAgICAgdGhpcy51bnRyYWNrZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBzdXBlci52YWx1ZSBpbnN0ZWFkIG9mIHRoaXMudmFsdWUgdG8gcGVyc2lzdCBpbnZhbGlkIHN0YXRlLCBzbyB0aGF0IGludmFsaWRhdGlvblxuICAgICAgICAgKiBkdXJpbmcgY29tcHV0YXRpb24gcmVjb21wdXRlc1xuICAgICAgICAgKi9cbiAgICAgICAgc3VwZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJ1bm5pbmcuJHByb21pc2UkID0gbnVsbDtcbiAgICAgIERFQlVHICYmIGxvZygnRXJyb3IgY2F1Z2h0IGluIHByb21pc2UuY2F0Y2gnLCBlcnIpO1xuICAgICAgdGhpcy4kc2V0RXJyb3IkKHJ1bm5pbmcsIGVyciBhcyBFcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3VycmVudCgpKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy4kY29tcHV0YXRpb25UaW1lb3V0SWQkKTtcbiAgICAgIGlmIChydW5uaW5nLiRpbmZvVmVyc2lvbiQgPT09IHRoaXMuJGluZm9WZXJzaW9uJCkge1xuICAgICAgICB0aGlzLiRpbmZvJCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuJGZsYWdzJCAmIFNpZ25hbEZsYWdzLklOVkFMSUQpIHtcbiAgICAgICAgREVCVUcgJiYgbG9nKCdDb21wdXRhdGlvbiBmaW5pc2hlZCBidXQgc2lnbmFsIGlzIGludmFsaWQsIHJlLXJ1bm5pbmcnKTtcbiAgICAgICAgLy8gd2UgYmVjYW1lIGludmFsaWQgYWdhaW4gd2hpbGUgcnVubmluZywgc28gd2UgbmVlZCB0byByZS1ydW4gdGhlIGNvbXB1dGF0aW9uIHRvIGdldCB0aGUgbmV3IHByb21pc2VcbiAgICAgICAgdGhpcy4kY29tcHV0ZUlmTmVlZGVkJCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51bnRyYWNrZWRMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuJHNjaGVkdWxlTmV4dFBvbGwkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGVycm9yIGZyb20gdGhlIGdpdmVuIGpvYi4gV2Ugb25seSBhY2NlcHQgZXJyb3JzIGZyb20gdGhlIGN1cnJlbnQgam9iIGFuZCB3ZSBpZ25vcmVcbiAgICogQWJvcnRFcnJvcnMuXG4gICAqL1xuICAkc2V0RXJyb3IkKGpvYjogQXN5bmNKb2I8VD4sIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGlmIChqb2IgIT09IHRoaXMuJGN1cnJlbnQkIHx8ICFqb2IuJGNhbldyaXRlJCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBqb2IuJGNhbldyaXRlJCA9IGZhbHNlO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gQWJvcnRFcnJvciBmcm9tIEFib3J0U2lnbmFsIGlzIGEgY2FuY2VsbGF0aW9uLCBub3QgYW4gYWN0dWFsIGVycm9yXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudW50cmFja2VkRXJyb3IgPSBlcnJvcjtcbiAgICAvLyBKb2IgZmFpbHVyZXMgc2hvdWxkIGJlIHJhcmUgYW5kIHJlcXVpcmUgcmV0cnlpbmdcbiAgICB0aGlzLnVudHJhY2tlZFZhbHVlID0gTkVFRFNfQ09NUFVUQVRJT047XG4gIH1cblxuICAvKiogQ2FsbGVkIGFmdGVyIFNTUi91bm1vdW50ICovXG4gIGFzeW5jICRkZXN0cm95JCgpIHtcbiAgICB0aGlzLiRjbGVhck5leHRQb2xsJCgpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLiRjb21wdXRhdGlvblRpbWVvdXRJZCQpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLiRjdXJyZW50JDtcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgdGhpcy4kcmVxdWVzdENsZWFudXBzJChjdXJyZW50KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuJGpvYnMkKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLiRqb2JzJC5tYXAoKGpvYikgPT4gam9iLiRwcm9taXNlJCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBjdXJyZW50Py4kcHJvbWlzZSQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSAkY2xlYXJOZXh0UG9sbCQoKSB7XG4gICAgaWYgKHRoaXMuJHBvbGxUaW1lb3V0SWQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiRwb2xsVGltZW91dElkJCk7XG4gICAgICB0aGlzLiRwb2xsVGltZW91dElkJCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlICRzY2hlZHVsZU5leHRQb2xsJCgpIHtcbiAgICBpZiAoKHFUZXN0ID8gaXNTZXJ2ZXJQbGF0Zm9ybSgpIDogaXNTZXJ2ZXIpIHx8ICF0aGlzLiRleHBpcmVzJCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuJGNsZWFyTmV4dFBvbGwkKCk7XG5cbiAgICBjb25zdCBhbGxvd1JlY2FsYyA9ICEodGhpcy4kZmxhZ3MkICYgQXN5bmNTaWduYWxGbGFncy5OT19QT0xMKTtcbiAgICAvLyBFdmVuIHdoZW4gY2xlYXIgb24gaW52YWxpZGF0ZSwgd2UgZG9uJ3QgY2xlYXIgaWYgd2UncmUgbWVyZWx5IHJlLXJ1bm5pbmcgZHVlIHRvIHBvbGxpbmdcbiAgICAvLyBXZSBleHBlY3QgdG8gZ2V0IHRoZSBuZXcgdmFsdWUgc29vbiwgc28gd2UgY2FuIGF2b2lkIHNob3dpbmcgYSBsb2FkaW5nIHN0YXRlXG4gICAgY29uc3QgbXVzdENsZWFyID0gdGhpcy4kZmxhZ3MkICYgQXN5bmNTaWduYWxGbGFncy5DTEVBUl9PTl9JTlZBTElEQVRFICYmICFhbGxvd1JlY2FsYztcbiAgICB0aGlzLiRwb2xsVGltZW91dElkJCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB0aGlzLiRzZXRJbnZhbGlkJChhbGxvd1JlY2FsYywgbXVzdENsZWFyKSxcbiAgICAgIHRoaXMuJGV4cGlyZXMkIVxuICAgICk7XG5cbiAgICB0aGlzLiRwb2xsVGltZW91dElkJD8udW5yZWY/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSAkaGFzU3Vic2NyaWJlcnMkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLiRlZmZlY3RzJD8uc2l6ZSB8fCB0aGlzLiRsb2FkaW5nRWZmZWN0cyQ/LnNpemUgfHwgdGhpcy4kZXJyb3JFZmZlY3RzJD8uc2l6ZSk7XG4gIH1cblxuICAkcmVxdWVzdENsZWFudXBzJChqb2I6IEFzeW5jSm9iPFQ+LCByZWFzb24/OiBhbnkpIHtcbiAgICBpZiAoam9iLiRjbGVhbnVwUmVxdWVzdGVkJCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBERUJVRyAmJiBsb2coJ1JlcXVlc3RpbmcgY2xlYW51cHMgZm9yIGpvYicsIGpvYik7XG4gICAgam9iLiRjbGVhbnVwUmVxdWVzdGVkJCA9IHRydWU7XG4gICAgam9iLiRhYm9ydENvbnRyb2xsZXIkPy5hYm9ydChyZWFzb24pO1xuICAgIGpvYi4kcHJvbWlzZSQgPSBtYXliZVRoZW4oam9iLiRwcm9taXNlJCwgKCkgPT4gdGhpcy4kcnVuQ2xlYW51cHMkKGpvYikpO1xuICB9XG4gIC8qKiBDbGVhbiB1cCBhbmQgdHJpZ2dlciBzaWduYWwgY29tcHV0ZSBvbmNlIGNvbXBsZXRlICovXG4gICRydW5DbGVhbnVwcyQoam9iOiBBc3luY0pvYjxUPikge1xuICAgIGNvbnN0IGNsZWFudXBzID0gam9iLiRjbGVhbnVwcyQ7XG4gICAgREVCVUcgJiYgbG9nKCdjbGVhbnVwIHN0YXJ0Jywgam9iKTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycjogYW55KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVFcnJvciA9IHRoaXMuJGNvbnRhaW5lciQ/LmhhbmRsZUVycm9yO1xuICAgICAgaWYgKGhhbmRsZUVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgbnVsbCEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYXN5bmMgc2lnbmFsIGNsZWFudXAnLCBlcnIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25Eb25lID0gKCkgPT4ge1xuICAgICAgam9iLiRwcm9taXNlJCA9IG51bGw7XG4gICAgICBpZiAoY2xlYW51cHMpIHtcbiAgICAgICAgY2xlYW51cHMubGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICAgIERFQlVHICYmIGxvZygnY2xlYW51cCBmaW5pc2hlZCcsIGpvYik7XG4gICAgICAvLyBOb3cgdHJpZ2dlciBjb21wdXRlXG4gICAgICBjb25zdCBqb2JzID0gdGhpcy4kam9icyQ7XG4gICAgICBpZiAoam9icykge1xuICAgICAgICBjb25zdCBpZHggPSBqb2JzLmluZGV4T2Yoam9iKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICBqb2JzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgfTtcbiAgICBsZXQgcHJvbWlzZUNoYWluOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChjbGVhbnVwcykge1xuICAgICAgREVCVUcgJiYgbG9nKCdjbGVhbnVwIHN0YXJ0IGZvciByZWFsJywgam9iKTtcbiAgICAgIC8vIEtlZXAgdGhpcyBzeW5jLWlzaCBzbyBzeW5jIGZ1bmN0aW9ucyBydW4gaW1tZWRpYXRlbHkuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsZWFudXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2xlYW51cHNbaV0oKTtcbiAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHByb21pc2VDaGFpbiA9IChwcm9taXNlQ2hhaW4gPyBwcm9taXNlQ2hhaW4udGhlbigoKSA9PiByZXN1bHQpIDogcmVzdWx0KS5jYXRjaChvbkVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvbWlzZUNoYWluKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZUNoYWluLnRoZW4ob25Eb25lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25Eb25lKCk7XG4gICAgfVxuICB9XG59XG4iXX0=","/** @internal */\nexport const _CONST_PROPS = Symbol('CONST');\n/** @internal */\nexport const _VAR_PROPS = Symbol('VAR');\n/** @internal */\nexport const _OWNER = Symbol('OWNER');\n/** @internal */\nexport const _PROPS_HANDLER = Symbol('PROPS_HANDLER');\n/** @internal @deprecated v1 compat */\nexport const _IMMUTABLE = Symbol('IMMUTABLE');\n/** @internal */\nexport const _UNINITIALIZED = Symbol('UNINITIALIZED');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEMsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdEQsc0NBQXNDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFOUMsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX0NPTlNUX1BST1BTID0gU3ltYm9sKCdDT05TVCcpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9WQVJfUFJPUFMgPSBTeW1ib2woJ1ZBUicpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9PV05FUiA9IFN5bWJvbCgnT1dORVInKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfUFJPUFNfSEFORExFUiA9IFN5bWJvbCgnUFJPUFNfSEFORExFUicpO1xuLyoqIEBpbnRlcm5hbCBAZGVwcmVjYXRlZCB2MSBjb21wYXQgKi9cbmV4cG9ydCBjb25zdCBfSU1NVVRBQkxFID0gU3ltYm9sKCdJTU1VVEFCTEUnKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9VTklOSVRJQUxJWkVEID0gU3ltYm9sKCdVTklOSVRJQUxJWkVEJyk7XG4iXX0=","/** @internal */\nexport const EMPTY_ARRAY = [];\n/** @internal */\nexport const EMPTY_OBJ = {};\nObject.freeze(EMPTY_ARRAY);\nObject.freeze(EMPTY_OBJ);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx5d2VpZ2h0LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9mbHl3ZWlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxFQUFXLENBQUM7QUFDdkMsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUF5QixDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9BUlJBWSA9IFtdIGFzIGFueVtdO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbk9iamVjdC5mcmVlemUoRU1QVFlfQVJSQVkpO1xuT2JqZWN0LmZyZWV6ZShFTVBUWV9PQkopO1xuIl19","import { addStoreEffect } from '../../reactive-primitives/impl/store';\nimport { WrappedSignalImpl } from '../../reactive-primitives/impl/wrapped-signal-impl';\nimport { tryGetInvokeContext } from '../../use/use-core';\nimport { _CONST_PROPS, _VAR_PROPS, _OWNER, _PROPS_HANDLER } from '../utils/constants';\nimport { jsxEventToHtmlAttribute } from '../utils/event-names';\nimport { EMPTY_OBJ } from '../utils/flyweight';\nimport { assertTrue } from '../error/assert';\nimport { scheduleEffects } from '../../reactive-primitives/utils';\nimport { isDev } from '@qwik.dev/core/build';\nexport function createPropsProxy(owner) {\n    // TODO don't make a proxy but populate getters? benchmark\n    return new Proxy({}, new PropsProxyHandler(owner));\n}\nexport class PropsProxyHandler {\n    owner;\n    $effects$ = undefined;\n    $container$ = null;\n    constructor(owner) {\n        this.owner = owner;\n    }\n    get(_, prop) {\n        // escape hatch to get the separated props from a component\n        if (prop === _CONST_PROPS) {\n            return this.owner.constProps;\n        }\n        else if (prop === _VAR_PROPS) {\n            return this.owner.varProps;\n        }\n        else if (prop === _OWNER) {\n            return this.owner;\n        }\n        else if (prop === _PROPS_HANDLER) {\n            return this;\n        }\n        let value;\n        if (prop === 'children') {\n            value = this.owner.children;\n        }\n        else {\n            if (typeof prop === 'string' && typeof this.owner.type === 'string') {\n                const attr = jsxEventToHtmlAttribute(prop);\n                if (attr) {\n                    prop = attr;\n                }\n            }\n            value = directGetPropsProxyProp(this.owner, prop);\n            if (prop in this.owner.varProps) {\n                addPropsProxyEffect(this, prop);\n            }\n        }\n        // a proxied value that the optimizer made\n        return value instanceof WrappedSignalImpl && value.$flags$ & 4 /* WrappedSignalFlags.UNWRAP */\n            ? value.value\n            : value;\n    }\n    set(_, prop, value) {\n        if (prop === _OWNER) {\n            // used for deserialization\n            this.owner = value;\n        }\n        else if (prop === 'children') {\n            this.owner.children = value;\n        }\n        else if (prop === _CONST_PROPS) {\n            this.owner.constProps = value;\n        }\n        else if (prop === _VAR_PROPS) {\n            this.owner.varProps = value;\n        }\n        else {\n            if (typeof prop === 'string' && typeof this.owner.type === 'string') {\n                const attr = jsxEventToHtmlAttribute(prop);\n                if (attr) {\n                    prop = attr;\n                }\n            }\n            if (this.owner.constProps && prop in this.owner.constProps) {\n                // delete the prop from the const props first\n                delete this.owner.constProps[prop];\n            }\n            if (this.owner.varProps === EMPTY_OBJ) {\n                this.owner.varProps = {};\n            }\n            else if (!(prop in this.owner.varProps)) {\n                this.owner.toSort = true;\n            }\n            if (this.owner.varProps[prop] !== value) {\n                this.owner.varProps[prop] = value;\n                triggerPropsProxyEffect(this, prop);\n            }\n        }\n        return true;\n    }\n    deleteProperty(_, prop) {\n        let didDelete = delete this.owner.varProps[prop];\n        if (didDelete) {\n            triggerPropsProxyEffect(this, prop);\n        }\n        if (this.owner.constProps) {\n            didDelete = delete this.owner.constProps[prop] || didDelete;\n        }\n        if (this.owner.children != null && prop === 'children') {\n            this.owner.children = null;\n            didDelete = true;\n        }\n        return didDelete;\n    }\n    has(_, prop) {\n        if (prop === 'children') {\n            return this.owner.children != null;\n        }\n        else if (prop === _CONST_PROPS || prop === _VAR_PROPS) {\n            return true;\n        }\n        const inVarProps = prop in this.owner.varProps;\n        if (typeof prop === 'string') {\n            if (inVarProps) {\n                addPropsProxyEffect(this, prop);\n            }\n            if (typeof this.owner.type === 'string') {\n                const attr = jsxEventToHtmlAttribute(prop);\n                if (attr) {\n                    prop = attr;\n                }\n            }\n        }\n        return inVarProps || (this.owner.constProps ? prop in this.owner.constProps : false);\n    }\n    getOwnPropertyDescriptor(_, p) {\n        const value = p === 'children'\n            ? this.owner.children\n            : this.owner.constProps && p in this.owner.constProps\n                ? this.owner.constProps[p]\n                : this.owner.varProps[p];\n        return {\n            configurable: true,\n            enumerable: true,\n            value: value,\n        };\n    }\n    ownKeys() {\n        const out = Object.keys(this.owner.varProps);\n        if (this.owner.children != null) {\n            out.push('children');\n        }\n        if (this.owner.constProps) {\n            for (const key in this.owner.constProps) {\n                if (out.indexOf(key) === -1) {\n                    out.push(key);\n                }\n            }\n        }\n        return out;\n    }\n}\nconst addPropsProxyEffect = (propsProxy, prop) => {\n    // Lazily grab the container from the invoke context\n    const ctx = tryGetInvokeContext();\n    if (ctx) {\n        if (propsProxy.$container$ === null) {\n            if (ctx.$container$) {\n                propsProxy.$container$ = ctx.$container$;\n            }\n        }\n        else {\n            isDev &&\n                assertTrue(!ctx.$container$ || ctx.$container$ === propsProxy.$container$, 'Do not use props across containers');\n        }\n    }\n    const effectSubscriber = ctx?.$effectSubscriber$;\n    if (effectSubscriber) {\n        addStoreEffect(propsProxy.owner._proxy, prop, propsProxy, effectSubscriber);\n    }\n};\nexport const triggerPropsProxyEffect = (propsProxy, prop) => {\n    const effects = getEffects(propsProxy.$effects$, prop);\n    if (effects) {\n        scheduleEffects(propsProxy.$container$, propsProxy, effects);\n    }\n    return !!effects;\n};\nfunction getEffects(effects, prop) {\n    // TODO: Handle STORE_ALL_PROPS\n    return effects?.get(prop);\n}\n/**\n * Instead of using PropsProxyHandler getter (which could create a component-level subscription).\n * Use this function to get the props directly from a const or var props.\n *\n * This does not convert jsx event names.\n */\nexport const directGetPropsProxyProp = (jsx, prop) => {\n    return (jsx.constProps && prop in jsx.constProps ? jsx.constProps[prop] : jsx.varProps[prop]);\n};\nexport const _getProps = (props, prop) => {\n    return _getVarProps(props)?.[prop] || _getConstProps(props)?.[prop] || null;\n};\n/** Used by the optimizer for spread props operations @internal */\nexport const _getVarProps = (props) => {\n    if (!props) {\n        return null;\n    }\n    return _VAR_PROPS in props\n        ? 'children' in props\n            ? { ...props[_VAR_PROPS], children: props.children }\n            : props[_VAR_PROPS]\n        : props;\n};\n/** Used by the optimizer for spread props operations @internal */\nexport const _getConstProps = (props) => {\n    if (!props) {\n        return null;\n    }\n    return _CONST_PROPS in props ? props[_CONST_PROPS] : null;\n};\nexport const isPropsProxy = (obj) => {\n    return obj && _VAR_PROPS in obj;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcHMtcHJveHkuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2pzeC9wcm9wcy1wcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUsvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3QyxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBa0I7SUFDakQsMERBQTBEO0lBQzFELE9BQU8sSUFBSSxLQUFLLENBQU0sRUFBRSxFQUFFLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxPQUFPLGlCQUFpQjtJQUlUO0lBSG5CLFNBQVMsR0FBOEQsU0FBUyxDQUFDO0lBQ2pGLFdBQVcsR0FBcUIsSUFBSSxDQUFDO0lBRXJDLFlBQW1CLEtBQWtCO1FBQWxCLFVBQUssR0FBTCxLQUFLLENBQWE7SUFBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxDQUFNLEVBQUUsSUFBcUI7UUFDL0IsMkRBQTJEO1FBQzNELElBQUksSUFBSSxLQUFLLFlBQVks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LENBQUMsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVEsRUFBcUIsRUFBRTtJQUMxRCxPQUFPLEdBQUcsSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFN0b3JlRWZmZWN0IH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlJztcbmltcG9ydCB7IFdyYXBwZWRTaWduYWxJbXBsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3dyYXBwZWQtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgV3JhcHBlZFNpZ25hbEZsYWdzLCB0eXBlIEVmZmVjdFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvdHlwZXMnO1xuaW1wb3J0IHsgdHJ5R2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBfQ09OU1RfUFJPUFMsIF9WQVJfUFJPUFMsIF9PV05FUiwgX1BST1BTX0hBTkRMRVIgfSBmcm9tICcuLi91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHsganN4RXZlbnRUb0h0bWxBdHRyaWJ1dGUgfSBmcm9tICcuLi91dGlscy9ldmVudC1uYW1lcyc7XG5pbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuLi91dGlscy9mbHl3ZWlnaHQnO1xuaW1wb3J0IHR5cGUgeyBKU1hOb2RlSW1wbCB9IGZyb20gJy4vanN4LW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHR5cGUgeyBKU1hOb2RlSW50ZXJuYWwgfSBmcm9tICcuL3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBzY2hlZHVsZUVmZmVjdHMgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3V0aWxzJztcbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvcHNQcm94eShvd25lcjogSlNYTm9kZUltcGwpOiBQcm9wcyB7XG4gIC8vIFRPRE8gZG9uJ3QgbWFrZSBhIHByb3h5IGJ1dCBwb3B1bGF0ZSBnZXR0ZXJzPyBiZW5jaG1hcmtcbiAgcmV0dXJuIG5ldyBQcm94eTxhbnk+KHt9LCBuZXcgUHJvcHNQcm94eUhhbmRsZXIob3duZXIpKTtcbn1cbmV4cG9ydCBjbGFzcyBQcm9wc1Byb3h5SGFuZGxlciBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxhbnk+IHtcbiAgJGVmZmVjdHMkOiB1bmRlZmluZWQgfCBNYXA8c3RyaW5nIHwgc3ltYm9sLCBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPj4gPSB1bmRlZmluZWQ7XG4gICRjb250YWluZXIkOiBDb250YWluZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3duZXI6IEpTWE5vZGVJbXBsKSB7fVxuICBnZXQoXzogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICAvLyBlc2NhcGUgaGF0Y2ggdG8gZ2V0IHRoZSBzZXBhcmF0ZWQgcHJvcHMgZnJvbSBhIGNvbXBvbmVudFxuICAgIGlmIChwcm9wID09PSBfQ09OU1RfUFJPUFMpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bmVyLmNvbnN0UHJvcHM7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSBfVkFSX1BST1BTKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25lci52YXJQcm9wcztcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09IF9PV05FUikge1xuICAgICAgcmV0dXJuIHRoaXMub3duZXI7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSBfUFJPUFNfSEFORExFUikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGxldCB2YWx1ZTogdW5rbm93bjtcbiAgICBpZiAocHJvcCA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgdmFsdWUgPSB0aGlzLm93bmVyLmNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB0aGlzLm93bmVyLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZShwcm9wIGFzIHN0cmluZyk7XG4gICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgcHJvcCA9IGF0dHI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhbHVlID0gZGlyZWN0R2V0UHJvcHNQcm94eVByb3AodGhpcy5vd25lciwgcHJvcCBhcyBzdHJpbmcpO1xuICAgICAgaWYgKHByb3AgaW4gdGhpcy5vd25lci52YXJQcm9wcykge1xuICAgICAgICBhZGRQcm9wc1Byb3h5RWZmZWN0KHRoaXMsIHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhIHByb3hpZWQgdmFsdWUgdGhhdCB0aGUgb3B0aW1pemVyIG1hZGVcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsSW1wbCAmJiB2YWx1ZS4kZmxhZ3MkICYgV3JhcHBlZFNpZ25hbEZsYWdzLlVOV1JBUFxuICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgOiB2YWx1ZTtcbiAgfVxuICBzZXQoXzogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAocHJvcCA9PT0gX09XTkVSKSB7XG4gICAgICAvLyB1c2VkIGZvciBkZXNlcmlhbGl6YXRpb25cbiAgICAgIHRoaXMub3duZXIgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIHRoaXMub3duZXIuY2hpbGRyZW4gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09IF9DT05TVF9QUk9QUykge1xuICAgICAgdGhpcy5vd25lci5jb25zdFByb3BzID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSBfVkFSX1BST1BTKSB7XG4gICAgICB0aGlzLm93bmVyLnZhclByb3BzID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHRoaXMub3duZXIudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGpzeEV2ZW50VG9IdG1sQXR0cmlidXRlKHByb3AgYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgICBwcm9wID0gYXR0cjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vd25lci5jb25zdFByb3BzICYmIHByb3AgaW4gdGhpcy5vd25lci5jb25zdFByb3BzKSB7XG4gICAgICAgIC8vIGRlbGV0ZSB0aGUgcHJvcCBmcm9tIHRoZSBjb25zdCBwcm9wcyBmaXJzdFxuICAgICAgICBkZWxldGUgdGhpcy5vd25lci5jb25zdFByb3BzW3Byb3AgYXMgc3RyaW5nXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm93bmVyLnZhclByb3BzID09PSBFTVBUWV9PQkopIHtcbiAgICAgICAgdGhpcy5vd25lci52YXJQcm9wcyA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghKHByb3AgaW4gdGhpcy5vd25lci52YXJQcm9wcykpIHtcbiAgICAgICAgdGhpcy5vd25lci50b1NvcnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3duZXIudmFyUHJvcHNbcHJvcCBhcyBzdHJpbmddICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLm93bmVyLnZhclByb3BzW3Byb3AgYXMgc3RyaW5nXSA9IHZhbHVlO1xuICAgICAgICB0cmlnZ2VyUHJvcHNQcm94eUVmZmVjdCh0aGlzLCBwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZGVsZXRlUHJvcGVydHkoXzogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICBsZXQgZGlkRGVsZXRlID0gZGVsZXRlIHRoaXMub3duZXIudmFyUHJvcHNbcHJvcCBhcyBzdHJpbmddO1xuICAgIGlmIChkaWREZWxldGUpIHtcbiAgICAgIHRyaWdnZXJQcm9wc1Byb3h5RWZmZWN0KHRoaXMsIHByb3ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5vd25lci5jb25zdFByb3BzKSB7XG4gICAgICBkaWREZWxldGUgPSBkZWxldGUgdGhpcy5vd25lci5jb25zdFByb3BzW3Byb3AgYXMgc3RyaW5nXSB8fCBkaWREZWxldGU7XG4gICAgfVxuICAgIGlmICh0aGlzLm93bmVyLmNoaWxkcmVuICE9IG51bGwgJiYgcHJvcCA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgdGhpcy5vd25lci5jaGlsZHJlbiA9IG51bGw7XG4gICAgICBkaWREZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZGlkRGVsZXRlO1xuICB9XG4gIGhhcyhfOiBhbnksIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGlmIChwcm9wID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25lci5jaGlsZHJlbiAhPSBudWxsO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gX0NPTlNUX1BST1BTIHx8IHByb3AgPT09IF9WQVJfUFJPUFMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpblZhclByb3BzID0gcHJvcCBpbiB0aGlzLm93bmVyLnZhclByb3BzO1xuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChpblZhclByb3BzKSB7XG4gICAgICAgIGFkZFByb3BzUHJveHlFZmZlY3QodGhpcywgcHJvcCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3duZXIudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGpzeEV2ZW50VG9IdG1sQXR0cmlidXRlKHByb3AgYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgICBwcm9wID0gYXR0cjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpblZhclByb3BzIHx8ICh0aGlzLm93bmVyLmNvbnN0UHJvcHMgPyBwcm9wIGluIHRoaXMub3duZXIuY29uc3RQcm9wcyA6IGZhbHNlKTtcbiAgfVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXzogYW55LCBwOiBzdHJpbmcgfCBzeW1ib2wpOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIHAgPT09ICdjaGlsZHJlbidcbiAgICAgICAgPyB0aGlzLm93bmVyLmNoaWxkcmVuXG4gICAgICAgIDogdGhpcy5vd25lci5jb25zdFByb3BzICYmIHAgaW4gdGhpcy5vd25lci5jb25zdFByb3BzXG4gICAgICAgICAgPyB0aGlzLm93bmVyLmNvbnN0UHJvcHNbcCBhcyBzdHJpbmddXG4gICAgICAgICAgOiB0aGlzLm93bmVyLnZhclByb3BzW3AgYXMgc3RyaW5nXTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIG93bktleXMoKSB7XG4gICAgY29uc3Qgb3V0ID0gT2JqZWN0LmtleXModGhpcy5vd25lci52YXJQcm9wcyk7XG4gICAgaWYgKHRoaXMub3duZXIuY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgb3V0LnB1c2goJ2NoaWxkcmVuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm93bmVyLmNvbnN0UHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub3duZXIuY29uc3RQcm9wcykge1xuICAgICAgICBpZiAob3V0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICBvdXQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuY29uc3QgYWRkUHJvcHNQcm94eUVmZmVjdCA9IChwcm9wc1Byb3h5OiBQcm9wc1Byb3h5SGFuZGxlciwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gIC8vIExhemlseSBncmFiIHRoZSBjb250YWluZXIgZnJvbSB0aGUgaW52b2tlIGNvbnRleHRcbiAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICBpZiAoY3R4KSB7XG4gICAgaWYgKHByb3BzUHJveHkuJGNvbnRhaW5lciQgPT09IG51bGwpIHtcbiAgICAgIGlmIChjdHguJGNvbnRhaW5lciQpIHtcbiAgICAgICAgcHJvcHNQcm94eS4kY29udGFpbmVyJCA9IGN0eC4kY29udGFpbmVyJDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNEZXYgJiZcbiAgICAgICAgYXNzZXJ0VHJ1ZShcbiAgICAgICAgICAhY3R4LiRjb250YWluZXIkIHx8IGN0eC4kY29udGFpbmVyJCA9PT0gcHJvcHNQcm94eS4kY29udGFpbmVyJCxcbiAgICAgICAgICAnRG8gbm90IHVzZSBwcm9wcyBhY3Jvc3MgY29udGFpbmVycydcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZWZmZWN0U3Vic2NyaWJlciA9IGN0eD8uJGVmZmVjdFN1YnNjcmliZXIkO1xuICBpZiAoZWZmZWN0U3Vic2NyaWJlcikge1xuICAgIGFkZFN0b3JlRWZmZWN0KHByb3BzUHJveHkub3duZXIuX3Byb3h5ISwgcHJvcCwgcHJvcHNQcm94eSwgZWZmZWN0U3Vic2NyaWJlcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyUHJvcHNQcm94eUVmZmVjdCA9IChcbiAgcHJvcHNQcm94eTogUHJvcHNQcm94eUhhbmRsZXIsXG4gIHByb3A6IHN0cmluZyB8IHN5bWJvbFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGVmZmVjdHMgPSBnZXRFZmZlY3RzKHByb3BzUHJveHkuJGVmZmVjdHMkLCBwcm9wKTtcbiAgaWYgKGVmZmVjdHMpIHtcbiAgICBzY2hlZHVsZUVmZmVjdHMocHJvcHNQcm94eS4kY29udGFpbmVyJCwgcHJvcHNQcm94eSwgZWZmZWN0cyk7XG4gIH1cbiAgcmV0dXJuICEhZWZmZWN0cztcbn07XG5cbmZ1bmN0aW9uIGdldEVmZmVjdHMoXG4gIGVmZmVjdHM6IE1hcDxzdHJpbmcgfCBzeW1ib2wsIFNldDxFZmZlY3RTdWJzY3JpcHRpb24+PiB8IHVuZGVmaW5lZCxcbiAgcHJvcDogc3RyaW5nIHwgc3ltYm9sXG4pIHtcbiAgLy8gVE9ETzogSGFuZGxlIFNUT1JFX0FMTF9QUk9QU1xuICByZXR1cm4gZWZmZWN0cz8uZ2V0KHByb3ApO1xufVxuXG4vKipcbiAqIEluc3RlYWQgb2YgdXNpbmcgUHJvcHNQcm94eUhhbmRsZXIgZ2V0dGVyICh3aGljaCBjb3VsZCBjcmVhdGUgYSBjb21wb25lbnQtbGV2ZWwgc3Vic2NyaXB0aW9uKS5cbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgcHJvcHMgZGlyZWN0bHkgZnJvbSBhIGNvbnN0IG9yIHZhciBwcm9wcy5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IGNvbnZlcnQganN4IGV2ZW50IG5hbWVzLlxuICovXG5leHBvcnQgY29uc3QgZGlyZWN0R2V0UHJvcHNQcm94eVByb3AgPSA8VCwgSlNYPihqc3g6IEpTWE5vZGVJbnRlcm5hbDxKU1g+LCBwcm9wOiBzdHJpbmcpOiBUID0+IHtcbiAgcmV0dXJuIChcbiAgICBqc3guY29uc3RQcm9wcyAmJiBwcm9wIGluIGpzeC5jb25zdFByb3BzID8ganN4LmNvbnN0UHJvcHNbcHJvcF0gOiBqc3gudmFyUHJvcHNbcHJvcF1cbiAgKSBhcyBUO1xufTtcblxuZXhwb3J0IGNvbnN0IF9nZXRQcm9wcyA9IChcbiAgcHJvcHM6IFByb3BzUHJveHkgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHByb3A6IHN0cmluZ1xuKTogdW5rbm93biA9PiB7XG4gIHJldHVybiBfZ2V0VmFyUHJvcHMocHJvcHMpPy5bcHJvcF0gfHwgX2dldENvbnN0UHJvcHMocHJvcHMpPy5bcHJvcF0gfHwgbnVsbDtcbn07XG5cbi8qKiBVc2VkIGJ5IHRoZSBvcHRpbWl6ZXIgZm9yIHNwcmVhZCBwcm9wcyBvcGVyYXRpb25zIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9nZXRWYXJQcm9wcyA9IChcbiAgcHJvcHM6IFByb3BzUHJveHkgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWRcbik6IFByb3BzIHwgbnVsbCA9PiB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gX1ZBUl9QUk9QUyBpbiBwcm9wc1xuICAgID8gJ2NoaWxkcmVuJyBpbiBwcm9wc1xuICAgICAgPyB7IC4uLnByb3BzW19WQVJfUFJPUFNdLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4gfVxuICAgICAgOiBwcm9wc1tfVkFSX1BST1BTXVxuICAgIDogcHJvcHM7XG59O1xuLyoqIFVzZWQgYnkgdGhlIG9wdGltaXplciBmb3Igc3ByZWFkIHByb3BzIG9wZXJhdGlvbnMgQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2dldENvbnN0UHJvcHMgPSAoXG4gIHByb3BzOiBQcm9wc1Byb3h5IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBQcm9wcyB8IG51bGwgPT4ge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIF9DT05TVF9QUk9QUyBpbiBwcm9wcyA/IHByb3BzW19DT05TVF9QUk9QU10gOiBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvcHNQcm94eSA9IHtcbiAgW19WQVJfUFJPUFNdOiBQcm9wcztcbiAgW19DT05TVF9QUk9QU106IFByb3BzIHwgbnVsbDtcbiAgW19PV05FUl06IEpTWE5vZGVJbnRlcm5hbDtcbiAgW19QUk9QU19IQU5ETEVSXTogUHJvcHNQcm94eUhhbmRsZXI7XG59ICYgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj47XG5cbmV4cG9ydCBjb25zdCBpc1Byb3BzUHJveHkgPSAob2JqOiBhbnkpOiBvYmogaXMgUHJvcHNQcm94eSA9PiB7XG4gIHJldHVybiBvYmogJiYgX1ZBUl9QUk9QUyBpbiBvYmo7XG59O1xuIl19","import { dollar } from './qrl.public';\n// <docs markdown=\"../../readme.md#implicit$FirstArg\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#implicit$FirstArg instead and run `pnpm docs.sync`)\n/**\n * Create a `____$(...)` convenience method from `___(...)`.\n *\n * It is very common for functions to take a lazy-loadable resource as a first argument. For this\n * reason, the Qwik Optimizer automatically extracts the first argument from any function which ends\n * in `$`.\n *\n * This means that `foo$(arg0)` and `foo($(arg0))` are equivalent with respect to Qwik Optimizer.\n * The former is just a shorthand for the latter.\n *\n * For example, these function calls are equivalent:\n *\n * - `component$(() => {...})` is same as `component($(() => {...}))`\n *\n * ```tsx\n * export function myApi(callback: QRL<() => void>): void {\n *   // ...\n * }\n *\n * export const myApi$ = implicit$FirstArg(myApi);\n * // type of myApi$: (callback: () => void): void\n *\n * // can be used as:\n * myApi$(() => console.log('callback'));\n *\n * // will be transpiled to:\n * // FILE: <current file>\n * myApi(qrl('./chunk-abc.js', 'callback'));\n *\n * // FILE: chunk-abc.js\n * export const callback = () => console.log('callback');\n * ```\n *\n * @param fn - A function that should have its first argument automatically `$`.\n * @public\n */\n// </docs>\nexport const implicit$FirstArg = (fn) => {\n    return function (first, ...rest) {\n        return fn.call(null, dollar(first), ...rest);\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wbGljaXRfZG9sbGFyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvaW1wbGljaXRfZG9sbGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxjQUFjLENBQUM7QUFFaEQsc0RBQXNEO0FBQ3RELHlDQUF5QztBQUN6Qyw0RUFBNEU7QUFDNUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEVBQTJDLEVBQ0wsRUFBRTtJQUN4QyxPQUFPLFVBQVUsS0FBWSxFQUFFLEdBQUcsSUFBVTtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvbGxhciwgdHlwZSBRUkwgfSBmcm9tICcuL3FybC5wdWJsaWMnO1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uLy4uL3JlYWRtZS5tZCNpbXBsaWNpdCRGaXJzdEFyZ1wiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uLy4uL3JlYWRtZS5tZCNpbXBsaWNpdCRGaXJzdEFyZyBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogQ3JlYXRlIGEgYF9fX18kKC4uLilgIGNvbnZlbmllbmNlIG1ldGhvZCBmcm9tIGBfX18oLi4uKWAuXG4gKlxuICogSXQgaXMgdmVyeSBjb21tb24gZm9yIGZ1bmN0aW9ucyB0byB0YWtlIGEgbGF6eS1sb2FkYWJsZSByZXNvdXJjZSBhcyBhIGZpcnN0IGFyZ3VtZW50LiBGb3IgdGhpc1xuICogcmVhc29uLCB0aGUgUXdpayBPcHRpbWl6ZXIgYXV0b21hdGljYWxseSBleHRyYWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgZnJvbSBhbnkgZnVuY3Rpb24gd2hpY2ggZW5kc1xuICogaW4gYCRgLlxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCBgZm9vJChhcmcwKWAgYW5kIGBmb28oJChhcmcwKSlgIGFyZSBlcXVpdmFsZW50IHdpdGggcmVzcGVjdCB0byBRd2lrIE9wdGltaXplci5cbiAqIFRoZSBmb3JtZXIgaXMganVzdCBhIHNob3J0aGFuZCBmb3IgdGhlIGxhdHRlci5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgdGhlc2UgZnVuY3Rpb24gY2FsbHMgYXJlIGVxdWl2YWxlbnQ6XG4gKlxuICogLSBgY29tcG9uZW50JCgoKSA9PiB7Li4ufSlgIGlzIHNhbWUgYXMgYGNvbXBvbmVudCgkKCgpID0+IHsuLi59KSlgXG4gKlxuICogYGBgdHN4XG4gKiBleHBvcnQgZnVuY3Rpb24gbXlBcGkoY2FsbGJhY2s6IFFSTDwoKSA9PiB2b2lkPik6IHZvaWQge1xuICogICAvLyAuLi5cbiAqIH1cbiAqXG4gKiBleHBvcnQgY29uc3QgbXlBcGkkID0gaW1wbGljaXQkRmlyc3RBcmcobXlBcGkpO1xuICogLy8gdHlwZSBvZiBteUFwaSQ6IChjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWRcbiAqXG4gKiAvLyBjYW4gYmUgdXNlZCBhczpcbiAqIG15QXBpJCgoKSA9PiBjb25zb2xlLmxvZygnY2FsbGJhY2snKSk7XG4gKlxuICogLy8gd2lsbCBiZSB0cmFuc3BpbGVkIHRvOlxuICogLy8gRklMRTogPGN1cnJlbnQgZmlsZT5cbiAqIG15QXBpKHFybCgnLi9jaHVuay1hYmMuanMnLCAnY2FsbGJhY2snKSk7XG4gKlxuICogLy8gRklMRTogY2h1bmstYWJjLmpzXG4gKiBleHBvcnQgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiBjb25zb2xlLmxvZygnY2FsbGJhY2snKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBmbiAtIEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgaGF2ZSBpdHMgZmlyc3QgYXJndW1lbnQgYXV0b21hdGljYWxseSBgJGAuXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBpbXBsaWNpdCRGaXJzdEFyZyA9IDxGSVJTVCwgUkVTVCBleHRlbmRzIGFueVtdLCBSRVQ+KFxuICBmbjogKHFybDogUVJMPEZJUlNUPiwgLi4ucmVzdDogUkVTVCkgPT4gUkVUXG4pOiAoKHFybDogRklSU1QsIC4uLnJlc3Q6IFJFU1QpID0+IFJFVCkgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24gKGZpcnN0OiBGSVJTVCwgLi4ucmVzdDogUkVTVCk6IFJFVCB7XG4gICAgcmV0dXJuIGZuLmNhbGwobnVsbCwgZG9sbGFyKGZpcnN0KSwgLi4ucmVzdCk7XG4gIH07XG59O1xuIl19","import { qwikDebugToString } from '../../debug';\nimport { trackSignal, untrack } from '../../use/use-core';\nimport { NEEDS_COMPUTATION, } from '../types';\nimport { scheduleEffects, throwIfQRLNotResolved } from '../utils';\nimport { ComputedSignalImpl } from './computed-signal-impl';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('SERIALIZER SIGNAL', ...args.map(qwikDebugToString));\n/**\n * A signal which provides a non-serializable value. It works like a computed signal, but it is\n * handled slightly differently during serdes.\n *\n * @public\n */\nexport class SerializerSignalImpl extends ComputedSignalImpl {\n    constructor(container, argQrl) {\n        super(container, argQrl, 1 /* SignalFlags.INVALID */ | 16 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_ALWAYS */);\n    }\n    $didInitialize$ = false;\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return;\n        }\n        throwIfQRLNotResolved(this.$computeQrl$);\n        const arg = untrack(this.$computeQrl$.resolved);\n        const { deserialize, initial } = arg;\n        const update = arg.update;\n        const currentValue = this.$untrackedValue$ === NEEDS_COMPUTATION ? initial : this.$untrackedValue$;\n        const untrackedValue = trackSignal(() => this.$didInitialize$\n            ? update?.(currentValue) || currentValue\n            : deserialize(currentValue), this, \".\" /* EffectProperty.VNODE */, this.$container$);\n        this.$didInitialize$ = true;\n        // Needs to invalidate only after all possible Promise throws happened\n        this.$flags$ &= ~1 /* SignalFlags.INVALID */;\n        DEBUG && log('SerializerSignal.$compute$', untrackedValue);\n        // We allow forcing the update of the signal without changing the value, for example when the deserialized value is the same reference as the old value but its internals have changed. In that case we want to trigger effects that depend on this signal, even though the value is the same.\n        const didChange = (this.$didInitialize$ && untrackedValue !== 'undefined') ||\n            untrackedValue !== this.$untrackedValue$;\n        if (didChange) {\n            this.$untrackedValue$ = untrackedValue;\n            scheduleEffects(this.$container$, this, this.$effects$);\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci1zaWduYWwtaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc2VyaWFsaXplci1zaWduYWwtaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRCxPQUFPLEVBRUwsaUJBQWlCLEdBSWxCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLHNDQUFzQztBQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFFakc7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sb0JBQTJCLFNBQVEsa0JBQXFCO0lBQ25FLFlBQVksU0FBMkIsRUFBRSxNQUF3QztRQUMvRSxLQUFLLENBQ0gsU0FBUyxFQUNULE1BQWtDLEVBQ2xDLDZGQUE0RSxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsR0FBWSxLQUFLLENBQUM7SUFFakMsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sOEJBQXNCLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBQ0QscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBRSxJQUFJLENBQUMsWUFBd0QsQ0FBQyxRQUFTLENBQUMsQ0FBQztRQUU5RixNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBSSxHQUFXLENBQUMsTUFBeUMsQ0FBQztRQUN0RSxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLGdCQUFnQixLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUVoRixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQ2hDLEdBQUcsRUFBRSxDQUNILElBQUksQ0FBQyxlQUFlO1lBQ2xCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFpQixDQUFDLElBQUksWUFBWTtZQUM3QyxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQTBCLENBQUMsRUFDN0MsSUFBSSxrQ0FFSixJQUFJLENBQUMsV0FBWSxDQUNsQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxPQUFPLElBQUksNEJBQW9CLENBQUM7UUFFckMsS0FBSyxJQUFJLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMzRCw4UkFBOFI7UUFDOVIsTUFBTSxTQUFTLEdBQ2IsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLGNBQWMsS0FBSyxXQUFXLENBQUM7WUFDeEQsY0FBYyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGNBQW1CLENBQUM7WUFDNUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcXdpa0RlYnVnVG9TdHJpbmcgfSBmcm9tICcuLi8uLi9kZWJ1Zyc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgdHJhY2tTaWduYWwsIHVudHJhY2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVyQXJnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgRWZmZWN0UHJvcGVydHksXG4gIE5FRURTX0NPTVBVVEFUSU9OLFxuICBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MsXG4gIFNpZ25hbEZsYWdzLFxuICB0eXBlIENvbXB1dGVRUkwsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHNjaGVkdWxlRWZmZWN0cywgdGhyb3dJZlFSTE5vdFJlc29sdmVkIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29tcHV0ZWRTaWduYWxJbXBsIH0gZnJvbSAnLi9jb21wdXRlZC1zaWduYWwtaW1wbCc7XG5cbmNvbnN0IERFQlVHID0gZmFsc2U7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuY29uc3QgbG9nID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZygnU0VSSUFMSVpFUiBTSUdOQUwnLCAuLi5hcmdzLm1hcChxd2lrRGVidWdUb1N0cmluZykpO1xuXG4vKipcbiAqIEEgc2lnbmFsIHdoaWNoIHByb3ZpZGVzIGEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZS4gSXQgd29ya3MgbGlrZSBhIGNvbXB1dGVkIHNpZ25hbCwgYnV0IGl0IGlzXG4gKiBoYW5kbGVkIHNsaWdodGx5IGRpZmZlcmVudGx5IGR1cmluZyBzZXJkZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgU2VyaWFsaXplclNpZ25hbEltcGw8VCwgUz4gZXh0ZW5kcyBDb21wdXRlZFNpZ25hbEltcGw8VD4ge1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IENvbnRhaW5lciB8IG51bGwsIGFyZ1FybDogUVJMSW50ZXJuYWw8U2VyaWFsaXplckFyZzxULCBTPj4pIHtcbiAgICBzdXBlcihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGFyZ1FybCBhcyB1bmtub3duIGFzIENvbXB1dGVRUkw8VD4sXG4gICAgICBTaWduYWxGbGFncy5JTlZBTElEIHwgU2VyaWFsaXphdGlvblNpZ25hbEZsYWdzLlNFUklBTElaQVRJT05fU1RSQVRFR1lfQUxXQVlTXG4gICAgKTtcbiAgfVxuICAkZGlkSW5pdGlhbGl6ZSQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAkY29tcHV0ZUlmTmVlZGVkJCgpIHtcbiAgICBpZiAoISh0aGlzLiRmbGFncyQgJiBTaWduYWxGbGFncy5JTlZBTElEKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvd0lmUVJMTm90UmVzb2x2ZWQodGhpcy4kY29tcHV0ZVFybCQpO1xuXG4gICAgY29uc3QgYXJnID0gdW50cmFjaygodGhpcy4kY29tcHV0ZVFybCQgYXMgYW55IGFzIFFSTEludGVybmFsPFNlcmlhbGl6ZXJBcmc8VCwgUz4+KS5yZXNvbHZlZCEpO1xuXG4gICAgY29uc3QgeyBkZXNlcmlhbGl6ZSwgaW5pdGlhbCB9ID0gYXJnO1xuICAgIGNvbnN0IHVwZGF0ZSA9IChhcmcgYXMgYW55KS51cGRhdGUgYXMgKChjdXJyZW50OiBUKSA9PiBUKSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPVxuICAgICAgdGhpcy4kdW50cmFja2VkVmFsdWUkID09PSBORUVEU19DT01QVVRBVElPTiA/IGluaXRpYWwgOiB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQ7XG5cbiAgICBjb25zdCB1bnRyYWNrZWRWYWx1ZSA9IHRyYWNrU2lnbmFsKFxuICAgICAgKCkgPT5cbiAgICAgICAgdGhpcy4kZGlkSW5pdGlhbGl6ZSRcbiAgICAgICAgICA/IHVwZGF0ZT8uKGN1cnJlbnRWYWx1ZSBhcyBUKSB8fCBjdXJyZW50VmFsdWVcbiAgICAgICAgICA6IGRlc2VyaWFsaXplKGN1cnJlbnRWYWx1ZSBhcyBBd2FpdGVkPFM+KSxcbiAgICAgIHRoaXMsXG4gICAgICBFZmZlY3RQcm9wZXJ0eS5WTk9ERSxcbiAgICAgIHRoaXMuJGNvbnRhaW5lciQhXG4gICAgKTtcbiAgICB0aGlzLiRkaWRJbml0aWFsaXplJCA9IHRydWU7XG5cbiAgICAvLyBOZWVkcyB0byBpbnZhbGlkYXRlIG9ubHkgYWZ0ZXIgYWxsIHBvc3NpYmxlIFByb21pc2UgdGhyb3dzIGhhcHBlbmVkXG4gICAgdGhpcy4kZmxhZ3MkICY9IH5TaWduYWxGbGFncy5JTlZBTElEO1xuXG4gICAgREVCVUcgJiYgbG9nKCdTZXJpYWxpemVyU2lnbmFsLiRjb21wdXRlJCcsIHVudHJhY2tlZFZhbHVlKTtcbiAgICAvLyBXZSBhbGxvdyBmb3JjaW5nIHRoZSB1cGRhdGUgb2YgdGhlIHNpZ25hbCB3aXRob3V0IGNoYW5naW5nIHRoZSB2YWx1ZSwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgZGVzZXJpYWxpemVkIHZhbHVlIGlzIHRoZSBzYW1lIHJlZmVyZW5jZSBhcyB0aGUgb2xkIHZhbHVlIGJ1dCBpdHMgaW50ZXJuYWxzIGhhdmUgY2hhbmdlZC4gSW4gdGhhdCBjYXNlIHdlIHdhbnQgdG8gdHJpZ2dlciBlZmZlY3RzIHRoYXQgZGVwZW5kIG9uIHRoaXMgc2lnbmFsLCBldmVuIHRob3VnaCB0aGUgdmFsdWUgaXMgdGhlIHNhbWUuXG4gICAgY29uc3QgZGlkQ2hhbmdlID1cbiAgICAgICh0aGlzLiRkaWRJbml0aWFsaXplJCAmJiB1bnRyYWNrZWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHx8XG4gICAgICB1bnRyYWNrZWRWYWx1ZSAhPT0gdGhpcy4kdW50cmFja2VkVmFsdWUkO1xuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IHVudHJhY2tlZFZhbHVlIGFzIFQ7XG4gICAgICBzY2hlZHVsZUVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgdGhpcy4kZWZmZWN0cyQpO1xuICAgIH1cbiAgfVxufVxuIl19","import { SignalImpl } from './impl/signal-impl';\nimport { ComputedSignalImpl } from './impl/computed-signal-impl';\nimport { SerializerSignalImpl } from './impl/serializer-signal-impl';\nimport { AsyncSignalImpl } from './impl/async-signal-impl';\nimport { getComputedSignalFlags } from './utils';\n/** @internal */\nexport const createSignal = (value) => {\n    return new SignalImpl(null, value);\n};\n/** @internal */\nexport const createComputedSignal = (qrl, options) => {\n    return new ComputedSignalImpl(options?.container || null, qrl, getComputedSignalFlags(options?.serializationStrategy || 'always'));\n};\n/** @internal */\nexport const createAsyncSignal = (qrl, options) => {\n    return new AsyncSignalImpl(options?.container || null, qrl, getComputedSignalFlags(options?.serializationStrategy || 'always'), options);\n};\n/** @internal */\nexport const createSerializerSignal = (arg) => {\n    return new SerializerSignalImpl(null, arg);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBU2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHakQsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQVMsRUFBYSxFQUFFO0lBQ3RELE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQVUsQ0FBYyxDQUFDO0FBQ3ZELENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxHQUFpQixFQUNqQixPQUF5QixFQUNGLEVBQUU7SUFDekIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixPQUFPLEVBQUUsU0FBUyxJQUFJLElBQUksRUFDMUIsR0FBb0IsRUFDcEIsc0JBQXNCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixJQUFJLFFBQVEsQ0FBQyxDQUNuRSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEdBQW9CLEVBQ3BCLE9BQStCLEVBQ1gsRUFBRTtJQUN0QixPQUFPLElBQUksZUFBZSxDQUN4QixPQUFPLEVBQUUsU0FBUyxJQUFJLElBQUksRUFDMUIsR0FBa0IsRUFDbEIsc0JBQXNCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixJQUFJLFFBQVEsQ0FBQyxFQUNsRSxPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxHQUlFLEVBQ0YsRUFBRTtJQUNGLE9BQU8sSUFBSSxvQkFBb0IsQ0FBTyxJQUFJLEVBQUUsR0FBOEMsQ0FBQyxDQUFDO0FBQzlGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBTaWduYWxJbXBsIH0gZnJvbSAnLi9pbXBsL3NpZ25hbC1pbXBsJztcbmltcG9ydCB7IENvbXB1dGVkU2lnbmFsSW1wbCB9IGZyb20gJy4vaW1wbC9jb21wdXRlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJy4vc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQge1xuICB0eXBlIEFzeW5jUVJMLFxuICB0eXBlIEFzeW5jU2lnbmFsT3B0aW9ucyxcbiAgdHlwZSBDb21wdXRlZE9wdGlvbnMsXG4gIHR5cGUgQ29tcHV0ZVFSTCxcbiAgdHlwZSBTZXJpYWxpemVyQXJnLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNlcmlhbGl6ZXJTaWduYWxJbXBsIH0gZnJvbSAnLi9pbXBsL3NlcmlhbGl6ZXItc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgQXN5bmNTaWduYWxJbXBsIH0gZnJvbSAnLi9pbXBsL2FzeW5jLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IGdldENvbXB1dGVkU2lnbmFsRmxhZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgQXN5bmNGbiB9IGZyb20gJy4uL3VzZS91c2UtYXN5bmMnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2lnbmFsID0gPFQ+KHZhbHVlPzogVCk6IFNpZ25hbDxUPiA9PiB7XG4gIHJldHVybiBuZXcgU2lnbmFsSW1wbChudWxsLCB2YWx1ZSBhcyBUKSBhcyBTaWduYWw8VD47XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29tcHV0ZWRTaWduYWwgPSA8VD4oXG4gIHFybDogUVJMPCgpID0+IFQ+LFxuICBvcHRpb25zPzogQ29tcHV0ZWRPcHRpb25zXG4pOiBDb21wdXRlZFNpZ25hbEltcGw8VD4gPT4ge1xuICByZXR1cm4gbmV3IENvbXB1dGVkU2lnbmFsSW1wbDxUPihcbiAgICBvcHRpb25zPy5jb250YWluZXIgfHwgbnVsbCxcbiAgICBxcmwgYXMgQ29tcHV0ZVFSTDxUPixcbiAgICBnZXRDb21wdXRlZFNpZ25hbEZsYWdzKG9wdGlvbnM/LnNlcmlhbGl6YXRpb25TdHJhdGVneSB8fCAnYWx3YXlzJylcbiAgKTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBc3luY1NpZ25hbCA9IDxUPihcbiAgcXJsOiBRUkw8QXN5bmNGbjxUPj4sXG4gIG9wdGlvbnM/OiBBc3luY1NpZ25hbE9wdGlvbnM8VD5cbik6IEFzeW5jU2lnbmFsSW1wbDxUPiA9PiB7XG4gIHJldHVybiBuZXcgQXN5bmNTaWduYWxJbXBsPFQ+KFxuICAgIG9wdGlvbnM/LmNvbnRhaW5lciB8fCBudWxsLFxuICAgIHFybCBhcyBBc3luY1FSTDxUPixcbiAgICBnZXRDb21wdXRlZFNpZ25hbEZsYWdzKG9wdGlvbnM/LnNlcmlhbGl6YXRpb25TdHJhdGVneSB8fCAnYWx3YXlzJyksXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlcmlhbGl6ZXJTaWduYWwgPSA8VCwgUz4oXG4gIGFyZzogUVJMPHtcbiAgICBzZXJpYWxpemU6IChkYXRhOiBTIHwgdW5kZWZpbmVkKSA9PiBUO1xuICAgIGRlc2VyaWFsaXplOiAoZGF0YTogVCkgPT4gUztcbiAgICBpbml0aWFsPzogUztcbiAgfT5cbikgPT4ge1xuICByZXR1cm4gbmV3IFNlcmlhbGl6ZXJTaWduYWxJbXBsPFQsIFM+KG51bGwsIGFyZyBhcyBhbnkgYXMgUVJMSW50ZXJuYWw8U2VyaWFsaXplckFyZzxULCBTPj4pO1xufTtcbiJdfQ==","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { createSignal as _createSignal, createComputedSignal as createComputedQrl, createSerializerSignal as createSerializerQrl, createAsyncSignal as createAsyncQrl, } from './signal-api';\nexport { isSignal } from './utils';\n/**\n * Creates a Signal with the given value. If no value is given, the signal is created with\n * `undefined`.\n *\n * @public\n */\nexport const createSignal = _createSignal;\n/**\n * Create a computed signal which is calculated from the given QRL. A computed signal is a signal\n * which is calculated from other signals. When the signals change, the computed signal is\n * recalculated.\n *\n * The QRL must be a function which returns the value of the signal. The function must not have side\n * effects, and it must be synchronous.\n *\n * If you need the function to be async, use `createAsync$` instead (don't forget to use `track()`).\n *\n * @public\n */\nexport const createComputed$ = /*#__PURE__*/ implicit$FirstArg(createComputedQrl);\nexport { createComputedQrl };\n/**\n * Create a signal holding a `.value` which is calculated from the given async function (QRL). The\n * standalone version of `useAsync$`.\n *\n * @public\n */\nexport const createAsync$ = /*#__PURE__*/ implicit$FirstArg(createAsyncQrl);\nexport { createAsyncQrl };\n/**\n * Create a signal that holds a custom serializable value. See {@link useSerializer$} for more\n * details.\n *\n * @public\n */\nexport const createSerializer$ = implicit$FirstArg(createSerializerQrl);\nexport { createSerializerQrl };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC5wdWJsaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFbEUsT0FBTyxFQUNMLFlBQVksSUFBSSxhQUFhLEVBQzdCLG9CQUFvQixJQUFJLGlCQUFpQixFQUN6QyxzQkFBc0IsSUFBSSxtQkFBbUIsRUFDN0MsaUJBQWlCLElBQUksY0FBYyxHQUNwQyxNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBMkluQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FHckIsYUFBYSxDQUFDO0FBRWxCOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUdDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBd0IsQ0FBQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBRTdCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUdILGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFxQixDQUFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO0FBRTFCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBRThCLGlCQUFpQixDQUMzRSxtQkFBMEIsQ0FDM0IsQ0FBQztBQUNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1wbGljaXQkRmlyc3RBcmcgfSBmcm9tICcuLi9zaGFyZWQvcXJsL2ltcGxpY2l0X2RvbGxhcic7XG5pbXBvcnQgdHlwZSB7IEFzeW5jQ3R4LCBBc3luY1NpZ25hbE9wdGlvbnMsIENvbXB1dGVkT3B0aW9ucywgU2VyaWFsaXplckFyZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2lnbmFsIGFzIF9jcmVhdGVTaWduYWwsXG4gIGNyZWF0ZUNvbXB1dGVkU2lnbmFsIGFzIGNyZWF0ZUNvbXB1dGVkUXJsLFxuICBjcmVhdGVTZXJpYWxpemVyU2lnbmFsIGFzIGNyZWF0ZVNlcmlhbGl6ZXJRcmwsXG4gIGNyZWF0ZUFzeW5jU2lnbmFsIGFzIGNyZWF0ZUFzeW5jUXJsLFxufSBmcm9tICcuL3NpZ25hbC1hcGknO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJldHVyblR5cGUgfSBmcm9tICcuLi91c2UvdXNlLWNvbXB1dGVkJztcbmV4cG9ydCB7IGlzU2lnbmFsIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBSZWFkb25seTxTaWduYWw8VD4+YCBpbnN0ZWFkLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRvbmx5U2lnbmFsPFQgPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IHZhbHVlOiBUO1xufVxuXG4vKipcbiAqIEEgc2lnbmFsIGlzIGEgcmVhY3RpdmUgdmFsdWUgd2hpY2ggY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4uIFdoZW4gdGhlIHNpZ25hbCBpcyB3cml0dGVuLCBhbGwgdGFza3NcbiAqIHdoaWNoIGFyZSB0cmFja2luZyB0aGUgc2lnbmFsIHdpbGwgYmUgcmUtcnVuIGFuZCBhbGwgY29tcG9uZW50cyB0aGF0IHJlYWQgdGhlIHNpZ25hbCB3aWxsIGJlXG4gKiByZS1yZW5kZXJlZC5cbiAqXG4gKiBGdXJ0aGVybW9yZSwgd2hlbiBhIHNpZ25hbCB2YWx1ZSBpcyBwYXNzZWQgYXMgYSBwcm9wIHRvIGEgY29tcG9uZW50LCB0aGUgb3B0aW1pemVyIHdpbGxcbiAqIGF1dG9tYXRpY2FsbHkgZm9yd2FyZCB0aGUgc2lnbmFsLiBUaGlzIG1lYW5zIHRoYXQgYHJldHVybiA8ZGl2IHRpdGxlPXtzaWduYWwudmFsdWV9PmhpPC9kaXY+YFxuICogd2lsbCB1cGRhdGUgdGhlIGB0aXRsZWAgYXR0cmlidXRlIHdoZW4gdGhlIHNpZ25hbCBjaGFuZ2VzIHdpdGhvdXQgaGF2aW5nIHRvIHJlLXJlbmRlciB0aGVcbiAqIGNvbXBvbmVudC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsPFQgPSBhbnk+IHtcbiAgLyoqIFJlYWRpbmcgZnJvbSB0aGlzIHN1YnNjcmliZXMgdG8gdXBkYXRlczsgd3JpdGluZyB0byB0aGlzIHRyaWdnZXJzIHVwZGF0ZXMuICovXG4gIHZhbHVlOiBUO1xuICAvKiogUmVhZGluZyBmcm9tIHRoaXMgZG9lcyBub3Qgc3Vic2NyaWJlIHRvIHVwZGF0ZXM7IHdyaXRpbmcgdG8gdGhpcyBkb2VzIG5vdCB0cmlnZ2VyIHVwZGF0ZXMuICovXG4gIHVudHJhY2tlZFZhbHVlOiBUO1xuICAvKipcbiAgICogVXNlIHRoaXMgdG8gdHJpZ2dlciBydW5uaW5nIHN1YnNjcmliZXJzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSB2YWx1ZSBtdXRhdGVkIGJ1dCByZW1haW5lZCB0aGVcbiAgICogc2FtZSBvYmplY3QuXG4gICAqL1xuICB0cmlnZ2VyKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSBjb21wdXRlZCBzaWduYWwgaXMgYSBzaWduYWwgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIG90aGVyIHNpZ25hbHMuIFdoZW4gdGhlIHNpZ25hbHMgY2hhbmdlLFxuICogdGhlIGNvbXB1dGVkIHNpZ25hbCBpcyByZWNhbGN1bGF0ZWQsIGFuZCBpZiB0aGUgcmVzdWx0IGNoYW5nZWQsIGFsbCB0YXNrcyB3aGljaCBhcmUgdHJhY2tpbmcgdGhlXG4gKiBzaWduYWwgd2lsbCBiZSByZS1ydW4gYW5kIGFsbCBjb21wb25lbnRzIHRoYXQgcmVhZCB0aGUgc2lnbmFsIHdpbGwgYmUgcmUtcmVuZGVyZWQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkU2lnbmFsPFQ+IGV4dGVuZHMgU2lnbmFsPFQ+IHtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgdHJpZ2dlcigpYCBpbnN0ZWFkICovXG4gIGZvcmNlKCk6IHZvaWQ7XG4gIC8qKiBVc2UgdGhpcyB0byBmb3JjZSByZWNhbGN1bGF0aW9uLiAqL1xuICBpbnZhbGlkYXRlKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSBzZXJpYWxpemVyIHNpZ25hbCBob2xkcyBhIGN1c3RvbSBzZXJpYWxpemFibGUgdmFsdWUuIFNlZSBgdXNlU2VyaWFsaXplciRgIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZXJTaWduYWw8VD4gZXh0ZW5kcyBDb21wdXRlZFNpZ25hbDxUPiB7XG4gIC8qKiBGYWtlIHByb3BlcnR5IHRvIG1ha2UgdGhlIHNlcmlhbGl6YXRpb24gbGludGVyIGhhcHB5ICovXG4gIF9fbm9fc2VyaWFsaXplX186IHRydWU7XG59XG5cbi8qKlxuICogQW4gQXN5bmNTaWduYWwgaG9sZHMgdGhlIHJlc3VsdCBvZiB0aGUgZ2l2ZW4gYXN5bmMgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiB1c2VzIGB0cmFjaygpYCB0b1xuICogdHJhY2sgcmVhY3RpdmUgc3RhdGUsIGFuZCB0aGF0IHN0YXRlIGNoYW5nZXMsIHRoZSBBc3luY1NpZ25hbCBpcyByZWNhbGN1bGF0ZWQsIGFuZCBpZiB0aGUgcmVzdWx0XG4gKiBjaGFuZ2VkLCBhbGwgdGFza3Mgd2hpY2ggYXJlIHRyYWNraW5nIHRoZSBBc3luY1NpZ25hbCB3aWxsIGJlIHJlLXJ1biBhbmQgYWxsIHN1YnNjcmliZXJzXG4gKiAoY29tcG9uZW50cywgdGFza3MgZXRjKSB0aGF0IHJlYWQgdGhlIEFzeW5jU2lnbmFsIHdpbGwgYmUgdXBkYXRlZC5cbiAqXG4gKiBJZiB0aGUgYXN5bmMgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yLCB0aGUgQXN5bmNTaWduYWwgd2lsbCBjYXB0dXJlIHRoZSBlcnJvciBhbmQgc2V0IHRoZSBgZXJyb3JgXG4gKiBwcm9wZXJ0eS4gVGhlIGVycm9yIGNhbiBiZSBjbGVhcmVkIGJ5IHJlLXJ1bm5pbmcgdGhlIGFzeW5jIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBXaGlsZSB0aGUgYXN5bmMgZnVuY3Rpb24gaXMgcnVubmluZywgdGhlIGAubG9hZGluZ2AgcHJvcGVydHkgd2lsbCBiZSBzZXQgdG8gYHRydWVgLiBPbmNlIHRoZVxuICogZnVuY3Rpb24gY29tcGxldGVzLCBgbG9hZGluZ2Agd2lsbCBiZSBzZXQgdG8gYGZhbHNlYC5cbiAqXG4gKiBJZiB0aGUgdmFsdWUgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCwgcmVhZGluZyB0aGUgQXN5bmNTaWduYWwgd2lsbCB0aHJvdyBhIFByb21pc2UsIHdoaWNoIHdpbGxcbiAqIHJldHJ5IHRoZSBjb21wb25lbnQgb3IgdGFzayBvbmNlIHRoZSB2YWx1ZSByZXNvbHZlcy5cbiAqXG4gKiBJZiB0aGUgdmFsdWUgaGFzIGJlZW4gcmVzb2x2ZWQsIGJ1dCB0aGUgYXN5bmMgZnVuY3Rpb24gaXMgcmUtcnVubmluZywgcmVhZGluZyB0aGUgQXN5bmNTaWduYWxcbiAqIHdpbGwgc3Vic2NyaWJlIHRvIGl0IGFuZCByZXR1cm4gdGhlIGxhc3QgcmVzb2x2ZWQgdmFsdWUgdW50aWwgdGhlIG5ldyB2YWx1ZSBpcyByZWFkeS4gQXMgc29vbiBhc1xuICogdGhlIG5ldyB2YWx1ZSBpcyByZWFkeSwgdGhlIHN1YnNjcmliZXJzIHdpbGwgYmUgdXBkYXRlZC5cbiAqXG4gKiBJZiB0aGUgYXN5bmMgZnVuY3Rpb24gdGhyZXcgYW4gZXJyb3IsIHJlYWRpbmcgdGhlIGAudmFsdWVgIHdpbGwgdGhyb3cgdGhhdCBzYW1lIGVycm9yLiBSZWFkIGZyb21cbiAqIGAuZXJyb3JgIHRvIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvci5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXN5bmNTaWduYWw8VCA9IHVua25vd24+IGV4dGVuZHMgQ29tcHV0ZWRTaWduYWw8VD4ge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc2lnbmFsIGlzIGN1cnJlbnRseSBsb2FkaW5nLiBUaGlzIHdpbGwgdHJpZ2dlciBsYXp5IGxvYWRpbmcgb2YgdGhlIHNpZ25hbCwgc28geW91XG4gICAqIGNhbiB1c2UgaXQgbGlrZSB0aGlzOlxuICAgKlxuICAgKiBgYGB0c3hcbiAgICogc2lnbmFsLmxvYWRpbmcgPyA8TG9hZGluZyAvPiA6IHNpZ25hbC5lcnJvciA/IDxFcnJvciAvPiA6IDxDb21wb25lbnRcbiAgICogdmFsdWU9e3NpZ25hbC52YWx1ZX0gLz5cbiAgICogYGBgXG4gICAqL1xuICBsb2FkaW5nOiBib29sZWFuO1xuICAvKipcbiAgICogTGV0cyB5b3UgcmVhZCB0aGUgbG9hZGluZyBzdGF0ZSB3aXRob3V0IHN1YnNjcmliaW5nIHRvIGAubG9hZGluZ2AgdXBkYXRlcy4gSXQgYWxzbyB0cmlnZ2Vyc1xuICAgKiBsYXp5IGxvYWRpbmcgb2YgdGhlIHNpZ25hbC5cbiAgICpcbiAgICogU2V0dGluZyBpdCB3aWxsIHRyaWdnZXIgbGlzdGVuZXJzIGZvciBgLmxvYWRpbmdgLlxuICAgKi9cbiAgdW50cmFja2VkTG9hZGluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGNvbXB1dGluZyB0aGUgc2lnbmFsLCBpZiBhbnkuIFRoaXMgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlXG4gICAqIHNpZ25hbCBpcyBzdWNjZXNzZnVsbHkgY29tcHV0ZWQuIEl0IGRvZXMgbm90IHRyaWdnZXIgbGF6eSBsb2FkaW5nIG9mIHRoZSBzaWduYWwuXG4gICAqL1xuICBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBMZXRzIHlvdSByZWFkIHRoZSBlcnJvciBzdGF0ZSB3aXRob3V0IHN1YnNjcmliaW5nIHRvIGAuZXJyb3JgIHVwZGF0ZXMuIEl0IGRvZXMgbm90IHRyaWdnZXIgbGF6eVxuICAgKiBsb2FkaW5nIG9mIHRoZSBzaWduYWwuXG4gICAqXG4gICAqIFNldHRpbmcgaXQgd2lsbCB0cmlnZ2VyIGxpc3RlbmVycyBmb3IgYC5lcnJvcmAuXG4gICAqL1xuICB1bnRyYWNrZWRFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBFeHBpcmF0aW9uIHRpbWUgaW4gbXMuIFdyaXRhYmxlIGFuZCBpbW1lZGlhdGVseSBlZmZlY3RpdmUuXG4gICAqXG4gICAqIFdoZW4gc2V0LCB0aGUgc2lnbmFsIGlzIGludmFsaWRhdGVkIGFmdGVyIHRoaXMgbWFueSBtcy4gV2hldGhlciBpdCBhdXRvLXJlY29tcHV0ZXMgZGVwZW5kcyBvblxuICAgKiB0aGUgYHBvbGxgIHByb3BlcnR5LiBgMGAgbWVhbnMgbm8gZXhwaXJhdGlvbi5cbiAgICovXG4gIGV4cGlyZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSByZS1ydW4gdGhlIGZ1bmN0aW9uIHdoZW4gdGhlIHZhbHVlIGV4cGlyZXMuIFdyaXRhYmxlIGFuZCBpbW1lZGlhdGVseVxuICAgKiBlZmZlY3RpdmUuIE9ubHkgcmVsZXZhbnQgd2hlbiBgZXhwaXJlc2AgaXMgc2V0LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBwb2xsOiBib29sZWFuO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBleHBpcmVzYCBhbmQgYHBvbGxgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgdjIgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcbiAgLyoqIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhbHVlIGlzIGNvbXB1dGVkIG9yIHJlamVjdGVkLiAqL1xuICBwcm9taXNlKCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBBYm9ydCB0aGUgY3VycmVudCBjb21wdXRhdGlvbiBhbmQgcnVuIGNsZWFudXBzIGlmIG5lZWRlZC4gKi9cbiAgYWJvcnQocmVhc29uPzogYW55KTogdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIGZvcmNlIHJlY2FsY3VsYXRpb24uIElmIHlvdSBwYXNzIGBpbmZvYCwgaXQgd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgY2FsY3VsYXRpb25cbiAgICogZnVuY3Rpb24uXG4gICAqL1xuICBpbnZhbGlkYXRlKGluZm8/OiB1bmtub3duKTogdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU2lnbmFsIHdpdGggdGhlIGdpdmVuIHZhbHVlLiBJZiBubyB2YWx1ZSBpcyBnaXZlbiwgdGhlIHNpZ25hbCBpcyBjcmVhdGVkIHdpdGhcbiAqIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNpZ25hbDoge1xuICA8VD4oKTogU2lnbmFsPFQgfCB1bmRlZmluZWQ+O1xuICA8VD4odmFsdWU6IFQpOiBTaWduYWw8VD47XG59ID0gX2NyZWF0ZVNpZ25hbDtcblxuLyoqXG4gKiBDcmVhdGUgYSBjb21wdXRlZCBzaWduYWwgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBRUkwuIEEgY29tcHV0ZWQgc2lnbmFsIGlzIGEgc2lnbmFsXG4gKiB3aGljaCBpcyBjYWxjdWxhdGVkIGZyb20gb3RoZXIgc2lnbmFscy4gV2hlbiB0aGUgc2lnbmFscyBjaGFuZ2UsIHRoZSBjb21wdXRlZCBzaWduYWwgaXNcbiAqIHJlY2FsY3VsYXRlZC5cbiAqXG4gKiBUaGUgUVJMIG11c3QgYmUgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgaGF2ZSBzaWRlXG4gKiBlZmZlY3RzLCBhbmQgaXQgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0aGUgZnVuY3Rpb24gdG8gYmUgYXN5bmMsIHVzZSBgY3JlYXRlQXN5bmMkYCBpbnN0ZWFkIChkb24ndCBmb3JnZXQgdG8gdXNlIGB0cmFjaygpYCkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29tcHV0ZWQkOiA8VD4oXG4gIHFybDogKCkgPT4gVCxcbiAgb3B0aW9ucz86IENvbXB1dGVkT3B0aW9uc1xuKSA9PiBDb21wdXRlZFJldHVyblR5cGU8VD4gPSAvKiNfX1BVUkVfXyovIGltcGxpY2l0JEZpcnN0QXJnKGNyZWF0ZUNvbXB1dGVkUXJsIGFzIGFueSk7XG5leHBvcnQgeyBjcmVhdGVDb21wdXRlZFFybCB9O1xuXG4vKipcbiAqIENyZWF0ZSBhIHNpZ25hbCBob2xkaW5nIGEgYC52YWx1ZWAgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBhc3luYyBmdW5jdGlvbiAoUVJMKS4gVGhlXG4gKiBzdGFuZGFsb25lIHZlcnNpb24gb2YgYHVzZUFzeW5jJGAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQXN5bmMkOiA8VD4oXG4gIHFybDogKGFyZzogQXN5bmNDdHg8VD4pID0+IFByb21pc2U8VD4sXG4gIG9wdGlvbnM/OiBBc3luY1NpZ25hbE9wdGlvbnM8VD5cbikgPT4gQXN5bmNTaWduYWw8VD4gPSAvKiNfX1BVUkVfXyovIGltcGxpY2l0JEZpcnN0QXJnKGNyZWF0ZUFzeW5jUXJsIGFzIGFueSk7XG5leHBvcnQgeyBjcmVhdGVBc3luY1FybCB9O1xuXG4vKipcbiAqIENyZWF0ZSBhIHNpZ25hbCB0aGF0IGhvbGRzIGEgY3VzdG9tIHNlcmlhbGl6YWJsZSB2YWx1ZS4gU2VlIHtAbGluayB1c2VTZXJpYWxpemVyJH0gZm9yIG1vcmVcbiAqIGRldGFpbHMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2VyaWFsaXplciQ6IDxULCBTPihcbiAgYXJnOiBTZXJpYWxpemVyQXJnPFQsIFM+XG4pID0+IFQgZXh0ZW5kcyBQcm9taXNlPGFueT4gPyBuZXZlciA6IFNlcmlhbGl6ZXJTaWduYWw8VD4gPSBpbXBsaWNpdCRGaXJzdEFyZyhcbiAgY3JlYXRlU2VyaWFsaXplclFybCBhcyBhbnlcbik7XG5leHBvcnQgeyBjcmVhdGVTZXJpYWxpemVyUXJsIH07XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { assertEqual } from '../shared/error/assert';\nimport { isPropsProxy } from '../shared/jsx/props-proxy';\nimport { _CONST_PROPS, _IMMUTABLE, _VAR_PROPS } from '../shared/utils/constants';\nimport { isObject } from '../shared/utils/types';\nimport { AsyncSignalImpl } from './impl/async-signal-impl';\nimport { getStoreTarget, isStore } from './impl/store';\nimport { WrappedSignalImpl } from './impl/wrapped-signal-impl';\nimport { isSignal } from './signal.public';\n// Keep these properties named like this so they're the same as from wrapSignal\nexport const getValueProp = (p0) => p0.value;\nconst getProp = (p0, p1) => p0[p1];\nconst getWrapped = (args) => {\n    if (args.length === 1) {\n        if (isSignal(args[0])) {\n            return (args[0].$wrappedSignal$ ||= new WrappedSignalImpl(null, getValueProp, args, null));\n        }\n        else if (isStore(args[0])) {\n            return new WrappedSignalImpl(null, getValueProp, args, null);\n        }\n        return args[0].value;\n    }\n    else {\n        return new WrappedSignalImpl(null, getProp, args, null);\n    }\n};\n/**\n * This wraps a property access of a possible Signal/Store into a WrappedSignal. The optimizer does\n * this automatically when a prop is only used as a prop on JSX.\n *\n * When a WrappedSignal is read via the PropsProxy, it will be unwrapped. This allows forwarding the\n * reactivity of a prop to the point of actual use.\n *\n * For efficiency, if you pass only one argument, the property is 'value'.\n *\n * @internal\n */\nexport const _wrapProp = (...args) => {\n    const obj = args[0];\n    const prop = args.length < 2 ? 'value' : args[1];\n    if (!isObject(obj)) {\n        return obj[prop];\n    }\n    if (isSignal(obj)) {\n        if (!(obj instanceof AsyncSignalImpl)) {\n            isDev && assertEqual(prop, 'value', 'Left side is a signal, prop must be value');\n        }\n        if (obj instanceof WrappedSignalImpl && obj.$flags$ & 4 /* WrappedSignalFlags.UNWRAP */) {\n            return obj;\n        }\n        return getWrapped(args);\n    }\n    if (isPropsProxy(obj)) {\n        const constProps = obj[_CONST_PROPS];\n        const varProps = obj[_VAR_PROPS];\n        if (constProps && Object.prototype.hasOwnProperty.call(constProps, prop)) {\n            // Const props don't need wrapping\n            return constProps[prop];\n        }\n        else if (Object.prototype.hasOwnProperty.call(varProps, prop)) {\n            const value = varProps[prop];\n            return wrapIfNotSignal(value, args);\n        }\n    }\n    else {\n        const target = getStoreTarget(obj);\n        if (target) {\n            const value = target[prop];\n            return wrapIfNotSignal(value, args);\n        }\n    }\n    // the object is not reactive, so we can just return the value\n    return obj[prop];\n};\nconst wrapIfNotSignal = (value, args) => {\n    return (isSignal(value)\n        ? // If the value is already a signal, we don't need to wrap it again\n            value\n        : getWrapped(args));\n};\n/** @internal @deprecated v1 compat */\nexport const _wrapSignal = (obj, prop) => {\n    const r = _wrapProp(obj, prop);\n    if (r === _IMMUTABLE) {\n        return obj[prop];\n    }\n    return r;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtYXBpLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW50ZXJuYWwtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBR3hELCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBSSxFQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO0FBQzlELE1BQU0sT0FBTyxHQUFHLENBQXNDLEVBQUssRUFBRSxFQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUU5RSxNQUFNLFVBQVUsR0FBRyxDQUFtQixJQUFpQyxFQUFFLEVBQUU7SUFDekUsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFF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R0FBRyxDQUN0QixLQUFXLEVBQ1gsSUFBYSxFQUNNLEVBQUU7SUFDckIsT0FBTyxDQUNMLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDYixDQUFDLENBQUMsbUVBQW1FO1lBQ25FLEtBQUs7UUFDUCxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUNBLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUYsc0NBQXNDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFzQyxHQUFNLEVBQUUsSUFBTyxFQUFFLEVBQUU7SUFDbEYsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNyQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGFzc2VydEVxdWFsIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBpc1Byb3BzUHJveHkgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Byb3BzLXByb3h5JztcbmltcG9ydCB7IF9DT05TVF9QUk9QUywgX0lNTVVUQUJMRSwgX1ZBUl9QUk9QUyB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgQXN5bmNTaWduYWxJbXBsIH0gZnJvbSAnLi9pbXBsL2FzeW5jLXNpZ25hbC1pbXBsJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsSW1wbCB9IGZyb20gJy4vaW1wbC9zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBnZXRTdG9yZVRhcmdldCwgaXNTdG9yZSB9IGZyb20gJy4vaW1wbC9zdG9yZSc7XG5pbXBvcnQgeyBXcmFwcGVkU2lnbmFsSW1wbCB9IGZyb20gJy4vaW1wbC93cmFwcGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IGlzU2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJy4vc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBXcmFwcGVkU2lnbmFsRmxhZ3MgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gS2VlcCB0aGVzZSBwcm9wZXJ0aWVzIG5hbWVkIGxpa2UgdGhpcyBzbyB0aGV5J3JlIHRoZSBzYW1lIGFzIGZyb20gd3JhcFNpZ25hbFxuZXhwb3J0IGNvbnN0IGdldFZhbHVlUHJvcCA9IDxUPihwMDogeyB2YWx1ZTogVCB9KSA9PiBwMC52YWx1ZTtcbmNvbnN0IGdldFByb3AgPSA8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIGtleW9mIFQ+KHAwOiBULCBwMTogUCkgPT4gcDBbcDFdO1xuXG5jb25zdCBnZXRXcmFwcGVkID0gPFQgZXh0ZW5kcyBvYmplY3Q+KGFyZ3M6IFtULCAoa2V5b2YgVCB8IHVuZGVmaW5lZCk/XSkgPT4ge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoaXNTaWduYWwoYXJnc1swXSkpIHtcbiAgICAgIHJldHVybiAoKGFyZ3NbMF0gYXMgdW5rbm93biBhcyBTaWduYWxJbXBsKS4kd3JhcHBlZFNpZ25hbCQgfHw9IG5ldyBXcmFwcGVkU2lnbmFsSW1wbChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZ2V0VmFsdWVQcm9wLFxuICAgICAgICBhcmdzLFxuICAgICAgICBudWxsXG4gICAgICApKTtcbiAgICB9IGVsc2UgaWYgKGlzU3RvcmUoYXJnc1swXSkpIHtcbiAgICAgIHJldHVybiBuZXcgV3JhcHBlZFNpZ25hbEltcGwobnVsbCwgZ2V0VmFsdWVQcm9wLCBhcmdzLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIChhcmdzWzBdIGFzIHsgdmFsdWU6IFQgfSkudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBXcmFwcGVkU2lnbmFsSW1wbChudWxsLCBnZXRQcm9wLCBhcmdzLCBudWxsKTtcbiAgfVxufTtcblxudHlwZSBQcm9wVHlwZTxUIGV4dGVuZHMgb2JqZWN0LCBQIGV4dGVuZHMga2V5b2YgVD4gPSBQIGV4dGVuZHMga2V5b2YgVFxuICA/IFRbUF1cbiAgOiAndmFsdWUnIGV4dGVuZHMga2V5b2YgVFxuICAgID8gVFsndmFsdWUnXVxuICAgIDogbmV2ZXI7XG50eXBlIFdyYXBwZWRQcm9wPFQgZXh0ZW5kcyBvYmplY3QsIFAgZXh0ZW5kcyBrZXlvZiBUPiA9IFQgZXh0ZW5kcyBTaWduYWxcbiAgPyBXcmFwcGVkU2lnbmFsSW1wbDxQcm9wVHlwZTxULCBQPj5cbiAgOiBQcm9wVHlwZTxULCBQPjtcblxuLyoqXG4gKiBUaGlzIHdyYXBzIGEgcHJvcGVydHkgYWNjZXNzIG9mIGEgcG9zc2libGUgU2lnbmFsL1N0b3JlIGludG8gYSBXcmFwcGVkU2lnbmFsLiBUaGUgb3B0aW1pemVyIGRvZXNcbiAqIHRoaXMgYXV0b21hdGljYWxseSB3aGVuIGEgcHJvcCBpcyBvbmx5IHVzZWQgYXMgYSBwcm9wIG9uIEpTWC5cbiAqXG4gKiBXaGVuIGEgV3JhcHBlZFNpZ25hbCBpcyByZWFkIHZpYSB0aGUgUHJvcHNQcm94eSwgaXQgd2lsbCBiZSB1bndyYXBwZWQuIFRoaXMgYWxsb3dzIGZvcndhcmRpbmcgdGhlXG4gKiByZWFjdGl2aXR5IG9mIGEgcHJvcCB0byB0aGUgcG9pbnQgb2YgYWN0dWFsIHVzZS5cbiAqXG4gKiBGb3IgZWZmaWNpZW5jeSwgaWYgeW91IHBhc3Mgb25seSBvbmUgYXJndW1lbnQsIHRoZSBwcm9wZXJ0eSBpcyAndmFsdWUnLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgX3dyYXBQcm9wID0gPFQgZXh0ZW5kcyBvYmplY3QsIFAgZXh0ZW5kcyBrZXlvZiBUPihcbiAgLi4uYXJnczogW1QsIFA/XVxuKTogV3JhcHBlZFByb3A8VCwgUD4gPT4ge1xuICBjb25zdCBvYmogPSBhcmdzWzBdO1xuICBjb25zdCBwcm9wID0gYXJncy5sZW5ndGggPCAyID8gJ3ZhbHVlJyA6IGFyZ3NbMV0hO1xuXG4gIGlmICghaXNPYmplY3Qob2JqKSkge1xuICAgIHJldHVybiBvYmpbcHJvcF07XG4gIH1cbiAgaWYgKGlzU2lnbmFsKG9iaikpIHtcbiAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBBc3luY1NpZ25hbEltcGwpKSB7XG4gICAgICBpc0RldiAmJiBhc3NlcnRFcXVhbChwcm9wLCAndmFsdWUnLCAnTGVmdCBzaWRlIGlzIGEgc2lnbmFsLCBwcm9wIG11c3QgYmUgdmFsdWUnKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWxJbXBsICYmIG9iai4kZmxhZ3MkICYgV3JhcHBlZFNpZ25hbEZsYWdzLlVOV1JBUCkge1xuICAgICAgcmV0dXJuIG9iaiBhcyBXcmFwcGVkUHJvcDxULCBQPjtcbiAgICB9XG4gICAgcmV0dXJuIGdldFdyYXBwZWQoYXJncykgYXMgV3JhcHBlZFByb3A8VCwgUD47XG4gIH1cbiAgaWYgKGlzUHJvcHNQcm94eShvYmopKSB7XG4gICAgY29uc3QgY29uc3RQcm9wcyA9IG9ialtfQ09OU1RfUFJPUFNdO1xuICAgIGNvbnN0IHZhclByb3BzID0gb2JqW19WQVJfUFJPUFNdO1xuICAgIGlmIChjb25zdFByb3BzICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25zdFByb3BzLCBwcm9wKSkge1xuICAgICAgLy8gQ29uc3QgcHJvcHMgZG9uJ3QgbmVlZCB3cmFwcGluZ1xuICAgICAgcmV0dXJuIGNvbnN0UHJvcHNbcHJvcCBhcyBrZXlvZiB0eXBlb2YgY29uc3RQcm9wc10gYXMgV3JhcHBlZFByb3A8VCwgUD47XG4gICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFyUHJvcHMsIHByb3ApKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhclByb3BzW3Byb3AgYXMga2V5b2YgdHlwZW9mIHZhclByb3BzXTtcbiAgICAgIHJldHVybiB3cmFwSWZOb3RTaWduYWwodmFsdWUgYXMgVFtQXSwgYXJncyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldFN0b3JlVGFyZ2V0KG9iaik7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbcHJvcCBhcyBQXTtcbiAgICAgIHJldHVybiB3cmFwSWZOb3RTaWduYWwodmFsdWUsIGFyZ3MpO1xuICAgIH1cbiAgfVxuICAvLyB0aGUgb2JqZWN0IGlzIG5vdCByZWFjdGl2ZSwgc28gd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICByZXR1cm4gb2JqW3Byb3AgYXMgUF0gYXMgV3JhcHBlZFByb3A8VCwgUD47XG59O1xuXG5jb25zdCB3cmFwSWZOb3RTaWduYWwgPSA8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIGtleW9mIFQ+KFxuICB2YWx1ZTogVFtQXSxcbiAgYXJnczogW1QsIFA/XVxuKTogV3JhcHBlZFByb3A8VCwgUD4gPT4ge1xuICByZXR1cm4gKFxuICAgIGlzU2lnbmFsKHZhbHVlKVxuICAgICAgPyAvLyBJZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIHNpZ25hbCwgd2UgZG9uJ3QgbmVlZCB0byB3cmFwIGl0IGFnYWluXG4gICAgICAgIHZhbHVlXG4gICAgICA6IGdldFdyYXBwZWQoYXJncylcbiAgKSBhcyBXcmFwcGVkUHJvcDxULCBQPjtcbn07XG5cbi8qKiBAaW50ZXJuYWwgQGRlcHJlY2F0ZWQgdjEgY29tcGF0ICovXG5leHBvcnQgY29uc3QgX3dyYXBTaWduYWwgPSA8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIGtleW9mIFQ+KG9iajogVCwgcHJvcDogUCkgPT4ge1xuICBjb25zdCByID0gX3dyYXBQcm9wKG9iaiwgcHJvcCk7XG4gIGlmIChyID09PSBfSU1NVVRBQkxFKSB7XG4gICAgcmV0dXJuIG9ialtwcm9wXTtcbiAgfVxuICByZXR1cm4gcjtcbn07XG4iXX0=","import { assertFalse } from '../../shared/error/assert';\nimport { qError } from '../../shared/error/error';\nimport { trackSignal } from '../../use/use-core';\nimport { getValueProp } from '../internal-api';\nimport { NEEDS_COMPUTATION } from '../types';\nimport { isSignal, scheduleEffects } from '../utils';\nimport { SignalImpl } from './signal-impl';\nimport { markVNodeDirty } from '../../shared/vnode/vnode-dirty';\nimport { _EFFECT_BACK_REF } from '../backref';\nimport { HOST_SIGNAL } from '../../shared/cursor/cursor-props';\nimport { isDev } from '@qwik.dev/core/build';\nexport class WrappedSignalImpl extends SignalImpl {\n    $args$;\n    $func$;\n    $funcStr$;\n    $flags$;\n    $hostElement$ = undefined;\n    // important: don't use implemnets BackRef here\n    // it causes v8 optimizations eager bailouts, because of not consistent class shape\n    [_EFFECT_BACK_REF] = undefined;\n    constructor(container, fn, args, fnStr, \n    // We need a separate flag to know when the computation needs running because\n    // we need the old value to know if effects need running after computation\n    flags = 1 /* SignalFlags.INVALID */ | 4 /* WrappedSignalFlags.UNWRAP */) {\n        super(container, NEEDS_COMPUTATION);\n        this.$args$ = args;\n        this.$func$ = fn;\n        this.$funcStr$ = fnStr;\n        this.$flags$ = flags;\n    }\n    invalidate() {\n        this.$flags$ |= 1 /* SignalFlags.INVALID */;\n        // we are trying to run computation without creating a chore, which can be expensive\n        // for many signals. If it fails, we schedule a chore to run the computation.\n        try {\n            this.$computeIfNeeded$();\n        }\n        catch (_) {\n            if (this.$container$ && this.$hostElement$) {\n                this.$container$.setHostProp(this.$hostElement$, HOST_SIGNAL, this);\n                markVNodeDirty(this.$container$, this.$hostElement$, 32 /* ChoreBits.COMPUTE */);\n            }\n        }\n        // if the computation not failed, we can run the effects directly\n        if (this.$flags$ & 2 /* SignalFlags.RUN_EFFECTS */) {\n            this.$flags$ &= ~2 /* SignalFlags.RUN_EFFECTS */;\n            scheduleEffects(this.$container$, this, this.$effects$);\n        }\n    }\n    get untrackedValue() {\n        this.$computeIfNeeded$();\n        isDev && assertFalse(this.$untrackedValue$ === NEEDS_COMPUTATION, 'Invalid state');\n        return this.$untrackedValue$;\n    }\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return;\n        }\n        const untrackedValue = trackSignal(() => this.$func$(...this.$args$), this, \".\" /* EffectProperty.VNODE */, this.$container$);\n        // TODO: we should remove invalid flag here, but some tests are failing\n        // Sometimes we may call .value on wrapped signals without ctx. This means subscription will be\n        // not created and effects will not be triggered. After wrapping this with if (this.$container$)\n        // less tests are failing, but still some are failing.\n        // this.$flags$ &= ~SignalFlags.INVALID;\n        // reset flag in case we call computedIfNeeded twice and the value was changed only the first time\n        // TODO: change to version number?\n        this.$flags$ &= ~2 /* SignalFlags.RUN_EFFECTS */;\n        const didChange = untrackedValue !== this.$untrackedValue$;\n        if (didChange) {\n            this.$flags$ |= 2 /* SignalFlags.RUN_EFFECTS */;\n            this.$untrackedValue$ = untrackedValue;\n        }\n    }\n    $unwrapIfSignal$() {\n        return this.$func$ === getValueProp && isSignal(this.$args$[0])\n            ? this.$args$[0]\n            : this;\n    }\n    // Make this signal read-only\n    set value(_) {\n        throw qError(31 /* QError.wrappedReadOnly */);\n    }\n    // Getters don't get inherited when overriding a setter\n    get value() {\n        return super.value;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZC1zaWduYWwtaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvd3JhcHBlZC1zaWduYWwtaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFrQixpQkFBaUIsRUFBbUMsTUFBTSxVQUFVLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFN0MsTUFBTSxPQUFPLGlCQUFxQixTQUFRLFVBQWE7SUFDckQsTUFBTSxDQUFRO0lBQ2QsTUFBTSxDQUF3QjtJQUM5QixTQUFTLENBQWdCO0lBRXpCLE9BQU8sQ0FBaUI7SUFDeEIsYUFBYSxHQUE0QixTQUFTLENBQUM7SUFDbkQsK0NBQStDO0lBQy9DLG1GQUFtRjtJQUNuRixDQUFDLGdCQUFnQixDQUFDLEdBQWlFLFNBQVMsQ0FBQztJQUU3RixZQUNFLFNBQTJCLEVBQzNCLEVBQXlCLEVBQ3pCLElBQVcsRUFDWCxLQUFvQjtJQUNwQiw2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QUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRGYWxzZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIsIEhvc3RFbGVtZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC92bm9kZS9lbnVtcy9jaG9yZS1iaXRzLmVudW0nO1xuaW1wb3J0IHsgdHJhY2tTaWduYWwgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHsgZ2V0VmFsdWVQcm9wIH0gZnJvbSAnLi4vaW50ZXJuYWwtYXBpJztcbmltcG9ydCB0eXBlIHsgQWxsU2lnbmFsRmxhZ3MsIEVmZmVjdFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEVmZmVjdFByb3BlcnR5LCBORUVEU19DT01QVVRBVElPTiwgU2lnbmFsRmxhZ3MsIFdyYXBwZWRTaWduYWxGbGFncyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzU2lnbmFsLCBzY2hlZHVsZUVmZmVjdHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBTaWduYWxJbXBsIH0gZnJvbSAnLi9zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBtYXJrVk5vZGVEaXJ0eSB9IGZyb20gJy4uLy4uL3NoYXJlZC92bm9kZS92bm9kZS1kaXJ0eSc7XG5pbXBvcnQgeyBfRUZGRUNUX0JBQ0tfUkVGIH0gZnJvbSAnLi4vYmFja3JlZic7XG5pbXBvcnQgeyBIT1NUX1NJR05BTCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jdXJzb3IvY3Vyc29yLXByb3BzJztcbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuXG5leHBvcnQgY2xhc3MgV3JhcHBlZFNpZ25hbEltcGw8VD4gZXh0ZW5kcyBTaWduYWxJbXBsPFQ+IHtcbiAgJGFyZ3MkOiBhbnlbXTtcbiAgJGZ1bmMkOiAoLi4uYXJnczogYW55W10pID0+IFQ7XG4gICRmdW5jU3RyJDogc3RyaW5nIHwgbnVsbDtcblxuICAkZmxhZ3MkOiBBbGxTaWduYWxGbGFncztcbiAgJGhvc3RFbGVtZW50JDogSG9zdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIC8vIGltcG9ydGFudDogZG9uJ3QgdXNlIGltcGxlbW5ldHMgQmFja1JlZiBoZXJlXG4gIC8vIGl0IGNhdXNlcyB2OCBvcHRpbWl6YXRpb25zIGVhZ2VyIGJhaWxvdXRzLCBiZWNhdXNlIG9mIG5vdCBjb25zaXN0ZW50IGNsYXNzIHNoYXBlXG4gIFtfRUZGRUNUX0JBQ0tfUkVGXTogTWFwPEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLCBFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogQ29udGFpbmVyIHwgbnVsbCxcbiAgICBmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBULFxuICAgIGFyZ3M6IGFueVtdLFxuICAgIGZuU3RyOiBzdHJpbmcgfCBudWxsLFxuICAgIC8vIFdlIG5lZWQgYSBzZXBhcmF0ZSBmbGFnIHRvIGtub3cgd2hlbiB0aGUgY29tcHV0YXRpb24gbmVlZHMgcnVubmluZyBiZWNhdXNlXG4gICAgLy8gd2UgbmVlZCB0aGUgb2xkIHZhbHVlIHRvIGtub3cgaWYgZWZmZWN0cyBuZWVkIHJ1bm5pbmcgYWZ0ZXIgY29tcHV0YXRpb25cbiAgICBmbGFnczogU2lnbmFsRmxhZ3MgPSBTaWduYWxGbGFncy5JTlZBTElEIHwgV3JhcHBlZFNpZ25hbEZsYWdzLlVOV1JBUFxuICApIHtcbiAgICBzdXBlcihjb250YWluZXIsIE5FRURTX0NPTVBVVEFUSU9OKTtcbiAgICB0aGlzLiRhcmdzJCA9IGFyZ3M7XG4gICAgdGhpcy4kZnVuYyQgPSBmbjtcbiAgICB0aGlzLiRmdW5jU3RyJCA9IGZuU3RyO1xuICAgIHRoaXMuJGZsYWdzJCA9IGZsYWdzO1xuICB9XG5cbiAgaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLiRmbGFncyQgfD0gU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICAvLyB3ZSBhcmUgdHJ5aW5nIHRvIHJ1biBjb21wdXRhdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgY2hvcmUsIHdoaWNoIGNhbiBiZSBleHBlbnNpdmVcbiAgICAvLyBmb3IgbWFueSBzaWduYWxzLiBJZiBpdCBmYWlscywgd2Ugc2NoZWR1bGUgYSBjaG9yZSB0byBydW4gdGhlIGNvbXB1dGF0aW9uLlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaWYgKHRoaXMuJGNvbnRhaW5lciQgJiYgdGhpcy4kaG9zdEVsZW1lbnQkKSB7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lciQuc2V0SG9zdFByb3AodGhpcy4kaG9zdEVsZW1lbnQkIGFzIEhvc3RFbGVtZW50LCBIT1NUX1NJR05BTCwgdGhpcyk7XG4gICAgICAgIG1hcmtWTm9kZURpcnR5KHRoaXMuJGNvbnRhaW5lciQsIHRoaXMuJGhvc3RFbGVtZW50JCwgQ2hvcmVCaXRzLkNPTVBVVEUpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiB0aGUgY29tcHV0YXRpb24gbm90IGZhaWxlZCwgd2UgY2FuIHJ1biB0aGUgZWZmZWN0cyBkaXJlY3RseVxuICAgIGlmICh0aGlzLiRmbGFncyQgJiBTaWduYWxGbGFncy5SVU5fRUZGRUNUUykge1xuICAgICAgdGhpcy4kZmxhZ3MkICY9IH5TaWduYWxGbGFncy5SVU5fRUZGRUNUUztcbiAgICAgIHNjaGVkdWxlRWZmZWN0cyh0aGlzLiRjb250YWluZXIkLCB0aGlzLCB0aGlzLiRlZmZlY3RzJCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVudHJhY2tlZFZhbHVlKCkge1xuICAgIHRoaXMuJGNvbXB1dGVJZk5lZWRlZCQoKTtcbiAgICBpc0RldiAmJiBhc3NlcnRGYWxzZSh0aGlzLiR1bnRyYWNrZWRWYWx1ZSQgPT09IE5FRURTX0NPTVBVVEFUSU9OLCAnSW52YWxpZCBzdGF0ZScpO1xuICAgIHJldHVybiB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQ7XG4gIH1cblxuICAkY29tcHV0ZUlmTmVlZGVkJCgpIHtcbiAgICBpZiAoISh0aGlzLiRmbGFncyQgJiBTaWduYWxGbGFncy5JTlZBTElEKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1bnRyYWNrZWRWYWx1ZSA9IHRyYWNrU2lnbmFsKFxuICAgICAgKCkgPT4gdGhpcy4kZnVuYyQoLi4udGhpcy4kYXJncyQpLFxuICAgICAgdGhpcyxcbiAgICAgIEVmZmVjdFByb3BlcnR5LlZOT0RFLFxuICAgICAgdGhpcy4kY29udGFpbmVyJCFcbiAgICApO1xuICAgIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgaW52YWxpZCBmbGFnIGhlcmUsIGJ1dCBzb21lIHRlc3RzIGFyZSBmYWlsaW5nXG4gICAgLy8gU29tZXRpbWVzIHdlIG1heSBjYWxsIC52YWx1ZSBvbiB3cmFwcGVkIHNpZ25hbHMgd2l0aG91dCBjdHguIFRoaXMgbWVhbnMgc3Vic2NyaXB0aW9uIHdpbGwgYmVcbiAgICAvLyBub3QgY3JlYXRlZCBhbmQgZWZmZWN0cyB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQuIEFmdGVyIHdyYXBwaW5nIHRoaXMgd2l0aCBpZiAodGhpcy4kY29udGFpbmVyJClcbiAgICAvLyBsZXNzIHRlc3RzIGFyZSBmYWlsaW5nLCBidXQgc3RpbGwgc29tZSBhcmUgZmFpbGluZy5cbiAgICAvLyB0aGlzLiRmbGFncyQgJj0gflNpZ25hbEZsYWdzLklOVkFMSUQ7XG5cbiAgICAvLyByZXNldCBmbGFnIGluIGNhc2Ugd2UgY2FsbCBjb21wdXRlZElmTmVlZGVkIHR3aWNlIGFuZCB0aGUgdmFsdWUgd2FzIGNoYW5nZWQgb25seSB0aGUgZmlyc3QgdGltZVxuICAgIC8vIFRPRE86IGNoYW5nZSB0byB2ZXJzaW9uIG51bWJlcj9cbiAgICB0aGlzLiRmbGFncyQgJj0gflNpZ25hbEZsYWdzLlJVTl9FRkZFQ1RTO1xuICAgIGNvbnN0IGRpZENoYW5nZSA9IHVudHJhY2tlZFZhbHVlICE9PSB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQ7XG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgdGhpcy4kZmxhZ3MkIHw9IFNpZ25hbEZsYWdzLlJVTl9FRkZFQ1RTO1xuICAgICAgdGhpcy4kdW50cmFja2VkVmFsdWUkID0gdW50cmFja2VkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgJHVud3JhcElmU2lnbmFsJCgpOiBTaWduYWxJbXBsPFQ+IHwgV3JhcHBlZFNpZ25hbEltcGw8VD4ge1xuICAgIHJldHVybiB0aGlzLiRmdW5jJCA9PT0gZ2V0VmFsdWVQcm9wICYmIGlzU2lnbmFsKHRoaXMuJGFyZ3MkWzBdKVxuICAgICAgPyAodGhpcy4kYXJncyRbMF0gYXMgU2lnbmFsSW1wbDxUPilcbiAgICAgIDogdGhpcztcbiAgfVxuXG4gIC8vIE1ha2UgdGhpcyBzaWduYWwgcmVhZC1vbmx5XG4gIHNldCB2YWx1ZShfOiBhbnkpIHtcbiAgICB0aHJvdyBxRXJyb3IoUUVycm9yLndyYXBwZWRSZWFkT25seSk7XG4gIH1cbiAgLy8gR2V0dGVycyBkb24ndCBnZXQgaW5oZXJpdGVkIHdoZW4gb3ZlcnJpZGluZyBhIHNldHRlclxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbHVlO1xuICB9XG59XG4iXX0=","/** @internal */\nexport class SubscriptionData {\n    data;\n    constructor(data) {\n        this.data = data;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWRhdGEuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy9zdWJzY3JpcHRpb24tZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxnQkFBZ0I7QUFDaEIsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixJQUFJLENBQWU7SUFFbkIsWUFBWSxJQUFrQjtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJy4vc2lnbmFsLnB1YmxpYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVByb3BEYXRhIHtcbiAgJHNjb3BlZFN0eWxlSWRQcmVmaXgkOiBzdHJpbmcgfCBudWxsO1xuICAkaXNDb25zdCQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVByb3BQYXlsb2FkIGV4dGVuZHMgTm9kZVByb3BEYXRhIHtcbiAgJHZhbHVlJDogU2lnbmFsPHVua25vd24+O1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uRGF0YSB7XG4gIGRhdGE6IE5vZGVQcm9wRGF0YTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBOb2RlUHJvcERhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVByb3Age1xuICBpc0NvbnN0OiBib29sZWFuO1xuICBzY29wZWRTdHlsZUlkUHJlZml4OiBzdHJpbmcgfCBudWxsO1xuICB2YWx1ZTogU2lnbmFsPHVua25vd24+IHwgc3RyaW5nO1xufVxuIl19","import { EMPTY_OBJ } from '../utils/flyweight';\nimport { logWarn } from '../utils/log';\nimport { isObjectEmpty } from '../utils/objects';\nimport { qDev, seal } from '../utils/qdev';\nimport { isObject } from '../utils/types';\nimport { createPropsProxy, isPropsProxy } from './props-proxy';\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\n// TODO store props as the arrays the vnodes also use?\nexport class JSXNodeImpl {\n    type;\n    children;\n    flags;\n    toSort;\n    key;\n    varProps;\n    constProps;\n    dev;\n    _proxy = null;\n    constructor(type, varProps, constProps, children, flags, key, toSort, dev) {\n        this.type = type;\n        this.children = children;\n        this.flags = flags;\n        this.toSort = !!toSort;\n        this.key = key === null || key === undefined ? null : typeof key === 'string' ? key : '' + key;\n        this.varProps = !varProps || isObjectEmpty(varProps) ? EMPTY_OBJ : varProps;\n        this.constProps = !constProps || isObjectEmpty(constProps) ? null : constProps;\n        if (qDev && dev) {\n            this.dev = {\n                ...dev,\n                stack: new Error().stack?.split('\\n').slice(2).join('\\n'),\n            };\n        }\n        seal(this);\n    }\n    get props() {\n        // We use a proxy to merge the constProps if they exist and to evaluate derived signals\n        return (this._proxy ||= createPropsProxy(this));\n    }\n}\n/** @returns `true` if the event is new to the object */\nexport const mergeHandlers = (obj, event, handler) => {\n    let current = obj[event];\n    if (current) {\n        if (Array.isArray(current)) {\n            current.push(handler);\n        }\n        else {\n            current = obj[event] = [current, handler];\n        }\n    }\n    else {\n        obj[event] = handler;\n        return true;\n    }\n};\n/** @internal */\nexport const isJSXNode = (n) => {\n    if (qDev) {\n        if (n instanceof JSXNodeImpl) {\n            return true;\n        }\n        if (isObject(n) &&\n            _hasOwnProperty.call(n, 'key') &&\n            _hasOwnProperty.call(n, 'props') &&\n            _hasOwnProperty.call(n, 'type')) {\n            if (isPropsProxy(n)) {\n                return false;\n            }\n            logWarn(`Duplicate implementations of \"JSXNode\" found`);\n            return true;\n        }\n        return false;\n    }\n    else {\n        return n instanceof JSXNodeImpl;\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LW5vZGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2pzeC9qc3gtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFFeEQsc0RBQXNEO0FBQ3RELE1BQU0sT0FBTyxXQUFXO0lBU2I7SUFHQTtJQUNBO0lBWlQsTUFBTSxDQUFVO0lBQ2hCLEdBQUcsQ0FBZ0I7SUFDbkIsUUFBUSxDQUFRO0lBQ2hCLFVBQVUsQ0FBZTtJQUN6QixHQUFHLENBQTBDO0lBQ3RDLE1BQU0sR0FBaUIsSUFBSSxDQUFDO0lBRW5DLFlBQ1MsSUFBTyxFQUNkLFFBQXNCLEVBQ3RCLFVBQXdCLEVBQ2pCLFFBQXFCLEVBQ3JCLEtBQW1CLEVBQzFCLEdBQXVDLEVBQ3ZDLE1BQWdCLEVBQ2hCLEdBQVk7UUFQTCxTQUFJLEdBQUosSUFBSSxDQUFHO1FBR1AsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBSzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMvRixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQy9FLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUc7Z0JBQ1QsR0FBRyxHQUFHO2dCQUNOLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDMUQsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsdUZBQXVGO1FBQ3ZGLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFRLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVUsRUFBRSxLQUFhLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDdkUsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBSSxDQUFVLEVBQTJCLEVBQUU7SUFDbEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztZQUM5QixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7WUFDaEMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQy9CLENBQUM7WUFDRCxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLFlBQVksV0FBVyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IEVNUFRZX09CSiB9IGZyb20gJy4uL3V0aWxzL2ZseXdlaWdodCc7XG5pbXBvcnQgeyBsb2dXYXJuIH0gZnJvbSAnLi4vdXRpbHMvbG9nJztcbmltcG9ydCB7IGlzT2JqZWN0RW1wdHkgfSBmcm9tICcuLi91dGlscy9vYmplY3RzJztcbmltcG9ydCB7IHFEZXYsIHNlYWwgfSBmcm9tICcuLi91dGlscy9xZGV2JztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgX2NoaywgX3ZhbCB9IGZyb20gJy4vYmluZC1oYW5kbGVycyc7XG5pbXBvcnQgeyB0eXBlIFByb3BzIH0gZnJvbSAnLi9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBjcmVhdGVQcm9wc1Byb3h5LCBpc1Byb3BzUHJveHkgfSBmcm9tICcuL3Byb3BzLXByb3h5JztcbmltcG9ydCB0eXBlIHsgRGV2SlNYLCBGdW5jdGlvbkNvbXBvbmVudCwgSlNYTm9kZUZsYWdzLCBKU1hOb2RlSW50ZXJuYWwgfSBmcm9tICcuL3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgSlNYQ2hpbGRyZW4gfSBmcm9tICcuL3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuXG5jb25zdCBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vLyBUT0RPIHN0b3JlIHByb3BzIGFzIHRoZSBhcnJheXMgdGhlIHZub2RlcyBhbHNvIHVzZT9cbmV4cG9ydCBjbGFzcyBKU1hOb2RlSW1wbDxUID0gdW5rbm93bj4gaW1wbGVtZW50cyBKU1hOb2RlSW50ZXJuYWw8VD4ge1xuICB0b1NvcnQ6IGJvb2xlYW47XG4gIGtleTogc3RyaW5nIHwgbnVsbDtcbiAgdmFyUHJvcHM6IFByb3BzO1xuICBjb25zdFByb3BzOiBQcm9wcyB8IG51bGw7XG4gIGRldj86IERldkpTWCAmIHsgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICBwdWJsaWMgX3Byb3h5OiBQcm9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0eXBlOiBULFxuICAgIHZhclByb3BzOiBQcm9wcyB8IG51bGwsXG4gICAgY29uc3RQcm9wczogUHJvcHMgfCBudWxsLFxuICAgIHB1YmxpYyBjaGlsZHJlbjogSlNYQ2hpbGRyZW4sXG4gICAgcHVibGljIGZsYWdzOiBKU1hOb2RlRmxhZ3MsXG4gICAga2V5OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHRvU29ydD86IGJvb2xlYW4sXG4gICAgZGV2PzogRGV2SlNYXG4gICkge1xuICAgIHRoaXMudG9Tb3J0ID0gISF0b1NvcnQ7XG4gICAgdGhpcy5rZXkgPSBrZXkgPT09IG51bGwgfHwga2V5ID09PSB1bmRlZmluZWQgPyBudWxsIDogdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBrZXkgOiAnJyArIGtleTtcbiAgICB0aGlzLnZhclByb3BzID0gIXZhclByb3BzIHx8IGlzT2JqZWN0RW1wdHkodmFyUHJvcHMpID8gRU1QVFlfT0JKIDogdmFyUHJvcHM7XG4gICAgdGhpcy5jb25zdFByb3BzID0gIWNvbnN0UHJvcHMgfHwgaXNPYmplY3RFbXB0eShjb25zdFByb3BzKSA/IG51bGwgOiBjb25zdFByb3BzO1xuICAgIGlmIChxRGV2ICYmIGRldikge1xuICAgICAgdGhpcy5kZXYgPSB7XG4gICAgICAgIC4uLmRldixcbiAgICAgICAgc3RhY2s6IG5ldyBFcnJvcigpLnN0YWNrPy5zcGxpdCgnXFxuJykuc2xpY2UoMikuam9pbignXFxuJyksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHNlYWwodGhpcyk7XG4gIH1cblxuICBnZXQgcHJvcHMoKTogVCBleHRlbmRzIEZ1bmN0aW9uQ29tcG9uZW50PGluZmVyIFBST1BTPiA/IFBST1BTIDogUHJvcHMge1xuICAgIC8vIFdlIHVzZSBhIHByb3h5IHRvIG1lcmdlIHRoZSBjb25zdFByb3BzIGlmIHRoZXkgZXhpc3QgYW5kIHRvIGV2YWx1YXRlIGRlcml2ZWQgc2lnbmFsc1xuICAgIHJldHVybiAodGhpcy5fcHJveHkgfHw9IGNyZWF0ZVByb3BzUHJveHkodGhpcykpIGFzIGFueTtcbiAgfVxufVxuXG4vKiogQHJldHVybnMgYHRydWVgIGlmIHRoZSBldmVudCBpcyBuZXcgdG8gdGhlIG9iamVjdCAqL1xuZXhwb3J0IGNvbnN0IG1lcmdlSGFuZGxlcnMgPSAob2JqOiBQcm9wcywgZXZlbnQ6IHN0cmluZywgaGFuZGxlcjogUVJMKSA9PiB7XG4gIGxldCBjdXJyZW50ID0gb2JqW2V2ZW50XTtcbiAgaWYgKGN1cnJlbnQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgY3VycmVudC5wdXNoKGhhbmRsZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50ID0gb2JqW2V2ZW50XSA9IFtjdXJyZW50LCBoYW5kbGVyXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb2JqW2V2ZW50XSA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBpc0pTWE5vZGUgPSA8VD4objogdW5rbm93bik6IG4gaXMgSlNYTm9kZUludGVybmFsPFQ+ID0+IHtcbiAgaWYgKHFEZXYpIHtcbiAgICBpZiAobiBpbnN0YW5jZW9mIEpTWE5vZGVJbXBsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXNPYmplY3QobikgJiZcbiAgICAgIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sICdrZXknKSAmJlxuICAgICAgX2hhc093blByb3BlcnR5LmNhbGwobiwgJ3Byb3BzJykgJiZcbiAgICAgIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sICd0eXBlJylcbiAgICApIHtcbiAgICAgIGlmIChpc1Byb3BzUHJveHkobikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbG9nV2FybihgRHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBvZiBcIkpTWE5vZGVcIiBmb3VuZGApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbiBpbnN0YW5jZW9mIEpTWE5vZGVJbXBsO1xuICB9XG59O1xuIl19","import { _captures, deserializeCaptures, setCaptures } from '../../shared/qrl/qrl-class';\nimport { getDomContainer } from '../../client/dom-container';\nimport { AsyncSignalImpl } from '../../reactive-primitives/impl/async-signal-impl';\n/**\n * Qwikloader provides the captures string of the QRL when calling a handler. In that case we must\n * load the QRL captured scope ourselves. Otherwise, we are being called as a QRL and the captures\n * are already set.\n */\nconst maybeScopeFromQL = (captureIds, element) => {\n    if (typeof captureIds === 'string') {\n        const container = getDomContainer(element);\n        setCaptures(deserializeCaptures(container, captureIds));\n    }\n    return null;\n};\n/**\n * Handles events for bind:value\n *\n * @internal\n */\nexport function _val(_, element) {\n    maybeScopeFromQL(this, element);\n    const signal = _captures[0];\n    signal.value = element.type === 'number' ? element.valueAsNumber : element.value;\n}\n/**\n * Handles events for bind:checked\n *\n * @internal\n */\nexport function _chk(_, element) {\n    maybeScopeFromQL(this, element);\n    const signal = _captures[0];\n    signal.value = element.checked;\n}\n/**\n * Resumes selected state (e.g. polling AsyncSignals) by deserializing captures. Used for\n * document:onQIdle to resume async signals with active polling.\n *\n * @internal\n */\nexport function _res(_, element) {\n    maybeScopeFromQL(this, element);\n    // Captures are deserialized, now trigger computation on AsyncSignals\n    if (_captures) {\n        for (let i = 0; i < _captures.length; i++) {\n            const capture = _captures[i];\n            if (capture instanceof AsyncSignalImpl && capture.$flags$ & 64 /* AsyncSignalFlags.CLIENT_ONLY */) {\n                capture.$computeIfNeeded$();\n            }\n            // note that polling async signals will automatically schedule themselves so no action needed\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZC1oYW5kbGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvanN4L2JpbmQtaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBR25GOzs7O0dBSUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsVUFBOEIsRUFBRSxPQUFnQixFQUFFLEVBQUU7SUFDNUUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUEyQixDQUFNLEVBQUUsT0FBeUI7SUFDOUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLFNBQVUsQ0FBQyxDQUFDLENBQVcsQ0FBQztJQUN2QyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ25GLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBMkIsQ0FBTSxFQUFFLE9BQXlCO0lBQzlFLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxTQUFVLENBQUMsQ0FBQyxDQUFXLENBQUM7SUFDdkMsTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxJQUFJLENBQTJCLENBQU0sRUFBRSxPQUFnQjtJQUNyRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEMscUVBQXFFO0lBQ3JFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLE9BQU8sWUFBWSxlQUFlLElBQUksT0FBTyxDQUFDLE9BQU8sd0NBQStCLEVBQUUsQ0FBQztnQkFDekYsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUNELDZGQUE2RjtRQUMvRixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfY2FwdHVyZXMsIGRlc2VyaWFsaXplQ2FwdHVyZXMsIHNldENhcHR1cmVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHsgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgQXN5bmNTaWduYWxJbXBsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL2FzeW5jLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IEFzeW5jU2lnbmFsRmxhZ3MgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcblxuLyoqXG4gKiBRd2lrbG9hZGVyIHByb3ZpZGVzIHRoZSBjYXB0dXJlcyBzdHJpbmcgb2YgdGhlIFFSTCB3aGVuIGNhbGxpbmcgYSBoYW5kbGVyLiBJbiB0aGF0IGNhc2Ugd2UgbXVzdFxuICogbG9hZCB0aGUgUVJMIGNhcHR1cmVkIHNjb3BlIG91cnNlbHZlcy4gT3RoZXJ3aXNlLCB3ZSBhcmUgYmVpbmcgY2FsbGVkIGFzIGEgUVJMIGFuZCB0aGUgY2FwdHVyZXNcbiAqIGFyZSBhbHJlYWR5IHNldC5cbiAqL1xuY29uc3QgbWF5YmVTY29wZUZyb21RTCA9IChjYXB0dXJlSWRzOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgaWYgKHR5cGVvZiBjYXB0dXJlSWRzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihlbGVtZW50KTtcbiAgICBzZXRDYXB0dXJlcyhkZXNlcmlhbGl6ZUNhcHR1cmVzKGNvbnRhaW5lciwgY2FwdHVyZUlkcykpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogSGFuZGxlcyBldmVudHMgZm9yIGJpbmQ6dmFsdWVcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF92YWwodGhpczogc3RyaW5nIHwgdW5kZWZpbmVkLCBfOiBhbnksIGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgbWF5YmVTY29wZUZyb21RTCh0aGlzLCBlbGVtZW50KTtcbiAgY29uc3Qgc2lnbmFsID0gX2NhcHR1cmVzIVswXSBhcyBTaWduYWw7XG4gIHNpZ25hbC52YWx1ZSA9IGVsZW1lbnQudHlwZSA9PT0gJ251bWJlcicgPyBlbGVtZW50LnZhbHVlQXNOdW1iZXIgOiBlbGVtZW50LnZhbHVlO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgZXZlbnRzIGZvciBiaW5kOmNoZWNrZWRcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGsodGhpczogc3RyaW5nIHwgdW5kZWZpbmVkLCBfOiBhbnksIGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgbWF5YmVTY29wZUZyb21RTCh0aGlzLCBlbGVtZW50KTtcbiAgY29uc3Qgc2lnbmFsID0gX2NhcHR1cmVzIVswXSBhcyBTaWduYWw7XG4gIHNpZ25hbC52YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZDtcbn1cblxuLyoqXG4gKiBSZXN1bWVzIHNlbGVjdGVkIHN0YXRlIChlLmcuIHBvbGxpbmcgQXN5bmNTaWduYWxzKSBieSBkZXNlcmlhbGl6aW5nIGNhcHR1cmVzLiBVc2VkIGZvclxuICogZG9jdW1lbnQ6b25RSWRsZSB0byByZXN1bWUgYXN5bmMgc2lnbmFscyB3aXRoIGFjdGl2ZSBwb2xsaW5nLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlcyh0aGlzOiBzdHJpbmcgfCB1bmRlZmluZWQsIF86IGFueSwgZWxlbWVudDogRWxlbWVudCkge1xuICBtYXliZVNjb3BlRnJvbVFMKHRoaXMsIGVsZW1lbnQpO1xuICAvLyBDYXB0dXJlcyBhcmUgZGVzZXJpYWxpemVkLCBub3cgdHJpZ2dlciBjb21wdXRhdGlvbiBvbiBBc3luY1NpZ25hbHNcbiAgaWYgKF9jYXB0dXJlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2NhcHR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjYXB0dXJlID0gX2NhcHR1cmVzW2ldO1xuICAgICAgaWYgKGNhcHR1cmUgaW5zdGFuY2VvZiBBc3luY1NpZ25hbEltcGwgJiYgY2FwdHVyZS4kZmxhZ3MkICYgQXN5bmNTaWduYWxGbGFncy5DTElFTlRfT05MWSkge1xuICAgICAgICBjYXB0dXJlLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgICB9XG4gICAgICAvLyBub3RlIHRoYXQgcG9sbGluZyBhc3luYyBzaWduYWxzIHdpbGwgYXV0b21hdGljYWxseSBzY2hlZHVsZSB0aGVtc2VsdmVzIHNvIG5vIGFjdGlvbiBuZWVkZWRcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { createQRL } from '../qrl/qrl-class';\nimport { jsxEventToHtmlAttribute, normalizeJsxEventName } from '../utils/event-names';\nimport { logOnceWarn } from '../utils/log';\nimport { qDev } from '../utils/qdev';\nimport { _chk, _val } from './bind-handlers';\nimport { JSXNodeImpl, mergeHandlers } from './jsx-node';\nimport { jsx } from './jsx-runtime';\nconst BIND_VALUE = 'bind:value';\nconst BIND_CHECKED = 'bind:checked';\nconst PASSIVE = 'passive:';\nconst PREVENT_DEFAULT = 'preventdefault:';\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\nconst removePassiveMarkers = (props, passiveKeys, preventDefaultKeys, passiveEvents, canMutate = false) => {\n    let mutableProps = props;\n    let copied = canMutate;\n    if (passiveKeys.length > 0) {\n        if (!copied) {\n            mutableProps = { ...mutableProps };\n            copied = true;\n        }\n        for (let i = 0; i < passiveKeys.length; i++) {\n            const k = passiveKeys[i];\n            delete mutableProps[k];\n        }\n    }\n    if (preventDefaultKeys.length > 0) {\n        for (let i = 0; i < preventDefaultKeys.length; i++) {\n            const k = preventDefaultKeys[i];\n            if (passiveEvents.has(normalizeJsxEventName(k.slice(PREVENT_DEFAULT.length)))) {\n                if (!copied) {\n                    mutableProps = { ...mutableProps };\n                    copied = true;\n                }\n                delete mutableProps[k];\n            }\n        }\n    }\n    return mutableProps;\n};\nconst getPassiveEventKey = (key) => {\n    if (key.startsWith('on') && key.endsWith('$')) {\n        return normalizeJsxEventName(key.slice(2, -1));\n    }\n    if (key.startsWith('window:on') && key.endsWith('$')) {\n        return normalizeJsxEventName(key.slice(9, -1));\n    }\n    if (key.startsWith('document:on') && key.endsWith('$')) {\n        return normalizeJsxEventName(key.slice(11, -1));\n    }\n    return null;\n};\nconst convertJsxEventProps = (props, eventKeys, keyOrder, passiveEvents, canMutate = false) => {\n    let mutableProps = props;\n    let copied = canMutate;\n    for (let i = 0; i < eventKeys.length; i++) {\n        const k = eventKeys[i];\n        const passiveEventKey = getPassiveEventKey(k);\n        const attr = jsxEventToHtmlAttribute(k, passiveEvents.has(passiveEventKey));\n        if (attr) {\n            if (!copied) {\n                mutableProps = { ...mutableProps };\n                copied = true;\n            }\n            const attrIndex = keyOrder.get(attr);\n            if (attrIndex === undefined || attrIndex < keyOrder.get(k)) {\n                mutableProps[attr] = mutableProps[k];\n            }\n            delete mutableProps[k];\n        }\n    }\n    return mutableProps;\n};\n/**\n * Create a JSXNode with the properties fully split into variable and constant parts, and children\n * separated out. Furthermore, the varProps must be a sorted object, that is, the keys must be\n * sorted in ascending utf-8 value order.\n *\n * The constant parts are expected to be the same on every render, and are not checked for changes.\n * This means that they are constant scalars or refs. When the ref is a signal or a store, it can\n * still update the attribute on the vnode.\n *\n * @param type - The JSX type\n * @param varProps - The properties of the tag, sorted, excluding children, key and any constProps\n * @param constProps - The properties of the tag that are known to be constant references and don't\n *   need checking for changes on re-render\n * @param children - JSX children. Any `children` in the props objects are ignored.\n * @internal\n */\nexport const _jsxSorted = (type, varProps, constProps, children, \n// TODO use this to know static parts of the tree\nflags, key, dev) => {\n    return new JSXNodeImpl(type, varProps, constProps, children, flags, key, false, dev);\n};\n/**\n * Create a JSXNode, with the properties split into variable and constant parts, but the variable\n * parts could include keys from `constProps`, as well as `key` and `children`.\n *\n * `constProps` cannot include `key` or `children`. The constant parts are expected to be the same\n * on every render, and are not checked for changes. This means that they are constant scalars or\n * refs. When the ref is a signal or a store, it can still update the attribute on the vnode.\n *\n * If `children` or `key` are defined, any `children`/`key` in the props will be ignored.\n *\n * @param type - The tag type\n * @param varProps - The properties of the tag that could change, including children\n * @param constProps - The properties of the tag that are known to be static and don't need checking\n *   for changes on re-render\n * @internal\n */\nexport const _jsxSplit = (type, varProps, constProps, children, flags, key, dev) => {\n    let toSort = false;\n    let constPropsCopied = false;\n    let varPropsCopied = false;\n    let bindValueSignal = null;\n    let bindCheckedSignal = null;\n    // Apply transformations for native HTML elements only\n    if (typeof type === 'string') {\n        const passiveEvents = new Set();\n        const constEventKeys = [];\n        const varEventKeys = [];\n        const constPassiveKeys = [];\n        const varPassiveKeys = [];\n        const constPreventDefaultKeys = [];\n        const varPreventDefaultKeys = [];\n        const constKeyOrder = new Map();\n        const varKeyOrder = new Map();\n        if (constProps) {\n            let index = 0;\n            for (const k in constProps) {\n                constKeyOrder.set(k, index++);\n                if (k.startsWith(PASSIVE)) {\n                    constPassiveKeys.push(k);\n                    passiveEvents.add(normalizeJsxEventName(k.slice(PASSIVE.length)));\n                }\n                else if (k.startsWith(PREVENT_DEFAULT)) {\n                    constPreventDefaultKeys.push(k);\n                }\n                else if (getPassiveEventKey(k) !== null) {\n                    constEventKeys.push(k);\n                }\n                else if (k === BIND_CHECKED) {\n                    // Set flag, will process after walk\n                    bindCheckedSignal = constProps[k];\n                }\n                else if (k === BIND_VALUE) {\n                    // Set flag, will process after walk\n                    bindValueSignal = constProps[k];\n                }\n            }\n        }\n        if (varProps) {\n            let index = 0;\n            for (const k in varProps) {\n                varKeyOrder.set(k, index++);\n                if (k.startsWith(PASSIVE)) {\n                    varPassiveKeys.push(k);\n                    passiveEvents.add(normalizeJsxEventName(k.slice(PASSIVE.length)));\n                }\n                else if (k.startsWith(PREVENT_DEFAULT)) {\n                    varPreventDefaultKeys.push(k);\n                }\n                else if (getPassiveEventKey(k) !== null) {\n                    varEventKeys.push(k);\n                }\n                else if (k === BIND_CHECKED) {\n                    // Set flag, will process after walk\n                    bindCheckedSignal = varProps[k];\n                }\n                else if (k === BIND_VALUE) {\n                    // Set flag, will process after walk\n                    bindValueSignal = varProps[k];\n                }\n            }\n        }\n        if (constProps) {\n            const originalConstProps = constProps;\n            constProps = removePassiveMarkers(constProps, constPassiveKeys, constPreventDefaultKeys, passiveEvents, constPropsCopied);\n            constPropsCopied = constPropsCopied || constProps !== originalConstProps;\n            constProps = convertJsxEventProps(constProps, constEventKeys, constKeyOrder, passiveEvents, constPropsCopied);\n            constPropsCopied = constPropsCopied || constProps !== originalConstProps;\n        }\n        if (varProps) {\n            const originalVarProps = varProps;\n            varProps = removePassiveMarkers(varProps, varPassiveKeys, varPreventDefaultKeys, passiveEvents, varPropsCopied);\n            varPropsCopied = varPropsCopied || varProps !== originalVarProps;\n            varProps = convertJsxEventProps(varProps, varEventKeys, varKeyOrder, passiveEvents, varPropsCopied);\n            varPropsCopied = varPropsCopied || varProps !== originalVarProps;\n            toSort = toSort || varEventKeys.length > 0;\n        }\n        // Handle bind:* - only in varProps, bind:* should be moved to varProps\n        if (bindCheckedSignal || bindValueSignal) {\n            if (!varPropsCopied) {\n                varProps = { ...varProps };\n                varPropsCopied = true;\n            }\n            varProps ||= {};\n            if (bindCheckedSignal) {\n                // Delete from both varProps and constProps if present\n                if (varProps && _hasOwnProperty.call(varProps, BIND_CHECKED)) {\n                    delete varProps[BIND_CHECKED];\n                }\n                if (constProps && _hasOwnProperty.call(constProps, BIND_CHECKED)) {\n                    if (!constPropsCopied) {\n                        constProps = { ...constProps };\n                        constPropsCopied = true;\n                    }\n                    delete constProps[BIND_CHECKED];\n                }\n                varProps.checked = bindCheckedSignal;\n                const handler = createQRL(null, '_chk', _chk, null, [bindCheckedSignal]);\n                // Move q-e:input from constProps if it exists\n                if (constProps && _hasOwnProperty.call(constProps, 'q-e:input')) {\n                    if (!constPropsCopied) {\n                        constProps = { ...constProps };\n                        constPropsCopied = true;\n                    }\n                    const existingHandler = constProps['q-e:input'];\n                    delete constProps['q-e:input'];\n                    toSort = mergeHandlers(varProps, 'q-e:input', existingHandler) || toSort;\n                }\n                toSort = mergeHandlers(varProps, 'q-e:input', handler) || toSort;\n            }\n            else if (bindValueSignal) {\n                // Delete from both varProps and constProps if present\n                if (varProps && _hasOwnProperty.call(varProps, BIND_VALUE)) {\n                    delete varProps[BIND_VALUE];\n                }\n                if (constProps && _hasOwnProperty.call(constProps, BIND_VALUE)) {\n                    if (!constPropsCopied) {\n                        constProps = { ...constProps };\n                        constPropsCopied = true;\n                    }\n                    delete constProps[BIND_VALUE];\n                }\n                varProps.value = bindValueSignal;\n                const handler = createQRL(null, '_val', _val, null, [bindValueSignal]);\n                // Move q-e:input from constProps if it exists\n                if (constProps && _hasOwnProperty.call(constProps, 'q-e:input')) {\n                    if (!constPropsCopied) {\n                        constProps = { ...constProps };\n                        constPropsCopied = true;\n                    }\n                    const existingHandler = constProps['q-e:input'];\n                    delete constProps['q-e:input'];\n                    toSort = mergeHandlers(varProps, 'q-e:input', existingHandler) || toSort;\n                }\n                toSort = mergeHandlers(varProps, 'q-e:input', handler) || toSort;\n            }\n        }\n        // Transform className -> class\n        if (varProps && _hasOwnProperty.call(varProps, 'className')) {\n            if (!varPropsCopied) {\n                varProps = { ...varProps };\n                varPropsCopied = true;\n            }\n            varProps.class = varProps.className;\n            varProps.className = undefined;\n            toSort = true;\n            if (qDev) {\n                logOnceWarn(`jsx${dev ? ` ${dev.fileName}${dev?.lineNumber ? `:${dev.lineNumber}` : ''}` : ''}: \\`className\\` is deprecated. Use \\`class\\` instead.`);\n            }\n        }\n        if (constProps && _hasOwnProperty.call(constProps, 'className')) {\n            if (!constPropsCopied) {\n                constProps = { ...constProps };\n                constPropsCopied = true;\n            }\n            constProps.class = constProps.className;\n            constProps.className = undefined;\n            if (qDev) {\n                logOnceWarn(`jsx${dev ? ` ${dev.fileName}${dev?.lineNumber ? `:${dev.lineNumber}` : ''}` : ''}: \\`className\\` is deprecated. Use \\`class\\` instead.`);\n            }\n        }\n    }\n    if (varProps) {\n        for (const k in varProps) {\n            if (k === 'children') {\n                if (!varPropsCopied) {\n                    varProps = { ...varProps };\n                    varPropsCopied = true;\n                }\n                children ||= varProps.children;\n                delete varProps.children;\n            }\n            else if (k === 'key') {\n                if (!varPropsCopied) {\n                    varProps = { ...varProps };\n                    varPropsCopied = true;\n                }\n                key ||= varProps.key;\n                delete varProps.key;\n            }\n            else if (constProps && k in constProps) {\n                if (!varPropsCopied) {\n                    varProps = { ...varProps };\n                    varPropsCopied = true;\n                }\n                delete varProps[k];\n            }\n            else if (varProps[k] === null) {\n                if (!varPropsCopied) {\n                    varProps = { ...varProps };\n                    varPropsCopied = true;\n                }\n                // Clean up null markers (from event conversions)\n                delete varProps[k];\n            }\n        }\n    }\n    return new JSXNodeImpl(type, varProps, constProps, children, flags, key, toSort || true, dev);\n};\n/** @internal @deprecated v1 compat */\nexport const _jsxC = (type, mutable, _flags, key) => jsx(type, mutable, key);\n/** @internal @deprecated v1 compat */\nexport const _jsxS = (type, mutable, immutable, _flags, key) => jsx(type, { ...immutable, ...mutable }, key);\n/** @internal @deprecated v1 compat */\nexport const _jsxQ = (type, mutable, immutable, children, _flags, key) => jsx(type, { ...immutable, ...mutable, children }, key); /** @private */\nexport const Virtual = (props) => props.children;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LWludGVybmFsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9qc3gvanN4LWludGVybmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4RCxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSWhELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUNoQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBQzNCLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDO0FBQzFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBRXhELE1BQU0sb0JBQW9CLEdBQUcsQ0FDM0IsS0FBWSxFQUNaLFdBQXFCLEVBQ3JCLGtCQUE0QixFQUM1QixhQUEwQixFQUMxQixTQUFTLEdBQUcsS0FBSyxFQUNWLEVBQUU7SUFDVCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBRXZCLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixZQUFZLEdBQUcs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QUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakcsc0NBQXNDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQVMsRUFBRSxPQUFZLEVBQUUsU0FBYyxFQUFFLE1BQVcsRUFBRSxHQUFRLEVBQUUsRUFBRSxDQUN0RixHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQyxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQ25CLElBQVMsRUFDVCxPQUFZLEVBQ1osU0FBYyxFQUNkLFFBQWEsRUFDYixNQUFXLEVBQ1gsR0FBUSxFQUNSLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FTZixDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT25SZW5kZXJGbiB9IGZyb20gJy4uL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHsgY3JlYXRlUVJMIH0gZnJvbSAnLi4vcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgeyBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZSwgbm9ybWFsaXplSnN4RXZlbnROYW1lIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQtbmFtZXMnO1xuaW1wb3J0IHsgbG9nT25jZVdhcm4gfSBmcm9tICcuLi91dGlscy9sb2cnO1xuaW1wb3J0IHR5cGUgeyBPblJlbmRlclByb3AsIFFTbG90LCBRU2xvdFMsIFFTY29wZWRTdHlsZSwgRUxFTUVOVF9JRCB9IGZyb20gJy4uL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgcURldiB9IGZyb20gJy4uL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgX2NoaywgX3ZhbCB9IGZyb20gJy4vYmluZC1oYW5kbGVycyc7XG5pbXBvcnQgeyBKU1hOb2RlSW1wbCwgbWVyZ2VIYW5kbGVycyB9IGZyb20gJy4vanN4LW5vZGUnO1xuaW1wb3J0IHsgdHlwZSBQcm9wcywganN4IH0gZnJvbSAnLi9qc3gtcnVudGltZSc7XG5pbXBvcnQgdHlwZSB7IERldkpTWCwgSlNYTm9kZUludGVybmFsLCBGdW5jdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBKU1hDaGlsZHJlbiB9IGZyb20gJy4vdHlwZXMvanN4LXF3aWstYXR0cmlidXRlcyc7XG5cbmNvbnN0IEJJTkRfVkFMVUUgPSAnYmluZDp2YWx1ZSc7XG5jb25zdCBCSU5EX0NIRUNLRUQgPSAnYmluZDpjaGVja2VkJztcbmNvbnN0IFBBU1NJVkUgPSAncGFzc2l2ZTonO1xuY29uc3QgUFJFVkVOVF9ERUZBVUxUID0gJ3ByZXZlbnRkZWZhdWx0Oic7XG5jb25zdCBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5jb25zdCByZW1vdmVQYXNzaXZlTWFya2VycyA9IChcbiAgcHJvcHM6IFByb3BzLFxuICBwYXNzaXZlS2V5czogc3RyaW5nW10sXG4gIHByZXZlbnREZWZhdWx0S2V5czogc3RyaW5nW10sXG4gIHBhc3NpdmVFdmVudHM6IFNldDxzdHJpbmc+LFxuICBjYW5NdXRhdGUgPSBmYWxzZVxuKTogUHJvcHMgPT4ge1xuICBsZXQgbXV0YWJsZVByb3BzID0gcHJvcHM7XG4gIGxldCBjb3BpZWQgPSBjYW5NdXRhdGU7XG5cbiAgaWYgKHBhc3NpdmVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoIWNvcGllZCkge1xuICAgICAgbXV0YWJsZVByb3BzID0geyAuLi5tdXRhYmxlUHJvcHMgfTtcbiAgICAgIGNvcGllZCA9IHRydWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFzc2l2ZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGsgPSBwYXNzaXZlS2V5c1tpXTtcbiAgICAgIGRlbGV0ZSBtdXRhYmxlUHJvcHNba107XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZlbnREZWZhdWx0S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2ZW50RGVmYXVsdEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGsgPSBwcmV2ZW50RGVmYXVsdEtleXNbaV07XG4gICAgICBpZiAocGFzc2l2ZUV2ZW50cy5oYXMobm9ybWFsaXplSnN4RXZlbnROYW1lKGsuc2xpY2UoUFJFVkVOVF9ERUZBVUxULmxlbmd0aCkpKSkge1xuICAgICAgICBpZiAoIWNvcGllZCkge1xuICAgICAgICAgIG11dGFibGVQcm9wcyA9IHsgLi4ubXV0YWJsZVByb3BzIH07XG4gICAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgbXV0YWJsZVByb3BzW2tdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtdXRhYmxlUHJvcHM7XG59O1xuXG5jb25zdCBnZXRQYXNzaXZlRXZlbnRLZXkgPSAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKGtleS5zdGFydHNXaXRoKCdvbicpICYmIGtleS5lbmRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUpzeEV2ZW50TmFtZShrZXkuc2xpY2UoMiwgLTEpKTtcbiAgfVxuICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3dpbmRvdzpvbicpICYmIGtleS5lbmRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUpzeEV2ZW50TmFtZShrZXkuc2xpY2UoOSwgLTEpKTtcbiAgfVxuICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2RvY3VtZW50Om9uJykgJiYga2V5LmVuZHNXaXRoKCckJykpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplSnN4RXZlbnROYW1lKGtleS5zbGljZSgxMSwgLTEpKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGNvbnZlcnRKc3hFdmVudFByb3BzID0gKFxuICBwcm9wczogUHJvcHMsXG4gIGV2ZW50S2V5czogc3RyaW5nW10sXG4gIGtleU9yZGVyOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuICBwYXNzaXZlRXZlbnRzOiBTZXQ8c3RyaW5nPixcbiAgY2FuTXV0YXRlID0gZmFsc2Vcbik6IFByb3BzID0+IHtcbiAgbGV0IG11dGFibGVQcm9wcyA9IHByb3BzO1xuICBsZXQgY29waWVkID0gY2FuTXV0YXRlO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgayA9IGV2ZW50S2V5c1tpXTtcbiAgICBjb25zdCBwYXNzaXZlRXZlbnRLZXkgPSBnZXRQYXNzaXZlRXZlbnRLZXkoaykhO1xuICAgIGNvbnN0IGF0dHIgPSBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZShrLCBwYXNzaXZlRXZlbnRzLmhhcyhwYXNzaXZlRXZlbnRLZXkpKTtcbiAgICBpZiAoYXR0cikge1xuICAgICAgaWYgKCFjb3BpZWQpIHtcbiAgICAgICAgbXV0YWJsZVByb3BzID0geyAuLi5tdXRhYmxlUHJvcHMgfTtcbiAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0dHJJbmRleCA9IGtleU9yZGVyLmdldChhdHRyKTtcbiAgICAgIGlmIChhdHRySW5kZXggPT09IHVuZGVmaW5lZCB8fCBhdHRySW5kZXggPCBrZXlPcmRlci5nZXQoaykhKSB7XG4gICAgICAgIG11dGFibGVQcm9wc1thdHRyXSA9IG11dGFibGVQcm9wc1trXTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBtdXRhYmxlUHJvcHNba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG11dGFibGVQcm9wcztcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgSlNYTm9kZSB3aXRoIHRoZSBwcm9wZXJ0aWVzIGZ1bGx5IHNwbGl0IGludG8gdmFyaWFibGUgYW5kIGNvbnN0YW50IHBhcnRzLCBhbmQgY2hpbGRyZW5cbiAqIHNlcGFyYXRlZCBvdXQuIEZ1cnRoZXJtb3JlLCB0aGUgdmFyUHJvcHMgbXVzdCBiZSBhIHNvcnRlZCBvYmplY3QsIHRoYXQgaXMsIHRoZSBrZXlzIG11c3QgYmVcbiAqIHNvcnRlZCBpbiBhc2NlbmRpbmcgdXRmLTggdmFsdWUgb3JkZXIuXG4gKlxuICogVGhlIGNvbnN0YW50IHBhcnRzIGFyZSBleHBlY3RlZCB0byBiZSB0aGUgc2FtZSBvbiBldmVyeSByZW5kZXIsIGFuZCBhcmUgbm90IGNoZWNrZWQgZm9yIGNoYW5nZXMuXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhcmUgY29uc3RhbnQgc2NhbGFycyBvciByZWZzLiBXaGVuIHRoZSByZWYgaXMgYSBzaWduYWwgb3IgYSBzdG9yZSwgaXQgY2FuXG4gKiBzdGlsbCB1cGRhdGUgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgdm5vZGUuXG4gKlxuICogQHBhcmFtIHR5cGUgLSBUaGUgSlNYIHR5cGVcbiAqIEBwYXJhbSB2YXJQcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWcsIHNvcnRlZCwgZXhjbHVkaW5nIGNoaWxkcmVuLCBrZXkgYW5kIGFueSBjb25zdFByb3BzXG4gKiBAcGFyYW0gY29uc3RQcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWcgdGhhdCBhcmUga25vd24gdG8gYmUgY29uc3RhbnQgcmVmZXJlbmNlcyBhbmQgZG9uJ3RcbiAqICAgbmVlZCBjaGVja2luZyBmb3IgY2hhbmdlcyBvbiByZS1yZW5kZXJcbiAqIEBwYXJhbSBjaGlsZHJlbiAtIEpTWCBjaGlsZHJlbi4gQW55IGBjaGlsZHJlbmAgaW4gdGhlIHByb3BzIG9iamVjdHMgYXJlIGlnbm9yZWQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IF9qc3hTb3J0ZWQgPSA8VD4oXG4gIHR5cGU6IFQsXG4gIHZhclByb3BzOiBQcm9wcyB8IG51bGwsXG4gIGNvbnN0UHJvcHM6IFByb3BzIHwgbnVsbCxcbiAgY2hpbGRyZW46IEpTWENoaWxkcmVuIHwgbnVsbCxcbiAgLy8gVE9ETyB1c2UgdGhpcyB0byBrbm93IHN0YXRpYyBwYXJ0cyBvZiB0aGUgdHJlZVxuICBmbGFnczogbnVtYmVyLFxuICBrZXk6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGRldj86IERldkpTWFxuKTogSlNYTm9kZUludGVybmFsPFQ+ID0+IHtcbiAgcmV0dXJuIG5ldyBKU1hOb2RlSW1wbCh0eXBlLCB2YXJQcm9wcywgY29uc3RQcm9wcywgY2hpbGRyZW4sIGZsYWdzLCBrZXksIGZhbHNlLCBkZXYpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBKU1hOb2RlLCB3aXRoIHRoZSBwcm9wZXJ0aWVzIHNwbGl0IGludG8gdmFyaWFibGUgYW5kIGNvbnN0YW50IHBhcnRzLCBidXQgdGhlIHZhcmlhYmxlXG4gKiBwYXJ0cyBjb3VsZCBpbmNsdWRlIGtleXMgZnJvbSBgY29uc3RQcm9wc2AsIGFzIHdlbGwgYXMgYGtleWAgYW5kIGBjaGlsZHJlbmAuXG4gKlxuICogYGNvbnN0UHJvcHNgIGNhbm5vdCBpbmNsdWRlIGBrZXlgIG9yIGBjaGlsZHJlbmAuIFRoZSBjb25zdGFudCBwYXJ0cyBhcmUgZXhwZWN0ZWQgdG8gYmUgdGhlIHNhbWVcbiAqIG9uIGV2ZXJ5IHJlbmRlciwgYW5kIGFyZSBub3QgY2hlY2tlZCBmb3IgY2hhbmdlcy4gVGhpcyBtZWFucyB0aGF0IHRoZXkgYXJlIGNvbnN0YW50IHNjYWxhcnMgb3JcbiAqIHJlZnMuIFdoZW4gdGhlIHJlZiBpcyBhIHNpZ25hbCBvciBhIHN0b3JlLCBpdCBjYW4gc3RpbGwgdXBkYXRlIHRoZSBhdHRyaWJ1dGUgb24gdGhlIHZub2RlLlxuICpcbiAqIElmIGBjaGlsZHJlbmAgb3IgYGtleWAgYXJlIGRlZmluZWQsIGFueSBgY2hpbGRyZW5gL2BrZXlgIGluIHRoZSBwcm9wcyB3aWxsIGJlIGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHR5cGUgLSBUaGUgdGFnIHR5cGVcbiAqIEBwYXJhbSB2YXJQcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWcgdGhhdCBjb3VsZCBjaGFuZ2UsIGluY2x1ZGluZyBjaGlsZHJlblxuICogQHBhcmFtIGNvbnN0UHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgdGFnIHRoYXQgYXJlIGtub3duIHRvIGJlIHN0YXRpYyBhbmQgZG9uJ3QgbmVlZCBjaGVja2luZ1xuICogICBmb3IgY2hhbmdlcyBvbiByZS1yZW5kZXJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgX2pzeFNwbGl0ID0gPFQgZXh0ZW5kcyBzdHJpbmcgfCBGdW5jdGlvbkNvbXBvbmVudDxhbnk+PihcbiAgdHlwZTogVCxcbiAgdmFyUHJvcHM6IFByb3BzIHwgbnVsbCxcbiAgY29uc3RQcm9wczogUHJvcHMgfCBudWxsLFxuICBjaGlsZHJlbjogSlNYQ2hpbGRyZW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBmbGFnczogbnVtYmVyLFxuICBrZXk/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLFxuICBkZXY/OiBEZXZKU1hcbik6IEpTWE5vZGVJbnRlcm5hbDxUPiA9PiB7XG4gIGxldCB0b1NvcnQgPSBmYWxzZTtcbiAgbGV0IGNvbnN0UHJvcHNDb3BpZWQgPSBmYWxzZTtcbiAgbGV0IHZhclByb3BzQ29waWVkID0gZmFsc2U7XG4gIGxldCBiaW5kVmFsdWVTaWduYWw6IGFueSA9IG51bGw7XG4gIGxldCBiaW5kQ2hlY2tlZFNpZ25hbDogYW55ID0gbnVsbDtcblxuICAvLyBBcHBseSB0cmFuc2Zvcm1hdGlvbnMgZm9yIG5hdGl2ZSBIVE1MIGVsZW1lbnRzIG9ubHlcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhc3NpdmVFdmVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBjb25zdEV2ZW50S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2YXJFdmVudEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29uc3RQYXNzaXZlS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2YXJQYXNzaXZlS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjb25zdFByZXZlbnREZWZhdWx0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2YXJQcmV2ZW50RGVmYXVsdEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29uc3RLZXlPcmRlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgY29uc3QgdmFyS2V5T3JkZXIgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgaWYgKGNvbnN0UHJvcHMpIHtcbiAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGsgaW4gY29uc3RQcm9wcykge1xuICAgICAgICBjb25zdEtleU9yZGVyLnNldChrLCBpbmRleCsrKTtcbiAgICAgICAgaWYgKGsuc3RhcnRzV2l0aChQQVNTSVZFKSkge1xuICAgICAgICAgIGNvbnN0UGFzc2l2ZUtleXMucHVzaChrKTtcbiAgICAgICAgICBwYXNzaXZlRXZlbnRzLmFkZChub3JtYWxpemVKc3hFdmVudE5hbWUoay5zbGljZShQQVNTSVZFLmxlbmd0aCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChrLnN0YXJ0c1dpdGgoUFJFVkVOVF9ERUZBVUxUKSkge1xuICAgICAgICAgIGNvbnN0UHJldmVudERlZmF1bHRLZXlzLnB1c2goayk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2V0UGFzc2l2ZUV2ZW50S2V5KGspICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3RFdmVudEtleXMucHVzaChrKTtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSBCSU5EX0NIRUNLRUQpIHtcbiAgICAgICAgICAvLyBTZXQgZmxhZywgd2lsbCBwcm9jZXNzIGFmdGVyIHdhbGtcbiAgICAgICAgICBiaW5kQ2hlY2tlZFNpZ25hbCA9IGNvbnN0UHJvcHNba107XG4gICAgICAgIH0gZWxzZSBpZiAoayA9PT0gQklORF9WQUxVRSkge1xuICAgICAgICAgIC8vIFNldCBmbGFnLCB3aWxsIHByb2Nlc3MgYWZ0ZXIgd2Fsa1xuICAgICAgICAgIGJpbmRWYWx1ZVNpZ25hbCA9IGNvbnN0UHJvcHNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhclByb3BzKSB7XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgZm9yIChjb25zdCBrIGluIHZhclByb3BzKSB7XG4gICAgICAgIHZhcktleU9yZGVyLnNldChrLCBpbmRleCsrKTtcbiAgICAgICAgaWYgKGsuc3RhcnRzV2l0aChQQVNTSVZFKSkge1xuICAgICAgICAgIHZhclBhc3NpdmVLZXlzLnB1c2goayk7XG4gICAgICAgICAgcGFzc2l2ZUV2ZW50cy5hZGQobm9ybWFsaXplSnN4RXZlbnROYW1lKGsuc2xpY2UoUEFTU0lWRS5sZW5ndGgpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoay5zdGFydHNXaXRoKFBSRVZFTlRfREVGQVVMVCkpIHtcbiAgICAgICAgICB2YXJQcmV2ZW50RGVmYXVsdEtleXMucHVzaChrKTtcbiAgICAgICAgfSBlbHNlIGlmIChnZXRQYXNzaXZlRXZlbnRLZXkoaykgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXJFdmVudEtleXMucHVzaChrKTtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSBCSU5EX0NIRUNLRUQpIHtcbiAgICAgICAgICAvLyBTZXQgZmxhZywgd2lsbCBwcm9jZXNzIGFmdGVyIHdhbGtcbiAgICAgICAgICBiaW5kQ2hlY2tlZFNpZ25hbCA9IHZhclByb3BzW2tdO1xuICAgICAgICB9IGVsc2UgaWYgKGsgPT09IEJJTkRfVkFMVUUpIHtcbiAgICAgICAgICAvLyBTZXQgZmxhZywgd2lsbCBwcm9jZXNzIGFmdGVyIHdhbGtcbiAgICAgICAgICBiaW5kVmFsdWVTaWduYWwgPSB2YXJQcm9wc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25zdFByb3BzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbENvbnN0UHJvcHMgPSBjb25zdFByb3BzO1xuICAgICAgY29uc3RQcm9wcyA9IHJlbW92ZVBhc3NpdmVNYXJrZXJzKFxuICAgICAgICBjb25zdFByb3BzLFxuICAgICAgICBjb25zdFBhc3NpdmVLZXlzLFxuICAgICAgICBjb25zdFByZXZlbnREZWZhdWx0S2V5cyxcbiAgICAgICAgcGFzc2l2ZUV2ZW50cyxcbiAgICAgICAgY29uc3RQcm9wc0NvcGllZFxuICAgICAgKTtcbiAgICAgIGNvbnN0UHJvcHNDb3BpZWQgPSBjb25zdFByb3BzQ29waWVkIHx8IGNvbnN0UHJvcHMgIT09IG9yaWdpbmFsQ29uc3RQcm9wcztcbiAgICAgIGNvbnN0UHJvcHMgPSBjb252ZXJ0SnN4RXZlbnRQcm9wcyhcbiAgICAgICAgY29uc3RQcm9wcyxcbiAgICAgICAgY29uc3RFdmVudEtleXMsXG4gICAgICAgIGNvbnN0S2V5T3JkZXIsXG4gICAgICAgIHBhc3NpdmVFdmVudHMsXG4gICAgICAgIGNvbnN0UHJvcHNDb3BpZWRcbiAgICAgICk7XG4gICAgICBjb25zdFByb3BzQ29waWVkID0gY29uc3RQcm9wc0NvcGllZCB8fCBjb25zdFByb3BzICE9PSBvcmlnaW5hbENvbnN0UHJvcHM7XG4gICAgfVxuXG4gICAgaWYgKHZhclByb3BzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFZhclByb3BzID0gdmFyUHJvcHM7XG4gICAgICB2YXJQcm9wcyA9IHJlbW92ZVBhc3NpdmVNYXJrZXJzKFxuICAgICAgICB2YXJQcm9wcyxcbiAgICAgICAgdmFyUGFzc2l2ZUtleXMsXG4gICAgICAgIHZhclByZXZlbnREZWZhdWx0S2V5cyxcbiAgICAgICAgcGFzc2l2ZUV2ZW50cyxcbiAgICAgICAgdmFyUHJvcHNDb3BpZWRcbiAgICAgICk7XG4gICAgICB2YXJQcm9wc0NvcGllZCA9IHZhclByb3BzQ29waWVkIHx8IHZhclByb3BzICE9PSBvcmlnaW5hbFZhclByb3BzO1xuICAgICAgdmFyUHJvcHMgPSBjb252ZXJ0SnN4RXZlbnRQcm9wcyhcbiAgICAgICAgdmFyUHJvcHMsXG4gICAgICAgIHZhckV2ZW50S2V5cyxcbiAgICAgICAgdmFyS2V5T3JkZXIsXG4gICAgICAgIHBhc3NpdmVFdmVudHMsXG4gICAgICAgIHZhclByb3BzQ29waWVkXG4gICAgICApO1xuICAgICAgdmFyUHJvcHNDb3BpZWQgPSB2YXJQcm9wc0NvcGllZCB8fCB2YXJQcm9wcyAhPT0gb3JpZ2luYWxWYXJQcm9wcztcbiAgICAgIHRvU29ydCA9IHRvU29ydCB8fCB2YXJFdmVudEtleXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYmluZDoqIC0gb25seSBpbiB2YXJQcm9wcywgYmluZDoqIHNob3VsZCBiZSBtb3ZlZCB0byB2YXJQcm9wc1xuICAgIGlmIChiaW5kQ2hlY2tlZFNpZ25hbCB8fCBiaW5kVmFsdWVTaWduYWwpIHtcbiAgICAgIGlmICghdmFyUHJvcHNDb3BpZWQpIHtcbiAgICAgICAgdmFyUHJvcHMgPSB7IC4uLnZhclByb3BzIH07XG4gICAgICAgIHZhclByb3BzQ29waWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyUHJvcHMgfHw9IHt9O1xuXG4gICAgICBpZiAoYmluZENoZWNrZWRTaWduYWwpIHtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gYm90aCB2YXJQcm9wcyBhbmQgY29uc3RQcm9wcyBpZiBwcmVzZW50XG4gICAgICAgIGlmICh2YXJQcm9wcyAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh2YXJQcm9wcywgQklORF9DSEVDS0VEKSkge1xuICAgICAgICAgIGRlbGV0ZSB2YXJQcm9wc1tCSU5EX0NIRUNLRURdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdFByb3BzICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnN0UHJvcHMsIEJJTkRfQ0hFQ0tFRCkpIHtcbiAgICAgICAgICBpZiAoIWNvbnN0UHJvcHNDb3BpZWQpIHtcbiAgICAgICAgICAgIGNvbnN0UHJvcHMgPSB7IC4uLmNvbnN0UHJvcHMgfTtcbiAgICAgICAgICAgIGNvbnN0UHJvcHNDb3BpZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgY29uc3RQcm9wc1tCSU5EX0NIRUNLRURdO1xuICAgICAgICB9XG4gICAgICAgIHZhclByb3BzLmNoZWNrZWQgPSBiaW5kQ2hlY2tlZFNpZ25hbDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGNyZWF0ZVFSTChudWxsLCAnX2NoaycsIF9jaGssIG51bGwsIFtiaW5kQ2hlY2tlZFNpZ25hbF0pO1xuXG4gICAgICAgIC8vIE1vdmUgcS1lOmlucHV0IGZyb20gY29uc3RQcm9wcyBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKGNvbnN0UHJvcHMgJiYgX2hhc093blByb3BlcnR5LmNhbGwoY29uc3RQcm9wcywgJ3EtZTppbnB1dCcpKSB7XG4gICAgICAgICAgaWYgKCFjb25zdFByb3BzQ29waWVkKSB7XG4gICAgICAgICAgICBjb25zdFByb3BzID0geyAuLi5jb25zdFByb3BzIH07XG4gICAgICAgICAgICBjb25zdFByb3BzQ29waWVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdIYW5kbGVyID0gY29uc3RQcm9wc1sncS1lOmlucHV0J107XG4gICAgICAgICAgZGVsZXRlIGNvbnN0UHJvcHNbJ3EtZTppbnB1dCddO1xuICAgICAgICAgIHRvU29ydCA9IG1lcmdlSGFuZGxlcnModmFyUHJvcHMsICdxLWU6aW5wdXQnLCBleGlzdGluZ0hhbmRsZXIgYXMgYW55KSB8fCB0b1NvcnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0b1NvcnQgPSBtZXJnZUhhbmRsZXJzKHZhclByb3BzLCAncS1lOmlucHV0JywgaGFuZGxlcikgfHwgdG9Tb3J0O1xuICAgICAgfSBlbHNlIGlmIChiaW5kVmFsdWVTaWduYWwpIHtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gYm90aCB2YXJQcm9wcyBhbmQgY29uc3RQcm9wcyBpZiBwcmVzZW50XG4gICAgICAgIGlmICh2YXJQcm9wcyAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh2YXJQcm9wcywgQklORF9WQUxVRSkpIHtcbiAgICAgICAgICBkZWxldGUgdmFyUHJvcHNbQklORF9WQUxVRV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0UHJvcHMgJiYgX2hhc093blByb3BlcnR5LmNhbGwoY29uc3RQcm9wcywgQklORF9WQUxVRSkpIHtcbiAgICAgICAgICBpZiAoIWNvbnN0UHJvcHNDb3BpZWQpIHtcbiAgICAgICAgICAgIGNvbnN0UHJvcHMgPSB7IC4uLmNvbnN0UHJvcHMgfTtcbiAgICAgICAgICAgIGNvbnN0UHJvcHNDb3BpZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgY29uc3RQcm9wc1tCSU5EX1ZBTFVFXTtcbiAgICAgICAgfVxuICAgICAgICB2YXJQcm9wcy52YWx1ZSA9IGJpbmRWYWx1ZVNpZ25hbDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGNyZWF0ZVFSTChudWxsLCAnX3ZhbCcsIF92YWwsIG51bGwsIFtiaW5kVmFsdWVTaWduYWxdKTtcblxuICAgICAgICAvLyBNb3ZlIHEtZTppbnB1dCBmcm9tIGNvbnN0UHJvcHMgaWYgaXQgZXhpc3RzXG4gICAgICAgIGlmIChjb25zdFByb3BzICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnN0UHJvcHMsICdxLWU6aW5wdXQnKSkge1xuICAgICAgICAgIGlmICghY29uc3RQcm9wc0NvcGllZCkge1xuICAgICAgICAgICAgY29uc3RQcm9wcyA9IHsgLi4uY29uc3RQcm9wcyB9O1xuICAgICAgICAgICAgY29uc3RQcm9wc0NvcGllZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSGFuZGxlciA9IGNvbnN0UHJvcHNbJ3EtZTppbnB1dCddO1xuICAgICAgICAgIGRlbGV0ZSBjb25zdFByb3BzWydxLWU6aW5wdXQnXTtcbiAgICAgICAgICB0b1NvcnQgPSBtZXJnZUhhbmRsZXJzKHZhclByb3BzLCAncS1lOmlucHV0JywgZXhpc3RpbmdIYW5kbGVyIGFzIGFueSkgfHwgdG9Tb3J0O1xuICAgICAgICB9XG5cbiAgICAgICAgdG9Tb3J0ID0gbWVyZ2VIYW5kbGVycyh2YXJQcm9wcywgJ3EtZTppbnB1dCcsIGhhbmRsZXIpIHx8IHRvU29ydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gY2xhc3NOYW1lIC0+IGNsYXNzXG4gICAgaWYgKHZhclByb3BzICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhclByb3BzLCAnY2xhc3NOYW1lJykpIHtcbiAgICAgIGlmICghdmFyUHJvcHNDb3BpZWQpIHtcbiAgICAgICAgdmFyUHJvcHMgPSB7IC4uLnZhclByb3BzIH07XG4gICAgICAgIHZhclByb3BzQ29waWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhclByb3BzLmNsYXNzID0gdmFyUHJvcHMuY2xhc3NOYW1lO1xuICAgICAgdmFyUHJvcHMuY2xhc3NOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgdG9Tb3J0ID0gdHJ1ZTtcbiAgICAgIGlmIChxRGV2KSB7XG4gICAgICAgIGxvZ09uY2VXYXJuKFxuICAgICAgICAgIGBqc3gke1xuICAgICAgICAgICAgZGV2ID8gYCAke2Rldi5maWxlTmFtZX0ke2Rldj8ubGluZU51bWJlciA/IGA6JHtkZXYubGluZU51bWJlcn1gIDogJyd9YCA6ICcnXG4gICAgICAgICAgfTogXFxgY2xhc3NOYW1lXFxgIGlzIGRlcHJlY2F0ZWQuIFVzZSBcXGBjbGFzc1xcYCBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbnN0UHJvcHMgJiYgX2hhc093blByb3BlcnR5LmNhbGwoY29uc3RQcm9wcywgJ2NsYXNzTmFtZScpKSB7XG4gICAgICBpZiAoIWNvbnN0UHJvcHNDb3BpZWQpIHtcbiAgICAgICAgY29uc3RQcm9wcyA9IHsgLi4uY29uc3RQcm9wcyB9O1xuICAgICAgICBjb25zdFByb3BzQ29waWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0UHJvcHMuY2xhc3MgPSBjb25zdFByb3BzLmNsYXNzTmFtZTtcbiAgICAgIGNvbnN0UHJvcHMuY2xhc3NOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHFEZXYpIHtcbiAgICAgICAgbG9nT25jZVdhcm4oXG4gICAgICAgICAgYGpzeCR7XG4gICAgICAgICAgICBkZXYgPyBgICR7ZGV2LmZpbGVOYW1lfSR7ZGV2Py5saW5lTnVtYmVyID8gYDoke2Rldi5saW5lTnVtYmVyfWAgOiAnJ31gIDogJydcbiAgICAgICAgICB9OiBcXGBjbGFzc05hbWVcXGAgaXMgZGVwcmVjYXRlZC4gVXNlIFxcYGNsYXNzXFxgIGluc3RlYWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJQcm9wcykge1xuICAgIGZvciAoY29uc3QgayBpbiB2YXJQcm9wcykge1xuICAgICAgaWYgKGsgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgaWYgKCF2YXJQcm9wc0NvcGllZCkge1xuICAgICAgICAgIHZhclByb3BzID0geyAuLi52YXJQcm9wcyB9O1xuICAgICAgICAgIHZhclByb3BzQ29waWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZHJlbiB8fD0gdmFyUHJvcHMuY2hpbGRyZW4gYXMgSlNYQ2hpbGRyZW47XG4gICAgICAgIGRlbGV0ZSB2YXJQcm9wcy5jaGlsZHJlbjtcbiAgICAgIH0gZWxzZSBpZiAoayA9PT0gJ2tleScpIHtcbiAgICAgICAgaWYgKCF2YXJQcm9wc0NvcGllZCkge1xuICAgICAgICAgIHZhclByb3BzID0geyAuLi52YXJQcm9wcyB9O1xuICAgICAgICAgIHZhclByb3BzQ29waWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBrZXkgfHw9IHZhclByb3BzLmtleSBhcyBzdHJpbmc7XG4gICAgICAgIGRlbGV0ZSB2YXJQcm9wcy5rZXk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnN0UHJvcHMgJiYgayBpbiBjb25zdFByb3BzKSB7XG4gICAgICAgIGlmICghdmFyUHJvcHNDb3BpZWQpIHtcbiAgICAgICAgICB2YXJQcm9wcyA9IHsgLi4udmFyUHJvcHMgfTtcbiAgICAgICAgICB2YXJQcm9wc0NvcGllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHZhclByb3BzW2tdO1xuICAgICAgfSBlbHNlIGlmICh2YXJQcm9wc1trXSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoIXZhclByb3BzQ29waWVkKSB7XG4gICAgICAgICAgdmFyUHJvcHMgPSB7IC4uLnZhclByb3BzIH07XG4gICAgICAgICAgdmFyUHJvcHNDb3BpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsZWFuIHVwIG51bGwgbWFya2VycyAoZnJvbSBldmVudCBjb252ZXJzaW9ucylcbiAgICAgICAgZGVsZXRlIHZhclByb3BzW2tdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IEpTWE5vZGVJbXBsKHR5cGUsIHZhclByb3BzLCBjb25zdFByb3BzLCBjaGlsZHJlbiwgZmxhZ3MsIGtleSwgdG9Tb3J0IHx8IHRydWUsIGRldik7XG59O1xuLyoqIEBpbnRlcm5hbCBAZGVwcmVjYXRlZCB2MSBjb21wYXQgKi9cbmV4cG9ydCBjb25zdCBfanN4QyA9ICh0eXBlOiBhbnksIG11dGFibGU6IGFueSwgX2ZsYWdzOiBhbnksIGtleTogYW55KSA9PiBqc3godHlwZSwgbXV0YWJsZSwga2V5KTtcbi8qKiBAaW50ZXJuYWwgQGRlcHJlY2F0ZWQgdjEgY29tcGF0ICovXG5leHBvcnQgY29uc3QgX2pzeFMgPSAodHlwZTogYW55LCBtdXRhYmxlOiBhbnksIGltbXV0YWJsZTogYW55LCBfZmxhZ3M6IGFueSwga2V5OiBhbnkpID0+XG4gIGpzeCh0eXBlLCB7IC4uLmltbXV0YWJsZSwgLi4ubXV0YWJsZSB9LCBrZXkpO1xuLyoqIEBpbnRlcm5hbCBAZGVwcmVjYXRlZCB2MSBjb21wYXQgKi9cbmV4cG9ydCBjb25zdCBfanN4USA9IChcbiAgdHlwZTogYW55LFxuICBtdXRhYmxlOiBhbnksXG4gIGltbXV0YWJsZTogYW55LFxuICBjaGlsZHJlbjogYW55LFxuICBfZmxhZ3M6IGFueSxcbiAga2V5OiBhbnlcbikgPT4ganN4KHR5cGUsIHsgLi4uaW1tdXRhYmxlLCAuLi5tdXRhYmxlLCBjaGlsZHJlbiB9LCBrZXkpOyAvKiogQHByaXZhdGUgKi9cblxuZXhwb3J0IGNvbnN0IFZpcnR1YWw6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgY2hpbGRyZW4/OiBKU1hDaGlsZHJlbjtcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw/OiBzdHJpbmc7XG4gIFtPblJlbmRlclByb3BdPzogUVJMSW50ZXJuYWw8T25SZW5kZXJGbjxhbnk+PjtcbiAgW1FTbG90XT86IHN0cmluZztcbiAgW1FTbG90U10/OiBzdHJpbmc7XG4gIHByb3BzPzogUHJvcHM7XG4gIFtRU2NvcGVkU3R5bGVdPzogc3RyaW5nO1xuICBbRUxFTUVOVF9JRF0/OiBzdHJpbmc7XG59PiA9IChwcm9wczogYW55KSA9PiBwcm9wcy5jaGlsZHJlbjtcbiJdfQ==","import { _jsxSplit, Virtual } from './jsx-internal';\nimport { JSXNodeImpl } from './jsx-node';\n/**\n * Used by the JSX transpilers to create a JSXNode. Note that the optimizer will normally not use\n * this, instead using _jsxSplit and _jsxSorted directly.\n *\n * The optimizer will also replace all `jsx()` calls with the more optimized versions.\n *\n * The exception is when the props are not a literal object, which can only happen when the `jsx`\n * call is written directly.\n *\n * @public\n */\nexport const jsx = (type, props, key, _isStatic, dev) => {\n    return _jsxSplit(type, props, null, null, 0, key, dev);\n};\n/**\n * Alias of `jsx` for development purposes.\n *\n * @public\n */\nexport const jsxDEV = jsx;\n/**\n * Alias of `jsx` to support JSX syntax.\n *\n * @public\n */\nexport const jsxs = jsx;\n/**\n * The legacy transform, used by some JSX transpilers. The optimizer normally replaces this with\n * optimized calls, with the same caveat as `jsx()`.\n *\n * @public\n */\nexport function h(type, props, ...children) {\n    const normalizedProps = {\n        children: arguments.length > 2 ? children.flat(100) : null,\n    };\n    let key = null;\n    for (const i in props) {\n        if (i == 'key') {\n            key = props[i];\n        }\n        else {\n            normalizedProps[i] = props[i];\n        }\n    }\n    return _jsxSplit(type, props, null, normalizedProps.children, 0, key);\n}\n/** @public */\nexport const Fragment = (props) => props.children;\n/** @public */\nexport const RenderOnce = (props, key) => {\n    return new JSXNodeImpl(Virtual, null, null, props.children, 0, key);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LXJ1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2pzeC9qc3gtcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPekM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUNqQixJQUFPLEVBQ1AsS0FBK0QsRUFDL0QsR0FBNEIsRUFDNUIsU0FBbUIsRUFDbkIsR0FBZ0IsRUFDSixFQUFFO0lBQ2QsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBUUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDMUI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUM7QUFFeEI7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsQ0FBQyxDQUNmLElBQVUsRUFDVixLQUFvQixFQUNwQixHQUFHLFFBQWU7SUFFbEIsTUFBTSxlQUFlLEdBQVE7UUFDM0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO0tBQzNELENBQUM7SUFFRixJQUFJLEdBQUcsR0FBUSxJQUFJLENBQUM7SUFFcEIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNmLEdBQUcsR0FBSSxLQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFJLEtBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBTSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsY0FBYztBQUNkLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBd0UsQ0FDM0YsS0FBSyxFQUNMLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBRXBCLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBR2xCLENBQUMsS0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ3ZCLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX2pzeFNwbGl0LCBWaXJ0dWFsIH0gZnJvbSAnLi9qc3gtaW50ZXJuYWwnO1xuaW1wb3J0IHsgSlNYTm9kZUltcGwgfSBmcm9tICcuL2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgRnVuY3Rpb25Db21wb25lbnQsIEpTWE5vZGUgfSBmcm9tICcuL3R5cGVzL2pzeC1ub2RlJztcblxuZXhwb3J0IHR5cGUgeyBRd2lrSlNYIGFzIEpTWCB9IGZyb20gJy4vdHlwZXMvanN4LXF3aWsnO1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIFVzZWQgYnkgdGhlIEpTWCB0cmFuc3BpbGVycyB0byBjcmVhdGUgYSBKU1hOb2RlLiBOb3RlIHRoYXQgdGhlIG9wdGltaXplciB3aWxsIG5vcm1hbGx5IG5vdCB1c2VcbiAqIHRoaXMsIGluc3RlYWQgdXNpbmcgX2pzeFNwbGl0IGFuZCBfanN4U29ydGVkIGRpcmVjdGx5LlxuICpcbiAqIFRoZSBvcHRpbWl6ZXIgd2lsbCBhbHNvIHJlcGxhY2UgYWxsIGBqc3goKWAgY2FsbHMgd2l0aCB0aGUgbW9yZSBvcHRpbWl6ZWQgdmVyc2lvbnMuXG4gKlxuICogVGhlIGV4Y2VwdGlvbiBpcyB3aGVuIHRoZSBwcm9wcyBhcmUgbm90IGEgbGl0ZXJhbCBvYmplY3QsIHdoaWNoIGNhbiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBganN4YFxuICogY2FsbCBpcyB3cml0dGVuIGRpcmVjdGx5LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGpzeCA9IDxUIGV4dGVuZHMgc3RyaW5nIHwgRnVuY3Rpb25Db21wb25lbnQ8YW55Pj4oXG4gIHR5cGU6IFQsXG4gIHByb3BzOiBUIGV4dGVuZHMgRnVuY3Rpb25Db21wb25lbnQ8aW5mZXIgUFJPUFM+ID8gUFJPUFMgOiBQcm9wcyxcbiAga2V5Pzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCxcbiAgX2lzU3RhdGljPzogYm9vbGVhbixcbiAgZGV2PzogSnN4RGV2T3B0c1xuKTogSlNYTm9kZTxUPiA9PiB7XG4gIHJldHVybiBfanN4U3BsaXQodHlwZSwgcHJvcHMsIG51bGwsIG51bGwsIDAsIGtleSwgZGV2KTtcbn07XG5cbmludGVyZmFjZSBKc3hEZXZPcHRzIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgbGluZU51bWJlcjogbnVtYmVyO1xuICBjb2x1bW5OdW1iZXI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBbGlhcyBvZiBganN4YCBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QganN4REVWID0ganN4O1xuLyoqXG4gKiBBbGlhcyBvZiBganN4YCB0byBzdXBwb3J0IEpTWCBzeW50YXguXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QganN4cyA9IGpzeDtcblxuLyoqXG4gKiBUaGUgbGVnYWN5IHRyYW5zZm9ybSwgdXNlZCBieSBzb21lIEpTWCB0cmFuc3BpbGVycy4gVGhlIG9wdGltaXplciBub3JtYWxseSByZXBsYWNlcyB0aGlzIHdpdGhcbiAqIG9wdGltaXplZCBjYWxscywgd2l0aCB0aGUgc2FtZSBjYXZlYXQgYXMgYGpzeCgpYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoPFRZUEUgZXh0ZW5kcyBzdHJpbmcgfCBGdW5jdGlvbkNvbXBvbmVudDxQUk9QUz4sIFBST1BTIGV4dGVuZHMge30gPSB7fT4oXG4gIHR5cGU6IFRZUEUsXG4gIHByb3BzPzogUFJPUFMgfCBudWxsLFxuICAuLi5jaGlsZHJlbjogYW55W11cbik6IEpTWE5vZGU8VFlQRT4ge1xuICBjb25zdCBub3JtYWxpemVkUHJvcHM6IGFueSA9IHtcbiAgICBjaGlsZHJlbjogYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBjaGlsZHJlbi5mbGF0KDEwMCkgOiBudWxsLFxuICB9O1xuXG4gIGxldCBrZXk6IGFueSA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBpIGluIHByb3BzKSB7XG4gICAgaWYgKGkgPT0gJ2tleScpIHtcbiAgICAgIGtleSA9IChwcm9wcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplZFByb3BzW2ldID0gKHByb3BzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfanN4U3BsaXQodHlwZSwgcHJvcHMhLCBudWxsLCBub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4sIDAsIGtleSk7XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgRnJhZ21lbnQ6IEZ1bmN0aW9uQ29tcG9uZW50PHsgY2hpbGRyZW4/OiBhbnk7IGtleT86IHN0cmluZyB8IG51bWJlciB8IG51bGwgfT4gPSAoXG4gIHByb3BzXG4pID0+IHByb3BzLmNoaWxkcmVuO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFJlbmRlck9uY2U6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgY2hpbGRyZW4/OiB1bmtub3duO1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufT4gPSAocHJvcHM6IGFueSwga2V5KSA9PiB7XG4gIHJldHVybiBuZXcgSlNYTm9kZUltcGwoVmlydHVhbCwgbnVsbCwgbnVsbCwgcHJvcHMuY2hpbGRyZW4sIDAsIGtleSk7XG59O1xuIl19","import { QSlotS } from '../utils/markers';\nimport { _jsxSorted, Virtual } from './jsx-internal';\n/**\n * Allows to project the children of the current component. `<Slot/>` can only be used within the\n * context of a component defined with `component$`.\n *\n * @public\n */\nexport const Slot = (props) => {\n    return _jsxSorted(Virtual, null, { [QSlotS]: '' }, props.children, 0, props.name ?? '');\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC5wdWJsaWMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2pzeC9zbG90LnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FHWixDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ2IsT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRU2xvdFMgfSBmcm9tICcuLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IF9qc3hTb3J0ZWQsIFZpcnR1YWwgfSBmcm9tICcuL2pzeC1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWENoaWxkcmVuIH0gZnJvbSAnLi90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcblxuLyoqXG4gKiBBbGxvd3MgdG8gcHJvamVjdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LiBgPFNsb3QvPmAgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gdGhlXG4gKiBjb250ZXh0IG9mIGEgY29tcG9uZW50IGRlZmluZWQgd2l0aCBgY29tcG9uZW50JGAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgU2xvdDogRnVuY3Rpb25Db21wb25lbnQ8e1xuICBuYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEpTWENoaWxkcmVuO1xufT4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIF9qc3hTb3J0ZWQoVmlydHVhbCwgbnVsbCwgeyBbUVNsb3RTXTogJycgfSwgcHJvcHMuY2hpbGRyZW4sIDAsIHByb3BzLm5hbWUgPz8gJycpO1xufTtcbiJdfQ==","import { jsx, RenderOnce } from './jsx-runtime';\n/** @public */\nexport const SkipRender = Symbol('skip render');\n/** @public */\nexport const SSRRaw = () => null;\n/** @public */\nexport const SSRComment = () => null;\n/** @public */\nexport const SSRStreamBlock = (props) => {\n    return props.children;\n};\n/** @public */\nexport const SSRStream = (props, key) => jsx(RenderOnce, { children: jsx(InternalSSRStream, props) }, key);\nexport const InternalSSRStream = () => null;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMucHVibGljLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9qc3gvdXRpbHMucHVibGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSWhELGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVksTUFBTSxDQUFDLGFBQWEsQ0FBUSxDQUFDO0FBRWhFLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQXdDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUV0RSxjQUFjO0FBQ2QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUF3QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFFMUUsY0FBYztBQUNkLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBZ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNuRixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBa0JGLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXNDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3pFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFPcEUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXNDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCwgUmVuZGVyT25jZSB9IGZyb20gJy4vanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHR5cGUgeyBGdW5jdGlvbkNvbXBvbmVudCwgSlNYTm9kZSwgSlNYT3V0cHV0IH0gZnJvbSAnLi90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWENoaWxkcmVuIH0gZnJvbSAnLi90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTa2lwUmVuZGVyOiBKU1hOb2RlID0gU3ltYm9sKCdza2lwIHJlbmRlcicpIGFzIGFueTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTU1JSYXc6IEZ1bmN0aW9uQ29tcG9uZW50PHsgZGF0YTogc3RyaW5nIH0+ID0gKCkgPT4gbnVsbDtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTU1JDb21tZW50OiBGdW5jdGlvbkNvbXBvbmVudDx7IGRhdGE6IHN0cmluZyB9PiA9ICgpID0+IG51bGw7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgU1NSU3RyZWFtQmxvY2s6IEZ1bmN0aW9uQ29tcG9uZW50PHsgY2hpbGRyZW4/OiBKU1hPdXRwdXQgfT4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIHByb3BzLmNoaWxkcmVuO1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFNTUlN0cmVhbVByb3BzID0ge1xuICBjaGlsZHJlbjogU1NSU3RyZWFtQ2hpbGRyZW47XG59O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBTU1JTdHJlYW1Xcml0ZXIge1xuICB3cml0ZShjaHVuazogSlNYT3V0cHV0KTogdm9pZDtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFNTUlN0cmVhbUNoaWxkcmVuID1cbiAgfCBBc3luY0dlbmVyYXRvcjxKU1hDaGlsZHJlbiwgdm9pZCwgYW55PlxuICB8ICgoc3RyZWFtOiBTU1JTdHJlYW1Xcml0ZXIpID0+IFByb21pc2U8dm9pZD4pXG4gIHwgKCgpID0+IEFzeW5jR2VuZXJhdG9yPEpTWENoaWxkcmVuLCB2b2lkLCBhbnk+KTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTU1JTdHJlYW06IEZ1bmN0aW9uQ29tcG9uZW50PFNTUlN0cmVhbVByb3BzPiA9IChwcm9wcywga2V5KSA9PlxuICBqc3goUmVuZGVyT25jZSwgeyBjaGlsZHJlbjoganN4KEludGVybmFsU1NSU3RyZWFtLCBwcm9wcykgfSwga2V5KTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFNTUkhpbnRQcm9wcyA9IHtcbiAgZHluYW1pYz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgSW50ZXJuYWxTU1JTdHJlYW06IEZ1bmN0aW9uQ29tcG9uZW50PFNTUlN0cmVhbVByb3BzPiA9ICgpID0+IG51bGw7XG4iXX0=","import { getAttributeNamespace } from '../../client/vnode-namespace';\nlet _setAttribute = null;\nconst fastSetAttribute = (target, name, value) => {\n    if (!_setAttribute) {\n        _setAttribute = target.setAttribute;\n    }\n    _setAttribute.call(target, name, value);\n};\nlet _setAttributeNS = null;\nconst fastSetAttributeNS = (target, namespace, name, value) => {\n    if (!_setAttributeNS) {\n        _setAttributeNS = target.setAttributeNS;\n    }\n    _setAttributeNS.call(target, namespace, name, value);\n};\nexport function directSetAttribute(element, attrName, attrValue, isSvg) {\n    if (attrValue != null) {\n        if (isSvg) {\n            // only svg elements can have namespace attributes\n            const namespace = getAttributeNamespace(attrName);\n            if (namespace) {\n                fastSetAttributeNS(element, namespace, attrName, attrValue);\n                return;\n            }\n        }\n        fastSetAttribute(element, attrName, attrValue);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9hdHRyaWJ1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckUsSUFBSSxhQUFhLEdBQWlELElBQUksQ0FBQztBQUV2RSxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBZSxFQUFFLElBQVksRUFBRSxLQUFhLEVBQVEsRUFBRTtJQUM5RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRixJQUFJLGVBQWUsR0FBbUQsSUFBSSxDQUFDO0FBRTNFLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsTUFBZSxFQUNmLFNBQWlCLEVBQ2pCLElBQVksRUFDWixLQUFhLEVBQ1AsRUFBRTtJQUNSLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFNBQWMsRUFDZCxLQUFjO0lBRWQsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLGtEQUFrRDtZQUNsRCxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QXR0cmlidXRlTmFtZXNwYWNlIH0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLW5hbWVzcGFjZSc7XG5cbmxldCBfc2V0QXR0cmlidXRlOiB0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlIHwgbnVsbCA9IG51bGw7XG5cbmNvbnN0IGZhc3RTZXRBdHRyaWJ1dGUgPSAodGFyZ2V0OiBFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKCFfc2V0QXR0cmlidXRlKSB7XG4gICAgX3NldEF0dHJpYnV0ZSA9IHRhcmdldC5zZXRBdHRyaWJ1dGU7XG4gIH1cbiAgX3NldEF0dHJpYnV0ZS5jYWxsKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xufTtcblxubGV0IF9zZXRBdHRyaWJ1dGVOUzogdHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TIHwgbnVsbCA9IG51bGw7XG5cbmNvbnN0IGZhc3RTZXRBdHRyaWJ1dGVOUyA9IChcbiAgdGFyZ2V0OiBFbGVtZW50LFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICB2YWx1ZTogc3RyaW5nXG4pOiB2b2lkID0+IHtcbiAgaWYgKCFfc2V0QXR0cmlidXRlTlMpIHtcbiAgICBfc2V0QXR0cmlidXRlTlMgPSB0YXJnZXQuc2V0QXR0cmlidXRlTlM7XG4gIH1cbiAgX3NldEF0dHJpYnV0ZU5TLmNhbGwodGFyZ2V0LCBuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RTZXRBdHRyaWJ1dGUoXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGF0dHJOYW1lOiBzdHJpbmcsXG4gIGF0dHJWYWx1ZTogYW55LFxuICBpc1N2ZzogYm9vbGVhblxuKTogdm9pZCB7XG4gIGlmIChhdHRyVmFsdWUgIT0gbnVsbCkge1xuICAgIGlmIChpc1N2Zykge1xuICAgICAgLy8gb25seSBzdmcgZWxlbWVudHMgY2FuIGhhdmUgbmFtZXNwYWNlIGF0dHJpYnV0ZXNcbiAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IGdldEF0dHJpYnV0ZU5hbWVzcGFjZShhdHRyTmFtZSk7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIGZhc3RTZXRBdHRyaWJ1dGVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGZhc3RTZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gIH1cbn1cbiJdfQ==","export function getFileLocationFromJsx(jsxDev) {\n    if (!jsxDev) {\n        return null;\n    }\n    const sanitizedFileName = jsxDev.fileName?.replace(/\\\\/g, '/');\n    if (sanitizedFileName) {\n        return `${sanitizedFileName}:${jsxDev.lineNumber}:${jsxDev.columnNumber}`;\n    }\n    return null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LWZpbGVuYW1lLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9qc3gtZmlsZW5hbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQWU7SUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXZKU1ggfSBmcm9tICcuLi9qc3gvdHlwZXMvanN4LW5vZGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUxvY2F0aW9uRnJvbUpzeChqc3hEZXY/OiBEZXZKU1gpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFqc3hEZXYpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzYW5pdGl6ZWRGaWxlTmFtZSA9IGpzeERldi5maWxlTmFtZT8ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBpZiAoc2FuaXRpemVkRmlsZU5hbWUpIHtcbiAgICByZXR1cm4gYCR7c2FuaXRpemVkRmlsZU5hbWV9OiR7anN4RGV2LmxpbmVOdW1iZXJ9OiR7anN4RGV2LmNvbHVtbk51bWJlcn1gO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19","import { WrappedSignalImpl } from '../../reactive-primitives/impl/wrapped-signal-impl';\nimport { trackSignalAndAssignHost } from '../../use/use-core';\nimport { JSXNodeImpl } from '../jsx/jsx-node';\nimport { createPropsProxy, directGetPropsProxyProp } from '../jsx/props-proxy';\nimport { _CONST_PROPS, _VAR_PROPS } from './constants';\nimport { NON_SERIALIZABLE_MARKER_PREFIX, QDefaultSlot } from './markers';\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function isSlotProp(prop) {\n    return !prop.startsWith('q:') && !prop.startsWith(NON_SERIALIZABLE_MARKER_PREFIX);\n}\n/** @internal */\nexport const _restProps = (props, omit = [], target = {}) => {\n    let constPropsTarget = null;\n    const constProps = props[_CONST_PROPS];\n    if (constProps) {\n        for (const key in constProps) {\n            if (!omit.includes(key)) {\n                constPropsTarget ||= {};\n                constPropsTarget[key] = constProps[key];\n            }\n        }\n    }\n    const varPropsTarget = target;\n    const varProps = props[_VAR_PROPS];\n    for (const key in varProps) {\n        if (!omit.includes(key)) {\n            varPropsTarget[key] = varProps[key];\n        }\n    }\n    return createPropsProxy(new JSXNodeImpl(null, varPropsTarget, constPropsTarget, null, 0, null));\n};\nexport function resolveSlotName(host, jsx, container) {\n    const constProps = jsx.constProps;\n    if (constProps && typeof constProps == 'object' && _hasOwnProperty.call(constProps, 'name')) {\n        const constValue = constProps.name;\n        if (host && constValue instanceof WrappedSignalImpl) {\n            return trackSignalAndAssignHost(constValue, host, \":\" /* EffectProperty.COMPONENT */, container);\n        }\n    }\n    return directGetPropsProxyProp(jsx, 'name') || QDefaultSlot;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvcHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUV2RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBR2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFFeEQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3BGLENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFpQixFQUFFLEVBQUUsU0FBZ0IsRUFBRSxFQUFFLEVBQUU7SUFDdkYsSUFBSSxnQkFBZ0IsR0FBaUIsSUFBSSxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixnQkFBZ0IsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLGNBQWMsR0FBVSxNQUFNLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRyxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUF3QixFQUN4QixHQUFvQixFQUNwQixTQUFvQjtJQUVwQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ2xDLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxJQUFJLFFBQVEsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzVGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxJQUFJLElBQUksVUFBVSxZQUFZLGlCQUFpQixFQUFFLENBQUM7WUFDcEQsT0FBTyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxzQ0FBNEIsU0FBUyxDQUFDLENBQUM7UUFDekYsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyYXBwZWRTaWduYWxJbXBsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3dyYXBwZWQtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgRWZmZWN0UHJvcGVydHkgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBKU1hOb2RlSW1wbCB9IGZyb20gJy4uL2pzeC9qc3gtbm9kZSc7XG5pbXBvcnQgeyB0eXBlIFByb3BzIH0gZnJvbSAnLi4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZVByb3BzUHJveHksIGRpcmVjdEdldFByb3BzUHJveHlQcm9wLCB0eXBlIFByb3BzUHJveHkgfSBmcm9tICcuLi9qc3gvcHJvcHMtcHJveHknO1xuaW1wb3J0IHR5cGUgeyBKU1hOb2RlSW50ZXJuYWwgfSBmcm9tICcuLi9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIsIEhvc3RFbGVtZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgX0NPTlNUX1BST1BTLCBfVkFSX1BST1BTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTk9OX1NFUklBTElaQUJMRV9NQVJLRVJfUFJFRklYLCBRRGVmYXVsdFNsb3QgfSBmcm9tICcuL21hcmtlcnMnO1xuXG5jb25zdCBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTbG90UHJvcChwcm9wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuICFwcm9wLnN0YXJ0c1dpdGgoJ3E6JykgJiYgIXByb3Auc3RhcnRzV2l0aChOT05fU0VSSUFMSVpBQkxFX01BUktFUl9QUkVGSVgpO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX3Jlc3RQcm9wcyA9IChwcm9wczogUHJvcHNQcm94eSwgb21pdDogc3RyaW5nW10gPSBbXSwgdGFyZ2V0OiBQcm9wcyA9IHt9KSA9PiB7XG4gIGxldCBjb25zdFByb3BzVGFyZ2V0OiBQcm9wcyB8IG51bGwgPSBudWxsO1xuICBjb25zdCBjb25zdFByb3BzID0gcHJvcHNbX0NPTlNUX1BST1BTXTtcbiAgaWYgKGNvbnN0UHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25zdFByb3BzKSB7XG4gICAgICBpZiAoIW9taXQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjb25zdFByb3BzVGFyZ2V0IHx8PSB7fTtcbiAgICAgICAgY29uc3RQcm9wc1RhcmdldFtrZXldID0gY29uc3RQcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCB2YXJQcm9wc1RhcmdldDogUHJvcHMgPSB0YXJnZXQ7XG4gIGNvbnN0IHZhclByb3BzID0gcHJvcHNbX1ZBUl9QUk9QU107XG4gIGZvciAoY29uc3Qga2V5IGluIHZhclByb3BzKSB7XG4gICAgaWYgKCFvbWl0LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHZhclByb3BzVGFyZ2V0W2tleV0gPSB2YXJQcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQcm9wc1Byb3h5KG5ldyBKU1hOb2RlSW1wbChudWxsLCB2YXJQcm9wc1RhcmdldCwgY29uc3RQcm9wc1RhcmdldCwgbnVsbCwgMCwgbnVsbCkpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTbG90TmFtZShcbiAgaG9zdDogSG9zdEVsZW1lbnQgfCBudWxsLFxuICBqc3g6IEpTWE5vZGVJbnRlcm5hbCxcbiAgY29udGFpbmVyOiBDb250YWluZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbnN0UHJvcHMgPSBqc3guY29uc3RQcm9wcztcbiAgaWYgKGNvbnN0UHJvcHMgJiYgdHlwZW9mIGNvbnN0UHJvcHMgPT0gJ29iamVjdCcgJiYgX2hhc093blByb3BlcnR5LmNhbGwoY29uc3RQcm9wcywgJ25hbWUnKSkge1xuICAgIGNvbnN0IGNvbnN0VmFsdWUgPSBjb25zdFByb3BzLm5hbWU7XG4gICAgaWYgKGhvc3QgJiYgY29uc3RWYWx1ZSBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWxJbXBsKSB7XG4gICAgICByZXR1cm4gdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0KGNvbnN0VmFsdWUsIGhvc3QsIEVmZmVjdFByb3BlcnR5LkNPTVBPTkVOVCwgY29udGFpbmVyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpcmVjdEdldFByb3BzUHJveHlQcm9wKGpzeCwgJ25hbWUnKSB8fCBRRGVmYXVsdFNsb3Q7XG59XG4iXX0=","export class DeleteOperation {\n    target;\n    constructor(target) {\n        this.target = target;\n    }\n}\nexport class RemoveAllChildrenOperation {\n    target;\n    constructor(target) {\n        this.target = target;\n    }\n}\nexport class SetTextOperation {\n    target;\n    text;\n    constructor(target, text) {\n        this.target = target;\n        this.text = text;\n    }\n}\nexport class InsertOrMoveOperation {\n    target;\n    parent;\n    beforeTarget;\n    constructor(target, parent, beforeTarget) {\n        this.target = target;\n        this.parent = parent;\n        this.beforeTarget = beforeTarget;\n    }\n}\nexport class SetAttributeOperation {\n    target;\n    attrName;\n    attrValue;\n    scopedStyleIdPrefix;\n    isSvg;\n    constructor(target, attrName, attrValue, scopedStyleIdPrefix, isSvg) {\n        this.target = target;\n        this.attrName = attrName;\n        this.attrValue = attrValue;\n        this.scopedStyleIdPrefix = scopedStyleIdPrefix;\n        this.isSvg = isSvg;\n    }\n}\n/** Factory functions to create operations with consistent hidden classes. */\nexport const createDeleteOperation = (target) => new DeleteOperation(target);\nexport const createRemoveAllChildrenOperation = (target) => new RemoveAllChildrenOperation(target);\nexport const createSetTextOperation = (target, text) => new SetTextOperation(target, text);\nexport const createInsertOrMoveOperation = (target, parent, beforeTarget) => new InsertOrMoveOperation(target, parent, beforeTarget);\nexport const createSetAttributeOperation = (target, attrName, attrValue, scopedStyleIdPrefix = null, isSvg = false) => new SetAttributeOperation(target, attrName, attrValue, scopedStyleIdPrefix, isSvg);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXZub2RlLW9wZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdm5vZGUvdHlwZXMvZG9tLXZub2RlLW9wZXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLE9BQU8sZUFBZTtJQUNQO0lBQW5CLFlBQW1CLE1BQXNCO1FBQXRCLFdBQU0sR0FBTixNQUFNLENBQWdCO0lBQUcsQ0FBQztDQUM5QztBQUVELE1BQU0sT0FBTywwQkFBMEI7SUFDbEI7SUFBbkIsWUFBbUIsTUFBZTtRQUFmLFdBQU0sR0FBTixNQUFNLENBQVM7SUFBRyxDQUFDO0NBQ3ZDO0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUVsQjtJQUNBO0lBRlQsWUFDUyxNQUFZLEVBQ1osSUFBWTtRQURaLFdBQU0sR0FBTixNQUFNLENBQU07UUFDWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQ2xCLENBQUM7Q0FDTDtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFFdkI7SUFDQTtJQUNBO0lBSFQsWUFDUyxNQUFzQixFQUN0QixNQUFlLEVBQ2YsWUFBbUM7UUFGbkMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUNmLGlCQUFZLEdBQVosWUFBWSxDQUF1QjtJQUN6QyxDQUFDO0NBQ0w7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBRXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFMVCxZQUNTLE1BQWUsRUFDZixRQUFnQixFQUNoQixTQUFjLEVBQ2QsbUJBQWtDLEVBQ2xDLEtBQWM7UUFKZCxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFlO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQVM7SUFDcEIsQ0FBQztDQUNMO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBc0IsRUFBbUIsRUFBRSxDQUMvRSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUU5QixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxDQUFDLE1BQWUsRUFBOEIsRUFBRSxDQUM5RixJQUFJLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsTUFBWSxFQUFFLElBQVksRUFBb0IsRUFBRSxDQUNyRixJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxNQUFzQixFQUN0QixNQUFlLEVBQ2YsWUFBbUMsRUFDWixFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRXBGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLE1BQWUsRUFDZixRQUFnQixFQUNoQixTQUFjLEVBQ2Qsc0JBQXFDLElBQUksRUFDekMsUUFBaUIsS0FBSyxFQUNDLEVBQUUsQ0FDekIsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFZOb2RlT3BlcmF0aW9uID1cbiAgfCBEZWxldGVPcGVyYXRpb25cbiAgfCBSZW1vdmVBbGxDaGlsZHJlbk9wZXJhdGlvblxuICB8IFNldFRleHRPcGVyYXRpb25cbiAgfCBJbnNlcnRPck1vdmVPcGVyYXRpb25cbiAgfCBTZXRBdHRyaWJ1dGVPcGVyYXRpb247XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVPcGVyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFyZ2V0OiBFbGVtZW50IHwgVGV4dCkge31cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUFsbENoaWxkcmVuT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhcmdldDogRWxlbWVudCkge31cbn1cblxuZXhwb3J0IGNsYXNzIFNldFRleHRPcGVyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFyZ2V0OiBUZXh0LFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmdcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgSW5zZXJ0T3JNb3ZlT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhcmdldDogRWxlbWVudCB8IFRleHQsXG4gICAgcHVibGljIHBhcmVudDogRWxlbWVudCxcbiAgICBwdWJsaWMgYmVmb3JlVGFyZ2V0OiBFbGVtZW50IHwgVGV4dCB8IG51bGxcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU2V0QXR0cmlidXRlT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhcmdldDogRWxlbWVudCxcbiAgICBwdWJsaWMgYXR0ck5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgYXR0clZhbHVlOiBhbnksXG4gICAgcHVibGljIHNjb3BlZFN0eWxlSWRQcmVmaXg6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIGlzU3ZnOiBib29sZWFuXG4gICkge31cbn1cblxuLyoqIEZhY3RvcnkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBvcGVyYXRpb25zIHdpdGggY29uc2lzdGVudCBoaWRkZW4gY2xhc3Nlcy4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWxldGVPcGVyYXRpb24gPSAodGFyZ2V0OiBFbGVtZW50IHwgVGV4dCk6IERlbGV0ZU9wZXJhdGlvbiA9PlxuICBuZXcgRGVsZXRlT3BlcmF0aW9uKHRhcmdldCk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSZW1vdmVBbGxDaGlsZHJlbk9wZXJhdGlvbiA9ICh0YXJnZXQ6IEVsZW1lbnQpOiBSZW1vdmVBbGxDaGlsZHJlbk9wZXJhdGlvbiA9PlxuICBuZXcgUmVtb3ZlQWxsQ2hpbGRyZW5PcGVyYXRpb24odGFyZ2V0KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNldFRleHRPcGVyYXRpb24gPSAodGFyZ2V0OiBUZXh0LCB0ZXh0OiBzdHJpbmcpOiBTZXRUZXh0T3BlcmF0aW9uID0+XG4gIG5ldyBTZXRUZXh0T3BlcmF0aW9uKHRhcmdldCwgdGV4dCk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbnNlcnRPck1vdmVPcGVyYXRpb24gPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IFRleHQsXG4gIHBhcmVudDogRWxlbWVudCxcbiAgYmVmb3JlVGFyZ2V0OiBFbGVtZW50IHwgVGV4dCB8IG51bGxcbik6IEluc2VydE9yTW92ZU9wZXJhdGlvbiA9PiBuZXcgSW5zZXJ0T3JNb3ZlT3BlcmF0aW9uKHRhcmdldCwgcGFyZW50LCBiZWZvcmVUYXJnZXQpO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2V0QXR0cmlidXRlT3BlcmF0aW9uID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQsXG4gIGF0dHJOYW1lOiBzdHJpbmcsXG4gIGF0dHJWYWx1ZTogYW55LFxuICBzY29wZWRTdHlsZUlkUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgaXNTdmc6IGJvb2xlYW4gPSBmYWxzZVxuKTogU2V0QXR0cmlidXRlT3BlcmF0aW9uID0+XG4gIG5ldyBTZXRBdHRyaWJ1dGVPcGVyYXRpb24odGFyZ2V0LCBhdHRyTmFtZSwgYXR0clZhbHVlLCBzY29wZWRTdHlsZUlkUHJlZml4LCBpc1N2Zyk7XG4iXX0=","import { verifySerializable } from '../shared/serdes/verify';\nimport { ELEMENT_SEQ, ELEMENT_SEQ_IDX } from '../shared/utils/markers';\nimport { qDev } from '../shared/utils/qdev';\nimport { useInvokeContext } from './use-core';\n/**\n * @internal\n * The storage provider for hooks. Each invocation increases index i. Data is stored in an array.\n */\nexport const useSequentialScope = () => {\n    const iCtx = useInvokeContext();\n    const hostElement = iCtx.$hostElement$;\n    const host = hostElement;\n    let seq = iCtx.$container$.getHostProp(host, ELEMENT_SEQ);\n    if (seq === null) {\n        seq = [];\n        iCtx.$container$.setHostProp(host, ELEMENT_SEQ, seq);\n    }\n    let seqIdx = iCtx.$container$.getHostProp(host, ELEMENT_SEQ_IDX);\n    if (seqIdx === null) {\n        seqIdx = 0;\n    }\n    iCtx.$container$.setHostProp(host, ELEMENT_SEQ_IDX, seqIdx + 1);\n    while (seq.length <= seqIdx) {\n        seq.push(undefined);\n    }\n    const set = (value) => {\n        if (qDev) {\n            verifySerializable(value);\n        }\n        return (seq[seqIdx] = value);\n    };\n    return {\n        val: seq[seqIdx],\n        set,\n        i: seqIdx,\n        iCtx,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNlcXVlbnRpYWwtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1zZXF1ZW50aWFsLXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBNEIsTUFBTSxZQUFZLENBQUM7QUFZeEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBMEIsRUFBRTtJQUM1RCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDdkMsTUFBTSxJQUFJLEdBQWdCLFdBQWtCLENBQUM7SUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQVEsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBUyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekUsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7UUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtRQUN2QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1Qsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFJLENBQUMsTUFBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hCLEdBQUc7UUFDSCxDQUFDLEVBQUUsTUFBTTtRQUNULElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmVyaWZ5U2VyaWFsaXphYmxlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcmRlcy92ZXJpZnknO1xuaW1wb3J0IHsgRUxFTUVOVF9TRVEsIEVMRU1FTlRfU0VRX0lEWCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHFEZXYgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQgdHlwZSB7IEhvc3RFbGVtZW50IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IHVzZUludm9rZUNvbnRleHQsIHR5cGUgUmVuZGVySW52b2tlQ29udGV4dCB9IGZyb20gJy4vdXNlLWNvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcXVlbnRpYWxTY29wZTxUPiB7XG4gIC8qKiBUaGUgY3VycmVudGx5IHN0b3JlZCBkYXRhIGZvciB0aGUgaG9vayB0aGF0IGNhbGxzIHRoaXMgKi9cbiAgcmVhZG9ubHkgdmFsOiBUIHwgdW5kZWZpbmVkO1xuICAvKiogU3RvcmUgbmV3IGRhdGEgZm9yIHRoZSBob29rIHRoYXQgY2FsbHMgdGhpcyAqL1xuICByZWFkb25seSBzZXQ6ICh2OiBUKSA9PiBUO1xuICAvKiogSW5kZXggb2YgdGhlIGhvb2sgKi9cbiAgcmVhZG9ubHkgaTogbnVtYmVyO1xuICByZWFkb25seSBpQ3R4OiBSZW5kZXJJbnZva2VDb250ZXh0O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogVGhlIHN0b3JhZ2UgcHJvdmlkZXIgZm9yIGhvb2tzLiBFYWNoIGludm9jYXRpb24gaW5jcmVhc2VzIGluZGV4IGkuIERhdGEgaXMgc3RvcmVkIGluIGFuIGFycmF5LlxuICovXG5leHBvcnQgY29uc3QgdXNlU2VxdWVudGlhbFNjb3BlID0gPFQ+KCk6IFNlcXVlbnRpYWxTY29wZTxUPiA9PiB7XG4gIGNvbnN0IGlDdHggPSB1c2VJbnZva2VDb250ZXh0KCk7XG4gIGNvbnN0IGhvc3RFbGVtZW50ID0gaUN0eC4kaG9zdEVsZW1lbnQkO1xuICBjb25zdCBob3N0OiBIb3N0RWxlbWVudCA9IGhvc3RFbGVtZW50IGFzIGFueTtcbiAgbGV0IHNlcSA9IGlDdHguJGNvbnRhaW5lciQuZ2V0SG9zdFByb3A8YW55W10+KGhvc3QsIEVMRU1FTlRfU0VRKTtcbiAgaWYgKHNlcSA9PT0gbnVsbCkge1xuICAgIHNlcSA9IFtdO1xuICAgIGlDdHguJGNvbnRhaW5lciQuc2V0SG9zdFByb3AoaG9zdCwgRUxFTUVOVF9TRVEsIHNlcSk7XG4gIH1cbiAgbGV0IHNlcUlkeCA9IGlDdHguJGNvbnRhaW5lciQuZ2V0SG9zdFByb3A8bnVtYmVyPihob3N0LCBFTEVNRU5UX1NFUV9JRFgpO1xuICBpZiAoc2VxSWR4ID09PSBudWxsKSB7XG4gICAgc2VxSWR4ID0gMDtcbiAgfVxuICBpQ3R4LiRjb250YWluZXIkLnNldEhvc3RQcm9wKGhvc3QsIEVMRU1FTlRfU0VRX0lEWCwgc2VxSWR4ICsgMSk7XG4gIHdoaWxlIChzZXEubGVuZ3RoIDw9IHNlcUlkeCkge1xuICAgIHNlcS5wdXNoKHVuZGVmaW5lZCk7XG4gIH1cbiAgY29uc3Qgc2V0ID0gKHZhbHVlOiBUKSA9PiB7XG4gICAgaWYgKHFEZXYpIHtcbiAgICAgIHZlcmlmeVNlcmlhbGl6YWJsZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiAoc2VxIVtzZXFJZHghXSA9IHZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHZhbDogc2VxW3NlcUlkeF0sXG4gICAgc2V0LFxuICAgIGk6IHNlcUlkeCxcbiAgICBpQ3R4LFxuICB9O1xufTtcbiJdfQ==","import { isQwikComponent } from '../shared/component.public';\nimport { isFunction } from '../shared/utils/types';\nimport { createSignal } from '../reactive-primitives/signal.public';\nimport { invoke, untrack } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\nconst getSignal = (initialState) => {\n    const value = isFunction(initialState) && !isQwikComponent(initialState)\n        ? invoke(undefined, initialState)\n        : initialState;\n    return createSignal(value);\n};\n// <docs markdown=\"../readme.md#useSignal\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useSignal instead and run `pnpm docs.sync`)\n/**\n * Creates an object with a single reactive `.value` property, that Qwik can track across\n * serializations.\n *\n * Use it to create state for your application. The object has a getter and setter to track reads\n * and writes of the `.value` property. When the value changes, any functions that read from it will\n * re-run.\n *\n * Prefer `useSignal` over `useStore` when possible, as it is more efficient.\n *\n * ### Example\n *\n * ```tsx\n * const Signals = component$(() => {\n *   const counter = useSignal(1);\n *   const text = useSignal('changeme');\n *   const toggle = useSignal(false);\n *\n *   // useSignal() can also accept a function to calculate the initial value\n *   const state = useSignal(() => {\n *     return expensiveInitialValue();\n *   });\n *\n *   return (\n *     <div>\n *       <button onClick$={() => counter.value++}>Counter: {counter.value}</button>\n *       {\n *         // pass signal values as the value, the optimizer will make it pass the signal\n *       }\n *       <Child state={state.value} />\n *       {\n *         // signals can be bound to inputs. A property named `bind:x` implies that the property\n * is a signal\n *       }\n *       <input type=\"text\" bind:value={text} />\n *       <input type=\"checkbox\" bind:checked={toggle} />\n *     </div>\n *   );\n * });\n * ```\n *\n * @public\n */\n// </docs>\nexport const useSignal = (initialState) => {\n    return useConstant((getSignal), initialState);\n};\n/**\n * Stores a value which is retained for the lifetime of the component. Subsequent calls to\n * `useConstant` will always return the first value given.\n *\n * If the value is a function, the function is invoked once to calculate the actual value. You can\n * then also pass arguments to call the function with, so that you don't need to create a new\n * function on every render.\n *\n * @example\n *\n * ```tsx\n * const fixedRandomValue = useConstant(() => Math.random);\n * const otherFixedRandomValue = useConstant(Math.random);\n *\n * const getConfig = (env: string) => { ... }\n * const config = useConstant(getConfig, environment);\n * ```\n *\n * @public\n */\nexport const useConstant = (value, ...args) => {\n    const { val, set } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    // We don't want to create a subscription since we only run this once\n    // Note: We are not using `invoke` here because we don't want to clear the context\n    value = isFunction(value) && !isQwikComponent(value) ? untrack(value, ...args) : value;\n    return set(value);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVE1RCxNQUFNLFNBQVMsR0FBRyxDQUFRLFlBQW9CLEVBQUUsRUFBRTtJQUNoRCxNQUFNLEtBQUssR0FDVCxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQ3hELENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQW1CLENBQUM7UUFDeEMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNuQixPQUFPLFlBQVksQ0FBUSxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MseUNBQXlDO0FBQ3pDLGlFQUFpRTtBQUNqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBYyxDQUFRLFlBQW9CLEVBQWlCLEVBQUU7SUFDakYsT0FBTyxXQUFXLENBQUMsQ0FBQSxTQUFnQixDQUFBLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBcUIsS0FBOEIsRUFBRSxHQUFHLElBQU8sRUFBSyxFQUFFO0lBQy9GLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLEVBQUssQ0FBQztJQUM3QyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxxRUFBcUU7SUFDckUsa0ZBQWtGO0lBQ2xGLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3ZGLE9BQU8sR0FBRyxDQUFDLEtBQVUsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUXdpa0NvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBpbnZva2UsIHVudHJhY2sgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VTaWduYWwge1xuICA8VD4oKTogU2lnbmFsPFQgfCB1bmRlZmluZWQ+O1xuICA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBTaWduYWw8VD47XG59XG5cbmNvbnN0IGdldFNpZ25hbCA9IDxTVEFURT4oaW5pdGlhbFN0YXRlPzogU1RBVEUpID0+IHtcbiAgY29uc3QgdmFsdWUgPVxuICAgIGlzRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSAmJiAhaXNRd2lrQ29tcG9uZW50KGluaXRpYWxTdGF0ZSlcbiAgICAgID8gaW52b2tlKHVuZGVmaW5lZCwgaW5pdGlhbFN0YXRlIGFzIGFueSlcbiAgICAgIDogaW5pdGlhbFN0YXRlO1xuICByZXR1cm4gY3JlYXRlU2lnbmFsPFNUQVRFPih2YWx1ZSk7XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VTaWduYWxcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlU2lnbmFsIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIHJlYWN0aXZlIGAudmFsdWVgIHByb3BlcnR5LCB0aGF0IFF3aWsgY2FuIHRyYWNrIGFjcm9zc1xuICogc2VyaWFsaXphdGlvbnMuXG4gKlxuICogVXNlIGl0IHRvIGNyZWF0ZSBzdGF0ZSBmb3IgeW91ciBhcHBsaWNhdGlvbi4gVGhlIG9iamVjdCBoYXMgYSBnZXR0ZXIgYW5kIHNldHRlciB0byB0cmFjayByZWFkc1xuICogYW5kIHdyaXRlcyBvZiB0aGUgYC52YWx1ZWAgcHJvcGVydHkuIFdoZW4gdGhlIHZhbHVlIGNoYW5nZXMsIGFueSBmdW5jdGlvbnMgdGhhdCByZWFkIGZyb20gaXQgd2lsbFxuICogcmUtcnVuLlxuICpcbiAqIFByZWZlciBgdXNlU2lnbmFsYCBvdmVyIGB1c2VTdG9yZWAgd2hlbiBwb3NzaWJsZSwgYXMgaXQgaXMgbW9yZSBlZmZpY2llbnQuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IFNpZ25hbHMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNpZ25hbCgxKTtcbiAqICAgY29uc3QgdGV4dCA9IHVzZVNpZ25hbCgnY2hhbmdlbWUnKTtcbiAqICAgY29uc3QgdG9nZ2xlID0gdXNlU2lnbmFsKGZhbHNlKTtcbiAqXG4gKiAgIC8vIHVzZVNpZ25hbCgpIGNhbiBhbHNvIGFjY2VwdCBhIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgaW5pdGlhbCB2YWx1ZVxuICogICBjb25zdCBzdGF0ZSA9IHVzZVNpZ25hbCgoKSA9PiB7XG4gKiAgICAgcmV0dXJuIGV4cGVuc2l2ZUluaXRpYWxWYWx1ZSgpO1xuICogICB9KTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxidXR0b24gb25DbGljayQ9eygpID0+IGNvdW50ZXIudmFsdWUrK30+Q291bnRlcjoge2NvdW50ZXIudmFsdWV9PC9idXR0b24+XG4gKiAgICAgICB7XG4gKiAgICAgICAgIC8vIHBhc3Mgc2lnbmFsIHZhbHVlcyBhcyB0aGUgdmFsdWUsIHRoZSBvcHRpbWl6ZXIgd2lsbCBtYWtlIGl0IHBhc3MgdGhlIHNpZ25hbFxuICogICAgICAgfVxuICogICAgICAgPENoaWxkIHN0YXRlPXtzdGF0ZS52YWx1ZX0gLz5cbiAqICAgICAgIHtcbiAqICAgICAgICAgLy8gc2lnbmFscyBjYW4gYmUgYm91bmQgdG8gaW5wdXRzLiBBIHByb3BlcnR5IG5hbWVkIGBiaW5kOnhgIGltcGxpZXMgdGhhdCB0aGUgcHJvcGVydHlcbiAqIGlzIGEgc2lnbmFsXG4gKiAgICAgICB9XG4gKiAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBiaW5kOnZhbHVlPXt0ZXh0fSAvPlxuICogICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGJpbmQ6Y2hlY2tlZD17dG9nZ2xlfSAvPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VTaWduYWw6IFVzZVNpZ25hbCA9IDxTVEFURT4oaW5pdGlhbFN0YXRlPzogU1RBVEUpOiBTaWduYWw8U1RBVEU+ID0+IHtcbiAgcmV0dXJuIHVzZUNvbnN0YW50KGdldFNpZ25hbDxTVEFURT4sIGluaXRpYWxTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN0b3JlcyBhIHZhbHVlIHdoaWNoIGlzIHJldGFpbmVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gU3Vic2VxdWVudCBjYWxscyB0b1xuICogYHVzZUNvbnN0YW50YCB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIGZpcnN0IHZhbHVlIGdpdmVuLlxuICpcbiAqIElmIHRoZSB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZCBvbmNlIHRvIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIHZhbHVlLiBZb3UgY2FuXG4gKiB0aGVuIGFsc28gcGFzcyBhcmd1bWVudHMgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCwgc28gdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBuZXdcbiAqIGZ1bmN0aW9uIG9uIGV2ZXJ5IHJlbmRlci5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogY29uc3QgZml4ZWRSYW5kb21WYWx1ZSA9IHVzZUNvbnN0YW50KCgpID0+IE1hdGgucmFuZG9tKTtcbiAqIGNvbnN0IG90aGVyRml4ZWRSYW5kb21WYWx1ZSA9IHVzZUNvbnN0YW50KE1hdGgucmFuZG9tKTtcbiAqXG4gKiBjb25zdCBnZXRDb25maWcgPSAoZW52OiBzdHJpbmcpID0+IHsgLi4uIH1cbiAqIGNvbnN0IGNvbmZpZyA9IHVzZUNvbnN0YW50KGdldENvbmZpZywgZW52aXJvbm1lbnQpO1xuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXNlQ29uc3RhbnQgPSA8VCwgQSBleHRlbmRzIGFueVtdPih2YWx1ZTogKCguLi5hcmdzOiBBKSA9PiBUKSB8IFQsIC4uLmFyZ3M6IEEpOiBUID0+IHtcbiAgY29uc3QgeyB2YWwsIHNldCB9ID0gdXNlU2VxdWVudGlhbFNjb3BlPFQ+KCk7XG4gIGlmICh2YWwgIT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBzdWJzY3JpcHRpb24gc2luY2Ugd2Ugb25seSBydW4gdGhpcyBvbmNlXG4gIC8vIE5vdGU6IFdlIGFyZSBub3QgdXNpbmcgYGludm9rZWAgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY2xlYXIgdGhlIGNvbnRleHRcbiAgdmFsdWUgPSBpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNRd2lrQ29tcG9uZW50KHZhbHVlKSA/IHVudHJhY2sodmFsdWUsIC4uLmFyZ3MpIDogdmFsdWU7XG4gIHJldHVybiBzZXQodmFsdWUgYXMgVCk7XG59O1xuIl19","import { vnode_getProp, vnode_setProp } from '../client/vnode-utils';\nimport { createSignal } from '../reactive-primitives/signal.public';\nimport { QCursorBoundary, NEAREST_CURSOR_BOUNDARY } from '../shared/utils/markers';\nimport { useConstant } from './use-signal';\nconst createCursorBoundary = () => {\n    return {\n        pending: createSignal(0),\n        version: createSignal(0),\n    };\n};\n/** @internal */\nexport const useCursorBoundary = () => {\n    if (!__EXPERIMENTAL__.suspense) {\n        throw new Error('useCursorBoundary is experimental and must be enabled with `experimental: [\"suspense\"]` in the `qwikVite` plugin.');\n    }\n    return useConstant(createCursorBoundary);\n};\nexport function addCursorBoundary(cursorData, vNode) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return;\n    }\n    const boundary = getNearestCursorBoundary(cursorData.container, vNode);\n    if (!boundary) {\n        return;\n    }\n    const boundaries = (cursorData.boundaries ||= []);\n    if (!boundaries.includes(boundary)) {\n        boundaries.push(boundary);\n        boundary.pending.value++;\n    }\n}\nexport function resolveCursorBoundaries(cursorData) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return;\n    }\n    const boundaries = cursorData.boundaries;\n    if (!boundaries) {\n        return;\n    }\n    cursorData.boundaries = null;\n    for (let i = 0; i < boundaries.length; i++) {\n        const boundary = boundaries[i];\n        boundary.pending.value = Math.max(0, boundary.pending.value - 1);\n        boundary.version.value++;\n    }\n}\nexport function getOwnCursorBoundary(container, vNode) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return null;\n    }\n    return container.getHostProp(vNode, QCursorBoundary);\n}\nexport function getNearestCursorBoundaryProp(vNode) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return null;\n    }\n    return (vnode_getProp(vNode, NEAREST_CURSOR_BOUNDARY, null) ||\n        null);\n}\nexport function clearNearestCursorBoundary(vNode) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return;\n    }\n    vnode_setProp(vNode, NEAREST_CURSOR_BOUNDARY, null);\n}\nexport function getNearestCursorBoundary(container, vNode) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return null;\n    }\n    return getNearestCursorBoundaryProp(vNode) || getOwnCursorBoundary(container, vNode);\n}\nexport function setNearestCursorBoundary(vNode, boundary) {\n    __EXPERIMENTAL__.suspense && vnode_setProp(vNode, NEAREST_CURSOR_BOUNDARY, boundary);\n}\n/** Updates the nearest cursor boundary cache on a vnode and any already-dirty descendants. */\nexport function updateDirtySubtreeCursorBoundary(container, vNode, boundary) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return;\n    }\n    setNearestCursorBoundary(vNode, boundary);\n    const dirtyChildren = vNode.dirtyChildren;\n    if (!dirtyChildren || dirtyChildren.length === 0) {\n        return;\n    }\n    for (let i = 0; i < dirtyChildren.length; i++) {\n        const child = dirtyChildren[i];\n        updateDirtySubtreeCursorBoundary(container, child, getOwnCursorBoundary(container, child) || boundary);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWN1cnNvci1ib3VuZGFyeS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLWN1cnNvci1ib3VuZGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxzQ0FBc0MsQ0FBQztBQUdqRixPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVEzQyxNQUFNLG9CQUFvQixHQUFHLEdBQW1CLEVBQUU7SUFDaEQsT0FBTztRQUNMLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBbUIsRUFBRTtJQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYixtSEFBbUgsQ0FDcEgsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxVQUFzQixFQUFFLEtBQVk7SUFDcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxP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QyxDQUFDO0lBRTFDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDMUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsZ0NBQWdDLENBQzlCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsb0JBQW9CLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FDbkQsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdm5vZGVfZ2V0UHJvcCwgdm5vZGVfc2V0UHJvcCB9IGZyb20gJy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVTaWduYWwsIHR5cGUgU2lnbmFsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmltcG9ydCB0eXBlIHsgQ3Vyc29yRGF0YSB9IGZyb20gJy4uL3NoYXJlZC9jdXJzb3IvY3Vyc29yLXByb3BzJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFFDdXJzb3JCb3VuZGFyeSwgTkVBUkVTVF9DVVJTT1JfQk9VTkRBUlkgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlJztcbmltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi91c2Utc2lnbmFsJztcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXJzb3JCb3VuZGFyeSB7XG4gIHBlbmRpbmc6IFNpZ25hbDxudW1iZXI+O1xuICB2ZXJzaW9uOiBTaWduYWw8bnVtYmVyPjtcbn1cblxuY29uc3QgY3JlYXRlQ3Vyc29yQm91bmRhcnkgPSAoKTogQ3Vyc29yQm91bmRhcnkgPT4ge1xuICByZXR1cm4ge1xuICAgIHBlbmRpbmc6IGNyZWF0ZVNpZ25hbCgwKSxcbiAgICB2ZXJzaW9uOiBjcmVhdGVTaWduYWwoMCksXG4gIH07XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdXNlQ3Vyc29yQm91bmRhcnkgPSAoKTogQ3Vyc29yQm91bmRhcnkgPT4ge1xuICBpZiAoIV9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlQ3Vyc29yQm91bmRhcnkgaXMgZXhwZXJpbWVudGFsIGFuZCBtdXN0IGJlIGVuYWJsZWQgd2l0aCBgZXhwZXJpbWVudGFsOiBbXCJzdXNwZW5zZVwiXWAgaW4gdGhlIGBxd2lrVml0ZWAgcGx1Z2luLidcbiAgICApO1xuICB9XG4gIHJldHVybiB1c2VDb25zdGFudChjcmVhdGVDdXJzb3JCb3VuZGFyeSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ3Vyc29yQm91bmRhcnkoY3Vyc29yRGF0YTogQ3Vyc29yRGF0YSwgdk5vZGU6IFZOb2RlKTogdm9pZCB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBib3VuZGFyeSA9IGdldE5lYXJlc3RDdXJzb3JCb3VuZGFyeShjdXJzb3JEYXRhLmNvbnRhaW5lciwgdk5vZGUpO1xuICBpZiAoIWJvdW5kYXJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGJvdW5kYXJpZXMgPSAoY3Vyc29yRGF0YS5ib3VuZGFyaWVzIHx8PSBbXSk7XG4gIGlmICghYm91bmRhcmllcy5pbmNsdWRlcyhib3VuZGFyeSkpIHtcbiAgICBib3VuZGFyaWVzLnB1c2goYm91bmRhcnkpO1xuICAgIGJvdW5kYXJ5LnBlbmRpbmcudmFsdWUrKztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUN1cnNvckJvdW5kYXJpZXMoY3Vyc29yRGF0YTogQ3Vyc29yRGF0YSk6IHZvaWQge1xuICBpZiAoIV9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYm91bmRhcmllcyA9IGN1cnNvckRhdGEuYm91bmRhcmllcztcbiAgaWYgKCFib3VuZGFyaWVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGN1cnNvckRhdGEuYm91bmRhcmllcyA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYm91bmRhcmllcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYm91bmRhcmllc1tpXTtcbiAgICBib3VuZGFyeS5wZW5kaW5nLnZhbHVlID0gTWF0aC5tYXgoMCwgYm91bmRhcnkucGVuZGluZy52YWx1ZSAtIDEpO1xuICAgIGJvdW5kYXJ5LnZlcnNpb24udmFsdWUrKztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duQ3Vyc29yQm91bmRhcnkoY29udGFpbmVyOiBDb250YWluZXIsIHZOb2RlOiBWTm9kZSk6IEN1cnNvckJvdW5kYXJ5IHwgbnVsbCB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjb250YWluZXIuZ2V0SG9zdFByb3A8Q3Vyc29yQm91bmRhcnk+KHZOb2RlIGFzIGFueSwgUUN1cnNvckJvdW5kYXJ5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RDdXJzb3JCb3VuZGFyeVByb3Aodk5vZGU6IFZOb2RlKTogQ3Vyc29yQm91bmRhcnkgfCBudWxsIHtcbiAgaWYgKCFfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAodm5vZGVfZ2V0UHJvcCh2Tm9kZSwgTkVBUkVTVF9DVVJTT1JfQk9VTkRBUlksIG51bGwpIGFzIEN1cnNvckJvdW5kYXJ5IHwgbnVsbCB8IHVuZGVmaW5lZCkgfHxcbiAgICBudWxsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck5lYXJlc3RDdXJzb3JCb3VuZGFyeSh2Tm9kZTogVk5vZGUpOiB2b2lkIHtcbiAgaWYgKCFfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZub2RlX3NldFByb3Aodk5vZGUsIE5FQVJFU1RfQ1VSU09SX0JPVU5EQVJZLCBudWxsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RDdXJzb3JCb3VuZGFyeShcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIHZOb2RlOiBWTm9kZVxuKTogQ3Vyc29yQm91bmRhcnkgfCBudWxsIHtcbiAgaWYgKCFfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RDdXJzb3JCb3VuZGFyeVByb3Aodk5vZGUpIHx8IGdldE93bkN1cnNvckJvdW5kYXJ5KGNvbnRhaW5lciwgdk5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVhcmVzdEN1cnNvckJvdW5kYXJ5KHZOb2RlOiBWTm9kZSwgYm91bmRhcnk6IEN1cnNvckJvdW5kYXJ5IHwgbnVsbCk6IHZvaWQge1xuICBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIHZub2RlX3NldFByb3Aodk5vZGUsIE5FQVJFU1RfQ1VSU09SX0JPVU5EQVJZLCBib3VuZGFyeSk7XG59XG5cbi8qKiBVcGRhdGVzIHRoZSBuZWFyZXN0IGN1cnNvciBib3VuZGFyeSBjYWNoZSBvbiBhIHZub2RlIGFuZCBhbnkgYWxyZWFkeS1kaXJ0eSBkZXNjZW5kYW50cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEaXJ0eVN1YnRyZWVDdXJzb3JCb3VuZGFyeShcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIHZOb2RlOiBWTm9kZSxcbiAgYm91bmRhcnk6IEN1cnNvckJvdW5kYXJ5IHwgbnVsbFxuKTogdm9pZCB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBzZXROZWFyZXN0Q3Vyc29yQm91bmRhcnkodk5vZGUsIGJvdW5kYXJ5KTtcblxuICBjb25zdCBkaXJ0eUNoaWxkcmVuID0gdk5vZGUuZGlydHlDaGlsZHJlbjtcbiAgaWYgKCFkaXJ0eUNoaWxkcmVuIHx8IGRpcnR5Q2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXJ0eUNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSBkaXJ0eUNoaWxkcmVuW2ldO1xuICAgIHVwZGF0ZURpcnR5U3VidHJlZUN1cnNvckJvdW5kYXJ5KFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY2hpbGQsXG4gICAgICBnZXRPd25DdXJzb3JCb3VuZGFyeShjb250YWluZXIsIGNoaWxkKSB8fCBib3VuZGFyeVxuICAgICk7XG4gIH1cbn1cbiJdfQ==","import { logError } from '../../shared/utils/log';\nimport { isPromise } from '../../shared/utils/promises';\nexport const cleanupDestroyable = (destroyable) => {\n    if (destroyable.$destroy$) {\n        try {\n            destroyable.$destroy$();\n        }\n        catch (err) {\n            logError(err);\n        }\n        destroyable.$destroy$ = null;\n    }\n};\nexport const cleanupAsyncDestroyable = (destroyable, handleError) => {\n    const pendingCleanup = destroyable.$destroyPromise$;\n    if (pendingCleanup) {\n        return pendingCleanup;\n    }\n    const cleanup = destroyable.$destroy$;\n    if (!cleanup) {\n        return;\n    }\n    destroyable.$destroy$ = null;\n    try {\n        const result = cleanup();\n        if (isPromise(result)) {\n            const cleanupPromise = Promise.resolve(result)\n                .then(() => undefined, (err) => {\n                handleError(err);\n            })\n                .finally(() => {\n                if (destroyable.$destroyPromise$ === cleanupPromise) {\n                    destroyable.$destroyPromise$ = undefined;\n                }\n            });\n            destroyable.$destroyPromise$ = cleanupPromise;\n            return cleanupPromise;\n        }\n    }\n    catch (err) {\n        handleError(err);\n    }\n    return;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveWFibGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3V0aWxzL2Rlc3Ryb3lhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFNeEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLEVBQUU7SUFDN0QsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsV0FBNkIsRUFDN0IsV0FBc0MsRUFDaEIsRUFBRTtJQUN4QixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDcEQsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPO0lBQ1QsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBRTdCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxjQUFjLEdBQWtCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2lCQUMxRCxJQUFJLENBQ0gsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUNmLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FDRjtpQkFDQSxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksV0FBVyxDQUFDLGdCQUFnQixLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNwRCxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1lBQzlDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTztBQUNULENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzL2xvZyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIERlc3Ryb3lhYmxlID0geyAkZGVzdHJveSQ6ICgoKSA9PiB2b2lkKSB8IG51bGwgfTtcbmV4cG9ydCB0eXBlIEFzeW5jRGVzdHJveWFibGUgPSBEZXN0cm95YWJsZSAmIHsgJGRlc3Ryb3lQcm9taXNlJD86IFByb21pc2U8dm9pZD4gfTtcblxuZXhwb3J0IGNvbnN0IGNsZWFudXBEZXN0cm95YWJsZSA9IChkZXN0cm95YWJsZTogRGVzdHJveWFibGUpID0+IHtcbiAgaWYgKGRlc3Ryb3lhYmxlLiRkZXN0cm95JCkge1xuICAgIHRyeSB7XG4gICAgICBkZXN0cm95YWJsZS4kZGVzdHJveSQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ0Vycm9yKGVycik7XG4gICAgfVxuICAgIGRlc3Ryb3lhYmxlLiRkZXN0cm95JCA9IG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhbnVwQXN5bmNEZXN0cm95YWJsZSA9IChcbiAgZGVzdHJveWFibGU6IEFzeW5jRGVzdHJveWFibGUsXG4gIGhhbmRsZUVycm9yOiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkXG4pOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHBlbmRpbmdDbGVhbnVwID0gZGVzdHJveWFibGUuJGRlc3Ryb3lQcm9taXNlJDtcbiAgaWYgKHBlbmRpbmdDbGVhbnVwKSB7XG4gICAgcmV0dXJuIHBlbmRpbmdDbGVhbnVwO1xuICB9XG5cbiAgY29uc3QgY2xlYW51cCA9IGRlc3Ryb3lhYmxlLiRkZXN0cm95JDtcbiAgaWYgKCFjbGVhbnVwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVzdHJveWFibGUuJGRlc3Ryb3kkID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNsZWFudXAoKTtcbiAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgIGNvbnN0IGNsZWFudXBQcm9taXNlOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAoZGVzdHJveWFibGUuJGRlc3Ryb3lQcm9taXNlJCA9PT0gY2xlYW51cFByb21pc2UpIHtcbiAgICAgICAgICAgIGRlc3Ryb3lhYmxlLiRkZXN0cm95UHJvbWlzZSQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIGRlc3Ryb3lhYmxlLiRkZXN0cm95UHJvbWlzZSQgPSBjbGVhbnVwUHJvbWlzZTtcbiAgICAgIHJldHVybiBjbGVhbnVwUHJvbWlzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGhhbmRsZUVycm9yKGVycik7XG4gIH1cblxuICByZXR1cm47XG59O1xuIl19","import { isDev } from '@qwik.dev/core/build';\nimport { _captures, deserializeCaptures, setCaptures, } from '../shared/qrl/qrl-class';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { ITERATION_ITEM_MULTI, ITERATION_ITEM_SINGLE } from '../shared/utils/markers';\nimport { retryOnPromise } from '../shared/utils/promises';\nimport { invokeApply, newInvokeContextFromDOM } from '../use/use-core';\nimport { vnode_ensureElementInflated, vnode_getProp } from './vnode-utils';\n/**\n * This safely calls an event handler, handling errors and retrying on thrown Promises, and\n * providing extra parameters defined on the elements as arguments (used for loop optimization)\n */\nexport function runEventHandlerQRL(handler, event, element, ctx) {\n    if (!element.isConnected) {\n        // ignore events on disconnected elements, this can happen when the event is triggered while the element is being removed\n        return;\n    }\n    if (!ctx) {\n        ctx = newInvokeContextFromDOM(event, element);\n    }\n    const container = ctx.$container$;\n    const hostElement = ctx.$hostElement$;\n    vnode_ensureElementInflated(container, hostElement);\n    let realHandler = handler;\n    if (hostElement.flags & 64 /* VNodeFlags.HasIterationItems */) {\n        let shouldInflate;\n        if (!(hostElement.flags & 128 /* VNodeFlags.InflatedIterationItems */)) {\n            shouldInflate = true;\n            hostElement.flags |= 128 /* VNodeFlags.InflatedIterationItems */;\n        }\n        const getObj = shouldInflate ? container.$getObjectById$ : null;\n        const singleItem = vnode_getProp(hostElement, ITERATION_ITEM_SINGLE, getObj);\n        if (singleItem !== null) {\n            realHandler = (() => handler(event, element, singleItem));\n        }\n        else {\n            const multiItems = vnode_getProp(hostElement, ITERATION_ITEM_MULTI, getObj);\n            if (multiItems !== null) {\n                realHandler = (() => handler(event, element, ...multiItems));\n            }\n        }\n    }\n    return retryOnPromise(() => {\n        // Check if the host element was deleted while waiting for the promise to resolve\n        if (!(hostElement.flags & 32 /* VNodeFlags.Deleted */)) {\n            return invokeApply(ctx, realHandler, [event, element]);\n        }\n    }, (err) => container.handleError(err, hostElement));\n}\n/**\n * This is called by qwik-loader to run a QRL. It has to be synchronous when possible.\n *\n * @internal\n */\nexport function _run(event, element) {\n    if (!element.isConnected) {\n        // ignore events on disconnected elements, this can happen when the event is triggered while the element is being removed\n        return;\n    }\n    const ctx = newInvokeContextFromDOM(event, element);\n    if (typeof this === 'string') {\n        setCaptures(deserializeCaptures(ctx.$container$, this));\n    }\n    const qrlToRun = _captures[0];\n    isDev && assertQrl(qrlToRun);\n    return runEventHandlerQRL(qrlToRun, event, element, ctx);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXFybC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvcnVuLXFybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsV0FBVyxHQUVaLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLGlCQUFpQixDQUFDO0FBRTNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0U7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUFzQyxFQUN0QyxLQUFZLEVBQ1osT0FBZ0IsRUFDaEIsR0FBbUI7SUFFbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6Qix5SEFBeUg7UUFDekgsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxHQUFHLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsV0FBWSxDQUFDO0lBQ25DLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxhQUE2QixDQUFDO0lBQ3RELDJCQUEyQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFFMUIsSUFBSSxXQUFXLENBQUMsS0FBSyx3Q0FBK0IsRUFBRSxDQUFDO1FBQ3JELElBQUksYUFBa0MsQ0FBQztRQUN2QyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyw4Q0FBb0MsQ0FBQyxFQUFFLENBQUM7WUFDN0QsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQixXQUFXLENBQUMsS0FBSywrQ0FBcUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFVLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RixJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4QixXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBbUIsQ0FBQztRQUM5RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBWSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkYsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLFdBQVcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQW1CLENBQUM7WUFDakYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxjQUFjLENBQ25CLEdBQUcsRUFBRTtRQUNILGlGQUFpRjtRQUNqRixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyw4QkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUNqRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFlLEtBQVksRUFBRSxPQUFnQjtJQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLHlIQUF5SDtRQUN6SCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLFNBQVUsQ0FBQyxDQUFDLENBQTBDLENBQUM7SUFDeEUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixPQUFPLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7XG4gIF9jYXB0dXJlcyxcbiAgZGVzZXJpYWxpemVDYXB0dXJlcyxcbiAgc2V0Q2FwdHVyZXMsXG4gIHR5cGUgUVJMSW50ZXJuYWwsXG59IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGFzc2VydFFybCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IElURVJBVElPTl9JVEVNX01VTFRJLCBJVEVSQVRJT05fSVRFTV9TSU5HTEUgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyByZXRyeU9uUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFZOb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL2VsZW1lbnQtdm5vZGUnO1xuaW1wb3J0IHsgaW52b2tlQXBwbHksIG5ld0ludm9rZUNvbnRleHRGcm9tRE9NLCB0eXBlIEludm9rZUNvbnRleHQgfSBmcm9tICcuLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHsgVk5vZGVGbGFncyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkLCB2bm9kZV9nZXRQcm9wIH0gZnJvbSAnLi92bm9kZS11dGlscyc7XG5cbi8qKlxuICogVGhpcyBzYWZlbHkgY2FsbHMgYW4gZXZlbnQgaGFuZGxlciwgaGFuZGxpbmcgZXJyb3JzIGFuZCByZXRyeWluZyBvbiB0aHJvd24gUHJvbWlzZXMsIGFuZFxuICogcHJvdmlkaW5nIGV4dHJhIHBhcmFtZXRlcnMgZGVmaW5lZCBvbiB0aGUgZWxlbWVudHMgYXMgYXJndW1lbnRzICh1c2VkIGZvciBsb29wIG9wdGltaXphdGlvbilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkV2ZW50SGFuZGxlclFSTChcbiAgaGFuZGxlcjogUVJMPCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4sXG4gIGV2ZW50OiBFdmVudCxcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgY3R4PzogSW52b2tlQ29udGV4dFxuKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAvLyBpZ25vcmUgZXZlbnRzIG9uIGRpc2Nvbm5lY3RlZCBlbGVtZW50cywgdGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGlsZSB0aGUgZWxlbWVudCBpcyBiZWluZyByZW1vdmVkXG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghY3R4KSB7XG4gICAgY3R4ID0gbmV3SW52b2tlQ29udGV4dEZyb21ET00oZXZlbnQsIGVsZW1lbnQpO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lciA9IGN0eC4kY29udGFpbmVyJCE7XG4gIGNvbnN0IGhvc3RFbGVtZW50ID0gY3R4LiRob3N0RWxlbWVudCQgYXMgRWxlbWVudFZOb2RlO1xuICB2bm9kZV9lbnN1cmVFbGVtZW50SW5mbGF0ZWQoY29udGFpbmVyLCBob3N0RWxlbWVudCk7XG4gIGxldCByZWFsSGFuZGxlciA9IGhhbmRsZXI7XG5cbiAgaWYgKGhvc3RFbGVtZW50LmZsYWdzICYgVk5vZGVGbGFncy5IYXNJdGVyYXRpb25JdGVtcykge1xuICAgIGxldCBzaG91bGRJbmZsYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGlmICghKGhvc3RFbGVtZW50LmZsYWdzICYgVk5vZGVGbGFncy5JbmZsYXRlZEl0ZXJhdGlvbkl0ZW1zKSkge1xuICAgICAgc2hvdWxkSW5mbGF0ZSA9IHRydWU7XG4gICAgICBob3N0RWxlbWVudC5mbGFncyB8PSBWTm9kZUZsYWdzLkluZmxhdGVkSXRlcmF0aW9uSXRlbXM7XG4gICAgfVxuICAgIGNvbnN0IGdldE9iaiA9IHNob3VsZEluZmxhdGUgPyBjb250YWluZXIuJGdldE9iamVjdEJ5SWQkIDogbnVsbDtcbiAgICBjb25zdCBzaW5nbGVJdGVtID0gdm5vZGVfZ2V0UHJvcDx1bmtub3duPihob3N0RWxlbWVudCwgSVRFUkFUSU9OX0lURU1fU0lOR0xFLCBnZXRPYmopO1xuICAgIGlmIChzaW5nbGVJdGVtICE9PSBudWxsKSB7XG4gICAgICByZWFsSGFuZGxlciA9ICgoKSA9PiBoYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBzaW5nbGVJdGVtKSkgYXMgdHlwZW9mIGhhbmRsZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG11bHRpSXRlbXMgPSB2bm9kZV9nZXRQcm9wPHVua25vd25bXT4oaG9zdEVsZW1lbnQsIElURVJBVElPTl9JVEVNX01VTFRJLCBnZXRPYmopO1xuICAgICAgaWYgKG11bHRpSXRlbXMgIT09IG51bGwpIHtcbiAgICAgICAgcmVhbEhhbmRsZXIgPSAoKCkgPT4gaGFuZGxlcihldmVudCwgZWxlbWVudCwgLi4ubXVsdGlJdGVtcykpIGFzIHR5cGVvZiBoYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRyeU9uUHJvbWlzZShcbiAgICAoKSA9PiB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgaG9zdCBlbGVtZW50IHdhcyBkZWxldGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmVcbiAgICAgIGlmICghKGhvc3RFbGVtZW50LmZsYWdzICYgVk5vZGVGbGFncy5EZWxldGVkKSkge1xuICAgICAgICByZXR1cm4gaW52b2tlQXBwbHkoY3R4LCByZWFsSGFuZGxlciwgW2V2ZW50LCBlbGVtZW50XSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAoZXJyKSA9PiBjb250YWluZXIuaGFuZGxlRXJyb3IoZXJyLCBob3N0RWxlbWVudClcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGNhbGxlZCBieSBxd2lrLWxvYWRlciB0byBydW4gYSBRUkwuIEl0IGhhcyB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHBvc3NpYmxlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3J1bih0aGlzOiBzdHJpbmcsIGV2ZW50OiBFdmVudCwgZWxlbWVudDogRWxlbWVudCk6IFZhbHVlT3JQcm9taXNlPHVua25vd24+IHtcbiAgaWYgKCFlbGVtZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgLy8gaWdub3JlIGV2ZW50cyBvbiBkaXNjb25uZWN0ZWQgZWxlbWVudHMsIHRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgd2hpbGUgdGhlIGVsZW1lbnQgaXMgYmVpbmcgcmVtb3ZlZFxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjdHggPSBuZXdJbnZva2VDb250ZXh0RnJvbURPTShldmVudCwgZWxlbWVudCk7XG4gIGlmICh0eXBlb2YgdGhpcyA9PT0gJ3N0cmluZycpIHtcbiAgICBzZXRDYXB0dXJlcyhkZXNlcmlhbGl6ZUNhcHR1cmVzKGN0eC4kY29udGFpbmVyJCEsIHRoaXMpKTtcbiAgfVxuICBjb25zdCBxcmxUb1J1biA9IF9jYXB0dXJlcyFbMF0gYXMgUVJMSW50ZXJuYWw8KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPjtcbiAgaXNEZXYgJiYgYXNzZXJ0UXJsKHFybFRvUnVuKTtcbiAgcmV0dXJuIHJ1bkV2ZW50SGFuZGxlclFSTChxcmxUb1J1biwgZXZlbnQsIGVsZW1lbnQsIGN0eCk7XG59XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { qTest } from '../shared/utils/qdev';\nimport { _EFFECT_BACK_REF } from '../reactive-primitives/backref';\nimport { clearAllEffects, clearEffectSubscription } from '../reactive-primitives/cleanup';\nimport { AsyncSignalImpl } from '../reactive-primitives/impl/async-signal-impl';\nimport { SignalImpl } from '../reactive-primitives/impl/signal-impl';\nimport { isStore } from '../reactive-primitives/impl/store';\nimport { WrappedSignalImpl } from '../reactive-primitives/impl/wrapped-signal-impl';\nimport { SubscriptionData } from '../reactive-primitives/subscription-data';\nimport { isSignal } from '../reactive-primitives/utils';\nimport { SERIALIZABLE_STATE } from '../shared/component.public';\nimport { isCursor } from '../shared/cursor/cursor';\nimport { abandonCursor } from '../shared/cursor/cursor-queue';\nimport { getCursorData } from '../shared/cursor/cursor-props';\nimport { assertDefined, assertFalse, assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { JSXNodeImpl, isJSXNode } from '../shared/jsx/jsx-node';\nimport { Fragment } from '../shared/jsx/jsx-runtime';\nimport { directGetPropsProxyProp, triggerPropsProxyEffect, } from '../shared/jsx/props-proxy';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { SSRComment, SSRRaw, SkipRender } from '../shared/jsx/utils.public';\nimport { DEBUG_TYPE } from '../shared/types';\nimport { directSetAttribute } from '../shared/utils/attribute';\nimport { escapeHTML } from '../shared/utils/character-escaping';\nimport { _CONST_PROPS, _OWNER, _PROPS_HANDLER, _VAR_PROPS } from '../shared/utils/constants';\nimport { isHtmlAttributeAnEventName } from '../shared/utils/event-names';\nimport { getFileLocationFromJsx } from '../shared/utils/jsx-filename';\nimport { ELEMENT_PROPS, ELEMENT_SEQ, ITERATION_ITEM_MULTI, ITERATION_ITEM_SINGLE, OnRenderProp, QBackRefs, QContainerAttr, QDefaultSlot, QCursorBoundary, QSlot, QTemplate, dangerouslySetInnerHTML, debugStyleScopeIdPrefixAttr, } from '../shared/utils/markers';\nimport { isPromise, retryOnPromise } from '../shared/utils/promises';\nimport { isSlotProp, resolveSlotName } from '../shared/utils/prop';\nimport { serializeAttribute } from '../shared/utils/styles';\nimport { isArray, isObject } from '../shared/utils/types';\nimport { createSetAttributeOperation } from '../shared/vnode/types/dom-vnode-operation';\nimport { addVNodeOperation, markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { updateDirtySubtreeCursorBoundary } from '../use/use-cursor-boundary';\nimport { trackSignalAndAssignHost } from '../use/use-core';\nimport { isTask } from '../use/use-task';\nimport { cleanupDestroyable } from '../use/utils/destroyable';\nimport { runEventHandlerQRL } from '../client/run-qrl';\nimport { mapApp_findIndx, mapArray_set } from './util-mapArray';\nimport { getNewElementNamespaceData } from './vnode-namespace';\nimport { vnode_ensureElementInflated, vnode_getDomParentVNode, vnode_getElementName, vnode_getFirstChild, vnode_getProjectionParentComponent, vnode_getProp, vnode_getText, vnode_getType, vnode_inflateProjectionTrailingText, vnode_insertBefore, vnode_insertElementBefore, vnode_insertVirtualBefore, vnode_isElementVNode, vnode_isProjection, vnode_isTextVNode, vnode_isVNode, vnode_isVirtualVNode, vnode_locate, vnode_newElement, vnode_newText, vnode_newVirtual, vnode_remove, vnode_setAttr, vnode_setProp, vnode_setText, vnode_truncate, vnode_walkVNode, } from './vnode-utils';\nimport { isObjectEmpty } from '../shared/utils/objects';\nimport { setInlineComponentData } from '../shared/cursor/chore-execution';\nfunction peekNextSibling(vCurrent) {\n    return vCurrent ? vCurrent.nextSibling : null;\n}\nfunction getLevelBoundary(diffContext) {\n    return diffContext.$vParent$ === diffContext.$vEndParent$ ? diffContext.$vEnd$ : null;\n}\nfunction getCurrentInsertBefore(diffContext) {\n    return diffContext.$vCurrent$ || getLevelBoundary(diffContext);\n}\nfunction peekNextSiblingWithinBoundary(diffContext, vCurrent) {\n    const nextSibling = peekNextSibling(vCurrent);\n    const boundary = getLevelBoundary(diffContext);\n    return nextSibling === boundary ? null : nextSibling;\n}\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\n/** Helper to set an attribute on a vnode. Extracted to module scope to avoid closure allocation. */\nfunction setAttribute(journal, vnode, key, value, scopedStyleIdPrefix, originalValue) {\n    qTest &&\n        scopedStyleIdPrefix &&\n        vnode_setProp(vnode, debugStyleScopeIdPrefixAttr, scopedStyleIdPrefix);\n    vnode_setProp(vnode, key, originalValue);\n    addVNodeOperation(journal, createSetAttributeOperation(vnode.node, key, value, scopedStyleIdPrefix, (vnode.flags & 512 /* VNodeFlags.NS_svg */) !== 0));\n}\nexport function createDiffContext(container, journal, cursor, scopedStyleIdPrefix) {\n    return {\n        $container$: container,\n        $journal$: journal,\n        $cursor$: cursor,\n        $scopedStyleIdPrefix$: scopedStyleIdPrefix,\n        $stack$: [],\n        $asyncQueue$: [],\n        $asyncAttributePromises$: [],\n        $vParent$: null,\n        $vCurrent$: null,\n        $vNewNode$: null,\n        $vEnd$: null,\n        $vEndParent$: null,\n        $vSiblings$: null,\n        $vSiblingsArray$: null,\n        $vSideBuffer$: null,\n        $jsxChildren$: null,\n        $jsxValue$: null,\n        $jsxIdx$: 0,\n        $jsxCount$: 0,\n        $shouldAdvance$: true,\n        $isCreationMode$: false,\n        $subscriptionData$: {\n            $const$: new SubscriptionData({\n                $scopedStyleIdPrefix$: scopedStyleIdPrefix,\n                $isConst$: true,\n            }),\n            $var$: new SubscriptionData({\n                $scopedStyleIdPrefix$: scopedStyleIdPrefix,\n                $isConst$: false,\n            }),\n        },\n    };\n}\nfunction prepareDiffContext(diffContext, container, journal, cursor, scopedStyleIdPrefix) {\n    diffContext.$container$ = container;\n    diffContext.$journal$ = journal;\n    diffContext.$cursor$ = cursor;\n    diffContext.$scopedStyleIdPrefix$ = scopedStyleIdPrefix;\n    diffContext.$subscriptionData$.$const$.data.$scopedStyleIdPrefix$ = scopedStyleIdPrefix;\n    diffContext.$subscriptionData$.$var$.data.$scopedStyleIdPrefix$ = scopedStyleIdPrefix;\n    diffContext.$asyncQueue$.length = 0;\n    diffContext.$asyncAttributePromises$.length = 0;\n}\nfunction getPreparedDiffContext(diffContext, container, journal, cursor, scopedStyleIdPrefix) {\n    const reusableDiffContext = diffContext ?? createDiffContext(container, journal, cursor, scopedStyleIdPrefix);\n    prepareDiffContext(reusableDiffContext, container, journal, cursor, scopedStyleIdPrefix);\n    return reusableDiffContext;\n}\nexport const vnode_diff = (container, journal, jsxNode, vStartNode, cursor, scopedStyleIdPrefix, diffContext) => {\n    return runDiff(getPreparedDiffContext(diffContext, container, journal, cursor, scopedStyleIdPrefix), jsxNode, vStartNode);\n};\nexport const vnode_diff_range = (container, journal, jsxNode, vParent, vCurrent, vEnd, cursor, scopedStyleIdPrefix, \n// Allows callers diffing into an empty known-new range to skip keyed-sibling materialization.\nforceCreationMode = false, diffContext) => {\n    return runDiff(getPreparedDiffContext(diffContext, container, journal, cursor, scopedStyleIdPrefix), jsxNode, vParent, vCurrent, vEnd, forceCreationMode);\n};\n//////////////////////////////////////////////\n//////////////////////////////////////////////\n//////////////////////////////////////////////\nfunction runDiff(diffContext, jsxNode, vStartNode, vCurrent = vnode_getFirstChild(vStartNode), vEnd = null, forceCreationMode = false) {\n    diff(diffContext, jsxNode, vStartNode, vCurrent, vEnd, forceCreationMode);\n    const result = drainAsyncQueue(diffContext);\n    // Cleanup diffContext after completion\n    if (isPromise(result)) {\n        return result.finally(() => {\n            cleanupDiffContext(diffContext);\n        });\n    }\n    else {\n        cleanupDiffContext(diffContext);\n    }\n}\nfunction diff(diffContext, jsxNode, vStartNode, vCurrent = vnode_getFirstChild(vStartNode), vEnd = null, forceCreationMode = false) {\n    const previousCreationMode = diffContext.$isCreationMode$;\n    isDev && assertFalse(vnode_isVNode(jsxNode), 'JSXNode should not be a VNode');\n    isDev && assertTrue(vnode_isVNode(vStartNode), 'vStartNode should be a VNode');\n    diffContext.$isCreationMode$ = forceCreationMode || previousCreationMode;\n    diffContext.$vParent$ = vStartNode;\n    diffContext.$vNewNode$ = null;\n    diffContext.$vCurrent$ = vCurrent;\n    diffContext.$vEnd$ = vEnd;\n    diffContext.$vEndParent$ = vStartNode;\n    stackPush(diffContext, jsxNode, true);\n    try {\n        if (diffContext.$vParent$.flags & 32 /* VNodeFlags.Deleted */) {\n            // Ignore diff if the parent is deleted.\n            return;\n        }\n        while (diffContext.$stack$.length) {\n            while (diffContext.$jsxIdx$ < diffContext.$jsxCount$) {\n                isDev &&\n                    assertFalse(diffContext.$vParent$ === diffContext.$vCurrent$, \"Parent and current can't be the same\");\n                if (typeof diffContext.$jsxValue$ === 'string') {\n                    expectText(diffContext, diffContext.$jsxValue$);\n                }\n                else if (typeof diffContext.$jsxValue$ === 'number') {\n                    expectText(diffContext, String(diffContext.$jsxValue$));\n                }\n                else if (diffContext.$jsxValue$ && typeof diffContext.$jsxValue$ === 'object') {\n                    if (isJSXNode(diffContext.$jsxValue$)) {\n                        const type = diffContext.$jsxValue$.type;\n                        if (typeof type === 'string') {\n                            expectNoTextNode(diffContext);\n                            expectElement(diffContext, diffContext.$jsxValue$, type);\n                            const hasDangerousInnerHTML = (diffContext.$jsxValue$.constProps &&\n                                _hasOwnProperty.call(diffContext.$jsxValue$.constProps, dangerouslySetInnerHTML)) ||\n                                _hasOwnProperty.call(diffContext.$jsxValue$.varProps, dangerouslySetInnerHTML);\n                            if (hasDangerousInnerHTML) {\n                                // Only clean up children for existing nodes; new nodes have no children yet\n                                if (!diffContext.$vNewNode$) {\n                                    expectNoChildren(diffContext, false);\n                                }\n                            }\n                            else {\n                                descend(diffContext, diffContext.$jsxValue$.children, true);\n                            }\n                        }\n                        else if (typeof type === 'function') {\n                            if (type === Fragment) {\n                                expectNoTextNode(diffContext);\n                                expectVirtual(diffContext, \"F\" /* VirtualType.Fragment */, diffContext.$jsxValue$.key);\n                                descend(diffContext, diffContext.$jsxValue$.children, true);\n                            }\n                            else if (type === Slot) {\n                                expectNoTextNode(diffContext);\n                                if (!expectSlot(diffContext)) {\n                                    // nothing to project, so try to render the Slot default content.\n                                    descend(diffContext, diffContext.$jsxValue$.children, true);\n                                }\n                            }\n                            else if (type === Projection) {\n                                expectProjection(diffContext);\n                                descend(diffContext, diffContext.$jsxValue$.children, true, \n                                // special case for projection, we don't want to expect no children\n                                // because the projection's children are not removed\n                                false);\n                            }\n                            else if (type === SSRComment) {\n                                expectNoMore(diffContext);\n                            }\n                            else if (type === SSRRaw) {\n                                expectNoMore(diffContext);\n                            }\n                            else {\n                                // Must be a component\n                                expectNoTextNode(diffContext);\n                                expectComponent(diffContext, type);\n                            }\n                        }\n                    }\n                    else if (Array.isArray(diffContext.$jsxValue$)) {\n                        descend(diffContext, diffContext.$jsxValue$, false);\n                    }\n                    else if (isSignal(diffContext.$jsxValue$)) {\n                        expectVirtual(diffContext, \"S\" /* VirtualType.WrappedSignal */, null);\n                        const unwrappedSignal = diffContext.$jsxValue$ instanceof WrappedSignalImpl\n                            ? diffContext.$jsxValue$.$unwrapIfSignal$()\n                            : diffContext.$jsxValue$;\n                        const signals = diffContext.$vCurrent$?.[_EFFECT_BACK_REF]?.get(\".\" /* EffectProperty.VNODE */)?.backRef;\n                        let hasUnwrappedSignal = signals?.has(unwrappedSignal);\n                        if (signals && unwrappedSignal instanceof WrappedSignalImpl) {\n                            hasUnwrappedSignal = containsWrappedSignal(signals, unwrappedSignal);\n                        }\n                        if (!hasUnwrappedSignal) {\n                            const vHost = (diffContext.$vNewNode$ || diffContext.$vCurrent$);\n                            descend(diffContext, resolveSignalAndDescend(diffContext, () => trackSignalAndAssignHost(unwrappedSignal, vHost, \".\" /* EffectProperty.VNODE */, diffContext.$container$)), true);\n                        }\n                    }\n                    else if (isPromise(diffContext.$jsxValue$)) {\n                        expectVirtual(diffContext, \"A\" /* VirtualType.Awaited */, null);\n                        diffContext.$asyncQueue$.push(diffContext.$jsxValue$, diffContext.$vNewNode$ || diffContext.$vCurrent$);\n                    }\n                }\n                else if (diffContext.$jsxValue$ === SkipRender) {\n                    // do nothing, we are skipping this node\n                }\n                else {\n                    expectText(diffContext, '');\n                }\n                advance(diffContext);\n            }\n            expectNoMore(diffContext);\n            cleanupSideBuffer(diffContext);\n            ascend(diffContext);\n        }\n    }\n    finally {\n        diffContext.$isCreationMode$ = previousCreationMode;\n    }\n}\nfunction resolveSignalAndDescend(diffContext, fn) {\n    try {\n        return fn();\n    }\n    catch (e) {\n        // Signal threw a promise (async computed signal) - handle retry and async queue\n        if (isPromise(e)) {\n            // The thrown promise will resolve when the signal is ready, then retry fn() with retry logic\n            const retryPromise = e.then(() => retryOnPromise(fn));\n            diffContext.$asyncQueue$.push(retryPromise, diffContext.$vNewNode$ || diffContext.$vCurrent$);\n            return null;\n        }\n        throw e;\n    }\n}\nfunction advance(diffContext) {\n    if (!diffContext.$shouldAdvance$) {\n        diffContext.$shouldAdvance$ = true;\n        return;\n    }\n    diffContext.$jsxIdx$++;\n    if (diffContext.$jsxIdx$ < diffContext.$jsxCount$) {\n        diffContext.$jsxValue$ = diffContext.$jsxChildren$[diffContext.$jsxIdx$];\n    }\n    else if (diffContext.$stack$.length > 0 &&\n        diffContext.$stack$[diffContext.$stack$.length - 1] === false) {\n        // this was special `descendVNode === false` so pop and try again\n        return ascend(diffContext);\n    }\n    if (diffContext.$vNewNode$ !== null) {\n        // We have a new Node.\n        // This means that the `vCurrent` was deemed not useful and we inserted in front of it.\n        // This means that the next node we should look at is the `vCurrent` so just clear the\n        // vNewNode  and try again.\n        diffContext.$vNewNode$ = null;\n    }\n    else {\n        diffContext.$vCurrent$ = peekNextSiblingWithinBoundary(diffContext, diffContext.$vCurrent$);\n    }\n}\n/**\n * @param children\n * @param descendVNode - If true we are descending into vNode; This is set to false if we come\n *   across an array in jsx, and we need to descend into the array without actually descending into\n *   the vNode.\n *\n *   Example:\n *\n *   ```\n *   <>\n *   before\n *   {[1,2].map((i) => <span>{i}</span>)}\n *   after\n *   </>\n * ```\n *\n *   In the above example all nodes are on same level so we don't `descendVNode` even thought there is\n *   an array produced by the `map` function.\n */\nfunction descend(diffContext, children, descendVNode, shouldExpectNoChildren = true) {\n    if (shouldExpectNoChildren &&\n        (children == null || (descendVNode && isArray(children) && children.length === 0))) {\n        expectNoChildren(diffContext);\n        return;\n    }\n    stackPush(diffContext, children, descendVNode);\n    if (descendVNode) {\n        isDev &&\n            assertDefined(diffContext.$vCurrent$ || diffContext.$vNewNode$, 'Expecting vCurrent to be defined.');\n        const creationMode = diffContext.$isCreationMode$ ||\n            !!diffContext.$vNewNode$ ||\n            !vnode_getFirstChild(diffContext.$vCurrent$);\n        diffContext.$isCreationMode$ = creationMode;\n        diffContext.$vSideBuffer$ = null;\n        diffContext.$vSiblings$ = null;\n        diffContext.$vSiblingsArray$ = null;\n        diffContext.$vParent$ = (diffContext.$vNewNode$ || diffContext.$vCurrent$);\n        diffContext.$vCurrent$ = vnode_getFirstChild(diffContext.$vParent$);\n        diffContext.$vNewNode$ = null;\n    }\n    diffContext.$shouldAdvance$ = false;\n}\nfunction ascend(diffContext) {\n    const descendVNode = diffContext.$stack$.pop(); // boolean: descendVNode\n    if (descendVNode) {\n        diffContext.$isCreationMode$ = diffContext.$stack$.pop();\n        diffContext.$vSideBuffer$ = diffContext.$stack$.pop();\n        diffContext.$vSiblings$ = diffContext.$stack$.pop();\n        diffContext.$vSiblingsArray$ = diffContext.$stack$.pop();\n        diffContext.$vNewNode$ = diffContext.$stack$.pop();\n        diffContext.$vCurrent$ = diffContext.$stack$.pop();\n        diffContext.$vParent$ = diffContext.$stack$.pop();\n    }\n    diffContext.$jsxValue$ = diffContext.$stack$.pop();\n    diffContext.$jsxCount$ = diffContext.$stack$.pop();\n    diffContext.$jsxIdx$ = diffContext.$stack$.pop();\n    diffContext.$jsxChildren$ = diffContext.$stack$.pop();\n    advance(diffContext);\n}\nfunction stackPush(diffContext, children, descendVNode) {\n    diffContext.$stack$.push(diffContext.$jsxChildren$, diffContext.$jsxIdx$, diffContext.$jsxCount$, diffContext.$jsxValue$);\n    if (descendVNode) {\n        diffContext.$stack$.push(diffContext.$vParent$, diffContext.$vCurrent$, diffContext.$vNewNode$, diffContext.$vSiblingsArray$, diffContext.$vSiblings$, diffContext.$vSideBuffer$, diffContext.$isCreationMode$);\n    }\n    diffContext.$stack$.push(descendVNode);\n    if (Array.isArray(children)) {\n        diffContext.$jsxIdx$ = 0;\n        diffContext.$jsxCount$ = children.length;\n        diffContext.$jsxChildren$ = children;\n        diffContext.$jsxValue$ = diffContext.$jsxCount$ > 0 ? children[0] : null;\n    }\n    else if (children === undefined) {\n        // no children\n        diffContext.$jsxIdx$ = 0;\n        diffContext.$jsxValue$ = null;\n        diffContext.$jsxChildren$ = null;\n        diffContext.$jsxCount$ = 0;\n    }\n    else {\n        diffContext.$jsxIdx$ = 0;\n        diffContext.$jsxValue$ = children;\n        diffContext.$jsxChildren$ = null;\n        diffContext.$jsxCount$ = 1;\n    }\n}\nfunction getInsertBefore(diffContext) {\n    if (diffContext.$vNewNode$) {\n        return getCurrentInsertBefore(diffContext);\n    }\n    return (peekNextSiblingWithinBoundary(diffContext, diffContext.$vCurrent$) ||\n        getLevelBoundary(diffContext));\n}\n/////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////\nfunction descendContentToProject(diffContext, children, host) {\n    const projectionChildren = Array.isArray(children) ? children : [children];\n    const createProjectionJSXNode = (slotName) => {\n        return new JSXNodeImpl(Projection, null, null, [], 0, slotName);\n    };\n    const projections = [];\n    if (host) {\n        const props = host.props;\n        if (props) {\n            // we need to create empty projections for all the slots to remove unused slots content\n            for (const prop in props) {\n                if (isSlotProp(prop)) {\n                    const slotName = prop;\n                    mapArray_set(projections, slotName, createProjectionJSXNode(slotName), 0);\n                }\n            }\n        }\n    }\n    if (projections.length === 0 && children == null) {\n        // We did not find any existing slots and we don't have any children to project.\n        return;\n    }\n    /// STEP 1: Bucketize the children based on the projection name.\n    for (let i = 0; i < projectionChildren.length; i++) {\n        const child = projectionChildren[i];\n        const slotName = String((isJSXNode(child) && directGetPropsProxyProp(child, QSlot)) || QDefaultSlot);\n        const idx = mapApp_findIndx(projections, slotName, 0);\n        let jsxBucket;\n        if (idx >= 0) {\n            jsxBucket = projections[idx + 1];\n        }\n        else {\n            projections.splice(~idx, 0, slotName, (jsxBucket = createProjectionJSXNode(slotName)));\n        }\n        const removeProjection = child === false;\n        if (!removeProjection) {\n            jsxBucket.children.push(child);\n        }\n    }\n    /// STEP 2: remove the names\n    for (let i = projections.length - 2; i >= 0; i = i - 2) {\n        projections.splice(i, 1);\n    }\n    descend(diffContext, projections, true);\n}\nfunction expectProjection(diffContext) {\n    const jsxNode = diffContext.$jsxValue$;\n    const slotName = jsxNode.key;\n    // console.log('expectProjection', JSON.stringify(slotName));\n    // The parent is the component and it should have our portal.\n    diffContext.$vCurrent$ = vnode_getProp(diffContext.$vParent$, slotName, (id) => vnode_locate(diffContext.$container$.rootVNode, id));\n    // if projection is marked as deleted then we need to create a new one\n    diffContext.$vCurrent$ =\n        diffContext.$vCurrent$ && diffContext.$vCurrent$.flags & 32 /* VNodeFlags.Deleted */\n            ? null\n            : diffContext.$vCurrent$;\n    if (diffContext.$vCurrent$ == null) {\n        diffContext.$vNewNode$ = vnode_newVirtual();\n        // you may be tempted to add the projection into the current parent, but\n        // that is wrong. We don't yet know if the projection will be projected, so\n        // we should leave it unattached.\n        // vNewNode[VNodeProps.parent] = vParent;\n        isDev &&\n            vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, \"P\" /* VirtualType.Projection */);\n        isDev && vnode_setProp(diffContext.$vNewNode$, 'q:code', 'expectProjection');\n        vnode_setProp(diffContext.$vNewNode$, QSlot, slotName);\n        diffContext.$vNewNode$.slotParent = diffContext.$vParent$;\n        vnode_setProp(diffContext.$vParent$, slotName, diffContext.$vNewNode$);\n    }\n}\nfunction expectSlot(diffContext) {\n    const jsxNode = diffContext.$jsxValue$;\n    const vHost = vnode_getProjectionParentComponent(diffContext.$vParent$);\n    const slotNameKey = resolveSlotName(vHost, jsxNode, diffContext.$container$);\n    const cursorBoundary = directGetPropsProxyProp(jsxNode, QCursorBoundary) || null;\n    const vProjectedNode = vHost\n        ? vnode_getProp(vHost, slotNameKey, \n        // for slots this id is vnode ref id\n        null // Projections should have been resolved through container.ensureProjectionResolved\n        //(id) => vnode_locate(container.rootVNode, id)\n        )\n        : null;\n    if (vProjectedNode == null) {\n        diffContext.$vNewNode$ = vnode_newVirtual();\n        vnode_setProp(diffContext.$vNewNode$, QSlot, slotNameKey);\n        vnode_setProp(diffContext.$vNewNode$, QCursorBoundary, cursorBoundary);\n        updateDirtySubtreeCursorBoundary(diffContext.$container$, diffContext.$vNewNode$, cursorBoundary);\n        vHost && vnode_setProp(vHost, slotNameKey, diffContext.$vNewNode$);\n        isDev &&\n            vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, \"P\" /* VirtualType.Projection */); // Nothing to project, so render content of the slot.\n        vnode_insertBefore(diffContext.$journal$, diffContext.$vParent$, diffContext.$vNewNode$, getInsertBefore(diffContext));\n        return false;\n    }\n    else if (vProjectedNode === diffContext.$vCurrent$) {\n        // All is good.\n    }\n    else {\n        // move from q:template to the target node\n        const oldParent = vProjectedNode.parent;\n        diffContext.$vNewNode$ = vProjectedNode;\n        vnode_setProp(diffContext.$vNewNode$, QSlot, slotNameKey);\n        vnode_setProp(diffContext.$vNewNode$, QCursorBoundary, cursorBoundary);\n        updateDirtySubtreeCursorBoundary(diffContext.$container$, diffContext.$vNewNode$, cursorBoundary);\n        vHost && vnode_setProp(vHost, slotNameKey, diffContext.$vNewNode$);\n        isDev &&\n            vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, \"P\" /* VirtualType.Projection */);\n        vnode_inflateProjectionTrailingText(diffContext.$journal$, diffContext.$vNewNode$);\n        vnode_insertBefore(diffContext.$journal$, diffContext.$vParent$, diffContext.$vNewNode$, getInsertBefore(diffContext));\n        // If we moved from a q:template and it's now empty, remove it\n        if (oldParent &&\n            vnode_isElementVNode(oldParent) &&\n            !oldParent.firstChild &&\n            vnode_getElementName(oldParent) === QTemplate) {\n            vnode_remove(diffContext.$journal$, oldParent.parent, oldParent, true);\n        }\n    }\n    return true;\n}\nfunction cleanupSideBuffer(diffContext) {\n    const sideBuffer = diffContext.$vSideBuffer$;\n    if (sideBuffer) {\n        // Remove all nodes in the side buffer as they are no longer needed\n        for (const vNode of sideBuffer.values()) {\n            if (vNode.flags & 32 /* VNodeFlags.Deleted */) {\n                continue;\n            }\n            cleanup(diffContext.$container$, diffContext.$journal$, vNode, diffContext.$cursor$);\n            vnode_remove(diffContext.$journal$, diffContext.$vParent$, vNode, true);\n        }\n        sideBuffer.clear();\n        diffContext.$vSideBuffer$ = null;\n    }\n    diffContext.$vCurrent$ = null;\n}\nfunction drainAsyncQueue(diffContext) {\n    while (diffContext.$asyncQueue$.length) {\n        const jsxNode = diffContext.$asyncQueue$.shift();\n        const vHostNode = diffContext.$asyncQueue$.shift();\n        if (isPromise(jsxNode)) {\n            return jsxNode\n                .then((jsxNode) => {\n                diff(diffContext, jsxNode, vHostNode);\n                return drainAsyncQueue(diffContext);\n            })\n                .catch((e) => {\n                diffContext.$container$.handleError(e, vHostNode);\n                return drainAsyncQueue(diffContext);\n            });\n        }\n        else {\n            diff(diffContext, jsxNode, vHostNode);\n        }\n    }\n    // Wait for all async attribute promises to complete, then check for more work\n    if (diffContext.$asyncAttributePromises$.length) {\n        const promises = diffContext.$asyncAttributePromises$.splice(0);\n        return Promise.all(promises).then(() => {\n            // After attributes are set, check if there's more work in the queue\n            return drainAsyncQueue(diffContext);\n        });\n    }\n}\nfunction cleanupDiffContext(diffContext) {\n    diffContext.$journal$ = null;\n    diffContext.$cursor$ = null;\n}\nfunction expectNoChildren(diffContext, removeDOM = true) {\n    const vFirstChild = diffContext.$vCurrent$ && vnode_getFirstChild(diffContext.$vCurrent$);\n    if (vFirstChild !== null) {\n        let vChild = vFirstChild;\n        while (vChild) {\n            cleanup(diffContext.$container$, diffContext.$journal$, vChild, diffContext.$cursor$);\n            vChild = vChild.nextSibling;\n        }\n        vnode_truncate(diffContext.$journal$, diffContext.$vCurrent$, vFirstChild, removeDOM);\n    }\n}\n/** Expect no more nodes - Any nodes which are still at cursor, need to be removed. */\nfunction expectNoMore(diffContext) {\n    const boundary = getLevelBoundary(diffContext);\n    isDev &&\n        assertFalse(diffContext.$vParent$ === diffContext.$vCurrent$, \"Parent and current can't be the same\");\n    if (diffContext.$vCurrent$ !== null && diffContext.$vCurrent$ !== boundary) {\n        while (diffContext.$vCurrent$ && diffContext.$vCurrent$ !== boundary) {\n            const toRemove = diffContext.$vCurrent$;\n            diffContext.$vCurrent$ = peekNextSiblingWithinBoundary(diffContext, diffContext.$vCurrent$);\n            if (diffContext.$vParent$ === toRemove.parent) {\n                cleanup(diffContext.$container$, diffContext.$journal$, toRemove, diffContext.$cursor$);\n                // If we are diffing projection than the parent is not the parent of the node.\n                // If that is the case we don't want to remove the node from the parent.\n                vnode_remove(diffContext.$journal$, diffContext.$vParent$, toRemove, true);\n            }\n        }\n    }\n}\nfunction expectNoTextNode(diffContext) {\n    if (diffContext.$vCurrent$ !== null && vnode_isTextVNode(diffContext.$vCurrent$)) {\n        const toRemove = diffContext.$vCurrent$;\n        diffContext.$vCurrent$ = peekNextSiblingWithinBoundary(diffContext, diffContext.$vCurrent$);\n        vnode_remove(diffContext.$journal$, diffContext.$vParent$, toRemove, true);\n    }\n}\nfunction applyRef(value, element, currentFile) {\n    if (isSignal(value)) {\n        value.value = element;\n        return true;\n    }\n    if (typeof value === 'function') {\n        value(element);\n        return true;\n    }\n    if (value == null) {\n        return true;\n    }\n    throw qError(15 /* QError.invalidRefValue */, [currentFile]);\n}\nfunction resolveSignalValue(container, vHost, key, signal, subscriptionData) {\n    return retryOnPromise(() => trackSignalAndAssignHost(signal, vHost, key, container, subscriptionData));\n}\nfunction queueConstAttributePromise(diffContext, element, key, value, isSvg) {\n    const scopedStyleIdPrefix = diffContext.$scopedStyleIdPrefix$;\n    const attributePromise = value.then((resolvedValue) => directSetAttribute(element, key, serializeAttribute(key, resolvedValue, scopedStyleIdPrefix), isSvg));\n    diffContext.$asyncAttributePromises$.push(attributePromise);\n}\nfunction applyConstInnerHtml(element, value) {\n    if (value) {\n        element.innerHTML = String(value);\n        element.setAttribute(QContainerAttr, \"html\" /* QContainerValue.HTML */);\n    }\n}\nfunction applyConstTextareaValue(element, value, currentFile) {\n    if (value && typeof value !== 'string') {\n        if (isDev) {\n            throw qError(23 /* QError.wrongTextareaValue */, [currentFile, value]);\n        }\n        return true;\n    }\n    element.value = escapeHTML(value || '');\n    return true;\n}\nfunction createNewElement(diffContext, jsx, elementName, currentFile) {\n    const element = createElementWithNamespace(diffContext, elementName);\n    const vHost = diffContext.$vNewNode$;\n    const isSvg = (vHost.flags & 512 /* VNodeFlags.NS_svg */) !== 0;\n    const { constProps } = jsx;\n    if (constProps) {\n        // Const props are, well, constant, they will never change!\n        // For this reason we can cheat and write them directly into the DOM.\n        // We never tell the vNode about them saving us time and memory.\n        for (const key in constProps) {\n            let value = constProps[key];\n            if (isHtmlAttributeAnEventName(key)) {\n                registerEventHandlers(key, value, element, vHost, diffContext);\n                continue;\n            }\n            if (key === 'ref' && applyRef(value, element, currentFile)) {\n                continue;\n            }\n            if (isSignal(value)) {\n                value = resolveSignalValue(diffContext.$container$, diffContext.$vNewNode$, key, value, diffContext.$subscriptionData$.$const$);\n            }\n            if (isPromise(value)) {\n                queueConstAttributePromise(diffContext, element, key, value, isSvg);\n                continue;\n            }\n            if (key === dangerouslySetInnerHTML) {\n                applyConstInnerHtml(element, value);\n                continue;\n            }\n            if (elementName === 'textarea' &&\n                key === 'value' &&\n                applyConstTextareaValue(element, value, currentFile)) {\n                continue;\n            }\n            directSetAttribute(element, key, serializeAttribute(key, value, diffContext.$scopedStyleIdPrefix$), isSvg);\n        }\n    }\n    const key = jsx.key;\n    if (key) {\n        diffContext.$vNewNode$.key = key;\n    }\n    // append class attribute if styleScopedId exists and there is no class attribute\n    if (diffContext.$scopedStyleIdPrefix$) {\n        const classAttributeExists = _hasOwnProperty.call(jsx.varProps, 'class') ||\n            (jsx.constProps && _hasOwnProperty.call(jsx.constProps, 'class'));\n        if (!classAttributeExists) {\n            element.setAttribute('class', diffContext.$scopedStyleIdPrefix$);\n        }\n    }\n    vnode_insertElementBefore(diffContext.$journal$, diffContext.$vParent$, diffContext.$vNewNode$, getCurrentInsertBefore(diffContext));\n}\nfunction registerEventHandlers(key, value, element, vnode, diffContext) {\n    const scopedKebabName = key.slice(2);\n    if (Array.isArray(value)) {\n        const arr = value;\n        const handlers = [];\n        for (let i = 0; i < arr.length; i++) {\n            const item = arr[i];\n            if (Array.isArray(item)) {\n                for (let j = 0; j < item.length; j++) {\n                    const handler = item[j];\n                    if (handler) {\n                        handlers.push(runEventHandlerQRL.bind(null, handler));\n                    }\n                }\n            }\n            else if (item) {\n                handlers.push(runEventHandlerQRL.bind(null, item));\n            }\n        }\n        if (handlers.length > 0) {\n            (element._qDispatch ||= {})[scopedKebabName] = handlers.length === 1 ? handlers[0] : handlers;\n        }\n    }\n    else if (value) {\n        (element._qDispatch ||= {})[scopedKebabName] = runEventHandlerQRL.bind(null, value);\n    }\n    // window and document events need attrs so qwik loader can find them\n    // TODO only do these when not already present\n    if (key.charAt(2) !== 'e') {\n        vnode_setAttr(diffContext.$journal$, vnode, key, '');\n    }\n    registerQwikLoaderEvent(diffContext, scopedKebabName);\n}\nfunction createElementWithNamespace(diffContext, elementName) {\n    const domParentVNode = vnode_getDomParentVNode(diffContext.$vParent$, true);\n    const namespaceData = getNewElementNamespaceData(domParentVNode, elementName);\n    const currentDocument = qTest ? diffContext.$container$.document : document;\n    const element = namespaceData.elementNamespaceFlag === 0 /* VNodeFlags.NS_html */\n        ? currentDocument.createElement(elementName)\n        : currentDocument.createElementNS(namespaceData.elementNamespace, elementName);\n    diffContext.$vNewNode$ = vnode_newElement(element, elementName);\n    diffContext.$vNewNode$.flags |= namespaceData.elementNamespaceFlag;\n    return element;\n}\nfunction expectElement(diffContext, jsx, elementName) {\n    if (diffContext.$isCreationMode$) {\n        createNewElement(diffContext, jsx, elementName, null);\n    }\n    else {\n        const isElementVNode = diffContext.$vCurrent$ && vnode_isElementVNode(diffContext.$vCurrent$);\n        const isSameElementName = isElementVNode &&\n            elementName === vnode_getElementName(diffContext.$vCurrent$);\n        const jsxKey = jsx.key;\n        const currentKey = isElementVNode && diffContext.$vCurrent$.key;\n        if (!isSameElementName || jsxKey !== currentKey) {\n            const sideBufferKey = getSideBufferKey(elementName, jsxKey);\n            if (moveOrCreateKeyedNode(diffContext, elementName, jsxKey, sideBufferKey, diffContext.$vParent$)) {\n                createNewElement(diffContext, jsx, elementName, null);\n            }\n        }\n        else {\n            // delete the key from the side buffer if it is the same element\n            deleteFromSideBuffer(diffContext, elementName, jsxKey);\n        }\n    }\n    // reconcile attributes\n    const jsxProps = jsx.varProps;\n    const vNode = (diffContext.$vNewNode$ || diffContext.$vCurrent$);\n    if (jsxProps) {\n        diffProps(diffContext, vNode, jsxProps, (isDev && getFileLocationFromJsx(jsx.dev)) || null);\n    }\n}\nfunction diffProps(diffContext, vnode, newAttrs, currentFile) {\n    if (!diffContext.$isCreationMode$) {\n        // inflate only resumed vnodes\n        vnode_ensureElementInflated(diffContext.$container$, vnode);\n    }\n    const oldAttrs = vnode.props;\n    // Actual diffing logic\n    // Apply all new attributes\n    for (const key in newAttrs) {\n        const newValue = newAttrs[key];\n        if (oldAttrs && _hasOwnProperty.call(oldAttrs, key)) {\n            const oldValue = oldAttrs[key];\n            if (newValue !== oldValue) {\n                if (newValue instanceof WrappedSignalImpl &&\n                    oldValue instanceof WrappedSignalImpl &&\n                    areWrappedSignalsEqual(newValue, oldValue)) {\n                    continue;\n                }\n                patchProperty(diffContext, vnode, key, newValue, currentFile);\n            }\n        }\n        else if (newValue != null) {\n            patchProperty(diffContext, vnode, key, newValue, currentFile);\n        }\n    }\n    if (oldAttrs) {\n        // Remove attributes that no longer exist in new props\n        for (const key in oldAttrs) {\n            if (!_hasOwnProperty.call(newAttrs, key) &&\n                // do not remove special attributes\n                key.charAt(0) !== ':' &&\n                // we keep these handler props to indicate to qwikloader that these events are used\n                !isHtmlAttributeAnEventName(key)) {\n                patchProperty(diffContext, vnode, key, null, currentFile);\n            }\n        }\n    }\n}\nconst patchProperty = (diffContext, vnode, key, value, currentFile) => {\n    // During CSR we do handlers via qDispatch\n    if (isHtmlAttributeAnEventName(key)) {\n        registerEventHandlers(key, value, vnode.node, vnode, diffContext);\n        return;\n    }\n    if (\n    // set only property for iteration item, not an attribute\n    key === ITERATION_ITEM_SINGLE ||\n        key === ITERATION_ITEM_MULTI) {\n        // TODO: there is a potential deoptimization here, because we are setting different keys on props.\n        // Eager bailout - Insufficient type feedback for generic keyed access\n        vnode_setProp(vnode, key, value);\n        vnode.flags |= 64 /* VNodeFlags.HasIterationItems */ | 128 /* VNodeFlags.InflatedIterationItems */;\n        return;\n    }\n    const originalValue = value;\n    if (key === 'ref') {\n        const element = vnode.node;\n        if (applyRef(value, element, currentFile)) {\n            return;\n        }\n    }\n    const currentEffect = vnode[_EFFECT_BACK_REF]?.get(key);\n    if (isSignal(value)) {\n        const unwrappedSignal = value instanceof WrappedSignalImpl ? value.$unwrapIfSignal$() : value;\n        if (currentEffect?.backRef?.has(unwrappedSignal)) {\n            return;\n        }\n        if (currentEffect) {\n            clearEffectSubscription(diffContext.$container$, currentEffect);\n        }\n        const vHost = vnode;\n        value = resolveSignalValue(diffContext.$container$, vHost, key, unwrappedSignal, diffContext.$subscriptionData$.$var$);\n    }\n    else {\n        if (currentEffect) {\n            clearEffectSubscription(diffContext.$container$, currentEffect);\n        }\n    }\n    if (isPromise(value)) {\n        const vHost = vnode;\n        const attributePromise = value.then((resolvedValue) => {\n            setAttribute(diffContext.$journal$, vHost, key, resolvedValue, diffContext.$scopedStyleIdPrefix$, originalValue);\n        });\n        diffContext.$asyncAttributePromises$.push(attributePromise);\n        return;\n    }\n    setAttribute(diffContext.$journal$, vnode, key, value, diffContext.$scopedStyleIdPrefix$, originalValue);\n};\nfunction registerQwikLoaderEvent(diffContext, eventName) {\n    const qWindow = qTest\n        ? diffContext.$container$.document.defaultView\n        : window;\n    if (qWindow) {\n        (qWindow._qwikEv ||= []).push(eventName);\n    }\n}\nfunction retrieveChildWithKey(diffContext, nodeName, key) {\n    let vNodeWithKey = null;\n    if (diffContext.$vSiblings$ === null) {\n        // check if the current node is the one we are looking for\n        const vCurrent = diffContext.$vCurrent$;\n        if (vCurrent) {\n            const name = vnode_isElementVNode(vCurrent) ? vnode_getElementName(vCurrent) : null;\n            const vKey = getKey(vCurrent) ||\n                getComponentHash(vCurrent, diffContext.$container$.$getObjectById$);\n            if (vKey === key && name === nodeName) {\n                return vCurrent;\n            }\n        }\n        // it is not materialized; so materialize it.\n        diffContext.$vSiblings$ = new Map();\n        diffContext.$vSiblingsArray$ = [];\n        const boundary = getLevelBoundary(diffContext);\n        let vNode = diffContext.$vCurrent$;\n        while (vNode && vNode !== boundary) {\n            const name = vnode_isElementVNode(vNode) ? vnode_getElementName(vNode) : null;\n            const vKey = getKey(vNode) ||\n                getComponentHash(vNode, diffContext.$container$.$getObjectById$);\n            if (vNodeWithKey === null && vKey == key && name == nodeName) {\n                vNodeWithKey = vNode;\n            }\n            else {\n                if (vKey === null) {\n                    diffContext.$vSiblingsArray$.push(name, vNode);\n                }\n                else {\n                    // we only add the elements which we did not find yet.\n                    diffContext.$vSiblings$.set(getSideBufferKey(name, vKey), vNode);\n                }\n            }\n            vNode = vNode.nextSibling;\n        }\n    }\n    else {\n        if (key === null) {\n            for (let i = 0; i < diffContext.$vSiblingsArray$.length; i += 2) {\n                if (diffContext.$vSiblingsArray$[i] === nodeName) {\n                    vNodeWithKey = diffContext.$vSiblingsArray$[i + 1];\n                    diffContext.$vSiblingsArray$.splice(i, 2);\n                    break;\n                }\n            }\n        }\n        else {\n            const siblingsKey = getSideBufferKey(nodeName, key);\n            const sibling = diffContext.$vSiblings$.get(siblingsKey);\n            if (sibling) {\n                vNodeWithKey = sibling;\n                diffContext.$vSiblings$.delete(siblingsKey);\n            }\n        }\n    }\n    collectSideBufferSiblings(diffContext, vNodeWithKey);\n    return vNodeWithKey;\n}\nfunction collectSideBufferSiblings(diffContext, targetNode) {\n    if (!targetNode) {\n        if (diffContext.$vCurrent$) {\n            const name = vnode_isElementVNode(diffContext.$vCurrent$)\n                ? vnode_getElementName(diffContext.$vCurrent$)\n                : null;\n            const vKey = getKey(diffContext.$vCurrent$) ||\n                getComponentHash(diffContext.$vCurrent$, diffContext.$container$.$getObjectById$);\n            if (vKey != null) {\n                const sideBufferKey = getSideBufferKey(name, vKey);\n                diffContext.$vSideBuffer$ ||= new Map();\n                diffContext.$vSideBuffer$.set(sideBufferKey, diffContext.$vCurrent$);\n                diffContext.$vSiblings$?.delete(sideBufferKey);\n            }\n        }\n        return;\n    }\n    // Walk from vCurrent up to the target node and collect all keyed siblings\n    const boundary = getLevelBoundary(diffContext);\n    let vNode = diffContext.$vCurrent$;\n    while (vNode && vNode !== targetNode && vNode !== boundary) {\n        const name = vnode_isElementVNode(vNode) ? vnode_getElementName(vNode) : null;\n        const vKey = getKey(vNode) ||\n            getComponentHash(vNode, diffContext.$container$.$getObjectById$);\n        if (vKey != null) {\n            const sideBufferKey = getSideBufferKey(name, vKey);\n            diffContext.$vSideBuffer$ ||= new Map();\n            diffContext.$vSideBuffer$.set(sideBufferKey, vNode);\n            diffContext.$vSiblings$?.delete(sideBufferKey);\n        }\n        vNode = vNode.nextSibling;\n    }\n}\nfunction getSideBufferKey(nodeName, key) {\n    if (key == null) {\n        return null;\n    }\n    return nodeName ? nodeName + ':' + key : key;\n}\nfunction deleteFromSideBuffer(diffContext, nodeName, key) {\n    const sbKey = getSideBufferKey(nodeName, key);\n    if (sbKey && diffContext.$vSideBuffer$?.has(sbKey)) {\n        diffContext.$vSideBuffer$.delete(sbKey);\n        return true;\n    }\n    return false;\n}\n/**\n * Shared utility to resolve a keyed node by:\n *\n * 1. Scanning forward siblings via `retrieveChildWithKey`\n * 2. Falling back to the side buffer using the provided `sideBufferKey`\n * 3. Creating a new node via `createNew` when not found\n *\n * If a node is moved from the side buffer, it is inserted before `vCurrent` under\n * `parentForInsert`. The function updates `vCurrent`/`vNewNode` accordingly and returns the value\n * from `createNew` when a new node is created.\n */\nfunction moveOrCreateKeyedNode(diffContext, nodeName, lookupKey, sideBufferKey, parentForInsert, addCurrentToSideBufferOnSideInsert) {\n    // 1) Try to find the node among upcoming siblings\n    diffContext.$vNewNode$ = retrieveChildWithKey(diffContext, nodeName, lookupKey);\n    if (diffContext.$vNewNode$) {\n        if (!sideBufferKey) {\n            vnode_insertBefore(diffContext.$journal$, parentForInsert, diffContext.$vNewNode$, getCurrentInsertBefore(diffContext));\n        }\n        diffContext.$vCurrent$ = diffContext.$vNewNode$;\n        diffContext.$vNewNode$ = null;\n        return false;\n    }\n    // 2) Try side buffer\n    if (sideBufferKey != null) {\n        const buffered = diffContext.$vSideBuffer$?.get(sideBufferKey) || null;\n        if (buffered) {\n            diffContext.$vSideBuffer$.delete(sideBufferKey);\n            if (addCurrentToSideBufferOnSideInsert && diffContext.$vCurrent$) {\n                const currentKey = getKey(diffContext.$vCurrent$) ||\n                    getComponentHash(diffContext.$vCurrent$, diffContext.$container$.$getObjectById$);\n                if (currentKey != null) {\n                    const currentName = vnode_isElementVNode(diffContext.$vCurrent$)\n                        ? vnode_getElementName(diffContext.$vCurrent$)\n                        : null;\n                    const currentSideKey = getSideBufferKey(currentName, currentKey);\n                    if (currentSideKey != null) {\n                        diffContext.$vSideBuffer$ ||= new Map();\n                        diffContext.$vSideBuffer$.set(currentSideKey, diffContext.$vCurrent$);\n                    }\n                }\n            }\n            // Only move if the node is not already in the correct position\n            if (buffered !== diffContext.$vCurrent$) {\n                vnode_insertBefore(diffContext.$journal$, parentForInsert, buffered, getCurrentInsertBefore(diffContext));\n            }\n            diffContext.$vCurrent$ = buffered;\n            diffContext.$vNewNode$ = null;\n            return false;\n        }\n    }\n    // 3) Create new\n    return true;\n}\nfunction expectVirtual(diffContext, type, jsxKey) {\n    const checkKey = type === \"F\" /* VirtualType.Fragment */;\n    const currentKey = getKey(diffContext.$vCurrent$);\n    const currentIsVirtual = diffContext.$vCurrent$ && vnode_isVirtualVNode(diffContext.$vCurrent$);\n    const isSameNode = currentIsVirtual && currentKey === jsxKey && (checkKey ? !!jsxKey : true);\n    if (isSameNode) {\n        // All is good.\n        deleteFromSideBuffer(diffContext, null, currentKey);\n        return;\n    }\n    // For fragments without a key, always create a new virtual node (ensures rerender semantics)\n    if (jsxKey === null || diffContext.$isCreationMode$) {\n        vnode_insertVirtualBefore(diffContext.$journal$, diffContext.$vParent$, (diffContext.$vNewNode$ = vnode_newVirtual()), getInsertBefore(diffContext));\n        diffContext.$vNewNode$.key = jsxKey;\n        isDev && vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, type);\n        return;\n    }\n    if (moveOrCreateKeyedNode(diffContext, null, jsxKey, getSideBufferKey(null, jsxKey), diffContext.$vParent$, true)) {\n        vnode_insertVirtualBefore(diffContext.$journal$, diffContext.$vParent$, (diffContext.$vNewNode$ = vnode_newVirtual()), getInsertBefore(diffContext));\n        diffContext.$vNewNode$.key = jsxKey;\n        isDev && vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, type);\n    }\n}\nfunction expectComponent(diffContext, component) {\n    const componentMeta = component[SERIALIZABLE_STATE];\n    let host = (diffContext.$vNewNode$ || diffContext.$vCurrent$);\n    const jsxNode = diffContext.$jsxValue$;\n    if (componentMeta) {\n        const jsxProps = jsxNode.props;\n        // QComponent\n        let shouldRender = false;\n        const [componentQRL] = componentMeta;\n        const componentHash = componentQRL.$hash$;\n        const vNodeComponentHash = getComponentHash(host, diffContext.$container$.$getObjectById$);\n        const lookupKey = jsxNode.key || componentHash;\n        const vNodeLookupKey = getKey(host) || vNodeComponentHash;\n        const lookupKeysAreEqual = lookupKey === vNodeLookupKey;\n        const hashesAreEqual = componentHash === vNodeComponentHash;\n        if (lookupKeysAreEqual) {\n            if (hashesAreEqual) {\n                deleteFromSideBuffer(diffContext, null, lookupKey);\n            }\n            else {\n                insertNewComponent(diffContext, host, componentQRL, jsxProps);\n                host = diffContext.$vNewNode$;\n                shouldRender = true;\n            }\n        }\n        else {\n            if (moveOrCreateKeyedNode(diffContext, null, lookupKey, lookupKey, diffContext.$vParent$)) {\n                insertNewComponent(diffContext, host, componentQRL, jsxProps);\n                shouldRender = true;\n            }\n            host = (diffContext.$vNewNode$ || diffContext.$vCurrent$);\n        }\n        if (host) {\n            const vNodeProps = vnode_getProp(host, ELEMENT_PROPS, diffContext.$container$.$getObjectById$);\n            if (!shouldRender) {\n                const propsChanged = handleProps(host, jsxProps, vNodeProps, diffContext.$container$);\n                // if props changed but key is null we need to insert a new component, because we need to execute hooks etc\n                if (propsChanged && jsxNode.key == null) {\n                    insertNewComponent(diffContext, host, componentQRL, jsxProps);\n                    host = diffContext.$vNewNode$;\n                    shouldRender = true;\n                }\n                shouldRender ||= propsChanged;\n            }\n            if (shouldRender) {\n                // Assign the new QRL instance to the host.\n                // Unfortunately it is created every time, something to fix in the optimizer.\n                vnode_setProp(host, OnRenderProp, componentQRL);\n                /**\n                 * Mark host as not deleted. The host could have been marked as deleted if it there was a\n                 * cleanup run. Now we found it and want to reuse it, so we need to mark it as not deleted.\n                 */\n                host.flags &= ~32 /* VNodeFlags.Deleted */;\n                markVNodeDirty(diffContext.$container$, host, 4 /* ChoreBits.COMPONENT */, diffContext.$cursor$);\n            }\n        }\n        descendContentToProject(diffContext, jsxNode.children, host);\n    }\n    else {\n        const lookupKey = jsxNode.key;\n        const vNodeLookupKey = getKey(host);\n        const lookupKeysAreEqual = lookupKey === vNodeLookupKey;\n        const vNodeComponentHash = getComponentHash(host, diffContext.$container$.$getObjectById$);\n        const isInlineComponent = vNodeComponentHash == null;\n        if ((host && !isInlineComponent) || !host) {\n            insertNewInlineComponent(diffContext);\n            host = diffContext.$vNewNode$;\n        }\n        else if (!lookupKeysAreEqual) {\n            if (moveOrCreateKeyedNode(diffContext, null, lookupKey, lookupKey, diffContext.$vParent$)) {\n                // We did not find the inline component, create it.\n                insertNewInlineComponent(diffContext);\n            }\n            host = (diffContext.$vNewNode$ || diffContext.$vCurrent$);\n        }\n        else {\n            // delete the key from the side buffer if it is the same component\n            deleteFromSideBuffer(diffContext, null, lookupKey);\n        }\n        if (host) {\n            let componentHost = host;\n            // Find the closest component host which has `OnRender` prop. This is need for subscriptions context.\n            while (componentHost &&\n                (vnode_isVirtualVNode(componentHost)\n                    ? vnode_getProp(componentHost, OnRenderProp, null) === null\n                    : true)) {\n                componentHost = componentHost.parent || vnode_getProjectionParentComponent(componentHost);\n            }\n            setInlineComponentData(host, component, componentHost, jsxNode.props);\n            markVNodeDirty(diffContext.$container$, host, 8 /* ChoreBits.INLINE_COMPONENT */, diffContext.$cursor$);\n        }\n    }\n}\nfunction insertNewComponent(diffContext, host, componentQRL, jsxProps) {\n    if (host) {\n        clearAllEffects(diffContext.$container$, host);\n    }\n    vnode_insertVirtualBefore(diffContext.$journal$, diffContext.$vParent$, (diffContext.$vNewNode$ = vnode_newVirtual()), getInsertBefore(diffContext));\n    const jsxNode = diffContext.$jsxValue$;\n    isDev && vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, \"C\" /* VirtualType.Component */);\n    vnode_setProp(diffContext.$vNewNode$, OnRenderProp, componentQRL);\n    vnode_setProp(diffContext.$vNewNode$, ELEMENT_PROPS, jsxProps);\n    diffContext.$vNewNode$.key = jsxNode.key;\n}\nfunction insertNewInlineComponent(diffContext) {\n    vnode_insertVirtualBefore(diffContext.$journal$, diffContext.$vParent$, (diffContext.$vNewNode$ = vnode_newVirtual()), getInsertBefore(diffContext));\n    const jsxNode = diffContext.$jsxValue$;\n    isDev &&\n        vnode_setProp(diffContext.$vNewNode$, DEBUG_TYPE, \"I\" /* VirtualType.InlineComponent */);\n    vnode_setProp(diffContext.$vNewNode$, ELEMENT_PROPS, jsxNode.props);\n    if (jsxNode.key) {\n        diffContext.$vNewNode$.key = jsxNode.key;\n    }\n}\nfunction expectText(diffContext, text) {\n    if (diffContext.$vCurrent$ !== null) {\n        const type = vnode_getType(diffContext.$vCurrent$);\n        if (type === 3 /* Text */) {\n            if (text !== vnode_getText(diffContext.$vCurrent$)) {\n                vnode_setText(diffContext.$journal$, diffContext.$vCurrent$, text);\n                return;\n            }\n            return;\n        }\n    }\n    vnode_insertElementBefore(diffContext.$journal$, diffContext.$vParent$, (diffContext.$vNewNode$ = vnode_newText((qTest ? diffContext.$container$.document : document).createTextNode(text), text)), getCurrentInsertBefore(diffContext));\n}\n/**\n * Retrieve the key from the VNode.\n *\n * @param vNode - VNode to retrieve the key from\n * @returns Key\n */\nfunction getKey(vNode) {\n    if (vNode == null || vnode_isTextVNode(vNode)) {\n        return null;\n    }\n    return vNode.key;\n}\n/**\n * Retrieve the component hash from the VNode.\n *\n * @param vNode - VNode to retrieve the key from\n * @param getObject - Function to retrieve the object by id for QComponent QRL\n * @returns Hash\n */\nfunction getComponentHash(vNode, getObject) {\n    if (vNode == null || vnode_isTextVNode(vNode)) {\n        return null;\n    }\n    const qrl = vnode_getProp(vNode, OnRenderProp, getObject);\n    return qrl ? qrl.$hash$ : null;\n}\n/**\n * Marker class for JSX projection.\n *\n * Assume you have component like so\n *\n * ```\n * <SomeComponent>\n *   some-text\n *   <span q:slot=\"name\">some more text</span>\n *   more-text\n * </SomeComponent>\n * ```\n *\n * Before the `<SomeCompetent/>` is processed its children are transformed into:\n *\n * ```\n *   <Projection q:slot=\"\">\n *     some-text\n *     more-text\n *   </Projection>\n *   <Projection q:slot=\"name\">\n *     <span q:slot=\"name\">some more text</span>\n *   </Projection>\n * ```\n */\nfunction Projection() { }\nfunction handleProps(host, jsxProps, vNodeProps, container) {\n    let shouldRender = false;\n    if (vNodeProps) {\n        const constPropsDifferent = handleChangedProps(jsxProps[_CONST_PROPS], vNodeProps[_CONST_PROPS], vNodeProps[_PROPS_HANDLER], container, false);\n        shouldRender ||= constPropsDifferent;\n        const varPropsDifferent = handleChangedProps(jsxProps[_VAR_PROPS], vNodeProps[_VAR_PROPS], vNodeProps[_PROPS_HANDLER], container, true);\n        shouldRender ||= varPropsDifferent;\n        // Update the owner after all props have been synced\n        vNodeProps[_OWNER] = jsxProps[_OWNER];\n    }\n    else if (jsxProps) {\n        // If there is no props instance, create a new one.\n        // We can do this because we are not using the props instance for anything else.\n        vnode_setProp(host, ELEMENT_PROPS, jsxProps);\n        vNodeProps = jsxProps;\n    }\n    return shouldRender;\n}\nfunction handleChangedProps(src, dst, propsHandler, container, triggerEffects = true) {\n    if (isPropsEmpty(src) && isPropsEmpty(dst)) {\n        return false;\n    }\n    propsHandler.$container$ = container;\n    let changed = false;\n    // Update changed/added props from src\n    if (src) {\n        for (const key in src) {\n            if (key === 'children' || key === QBackRefs) {\n                continue;\n            }\n            if (!dst || src[key] !== dst[key]) {\n                if (triggerEffects) {\n                    if (dst) {\n                        // Update the value in dst BEFORE triggering effects\n                        // so effects see the new value\n                        // Note: Value is not triggering effects, because we are modyfing direct VAR_PROPS object\n                        dst[key] = src[key];\n                    }\n                    const didTigger = triggerPropsProxyEffect(propsHandler, key);\n                    if (!didTigger) {\n                        // If the effect was not triggered, then the prop has changed and we should rerender\n                        changed = true;\n                    }\n                }\n                else {\n                    // Early return for const props (no effects)\n                    return true;\n                }\n            }\n        }\n    }\n    // Remove props that are in dst but not in src\n    if (dst) {\n        for (const key in dst) {\n            if (key === 'children' || key === QBackRefs) {\n                continue;\n            }\n            if (!src || !_hasOwnProperty.call(src, key)) {\n                if (triggerEffects) {\n                    delete dst[key];\n                    const didTigger = triggerPropsProxyEffect(propsHandler, key);\n                    if (!didTigger) {\n                        // If the effect was not triggered, then the prop has changed and we should rerender\n                        changed = true;\n                    }\n                }\n            }\n        }\n    }\n    return changed;\n}\nfunction isPropsEmpty(props) {\n    if (!props) {\n        return true;\n    }\n    return isObjectEmpty(props);\n}\n/**\n * If vnode is removed, it is necessary to release all subscriptions associated with it.\n *\n * This function will traverse the vnode tree in depth-first order and release all subscriptions.\n *\n * The function takes into account:\n *\n * - Projection nodes by not recursing into them.\n * - Component nodes by recursing into the component content nodes (which may be projected).\n *\n * @param cursorRoot - Optional cursor root (vStartNode) to propagate dirty bits to during diff.\n */\nexport function cleanup(container, journal, vNode, cursorRoot = null) {\n    let vCursor = vNode;\n    const cursorRootData = cursorRoot && isCursor(cursorRoot) ? getCursorData(cursorRoot) : null;\n    // Depth first traversal\n    if (vnode_isTextVNode(vNode)) {\n        markVNodeAsDeleted(vCursor);\n        // Text nodes don't have subscriptions or children;\n        return;\n    }\n    let vParent = null;\n    do {\n        if (cursorRootData && vCursor !== cursorRoot && isCursor(vCursor)) {\n            abandonCursor(container, cursorRootData, vCursor);\n        }\n        const type = vCursor.flags;\n        if (type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) {\n            clearAllEffects(container, vCursor);\n            markVNodeAsDeleted(vCursor);\n            const isComponent = type & 2 /* VNodeFlags.Virtual */ &&\n                vnode_getProp(vCursor, OnRenderProp, null) !== null;\n            if (isComponent) {\n                // cleanup q:seq content\n                const seq = container.getHostProp(vCursor, ELEMENT_SEQ);\n                if (seq) {\n                    for (let i = 0; i < seq.length; i++) {\n                        const obj = seq[i];\n                        if (isObject(obj)) {\n                            const objIsTask = isTask(obj);\n                            if (objIsTask && obj.$flags$ & 1 /* TaskFlags.VISIBLE_TASK */) {\n                                obj.$flags$ |= 16 /* TaskFlags.NEEDS_CLEANUP */;\n                                markVNodeDirty(container, vCursor, 128 /* ChoreBits.CLEANUP */, cursorRoot);\n                                // don't call cleanupDestroyable yet, do it by the scheduler\n                                continue;\n                            }\n                            else if (obj instanceof SignalImpl || isStore(obj)) {\n                                clearAllEffects(container, obj);\n                            }\n                            if (objIsTask || obj instanceof AsyncSignalImpl) {\n                                cleanupDestroyable(obj);\n                            }\n                        }\n                    }\n                }\n                // SPECIAL CASE: If we are a component, we need to descend into the projected content and release the content.\n                const attrs = vCursor.props;\n                if (attrs) {\n                    const keys = Object.keys(attrs);\n                    for (let i = 0; i < keys.length; i++) {\n                        const key = keys[i];\n                        if (isSlotProp(key)) {\n                            const value = attrs[key];\n                            if (value) {\n                                attrs[key] = null; // prevent infinite loop\n                                const projection = typeof value === 'string'\n                                    ? vnode_locate(container.rootVNode, value)\n                                    : value;\n                                let projectionChild = vnode_getFirstChild(projection);\n                                while (projectionChild) {\n                                    cleanup(container, journal, projectionChild, cursorRoot);\n                                    projectionChild = projectionChild.nextSibling;\n                                }\n                                cleanupStaleUnclaimedProjection(container, journal, projection);\n                            }\n                        }\n                    }\n                }\n            }\n            const isProjection = vnode_isProjection(vCursor);\n            // Descend into children\n            if (!isProjection) {\n                // Only if it is not a projection\n                const vFirstChild = vnode_getFirstChild(vCursor);\n                if (vFirstChild) {\n                    vCursor = vFirstChild;\n                    continue;\n                }\n            }\n            // TODO: probably can be removed\n            else if (vCursor === vNode) {\n                /**\n                 * If it is a projection and we are at the root, then we should only walk the children to\n                 * materialize the projection content. This is because we could have references in the vnode\n                 * refs map which need to be materialized before cleanup.\n                 */\n                const vFirstChild = vnode_getFirstChild(vCursor);\n                if (vFirstChild) {\n                    vnode_walkVNode(vFirstChild);\n                    return;\n                }\n                clearProjectionFromSlotParent(container, vCursor);\n            }\n        }\n        else if (type & 4 /* VNodeFlags.Text */) {\n            markVNodeAsDeleted(vCursor);\n        }\n        // Out of children\n        if (vCursor === vNode) {\n            // we are where we started, this means that vNode has no children, so we are done.\n            return;\n        }\n        // Out of children, go to next sibling\n        const vNextSibling = vCursor.nextSibling;\n        if (vNextSibling) {\n            vCursor = vNextSibling;\n            continue;\n        }\n        // Out of siblings, go to parent\n        vParent = vCursor.parent;\n        while (vParent) {\n            if (vParent === vNode) {\n                // We are back where we started, we are done.\n                return;\n            }\n            const vNextParentSibling = vParent.nextSibling;\n            if (vNextParentSibling) {\n                vCursor = vNextParentSibling;\n                break;\n            }\n            vParent = vParent.parent;\n        }\n        if (vParent == null) {\n            // We are done.\n            return;\n        }\n    } while (true);\n}\nfunction clearProjectionFromSlotParent(container, vNode) {\n    if (!vNode.slotParent) {\n        return;\n    }\n    const slotName = container.getHostProp(vNode, QSlot);\n    if (slotName != null && container.getHostProp(vNode.slotParent, slotName) === vNode) {\n        vnode_setProp(vNode.slotParent, slotName, null);\n    }\n}\nfunction cleanupStaleUnclaimedProjection(container, journal, projection) {\n    // we are removing a node where the projection would go after slot render.\n    // This is not needed, so we need to cleanup still unclaimed projection\n    const projectionParent = projection.parent;\n    if (projectionParent) {\n        const projectionParentType = projectionParent.flags;\n        if (projectionParentType & 1 /* VNodeFlags.Element */ &&\n            vnode_getElementName(projectionParent) === QTemplate) {\n            // if parent is the q:template element then projection is still unclaimed - remove it\n            clearProjectionFromSlotParent(container, projection);\n            vnode_remove(journal, projectionParent, projection, true);\n        }\n    }\n}\nfunction markVNodeAsDeleted(vCursor) {\n    /**\n     * Marks vCursor as deleted. We need to do this to prevent chores from running after the vnode is\n     * removed. (for example signal subscriptions)\n     */\n    vCursor.flags |= 32 /* VNodeFlags.Deleted */;\n}\nfunction areWrappedSignalsEqual(oldSignal, newSignal) {\n    if (oldSignal === newSignal) {\n        return true;\n    }\n    return (newSignal.$func$ === oldSignal.$func$ && areArgumentsEqual(newSignal.$args$, oldSignal.$args$));\n}\nfunction areArgumentsEqual(oldArgs, newArgs) {\n    if (oldArgs === newArgs) {\n        return true;\n    }\n    if (!oldArgs || !newArgs || oldArgs.length !== newArgs.length) {\n        return false;\n    }\n    for (let i = 0; i < oldArgs.length; i++) {\n        if (oldArgs[i] !== newArgs[i]) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction containsWrappedSignal(data, signal) {\n    if (!(signal instanceof WrappedSignalImpl)) {\n        return false;\n    }\n    for (let i = 0; i < data.length; i++) {\n        const item = data[i];\n        if (item instanceof WrappedSignalImpl && areWrappedSignalsEqual(item, signal)) {\n            return true;\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvdm5vZGUtZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQWUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxN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QUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxZQUFZLGlCQUFpQixJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgX0VGRkVDVF9CQUNLX1JFRiB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvYmFja3JlZic7XG5pbXBvcnQgeyBjbGVhckFsbEVmZmVjdHMsIGNsZWFyRWZmZWN0U3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9jbGVhbnVwJztcbmltcG9ydCB7IEFzeW5jU2lnbmFsSW1wbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9hc3luYy1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBTaWduYWxJbXBsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3NpZ25hbC1pbXBsJztcbmltcG9ydCB7IGlzU3RvcmUgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc3RvcmUnO1xuaW1wb3J0IHsgV3JhcHBlZFNpZ25hbEltcGwgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvd3JhcHBlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25EYXRhIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zdWJzY3JpcHRpb24tZGF0YSc7XG5pbXBvcnQgeyBFZmZlY3RQcm9wZXJ0eSwgdHlwZSBDb25zdW1lciB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvdHlwZXMnO1xuaW1wb3J0IHsgaXNTaWduYWwgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3V0aWxzJztcbmltcG9ydCB7IFNFUklBTElaQUJMRV9TVEFURSwgdHlwZSBPblJlbmRlckZuIH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHsgaXNDdXJzb3IsIHR5cGUgQ3Vyc29yIH0gZnJvbSAnLi4vc2hhcmVkL2N1cnNvci9jdXJzb3InO1xuaW1wb3J0IHsgYWJhbmRvbkN1cnNvciB9IGZyb20gJy4uL3NoYXJlZC9jdXJzb3IvY3Vyc29yLXF1ZXVlJztcbmltcG9ydCB7IGdldEN1cnNvckRhdGEgfSBmcm9tICcuLi9zaGFyZWQvY3Vyc29yL2N1cnNvci1wcm9wcyc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBhc3NlcnRGYWxzZSwgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgSlNYTm9kZUltcGwsIGlzSlNYTm9kZSB9IGZyb20gJy4uL3NoYXJlZC9qc3gvanN4LW5vZGUnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIHR5cGUgUHJvcHMgfSBmcm9tICcuLi9zaGFyZWQvanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7XG4gIGRpcmVjdEdldFByb3BzUHJveHlQcm9wLFxuICB0cmlnZ2VyUHJvcHNQcm94eUVmZmVjdCxcbiAgdHlwZSBQcm9wc1Byb3h5LFxuICB0eXBlIFByb3BzUHJveHlIYW5kbGVyLFxufSBmcm9tICcuLi9zaGFyZWQvanN4L3Byb3BzLXByb3h5JztcbmltcG9ydCB7IFNsb3QgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB0eXBlIHsgSlNYTm9kZUludGVybmFsIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciwgSlNYQ2hpbGRyZW4gfSBmcm9tICcuLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgU1NSQ29tbWVudCwgU1NSUmF3LCBTa2lwUmVuZGVyIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC91dGlscy5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB0eXBlIHsgUUVsZW1lbnQsIHFXaW5kb3cgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgREVCVUdfVFlQRSwgUUNvbnRhaW5lclZhbHVlLCBWaXJ0dWFsVHlwZSB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBkaXJlY3RTZXRBdHRyaWJ1dGUgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvYXR0cmlidXRlJztcbmltcG9ydCB7IGVzY2FwZUhUTUwgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvY2hhcmFjdGVyLWVzY2FwaW5nJztcbmltcG9ydCB7IF9DT05TVF9QUk9QUywgX09XTkVSLCBfUFJPUFNfSEFORExFUiwgX1ZBUl9QUk9QUyB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNIdG1sQXR0cmlidXRlQW5FdmVudE5hbWUgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvZXZlbnQtbmFtZXMnO1xuaW1wb3J0IHsgZ2V0RmlsZUxvY2F0aW9uRnJvbUpzeCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9qc3gtZmlsZW5hbWUnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9QUk9QUyxcbiAgRUxFTUVOVF9TRVEsXG4gIElURVJBVElPTl9JVEVNX01VTFRJLFxuICBJVEVSQVRJT05fSVRFTV9TSU5HTEUsXG4gIE9uUmVuZGVyUHJvcCxcbiAgUUJhY2tSZWZzLFxuICBRQ29udGFpbmVyQXR0cixcbiAgUURlZmF1bHRTbG90LFxuICBRQ3Vyc29yQm91bmRhcnksXG4gIFFTbG90LFxuICBRVGVtcGxhdGUsXG4gIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLFxuICBkZWJ1Z1N0eWxlU2NvcGVJZFByZWZpeEF0dHIsXG59IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzUHJvbWlzZSwgcmV0cnlPblByb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgaXNTbG90UHJvcCwgcmVzb2x2ZVNsb3ROYW1lIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Byb3AnO1xuaW1wb3J0IHsgc2VyaWFsaXplQXR0cmlidXRlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3N0eWxlcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgdHlwZSBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS9lbGVtZW50LXZub2RlJztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS9lbnVtcy9jaG9yZS1iaXRzLmVudW0nO1xuaW1wb3J0IHR5cGUgeyBUZXh0Vk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdGV4dC12bm9kZSc7XG5pbXBvcnQgeyBjcmVhdGVTZXRBdHRyaWJ1dGVPcGVyYXRpb24gfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdHlwZXMvZG9tLXZub2RlLW9wZXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IFZpcnR1YWxWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92aXJ0dWFsLXZub2RlJztcbmltcG9ydCB0eXBlIHsgVk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdm5vZGUnO1xuaW1wb3J0IHsgYWRkVk5vZGVPcGVyYXRpb24sIG1hcmtWTm9kZURpcnR5IH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlLWRpcnR5JztcbmltcG9ydCB7IHVwZGF0ZURpcnR5U3VidHJlZUN1cnNvckJvdW5kYXJ5LCB0eXBlIEN1cnNvckJvdW5kYXJ5IH0gZnJvbSAnLi4vdXNlL3VzZS1jdXJzb3ItYm91bmRhcnknO1xuaW1wb3J0IHsgdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0IH0gZnJvbSAnLi4vdXNlL3VzZS1jb3JlJztcbmltcG9ydCB7IFRhc2tGbGFncywgaXNUYXNrIH0gZnJvbSAnLi4vdXNlL3VzZS10YXNrJztcbmltcG9ydCB7IGNsZWFudXBEZXN0cm95YWJsZSB9IGZyb20gJy4uL3VzZS91dGlscy9kZXN0cm95YWJsZSc7XG5pbXBvcnQgeyBydW5FdmVudEhhbmRsZXJRUkwgfSBmcm9tICcuLi9jbGllbnQvcnVuLXFybCc7XG5pbXBvcnQgeyBWTm9kZUZsYWdzLCB0eXBlIENsaWVudENvbnRhaW5lciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFwQXBwX2ZpbmRJbmR4LCBtYXBBcnJheV9zZXQgfSBmcm9tICcuL3V0aWwtbWFwQXJyYXknO1xuaW1wb3J0IHsgZ2V0TmV3RWxlbWVudE5hbWVzcGFjZURhdGEgfSBmcm9tICcuL3Zub2RlLW5hbWVzcGFjZSc7XG5pbXBvcnQge1xuICB2bm9kZV9lbnN1cmVFbGVtZW50SW5mbGF0ZWQsXG4gIHZub2RlX2dldERvbVBhcmVudFZOb2RlLFxuICB2bm9kZV9nZXRFbGVtZW50TmFtZSxcbiAgdm5vZGVfZ2V0Rmlyc3RDaGlsZCxcbiAgdm5vZGVfZ2V0UHJvamVjdGlvblBhcmVudENvbXBvbmVudCxcbiAgdm5vZGVfZ2V0UHJvcCxcbiAgdm5vZGVfZ2V0VGV4dCxcbiAgdm5vZGVfZ2V0VHlwZSxcbiAgdm5vZGVfaW5mbGF0ZVByb2plY3Rpb25UcmFpbGluZ1RleHQsXG4gIHZub2RlX2luc2VydEJlZm9yZSxcbiAgdm5vZGVfaW5zZXJ0RWxlbWVudEJlZm9yZSxcbiAgdm5vZGVfaW5zZXJ0VmlydHVhbEJlZm9yZSxcbiAgdm5vZGVfaXNFbGVtZW50Vk5vZGUsXG4gIHZub2RlX2lzUHJvamVjdGlvbixcbiAgdm5vZGVfaXNUZXh0Vk5vZGUsXG4gIHZub2RlX2lzVk5vZGUsXG4gIHZub2RlX2lzVmlydHVhbFZOb2RlLFxuICB2bm9kZV9sb2NhdGUsXG4gIHZub2RlX25ld0VsZW1lbnQsXG4gIHZub2RlX25ld1RleHQsXG4gIHZub2RlX25ld1ZpcnR1YWwsXG4gIHZub2RlX3JlbW92ZSxcbiAgdm5vZGVfc2V0QXR0cixcbiAgdm5vZGVfc2V0UHJvcCxcbiAgdm5vZGVfc2V0VGV4dCxcbiAgdm5vZGVfdHJ1bmNhdGUsXG4gIHZub2RlX3dhbGtWTm9kZSxcbiAgdHlwZSBWTm9kZUpvdXJuYWwsXG59IGZyb20gJy4vdm5vZGUtdXRpbHMnO1xuaW1wb3J0IHsgaXNPYmplY3RFbXB0eSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9vYmplY3RzJztcbmltcG9ydCB7IHNldElubGluZUNvbXBvbmVudERhdGEgfSBmcm9tICcuLi9zaGFyZWQvY3Vyc29yL2Nob3JlLWV4ZWN1dGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbnRleHQge1xuICAkY29udGFpbmVyJDogQ2xpZW50Q29udGFpbmVyO1xuICAkam91cm5hbCQ6IFZOb2RlSm91cm5hbDtcbiAgJGN1cnNvciQ6IEN1cnNvcjtcbiAgJHNjb3BlZFN0eWxlSWRQcmVmaXgkOiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogU3RhY2sgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsLlxuICAgKlxuICAgKiBXZSBwdXNoIGN1cnJlbnQgc3RhdGUgaW50byB0aGUgc3RhY2sgYmVmb3JlIGRlc2NlbmRpbmcgaW50byB0aGUgY2hpbGQsIGFuZCB3ZSBwb3AgdGhlIHN0YXRlXG4gICAqIHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY2hpbGQuXG4gICAqL1xuICAkc3RhY2skOiBhbnlbXTtcbiAgJGFzeW5jUXVldWUkOiBBcnJheTxWTm9kZSB8IFZhbHVlT3JQcm9taXNlPEpTWENoaWxkcmVuPiB8IFByb21pc2U8SlNYQ2hpbGRyZW4+PjtcbiAgJGFzeW5jQXR0cmlidXRlUHJvbWlzZXMkOiBQcm9taXNlPHZvaWQ+W107XG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8gVHJhdmVyc2Ugc3RhdGUgdmFyaWFibGVzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICR2UGFyZW50JDogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlO1xuICAvLy8gQ3VycmVudCBub2RlIHdlIGNvbXBhcmUgYWdhaW5zdC4gKFRoaW5rIG9mIGl0IGFzIGEgY3Vyc29yLilcbiAgLy8vIChOb2RlIGNhbiBiZSBudWxsLCBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4pXG4gICR2Q3VycmVudCQ6IFZOb2RlIHwgbnVsbDtcbiAgLy8vIFdoZW4gd2UgaW5zZXJ0IG5ldyBub2RlIHdlIHN0YXJ0IGl0IGhlcmUgc28gdGhhdCB3ZSBjYW4gZGVzY2VuZCBpbnRvIGl0LlxuICAvLy8gTk9URTogaXQgY2FuJ3QgYmUgc3RvcmVkIGluIGB2Q3VycmVudGAgYmVjYXVzZSBgdk5ld05vZGVgIGlzIGluIGpvdXJuYWxcbiAgLy8vIGFuZCBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSB0cmVlLlxuICAkdk5ld05vZGUkOiBWTm9kZSB8IG51bGw7XG4gICR2RW5kJDogVk5vZGUgfCBudWxsO1xuICAkdkVuZFBhcmVudCQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSB8IG51bGw7XG4gICR2U2libGluZ3MkOiBNYXA8c3RyaW5nLCBWTm9kZT4gfCBudWxsO1xuICAvLy8gVGhlIGFycmF5IGV2ZW4gaW5kaWNlcyB3aWxsIGNvbnRhaW5zIGtleXMgYW5kIG9kZCBpbmRpY2VzIHRoZSBub24ga2V5ZWQgc2libGluZ3MuXG4gICR2U2libGluZ3NBcnJheSQ6IEFycmF5PHN0cmluZyB8IFZOb2RlIHwgbnVsbD4gfCBudWxsO1xuICAvLy8gU2lkZSBidWZmZXIgdG8gc3RvcmUgbm9kZXMgdGhhdCBhcmUgbW92ZWQgb3V0IG9mIG9yZGVyIGR1cmluZyBrZXkgc2Nhbm5pbmcuXG4gIC8vLyBUaGlzIGNvbnRhaW5zIG5vZGVzIHRoYXQgd2VyZSBmb3VuZCBiZWZvcmUgdGhlIHRhcmdldCBrZXkgYW5kIG5lZWQgdG8gYmUgbW92ZWQgbGF0ZXIuXG4gICR2U2lkZUJ1ZmZlciQ6IE1hcDxzdHJpbmcsIFZOb2RlPiB8IG51bGw7XG4gIC8vLyBDdXJyZW50IHNldCBvZiBKU1ggY2hpbGRyZW4uXG4gICRqc3hDaGlsZHJlbiQ6IEpTWENoaWxkcmVuW10gfCBudWxsO1xuICAvLyBDdXJyZW50IEpTWCBjaGlsZC5cbiAgJGpzeFZhbHVlJDogSlNYQ2hpbGRyZW4gfCBudWxsO1xuICAkanN4SWR4JDogbnVtYmVyO1xuICAkanN4Q291bnQkOiBudW1iZXI7XG4gIC8vIFdoZW4gd2UgZGVzY2VuZCBpbnRvIGNoaWxkcmVuLCB3ZSBuZWVkIHRvIHNraXAgYWR2YW5jZSgpIGJlY2F1c2Ugd2UganVzdCBkZXNjZW5kZWQuXG4gICRzaG91bGRBZHZhbmNlJDogYm9vbGVhbjtcbiAgJGlzQ3JlYXRpb25Nb2RlJDogYm9vbGVhbjtcbiAgJHN1YnNjcmlwdGlvbkRhdGEkOiB7XG4gICAgJGNvbnN0JDogU3Vic2NyaXB0aW9uRGF0YTtcbiAgICAkdmFyJDogU3Vic2NyaXB0aW9uRGF0YTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGVla05leHRTaWJsaW5nKHZDdXJyZW50OiBWTm9kZSB8IG51bGwpOiBWTm9kZSB8IG51bGwge1xuICByZXR1cm4gdkN1cnJlbnQgPyAodkN1cnJlbnQubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldExldmVsQm91bmRhcnkoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0KTogVk5vZGUgfCBudWxsIHtcbiAgcmV0dXJuIGRpZmZDb250ZXh0LiR2UGFyZW50JCA9PT0gZGlmZkNvbnRleHQuJHZFbmRQYXJlbnQkID8gZGlmZkNvbnRleHQuJHZFbmQkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEluc2VydEJlZm9yZShkaWZmQ29udGV4dDogRGlmZkNvbnRleHQpOiBWTm9kZSB8IG51bGwge1xuICByZXR1cm4gZGlmZkNvbnRleHQuJHZDdXJyZW50JCB8fCBnZXRMZXZlbEJvdW5kYXJ5KGRpZmZDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcGVla05leHRTaWJsaW5nV2l0aGluQm91bmRhcnkoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAgdkN1cnJlbnQ6IFZOb2RlIHwgbnVsbFxuKTogVk5vZGUgfCBudWxsIHtcbiAgY29uc3QgbmV4dFNpYmxpbmcgPSBwZWVrTmV4dFNpYmxpbmcodkN1cnJlbnQpO1xuICBjb25zdCBib3VuZGFyeSA9IGdldExldmVsQm91bmRhcnkoZGlmZkNvbnRleHQpO1xuICByZXR1cm4gbmV4dFNpYmxpbmcgPT09IGJvdW5kYXJ5ID8gbnVsbCA6IG5leHRTaWJsaW5nO1xufVxuXG5jb25zdCBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKiogSGVscGVyIHRvIHNldCBhbiBhdHRyaWJ1dGUgb24gYSB2bm9kZS4gRXh0cmFjdGVkIHRvIG1vZHVsZSBzY29wZSB0byBhdm9pZCBjbG9zdXJlIGFsbG9jYXRpb24uICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUoXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgdm5vZGU6IEVsZW1lbnRWTm9kZSxcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHNjb3BlZFN0eWxlSWRQcmVmaXg6IHN0cmluZyB8IG51bGwsXG4gIG9yaWdpbmFsVmFsdWU6IGFueVxuKSB7XG4gIHFUZXN0ICYmXG4gICAgc2NvcGVkU3R5bGVJZFByZWZpeCAmJlxuICAgIHZub2RlX3NldFByb3Aodm5vZGUsIGRlYnVnU3R5bGVTY29wZUlkUHJlZml4QXR0ciwgc2NvcGVkU3R5bGVJZFByZWZpeCk7XG4gIHZub2RlX3NldFByb3Aodm5vZGUsIGtleSwgb3JpZ2luYWxWYWx1ZSk7XG4gIGFkZFZOb2RlT3BlcmF0aW9uKFxuICAgIGpvdXJuYWwsXG4gICAgY3JlYXRlU2V0QXR0cmlidXRlT3BlcmF0aW9uKFxuICAgICAgdm5vZGUubm9kZSxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgc2NvcGVkU3R5bGVJZFByZWZpeCxcbiAgICAgICh2bm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuTlNfc3ZnKSAhPT0gMFxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpZmZDb250ZXh0KFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lcixcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBjdXJzb3I6IEN1cnNvcixcbiAgc2NvcGVkU3R5bGVJZFByZWZpeDogc3RyaW5nIHwgbnVsbFxuKTogRGlmZkNvbnRleHQge1xuICByZXR1cm4ge1xuICAgICRjb250YWluZXIkOiBjb250YWluZXIsXG4gICAgJGpvdXJuYWwkOiBqb3VybmFsLFxuICAgICRjdXJzb3IkOiBjdXJzb3IsXG4gICAgJHNjb3BlZFN0eWxlSWRQcmVmaXgkOiBzY29wZWRTdHlsZUlkUHJlZml4LFxuICAgICRzdGFjayQ6IFtdLFxuICAgICRhc3luY1F1ZXVlJDogW10sXG4gICAgJGFzeW5jQXR0cmlidXRlUHJvbWlzZXMkOiBbXSxcbiAgICAkdlBhcmVudCQ6IG51bGwhLFxuICAgICR2Q3VycmVudCQ6IG51bGwsXG4gICAgJHZOZXdOb2RlJDogbnVsbCxcbiAgICAkdkVuZCQ6IG51bGwsXG4gICAgJHZFbmRQYXJlbnQkOiBudWxsLFxuICAgICR2U2libGluZ3MkOiBudWxsLFxuICAgICR2U2libGluZ3NBcnJheSQ6IG51bGwsXG4gICAgJHZTaWRlQnVmZmVyJDogbnVsbCxcbiAgICAkanN4Q2hpbGRyZW4kOiBudWxsISxcbiAgICAkanN4VmFsdWUkOiBudWxsLFxuICAgICRqc3hJZHgkOiAwLFxuICAgICRqc3hDb3VudCQ6IDAsXG4gICAgJHNob3VsZEFkdmFuY2UkOiB0cnVlLFxuICAgICRpc0NyZWF0aW9uTW9kZSQ6IGZhbHNlLFxuICAgICRzdWJzY3JpcHRpb25EYXRhJDoge1xuICAgICAgJGNvbnN0JDogbmV3IFN1YnNjcmlwdGlvbkRhdGEoe1xuICAgICAgICAkc2NvcGVkU3R5bGVJZFByZWZpeCQ6IHNjb3BlZFN0eWxlSWRQcmVmaXgsXG4gICAgICAgICRpc0NvbnN0JDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgJHZhciQ6IG5ldyBTdWJzY3JpcHRpb25EYXRhKHtcbiAgICAgICAgJHNjb3BlZFN0eWxlSWRQcmVmaXgkOiBzY29wZWRTdHlsZUlkUHJlZml4LFxuICAgICAgICAkaXNDb25zdCQ6IGZhbHNlLFxuICAgICAgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZURpZmZDb250ZXh0KFxuICBkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsXG4gIGNvbnRhaW5lcjogQ2xpZW50Q29udGFpbmVyLFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIGN1cnNvcjogQ3Vyc29yLFxuICBzY29wZWRTdHlsZUlkUHJlZml4OiBzdHJpbmcgfCBudWxsXG4pIHtcbiAgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQgPSBjb250YWluZXI7XG4gIGRpZmZDb250ZXh0LiRqb3VybmFsJCA9IGpvdXJuYWw7XG4gIGRpZmZDb250ZXh0LiRjdXJzb3IkID0gY3Vyc29yO1xuICBkaWZmQ29udGV4dC4kc2NvcGVkU3R5bGVJZFByZWZpeCQgPSBzY29wZWRTdHlsZUlkUHJlZml4O1xuICBkaWZmQ29udGV4dC4kc3Vic2NyaXB0aW9uRGF0YSQuJGNvbnN0JC5kYXRhLiRzY29wZWRTdHlsZUlkUHJlZml4JCA9IHNjb3BlZFN0eWxlSWRQcmVmaXg7XG4gIGRpZmZDb250ZXh0LiRzdWJzY3JpcHRpb25EYXRhJC4kdmFyJC5kYXRhLiRzY29wZWRTdHlsZUlkUHJlZml4JCA9IHNjb3BlZFN0eWxlSWRQcmVmaXg7XG4gIGRpZmZDb250ZXh0LiRhc3luY1F1ZXVlJC5sZW5ndGggPSAwO1xuICBkaWZmQ29udGV4dC4kYXN5bmNBdHRyaWJ1dGVQcm9taXNlcyQubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlcGFyZWREaWZmQ29udGV4dChcbiAgZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0IHwgdW5kZWZpbmVkLFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lcixcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBjdXJzb3I6IEN1cnNvcixcbiAgc2NvcGVkU3R5bGVJZFByZWZpeDogc3RyaW5nIHwgbnVsbFxuKSB7XG4gIGNvbnN0IHJldXNhYmxlRGlmZkNvbnRleHQgPVxuICAgIGRpZmZDb250ZXh0ID8/IGNyZWF0ZURpZmZDb250ZXh0KGNvbnRhaW5lciwgam91cm5hbCwgY3Vyc29yLCBzY29wZWRTdHlsZUlkUHJlZml4KTtcbiAgcHJlcGFyZURpZmZDb250ZXh0KHJldXNhYmxlRGlmZkNvbnRleHQsIGNvbnRhaW5lciwgam91cm5hbCwgY3Vyc29yLCBzY29wZWRTdHlsZUlkUHJlZml4KTtcbiAgcmV0dXJuIHJldXNhYmxlRGlmZkNvbnRleHQ7XG59XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9kaWZmID0gKFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lcixcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBqc3hOb2RlOiBKU1hDaGlsZHJlbixcbiAgdlN0YXJ0Tm9kZTogVk5vZGUsXG4gIGN1cnNvcjogQ3Vyc29yLFxuICBzY29wZWRTdHlsZUlkUHJlZml4OiBzdHJpbmcgfCBudWxsLFxuICBkaWZmQ29udGV4dD86IERpZmZDb250ZXh0XG4pID0+IHtcbiAgcmV0dXJuIHJ1bkRpZmYoXG4gICAgZ2V0UHJlcGFyZWREaWZmQ29udGV4dChkaWZmQ29udGV4dCwgY29udGFpbmVyLCBqb3VybmFsLCBjdXJzb3IsIHNjb3BlZFN0eWxlSWRQcmVmaXgpLFxuICAgIGpzeE5vZGUsXG4gICAgdlN0YXJ0Tm9kZVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2RpZmZfcmFuZ2UgPSAoXG4gIGNvbnRhaW5lcjogQ2xpZW50Q29udGFpbmVyLFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIGpzeE5vZGU6IEpTWENoaWxkcmVuLFxuICB2UGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gIHZDdXJyZW50OiBWTm9kZSB8IG51bGwsXG4gIHZFbmQ6IFZOb2RlIHwgbnVsbCxcbiAgY3Vyc29yOiBDdXJzb3IsXG4gIHNjb3BlZFN0eWxlSWRQcmVmaXg6IHN0cmluZyB8IG51bGwsXG4gIC8vIEFsbG93cyBjYWxsZXJzIGRpZmZpbmcgaW50byBhbiBlbXB0eSBrbm93bi1uZXcgcmFuZ2UgdG8gc2tpcCBrZXllZC1zaWJsaW5nIG1hdGVyaWFsaXphdGlvbi5cbiAgZm9yY2VDcmVhdGlvbk1vZGUgPSBmYWxzZSxcbiAgZGlmZkNvbnRleHQ/OiBEaWZmQ29udGV4dFxuKSA9PiB7XG4gIHJldHVybiBydW5EaWZmKFxuICAgIGdldFByZXBhcmVkRGlmZkNvbnRleHQoZGlmZkNvbnRleHQsIGNvbnRhaW5lciwgam91cm5hbCwgY3Vyc29yLCBzY29wZWRTdHlsZUlkUHJlZml4KSxcbiAgICBqc3hOb2RlLFxuICAgIHZQYXJlbnQsXG4gICAgdkN1cnJlbnQsXG4gICAgdkVuZCxcbiAgICBmb3JjZUNyZWF0aW9uTW9kZVxuICApO1xufTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBydW5EaWZmKFxuICBkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsXG4gIGpzeE5vZGU6IEpTWENoaWxkcmVuLFxuICB2U3RhcnROb2RlOiBWTm9kZSxcbiAgdkN1cnJlbnQ6IFZOb2RlIHwgbnVsbCA9IHZub2RlX2dldEZpcnN0Q2hpbGQodlN0YXJ0Tm9kZSksXG4gIHZFbmQ6IFZOb2RlIHwgbnVsbCA9IG51bGwsXG4gIGZvcmNlQ3JlYXRpb25Nb2RlID0gZmFsc2Vcbikge1xuICBkaWZmKGRpZmZDb250ZXh0LCBqc3hOb2RlLCB2U3RhcnROb2RlLCB2Q3VycmVudCwgdkVuZCwgZm9yY2VDcmVhdGlvbk1vZGUpO1xuICBjb25zdCByZXN1bHQgPSBkcmFpbkFzeW5jUXVldWUoZGlmZkNvbnRleHQpO1xuXG4gIC8vIENsZWFudXAgZGlmZkNvbnRleHQgYWZ0ZXIgY29tcGxldGlvblxuICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICByZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCkgPT4ge1xuICAgICAgY2xlYW51cERpZmZDb250ZXh0KGRpZmZDb250ZXh0KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGVhbnVwRGlmZkNvbnRleHQoZGlmZkNvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZmYoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAganN4Tm9kZTogSlNYQ2hpbGRyZW4sXG4gIHZTdGFydE5vZGU6IFZOb2RlLFxuICB2Q3VycmVudDogVk5vZGUgfCBudWxsID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2U3RhcnROb2RlKSxcbiAgdkVuZDogVk5vZGUgfCBudWxsID0gbnVsbCxcbiAgZm9yY2VDcmVhdGlvbk1vZGUgPSBmYWxzZVxuKSB7XG4gIGNvbnN0IHByZXZpb3VzQ3JlYXRpb25Nb2RlID0gZGlmZkNvbnRleHQuJGlzQ3JlYXRpb25Nb2RlJDtcbiAgaXNEZXYgJiYgYXNzZXJ0RmFsc2Uodm5vZGVfaXNWTm9kZShqc3hOb2RlKSwgJ0pTWE5vZGUgc2hvdWxkIG5vdCBiZSBhIFZOb2RlJyk7XG4gIGlzRGV2ICYmIGFzc2VydFRydWUodm5vZGVfaXNWTm9kZSh2U3RhcnROb2RlKSwgJ3ZTdGFydE5vZGUgc2hvdWxkIGJlIGEgVk5vZGUnKTtcbiAgZGlmZkNvbnRleHQuJGlzQ3JlYXRpb25Nb2RlJCA9IGZvcmNlQ3JlYXRpb25Nb2RlIHx8IHByZXZpb3VzQ3JlYXRpb25Nb2RlO1xuICBkaWZmQ29udGV4dC4kdlBhcmVudCQgPSB2U3RhcnROb2RlIGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZTtcbiAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCA9IG51bGw7XG4gIGRpZmZDb250ZXh0LiR2Q3VycmVudCQgPSB2Q3VycmVudDtcbiAgZGlmZkNvbnRleHQuJHZFbmQkID0gdkVuZDtcbiAgZGlmZkNvbnRleHQuJHZFbmRQYXJlbnQkID0gdlN0YXJ0Tm9kZSBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGU7XG4gIHN0YWNrUHVzaChkaWZmQ29udGV4dCwganN4Tm9kZSwgdHJ1ZSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZGlmZkNvbnRleHQuJHZQYXJlbnQkLmZsYWdzICYgVk5vZGVGbGFncy5EZWxldGVkKSB7XG4gICAgICAvLyBJZ25vcmUgZGlmZiBpZiB0aGUgcGFyZW50IGlzIGRlbGV0ZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKGRpZmZDb250ZXh0LiRzdGFjayQubGVuZ3RoKSB7XG4gICAgICB3aGlsZSAoZGlmZkNvbnRleHQuJGpzeElkeCQgPCBkaWZmQ29udGV4dC4kanN4Q291bnQkKSB7XG4gICAgICAgIGlzRGV2ICYmXG4gICAgICAgICAgYXNzZXJ0RmFsc2UoXG4gICAgICAgICAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQgPT09IGRpZmZDb250ZXh0LiR2Q3VycmVudCQsXG4gICAgICAgICAgICBcIlBhcmVudCBhbmQgY3VycmVudCBjYW4ndCBiZSB0aGUgc2FtZVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkaWZmQ29udGV4dC4kanN4VmFsdWUkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGV4cGVjdFRleHQoZGlmZkNvbnRleHQsIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkaWZmQ29udGV4dC4kanN4VmFsdWUkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGV4cGVjdFRleHQoZGlmZkNvbnRleHQsIFN0cmluZyhkaWZmQ29udGV4dC4kanN4VmFsdWUkKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZkNvbnRleHQuJGpzeFZhbHVlJCAmJiB0eXBlb2YgZGlmZkNvbnRleHQuJGpzeFZhbHVlJCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoaXNKU1hOb2RlKGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQpKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZGlmZkNvbnRleHQuJGpzeFZhbHVlJC50eXBlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBleHBlY3ROb1RleHROb2RlKGRpZmZDb250ZXh0KTtcbiAgICAgICAgICAgICAgZXhwZWN0RWxlbWVudChkaWZmQ29udGV4dCwgZGlmZkNvbnRleHQuJGpzeFZhbHVlJCwgdHlwZSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgaGFzRGFuZ2Vyb3VzSW5uZXJIVE1MID1cbiAgICAgICAgICAgICAgICAoZGlmZkNvbnRleHQuJGpzeFZhbHVlJC5jb25zdFByb3BzICYmXG4gICAgICAgICAgICAgICAgICBfaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZGlmZkNvbnRleHQuJGpzeFZhbHVlJC5jb25zdFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTFxuICAgICAgICAgICAgICAgICAgKSkgfHxcbiAgICAgICAgICAgICAgICBfaGFzT3duUHJvcGVydHkuY2FsbChkaWZmQ29udGV4dC4kanN4VmFsdWUkLnZhclByb3BzLCBkYW5nZXJvdXNseVNldElubmVySFRNTCk7XG4gICAgICAgICAgICAgIGlmIChoYXNEYW5nZXJvdXNJbm5lckhUTUwpIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGNsZWFuIHVwIGNoaWxkcmVuIGZvciBleGlzdGluZyBub2RlczsgbmV3IG5vZGVzIGhhdmUgbm8gY2hpbGRyZW4geWV0XG4gICAgICAgICAgICAgICAgaWYgKCFkaWZmQ29udGV4dC4kdk5ld05vZGUkKSB7XG4gICAgICAgICAgICAgICAgICBleHBlY3ROb0NoaWxkcmVuKGRpZmZDb250ZXh0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlc2NlbmQoZGlmZkNvbnRleHQsIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQuY2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSBGcmFnbWVudCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdE5vVGV4dE5vZGUoZGlmZkNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdFZpcnR1YWwoZGlmZkNvbnRleHQsIFZpcnR1YWxUeXBlLkZyYWdtZW50LCBkaWZmQ29udGV4dC4kanN4VmFsdWUkLmtleSk7XG4gICAgICAgICAgICAgICAgZGVzY2VuZChkaWZmQ29udGV4dCwgZGlmZkNvbnRleHQuJGpzeFZhbHVlJC5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU2xvdCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdE5vVGV4dE5vZGUoZGlmZkNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmICghZXhwZWN0U2xvdChkaWZmQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gcHJvamVjdCwgc28gdHJ5IHRvIHJlbmRlciB0aGUgU2xvdCBkZWZhdWx0IGNvbnRlbnQuXG4gICAgICAgICAgICAgICAgICBkZXNjZW5kKGRpZmZDb250ZXh0LCBkaWZmQ29udGV4dC4kanN4VmFsdWUkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gUHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgIGV4cGVjdFByb2plY3Rpb24oZGlmZkNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGRlc2NlbmQoXG4gICAgICAgICAgICAgICAgICBkaWZmQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBwcm9qZWN0aW9uLCB3ZSBkb24ndCB3YW50IHRvIGV4cGVjdCBubyBjaGlsZHJlblxuICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgcHJvamVjdGlvbidzIGNoaWxkcmVuIGFyZSBub3QgcmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNTUkNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBleHBlY3ROb01vcmUoZGlmZkNvbnRleHQpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNTUlJhdykge1xuICAgICAgICAgICAgICAgIGV4cGVjdE5vTW9yZShkaWZmQ29udGV4dCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTXVzdCBiZSBhIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGV4cGVjdE5vVGV4dE5vZGUoZGlmZkNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdENvbXBvbmVudChkaWZmQ29udGV4dCwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGlmZkNvbnRleHQuJGpzeFZhbHVlJCkpIHtcbiAgICAgICAgICAgIGRlc2NlbmQoZGlmZkNvbnRleHQsIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQsIGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU2lnbmFsKGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQpKSB7XG4gICAgICAgICAgICBleHBlY3RWaXJ0dWFsKGRpZmZDb250ZXh0LCBWaXJ0dWFsVHlwZS5XcmFwcGVkU2lnbmFsLCBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZFNpZ25hbCA9XG4gICAgICAgICAgICAgIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsSW1wbFxuICAgICAgICAgICAgICAgID8gZGlmZkNvbnRleHQuJGpzeFZhbHVlJC4kdW53cmFwSWZTaWduYWwkKClcbiAgICAgICAgICAgICAgICA6IGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQ7XG4gICAgICAgICAgICBjb25zdCBzaWduYWxzID0gZGlmZkNvbnRleHQuJHZDdXJyZW50JD8uW19FRkZFQ1RfQkFDS19SRUZdPy5nZXQoXG4gICAgICAgICAgICAgIEVmZmVjdFByb3BlcnR5LlZOT0RFXG4gICAgICAgICAgICApPy5iYWNrUmVmO1xuICAgICAgICAgICAgbGV0IGhhc1Vud3JhcHBlZFNpZ25hbCA9IHNpZ25hbHM/Lmhhcyh1bndyYXBwZWRTaWduYWwpO1xuICAgICAgICAgICAgaWYgKHNpZ25hbHMgJiYgdW53cmFwcGVkU2lnbmFsIGluc3RhbmNlb2YgV3JhcHBlZFNpZ25hbEltcGwpIHtcbiAgICAgICAgICAgICAgaGFzVW53cmFwcGVkU2lnbmFsID0gY29udGFpbnNXcmFwcGVkU2lnbmFsKHNpZ25hbHMsIHVud3JhcHBlZFNpZ25hbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc1Vud3JhcHBlZFNpZ25hbCkge1xuICAgICAgICAgICAgICBjb25zdCB2SG9zdCA9IChkaWZmQ29udGV4dC4kdk5ld05vZGUkIHx8IGRpZmZDb250ZXh0LiR2Q3VycmVudCQpITtcbiAgICAgICAgICAgICAgZGVzY2VuZChcbiAgICAgICAgICAgICAgICBkaWZmQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNvbHZlU2lnbmFsQW5kRGVzY2VuZChkaWZmQ29udGV4dCwgKCkgPT5cbiAgICAgICAgICAgICAgICAgIHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdChcbiAgICAgICAgICAgICAgICAgICAgdW53cmFwcGVkU2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICB2SG9zdCxcbiAgICAgICAgICAgICAgICAgICAgRWZmZWN0UHJvcGVydHkuVk5PREUsXG4gICAgICAgICAgICAgICAgICAgIGRpZmZDb250ZXh0LiRjb250YWluZXIkXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UoZGlmZkNvbnRleHQuJGpzeFZhbHVlJCkpIHtcbiAgICAgICAgICAgIGV4cGVjdFZpcnR1YWwoZGlmZkNvbnRleHQsIFZpcnR1YWxUeXBlLkF3YWl0ZWQsIG51bGwpO1xuICAgICAgICAgICAgZGlmZkNvbnRleHQuJGFzeW5jUXVldWUkLnB1c2goXG4gICAgICAgICAgICAgIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQsXG4gICAgICAgICAgICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgfHwgZGlmZkNvbnRleHQuJHZDdXJyZW50JFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZkNvbnRleHQuJGpzeFZhbHVlJCA9PT0gKFNraXBSZW5kZXIgYXMgSlNYQ2hpbGRyZW4pKSB7XG4gICAgICAgICAgLy8gZG8gbm90aGluZywgd2UgYXJlIHNraXBwaW5nIHRoaXMgbm9kZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cGVjdFRleHQoZGlmZkNvbnRleHQsICcnKTtcbiAgICAgICAgfVxuICAgICAgICBhZHZhbmNlKGRpZmZDb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdE5vTW9yZShkaWZmQ29udGV4dCk7XG4gICAgICBjbGVhbnVwU2lkZUJ1ZmZlcihkaWZmQ29udGV4dCk7XG4gICAgICBhc2NlbmQoZGlmZkNvbnRleHQpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBkaWZmQ29udGV4dC4kaXNDcmVhdGlvbk1vZGUkID0gcHJldmlvdXNDcmVhdGlvbk1vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVNpZ25hbEFuZERlc2NlbmQoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAgZm46ICgpID0+IFZhbHVlT3JQcm9taXNlPGFueT5cbik6IFZhbHVlT3JQcm9taXNlPGFueT4ge1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gU2lnbmFsIHRocmV3IGEgcHJvbWlzZSAoYXN5bmMgY29tcHV0ZWQgc2lnbmFsKSAtIGhhbmRsZSByZXRyeSBhbmQgYXN5bmMgcXVldWVcbiAgICBpZiAoaXNQcm9taXNlKGUpKSB7XG4gICAgICAvLyBUaGUgdGhyb3duIHByb21pc2Ugd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNpZ25hbCBpcyByZWFkeSwgdGhlbiByZXRyeSBmbigpIHdpdGggcmV0cnkgbG9naWNcbiAgICAgIGNvbnN0IHJldHJ5UHJvbWlzZSA9IGUudGhlbigoKSA9PiByZXRyeU9uUHJvbWlzZShmbikpO1xuICAgICAgZGlmZkNvbnRleHQuJGFzeW5jUXVldWUkLnB1c2gocmV0cnlQcm9taXNlLCBkaWZmQ29udGV4dC4kdk5ld05vZGUkIHx8IGRpZmZDb250ZXh0LiR2Q3VycmVudCQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWR2YW5jZShkaWZmQ29udGV4dDogRGlmZkNvbnRleHQpIHtcbiAgaWYgKCFkaWZmQ29udGV4dC4kc2hvdWxkQWR2YW5jZSQpIHtcbiAgICBkaWZmQ29udGV4dC4kc2hvdWxkQWR2YW5jZSQgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBkaWZmQ29udGV4dC4kanN4SWR4JCsrO1xuICBpZiAoZGlmZkNvbnRleHQuJGpzeElkeCQgPCBkaWZmQ29udGV4dC4kanN4Q291bnQkKSB7XG4gICAgZGlmZkNvbnRleHQuJGpzeFZhbHVlJCA9IGRpZmZDb250ZXh0LiRqc3hDaGlsZHJlbiQhW2RpZmZDb250ZXh0LiRqc3hJZHgkXTtcbiAgfSBlbHNlIGlmIChcbiAgICBkaWZmQ29udGV4dC4kc3RhY2skLmxlbmd0aCA+IDAgJiZcbiAgICBkaWZmQ29udGV4dC4kc3RhY2skW2RpZmZDb250ZXh0LiRzdGFjayQubGVuZ3RoIC0gMV0gPT09IGZhbHNlXG4gICkge1xuICAgIC8vIHRoaXMgd2FzIHNwZWNpYWwgYGRlc2NlbmRWTm9kZSA9PT0gZmFsc2VgIHNvIHBvcCBhbmQgdHJ5IGFnYWluXG4gICAgcmV0dXJuIGFzY2VuZChkaWZmQ29udGV4dCk7XG4gIH1cbiAgaWYgKGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgbmV3IE5vZGUuXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBgdkN1cnJlbnRgIHdhcyBkZWVtZWQgbm90IHVzZWZ1bCBhbmQgd2UgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgaXQuXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBuZXh0IG5vZGUgd2Ugc2hvdWxkIGxvb2sgYXQgaXMgdGhlIGB2Q3VycmVudGAgc28ganVzdCBjbGVhciB0aGVcbiAgICAvLyB2TmV3Tm9kZSAgYW5kIHRyeSBhZ2Fpbi5cbiAgICBkaWZmQ29udGV4dC4kdk5ld05vZGUkID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBkaWZmQ29udGV4dC4kdkN1cnJlbnQkID0gcGVla05leHRTaWJsaW5nV2l0aGluQm91bmRhcnkoZGlmZkNvbnRleHQsIGRpZmZDb250ZXh0LiR2Q3VycmVudCQpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIGNoaWxkcmVuXG4gKiBAcGFyYW0gZGVzY2VuZFZOb2RlIC0gSWYgdHJ1ZSB3ZSBhcmUgZGVzY2VuZGluZyBpbnRvIHZOb2RlOyBUaGlzIGlzIHNldCB0byBmYWxzZSBpZiB3ZSBjb21lXG4gKiAgIGFjcm9zcyBhbiBhcnJheSBpbiBqc3gsIGFuZCB3ZSBuZWVkIHRvIGRlc2NlbmQgaW50byB0aGUgYXJyYXkgd2l0aG91dCBhY3R1YWxseSBkZXNjZW5kaW5nIGludG9cbiAqICAgdGhlIHZOb2RlLlxuICpcbiAqICAgRXhhbXBsZTpcbiAqXG4gKiAgIGBgYFxuICogICA8PlxuICogICBiZWZvcmVcbiAqICAge1sxLDJdLm1hcCgoaSkgPT4gPHNwYW4+e2l9PC9zcGFuPil9XG4gKiAgIGFmdGVyXG4gKiAgIDwvPlxuICogYGBgXG4gKlxuICogICBJbiB0aGUgYWJvdmUgZXhhbXBsZSBhbGwgbm9kZXMgYXJlIG9uIHNhbWUgbGV2ZWwgc28gd2UgZG9uJ3QgYGRlc2NlbmRWTm9kZWAgZXZlbiB0aG91Z2h0IHRoZXJlIGlzXG4gKiAgIGFuIGFycmF5IHByb2R1Y2VkIGJ5IHRoZSBgbWFwYCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZGVzY2VuZChcbiAgZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0LFxuICBjaGlsZHJlbjogSlNYQ2hpbGRyZW4sXG4gIGRlc2NlbmRWTm9kZTogYm9vbGVhbixcbiAgc2hvdWxkRXhwZWN0Tm9DaGlsZHJlbjogYm9vbGVhbiA9IHRydWVcbikge1xuICBpZiAoXG4gICAgc2hvdWxkRXhwZWN0Tm9DaGlsZHJlbiAmJlxuICAgIChjaGlsZHJlbiA9PSBudWxsIHx8IChkZXNjZW5kVk5vZGUgJiYgaXNBcnJheShjaGlsZHJlbikgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSlcbiAgKSB7XG4gICAgZXhwZWN0Tm9DaGlsZHJlbihkaWZmQ29udGV4dCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0YWNrUHVzaChkaWZmQ29udGV4dCwgY2hpbGRyZW4sIGRlc2NlbmRWTm9kZSk7XG4gIGlmIChkZXNjZW5kVk5vZGUpIHtcbiAgICBpc0RldiAmJlxuICAgICAgYXNzZXJ0RGVmaW5lZChcbiAgICAgICAgZGlmZkNvbnRleHQuJHZDdXJyZW50JCB8fCBkaWZmQ29udGV4dC4kdk5ld05vZGUkLFxuICAgICAgICAnRXhwZWN0aW5nIHZDdXJyZW50IHRvIGJlIGRlZmluZWQuJ1xuICAgICAgKTtcbiAgICBjb25zdCBjcmVhdGlvbk1vZGUgPVxuICAgICAgZGlmZkNvbnRleHQuJGlzQ3JlYXRpb25Nb2RlJCB8fFxuICAgICAgISFkaWZmQ29udGV4dC4kdk5ld05vZGUkIHx8XG4gICAgICAhdm5vZGVfZ2V0Rmlyc3RDaGlsZChkaWZmQ29udGV4dC4kdkN1cnJlbnQkISk7XG5cbiAgICBkaWZmQ29udGV4dC4kaXNDcmVhdGlvbk1vZGUkID0gY3JlYXRpb25Nb2RlO1xuICAgIGRpZmZDb250ZXh0LiR2U2lkZUJ1ZmZlciQgPSBudWxsO1xuICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3MkID0gbnVsbDtcbiAgICBkaWZmQ29udGV4dC4kdlNpYmxpbmdzQXJyYXkkID0gbnVsbDtcbiAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQgPSAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCB8fCBkaWZmQ29udGV4dC4kdkN1cnJlbnQkISkgYXNcbiAgICAgIHwgRWxlbWVudFZOb2RlXG4gICAgICB8IFZpcnR1YWxWTm9kZTtcbiAgICBkaWZmQ29udGV4dC4kdkN1cnJlbnQkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZChkaWZmQ29udGV4dC4kdlBhcmVudCQhKTtcbiAgICBkaWZmQ29udGV4dC4kdk5ld05vZGUkID0gbnVsbDtcbiAgfVxuICBkaWZmQ29udGV4dC4kc2hvdWxkQWR2YW5jZSQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kKGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCkge1xuICBjb25zdCBkZXNjZW5kVk5vZGUgPSBkaWZmQ29udGV4dC4kc3RhY2skLnBvcCgpOyAvLyBib29sZWFuOiBkZXNjZW5kVk5vZGVcbiAgaWYgKGRlc2NlbmRWTm9kZSkge1xuICAgIGRpZmZDb250ZXh0LiRpc0NyZWF0aW9uTW9kZSQgPSBkaWZmQ29udGV4dC4kc3RhY2skLnBvcCgpO1xuICAgIGRpZmZDb250ZXh0LiR2U2lkZUJ1ZmZlciQgPSBkaWZmQ29udGV4dC4kc3RhY2skLnBvcCgpO1xuICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3MkID0gZGlmZkNvbnRleHQuJHN0YWNrJC5wb3AoKTtcbiAgICBkaWZmQ29udGV4dC4kdlNpYmxpbmdzQXJyYXkkID0gZGlmZkNvbnRleHQuJHN0YWNrJC5wb3AoKTtcbiAgICBkaWZmQ29udGV4dC4kdk5ld05vZGUkID0gZGlmZkNvbnRleHQuJHN0YWNrJC5wb3AoKTtcbiAgICBkaWZmQ29udGV4dC4kdkN1cnJlbnQkID0gZGlmZkNvbnRleHQuJHN0YWNrJC5wb3AoKTtcbiAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQgPSBkaWZmQ29udGV4dC4kc3RhY2skLnBvcCgpO1xuICB9XG4gIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQgPSBkaWZmQ29udGV4dC4kc3RhY2skLnBvcCgpO1xuICBkaWZmQ29udGV4dC4kanN4Q291bnQkID0gZGlmZkNvbnRleHQuJHN0YWNrJC5wb3AoKTtcbiAgZGlmZkNvbnRleHQuJGpzeElkeCQgPSBkaWZmQ29udGV4dC4kc3RhY2skLnBvcCgpO1xuICBkaWZmQ29udGV4dC4kanN4Q2hpbGRyZW4kID0gZGlmZkNvbnRleHQuJHN0YWNrJC5wb3AoKTtcbiAgYWR2YW5jZShkaWZmQ29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHN0YWNrUHVzaChkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsIGNoaWxkcmVuOiBKU1hDaGlsZHJlbiwgZGVzY2VuZFZOb2RlOiBib29sZWFuKSB7XG4gIGRpZmZDb250ZXh0LiRzdGFjayQucHVzaChcbiAgICBkaWZmQ29udGV4dC4kanN4Q2hpbGRyZW4kLFxuICAgIGRpZmZDb250ZXh0LiRqc3hJZHgkLFxuICAgIGRpZmZDb250ZXh0LiRqc3hDb3VudCQsXG4gICAgZGlmZkNvbnRleHQuJGpzeFZhbHVlJFxuICApO1xuICBpZiAoZGVzY2VuZFZOb2RlKSB7XG4gICAgZGlmZkNvbnRleHQuJHN0YWNrJC5wdXNoKFxuICAgICAgZGlmZkNvbnRleHQuJHZQYXJlbnQkLFxuICAgICAgZGlmZkNvbnRleHQuJHZDdXJyZW50JCxcbiAgICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQsXG4gICAgICBkaWZmQ29udGV4dC4kdlNpYmxpbmdzQXJyYXkkLFxuICAgICAgZGlmZkNvbnRleHQuJHZTaWJsaW5ncyQsXG4gICAgICBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkLFxuICAgICAgZGlmZkNvbnRleHQuJGlzQ3JlYXRpb25Nb2RlJFxuICAgICk7XG4gIH1cbiAgZGlmZkNvbnRleHQuJHN0YWNrJC5wdXNoKGRlc2NlbmRWTm9kZSk7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGRpZmZDb250ZXh0LiRqc3hJZHgkID0gMDtcbiAgICBkaWZmQ29udGV4dC4kanN4Q291bnQkID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGRpZmZDb250ZXh0LiRqc3hDaGlsZHJlbiQgPSBjaGlsZHJlbjtcbiAgICBkaWZmQ29udGV4dC4kanN4VmFsdWUkID0gZGlmZkNvbnRleHQuJGpzeENvdW50JCA+IDAgPyBjaGlsZHJlblswXSA6IG51bGw7XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIG5vIGNoaWxkcmVuXG4gICAgZGlmZkNvbnRleHQuJGpzeElkeCQgPSAwO1xuICAgIGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQgPSBudWxsO1xuICAgIGRpZmZDb250ZXh0LiRqc3hDaGlsZHJlbiQgPSBudWxsITtcbiAgICBkaWZmQ29udGV4dC4kanN4Q291bnQkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkaWZmQ29udGV4dC4kanN4SWR4JCA9IDA7XG4gICAgZGlmZkNvbnRleHQuJGpzeFZhbHVlJCA9IGNoaWxkcmVuO1xuICAgIGRpZmZDb250ZXh0LiRqc3hDaGlsZHJlbiQgPSBudWxsITtcbiAgICBkaWZmQ29udGV4dC4kanN4Q291bnQkID0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbnNlcnRCZWZvcmUoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0KSB7XG4gIGlmIChkaWZmQ29udGV4dC4kdk5ld05vZGUkKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRJbnNlcnRCZWZvcmUoZGlmZkNvbnRleHQpO1xuICB9XG4gIHJldHVybiAoXG4gICAgcGVla05leHRTaWJsaW5nV2l0aGluQm91bmRhcnkoZGlmZkNvbnRleHQsIGRpZmZDb250ZXh0LiR2Q3VycmVudCQpIHx8XG4gICAgZ2V0TGV2ZWxCb3VuZGFyeShkaWZmQ29udGV4dClcbiAgKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBkZXNjZW5kQ29udGVudFRvUHJvamVjdChcbiAgZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0LFxuICBjaGlsZHJlbjogSlNYQ2hpbGRyZW4sXG4gIGhvc3Q6IFZpcnR1YWxWTm9kZSB8IG51bGxcbikge1xuICBjb25zdCBwcm9qZWN0aW9uQ2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogW2NoaWxkcmVuXTtcbiAgY29uc3QgY3JlYXRlUHJvamVjdGlvbkpTWE5vZGUgPSAoc2xvdE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBuZXcgSlNYTm9kZUltcGwoUHJvamVjdGlvbiwgbnVsbCwgbnVsbCwgW10sIDAsIHNsb3ROYW1lKTtcbiAgfTtcblxuICBjb25zdCBwcm9qZWN0aW9uczogQXJyYXk8c3RyaW5nIHwgSlNYTm9kZUludGVybmFsPiA9IFtdO1xuICBpZiAoaG9zdCkge1xuICAgIGNvbnN0IHByb3BzID0gaG9zdC5wcm9wcztcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGVtcHR5IHByb2plY3Rpb25zIGZvciBhbGwgdGhlIHNsb3RzIHRvIHJlbW92ZSB1bnVzZWQgc2xvdHMgY29udGVudFxuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BzKSB7XG4gICAgICAgIGlmIChpc1Nsb3RQcm9wKHByb3ApKSB7XG4gICAgICAgICAgY29uc3Qgc2xvdE5hbWUgPSBwcm9wO1xuICAgICAgICAgIG1hcEFycmF5X3NldChwcm9qZWN0aW9ucywgc2xvdE5hbWUsIGNyZWF0ZVByb2plY3Rpb25KU1hOb2RlKHNsb3ROYW1lKSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvamVjdGlvbnMubGVuZ3RoID09PSAwICYmIGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAvLyBXZSBkaWQgbm90IGZpbmQgYW55IGV4aXN0aW5nIHNsb3RzIGFuZCB3ZSBkb24ndCBoYXZlIGFueSBjaGlsZHJlbiB0byBwcm9qZWN0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vLyBTVEVQIDE6IEJ1Y2tldGl6ZSB0aGUgY2hpbGRyZW4gYmFzZWQgb24gdGhlIHByb2plY3Rpb24gbmFtZS5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9qZWN0aW9uQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZCA9IHByb2plY3Rpb25DaGlsZHJlbltpXTtcbiAgICBjb25zdCBzbG90TmFtZSA9IFN0cmluZyhcbiAgICAgIChpc0pTWE5vZGUoY2hpbGQpICYmIGRpcmVjdEdldFByb3BzUHJveHlQcm9wKGNoaWxkLCBRU2xvdCkpIHx8IFFEZWZhdWx0U2xvdFxuICAgICk7XG4gICAgY29uc3QgaWR4ID0gbWFwQXBwX2ZpbmRJbmR4KHByb2plY3Rpb25zLCBzbG90TmFtZSwgMCk7XG4gICAgbGV0IGpzeEJ1Y2tldDogSlNYTm9kZUltcGw8dHlwZW9mIFByb2plY3Rpb24+O1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAganN4QnVja2V0ID0gcHJvamVjdGlvbnNbaWR4ICsgMV0gYXMgYW55O1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9qZWN0aW9ucy5zcGxpY2UofmlkeCwgMCwgc2xvdE5hbWUsIChqc3hCdWNrZXQgPSBjcmVhdGVQcm9qZWN0aW9uSlNYTm9kZShzbG90TmFtZSkpKTtcbiAgICB9XG4gICAgY29uc3QgcmVtb3ZlUHJvamVjdGlvbiA9IGNoaWxkID09PSBmYWxzZTtcbiAgICBpZiAoIXJlbW92ZVByb2plY3Rpb24pIHtcbiAgICAgIChqc3hCdWNrZXQuY2hpbGRyZW4gYXMgSlNYQ2hpbGRyZW5bXSkucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG4gIC8vLyBTVEVQIDI6IHJlbW92ZSB0aGUgbmFtZXNcbiAgZm9yIChsZXQgaSA9IHByb2plY3Rpb25zLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSA9IGkgLSAyKSB7XG4gICAgcHJvamVjdGlvbnMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGRlc2NlbmQoZGlmZkNvbnRleHQsIHByb2plY3Rpb25zLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZXhwZWN0UHJvamVjdGlvbihkaWZmQ29udGV4dDogRGlmZkNvbnRleHQpIHtcbiAgY29uc3QganN4Tm9kZSA9IGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQgYXMgSlNYTm9kZUludGVybmFsO1xuICBjb25zdCBzbG90TmFtZSA9IGpzeE5vZGUua2V5IGFzIHN0cmluZztcbiAgLy8gY29uc29sZS5sb2coJ2V4cGVjdFByb2plY3Rpb24nLCBKU09OLnN0cmluZ2lmeShzbG90TmFtZSkpO1xuICAvLyBUaGUgcGFyZW50IGlzIHRoZSBjb21wb25lbnQgYW5kIGl0IHNob3VsZCBoYXZlIG91ciBwb3J0YWwuXG4gIGRpZmZDb250ZXh0LiR2Q3VycmVudCQgPSB2bm9kZV9nZXRQcm9wPFZOb2RlIHwgbnVsbD4oXG4gICAgZGlmZkNvbnRleHQuJHZQYXJlbnQkIGFzIFZpcnR1YWxWTm9kZSxcbiAgICBzbG90TmFtZSxcbiAgICAoaWQ6IHN0cmluZykgPT4gdm5vZGVfbG9jYXRlKGRpZmZDb250ZXh0LiRjb250YWluZXIkLnJvb3RWTm9kZSwgaWQpXG4gICk7XG4gIC8vIGlmIHByb2plY3Rpb24gaXMgbWFya2VkIGFzIGRlbGV0ZWQgdGhlbiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBvbmVcbiAgZGlmZkNvbnRleHQuJHZDdXJyZW50JCA9XG4gICAgZGlmZkNvbnRleHQuJHZDdXJyZW50JCAmJiBkaWZmQ29udGV4dC4kdkN1cnJlbnQkLmZsYWdzICYgVk5vZGVGbGFncy5EZWxldGVkXG4gICAgICA/IG51bGxcbiAgICAgIDogZGlmZkNvbnRleHQuJHZDdXJyZW50JDtcbiAgaWYgKGRpZmZDb250ZXh0LiR2Q3VycmVudCQgPT0gbnVsbCkge1xuICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgPSB2bm9kZV9uZXdWaXJ0dWFsKCk7XG4gICAgLy8geW91IG1heSBiZSB0ZW1wdGVkIHRvIGFkZCB0aGUgcHJvamVjdGlvbiBpbnRvIHRoZSBjdXJyZW50IHBhcmVudCwgYnV0XG4gICAgLy8gdGhhdCBpcyB3cm9uZy4gV2UgZG9uJ3QgeWV0IGtub3cgaWYgdGhlIHByb2plY3Rpb24gd2lsbCBiZSBwcm9qZWN0ZWQsIHNvXG4gICAgLy8gd2Ugc2hvdWxkIGxlYXZlIGl0IHVuYXR0YWNoZWQuXG4gICAgLy8gdk5ld05vZGVbVk5vZGVQcm9wcy5wYXJlbnRdID0gdlBhcmVudDtcbiAgICBpc0RldiAmJlxuICAgICAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgREVCVUdfVFlQRSwgVmlydHVhbFR5cGUuUHJvamVjdGlvbik7XG4gICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgJ3E6Y29kZScsICdleHBlY3RQcm9qZWN0aW9uJyk7XG4gICAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgUVNsb3QsIHNsb3ROYW1lKTtcbiAgICAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUpLnNsb3RQYXJlbnQgPSBkaWZmQ29udGV4dC4kdlBhcmVudCQ7XG4gICAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdlBhcmVudCQgYXMgVmlydHVhbFZOb2RlLCBzbG90TmFtZSwgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXhwZWN0U2xvdChkaWZmQ29udGV4dDogRGlmZkNvbnRleHQpIHtcbiAgY29uc3QganN4Tm9kZSA9IGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQgYXMgSlNYTm9kZUludGVybmFsO1xuICBjb25zdCB2SG9zdCA9IHZub2RlX2dldFByb2plY3Rpb25QYXJlbnRDb21wb25lbnQoZGlmZkNvbnRleHQuJHZQYXJlbnQkKTtcblxuICBjb25zdCBzbG90TmFtZUtleSA9IHJlc29sdmVTbG90TmFtZSh2SG9zdCwganN4Tm9kZSwgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQpO1xuICBjb25zdCBjdXJzb3JCb3VuZGFyeSA9XG4gICAgZGlyZWN0R2V0UHJvcHNQcm94eVByb3A8Q3Vyc29yQm91bmRhcnkgfCBudWxsLCBhbnk+KGpzeE5vZGUsIFFDdXJzb3JCb3VuZGFyeSkgfHwgbnVsbDtcblxuICBjb25zdCB2UHJvamVjdGVkTm9kZSA9IHZIb3N0XG4gICAgPyB2bm9kZV9nZXRQcm9wPFZpcnR1YWxWTm9kZSB8IG51bGw+KFxuICAgICAgICB2SG9zdCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICAgIHNsb3ROYW1lS2V5LFxuICAgICAgICAvLyBmb3Igc2xvdHMgdGhpcyBpZCBpcyB2bm9kZSByZWYgaWRcbiAgICAgICAgbnVsbCAvLyBQcm9qZWN0aW9ucyBzaG91bGQgaGF2ZSBiZWVuIHJlc29sdmVkIHRocm91Z2ggY29udGFpbmVyLmVuc3VyZVByb2plY3Rpb25SZXNvbHZlZFxuICAgICAgICAvLyhpZCkgPT4gdm5vZGVfbG9jYXRlKGNvbnRhaW5lci5yb290Vk5vZGUsIGlkKVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAodlByb2plY3RlZE5vZGUgPT0gbnVsbCkge1xuICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgPSB2bm9kZV9uZXdWaXJ0dWFsKCk7XG4gICAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgUVNsb3QsIHNsb3ROYW1lS2V5KTtcbiAgICB2bm9kZV9zZXRQcm9wKGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgVmlydHVhbFZOb2RlLCBRQ3Vyc29yQm91bmRhcnksIGN1cnNvckJvdW5kYXJ5KTtcbiAgICB1cGRhdGVEaXJ0eVN1YnRyZWVDdXJzb3JCb3VuZGFyeShcbiAgICAgIGRpZmZDb250ZXh0LiRjb250YWluZXIkLFxuICAgICAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICBjdXJzb3JCb3VuZGFyeVxuICAgICk7XG4gICAgdkhvc3QgJiYgdm5vZGVfc2V0UHJvcCh2SG9zdCBhcyBWaXJ0dWFsVk5vZGUsIHNsb3ROYW1lS2V5LCBkaWZmQ29udGV4dC4kdk5ld05vZGUkKTtcbiAgICBpc0RldiAmJlxuICAgICAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgREVCVUdfVFlQRSwgVmlydHVhbFR5cGUuUHJvamVjdGlvbik7IC8vIE5vdGhpbmcgdG8gcHJvamVjdCwgc28gcmVuZGVyIGNvbnRlbnQgb2YgdGhlIHNsb3QuXG4gICAgdm5vZGVfaW5zZXJ0QmVmb3JlKFxuICAgICAgZGlmZkNvbnRleHQuJGpvdXJuYWwkLFxuICAgICAgZGlmZkNvbnRleHQuJHZQYXJlbnQkIGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQsXG4gICAgICBnZXRJbnNlcnRCZWZvcmUoZGlmZkNvbnRleHQpXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAodlByb2plY3RlZE5vZGUgPT09IGRpZmZDb250ZXh0LiR2Q3VycmVudCQpIHtcbiAgICAvLyBBbGwgaXMgZ29vZC5cbiAgfSBlbHNlIHtcbiAgICAvLyBtb3ZlIGZyb20gcTp0ZW1wbGF0ZSB0byB0aGUgdGFyZ2V0IG5vZGVcbiAgICBjb25zdCBvbGRQYXJlbnQgPSB2UHJvamVjdGVkTm9kZS5wYXJlbnQ7XG4gICAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCA9IHZQcm9qZWN0ZWROb2RlO1xuICAgIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIFFTbG90LCBzbG90TmFtZUtleSk7XG4gICAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgUUN1cnNvckJvdW5kYXJ5LCBjdXJzb3JCb3VuZGFyeSk7XG4gICAgdXBkYXRlRGlydHlTdWJ0cmVlQ3Vyc29yQm91bmRhcnkoXG4gICAgICBkaWZmQ29udGV4dC4kY29udGFpbmVyJCxcbiAgICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgVmlydHVhbFZOb2RlLFxuICAgICAgY3Vyc29yQm91bmRhcnlcbiAgICApO1xuICAgIHZIb3N0ICYmIHZub2RlX3NldFByb3Aodkhvc3QgYXMgVmlydHVhbFZOb2RlLCBzbG90TmFtZUtleSwgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCk7XG4gICAgaXNEZXYgJiZcbiAgICAgIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIERFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLlByb2plY3Rpb24pO1xuICAgIHZub2RlX2luZmxhdGVQcm9qZWN0aW9uVHJhaWxpbmdUZXh0KFxuICAgICAgZGlmZkNvbnRleHQuJGpvdXJuYWwkLFxuICAgICAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGVcbiAgICApO1xuICAgIHZub2RlX2luc2VydEJlZm9yZShcbiAgICAgIGRpZmZDb250ZXh0LiRqb3VybmFsJCxcbiAgICAgIGRpZmZDb250ZXh0LiR2UGFyZW50JCBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gICAgICBkaWZmQ29udGV4dC4kdk5ld05vZGUkLFxuICAgICAgZ2V0SW5zZXJ0QmVmb3JlKGRpZmZDb250ZXh0KVxuICAgICk7XG5cbiAgICAvLyBJZiB3ZSBtb3ZlZCBmcm9tIGEgcTp0ZW1wbGF0ZSBhbmQgaXQncyBub3cgZW1wdHksIHJlbW92ZSBpdFxuICAgIGlmIChcbiAgICAgIG9sZFBhcmVudCAmJlxuICAgICAgdm5vZGVfaXNFbGVtZW50Vk5vZGUob2xkUGFyZW50KSAmJlxuICAgICAgIW9sZFBhcmVudC5maXJzdENoaWxkICYmXG4gICAgICB2bm9kZV9nZXRFbGVtZW50TmFtZShvbGRQYXJlbnQpID09PSBRVGVtcGxhdGVcbiAgICApIHtcbiAgICAgIHZub2RlX3JlbW92ZShcbiAgICAgICAgZGlmZkNvbnRleHQuJGpvdXJuYWwkLFxuICAgICAgICBvbGRQYXJlbnQucGFyZW50IGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgICAgICAgb2xkUGFyZW50LFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2xlYW51cFNpZGVCdWZmZXIoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0KSB7XG4gIGNvbnN0IHNpZGVCdWZmZXIgPSBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkO1xuICBpZiAoc2lkZUJ1ZmZlcikge1xuICAgIC8vIFJlbW92ZSBhbGwgbm9kZXMgaW4gdGhlIHNpZGUgYnVmZmVyIGFzIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWRcblxuICAgIGZvciAoY29uc3Qgdk5vZGUgb2Ygc2lkZUJ1ZmZlci52YWx1ZXMoKSkge1xuICAgICAgaWYgKHZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5EZWxldGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2xlYW51cChkaWZmQ29udGV4dC4kY29udGFpbmVyJCwgZGlmZkNvbnRleHQuJGpvdXJuYWwkLCB2Tm9kZSwgZGlmZkNvbnRleHQuJGN1cnNvciQpO1xuICAgICAgdm5vZGVfcmVtb3ZlKGRpZmZDb250ZXh0LiRqb3VybmFsJCwgZGlmZkNvbnRleHQuJHZQYXJlbnQkLCB2Tm9kZSwgdHJ1ZSk7XG4gICAgfVxuICAgIHNpZGVCdWZmZXIuY2xlYXIoKTtcbiAgICBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkID0gbnVsbDtcbiAgfVxuICBkaWZmQ29udGV4dC4kdkN1cnJlbnQkID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZHJhaW5Bc3luY1F1ZXVlKGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCk6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKGRpZmZDb250ZXh0LiRhc3luY1F1ZXVlJC5sZW5ndGgpIHtcbiAgICBjb25zdCBqc3hOb2RlID0gZGlmZkNvbnRleHQuJGFzeW5jUXVldWUkLnNoaWZ0KCkgYXMgVmFsdWVPclByb21pc2U8SlNYQ2hpbGRyZW4+O1xuICAgIGNvbnN0IHZIb3N0Tm9kZSA9IGRpZmZDb250ZXh0LiRhc3luY1F1ZXVlJC5zaGlmdCgpIGFzIFZOb2RlO1xuXG4gICAgaWYgKGlzUHJvbWlzZShqc3hOb2RlKSkge1xuICAgICAgcmV0dXJuIGpzeE5vZGVcbiAgICAgICAgLnRoZW4oKGpzeE5vZGUpID0+IHtcbiAgICAgICAgICBkaWZmKGRpZmZDb250ZXh0LCBqc3hOb2RlLCB2SG9zdE5vZGUpO1xuICAgICAgICAgIHJldHVybiBkcmFpbkFzeW5jUXVldWUoZGlmZkNvbnRleHQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBkaWZmQ29udGV4dC4kY29udGFpbmVyJC5oYW5kbGVFcnJvcihlLCB2SG9zdE5vZGUpO1xuICAgICAgICAgIHJldHVybiBkcmFpbkFzeW5jUXVldWUoZGlmZkNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlmZihkaWZmQ29udGV4dCwganN4Tm9kZSwgdkhvc3ROb2RlKTtcbiAgICB9XG4gIH1cbiAgLy8gV2FpdCBmb3IgYWxsIGFzeW5jIGF0dHJpYnV0ZSBwcm9taXNlcyB0byBjb21wbGV0ZSwgdGhlbiBjaGVjayBmb3IgbW9yZSB3b3JrXG4gIGlmIChkaWZmQ29udGV4dC4kYXN5bmNBdHRyaWJ1dGVQcm9taXNlcyQubGVuZ3RoKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBkaWZmQ29udGV4dC4kYXN5bmNBdHRyaWJ1dGVQcm9taXNlcyQuc3BsaWNlKDApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAvLyBBZnRlciBhdHRyaWJ1dGVzIGFyZSBzZXQsIGNoZWNrIGlmIHRoZXJlJ3MgbW9yZSB3b3JrIGluIHRoZSBxdWV1ZVxuICAgICAgcmV0dXJuIGRyYWluQXN5bmNRdWV1ZShkaWZmQ29udGV4dCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cERpZmZDb250ZXh0KGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCk6IHZvaWQge1xuICBkaWZmQ29udGV4dC4kam91cm5hbCQgPSBudWxsITtcbiAgZGlmZkNvbnRleHQuJGN1cnNvciQgPSBudWxsITtcbn1cblxuZnVuY3Rpb24gZXhwZWN0Tm9DaGlsZHJlbihkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsIHJlbW92ZURPTSA9IHRydWUpIHtcbiAgY29uc3QgdkZpcnN0Q2hpbGQgPSBkaWZmQ29udGV4dC4kdkN1cnJlbnQkICYmIHZub2RlX2dldEZpcnN0Q2hpbGQoZGlmZkNvbnRleHQuJHZDdXJyZW50JCk7XG4gIGlmICh2Rmlyc3RDaGlsZCAhPT0gbnVsbCkge1xuICAgIGxldCB2Q2hpbGQ6IFZOb2RlIHwgbnVsbCA9IHZGaXJzdENoaWxkO1xuICAgIHdoaWxlICh2Q2hpbGQpIHtcbiAgICAgIGNsZWFudXAoZGlmZkNvbnRleHQuJGNvbnRhaW5lciQsIGRpZmZDb250ZXh0LiRqb3VybmFsJCwgdkNoaWxkLCBkaWZmQ29udGV4dC4kY3Vyc29yJCk7XG4gICAgICB2Q2hpbGQgPSB2Q2hpbGQubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsO1xuICAgIH1cbiAgICB2bm9kZV90cnVuY2F0ZShcbiAgICAgIGRpZmZDb250ZXh0LiRqb3VybmFsJCxcbiAgICAgIGRpZmZDb250ZXh0LiR2Q3VycmVudCQgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLFxuICAgICAgdkZpcnN0Q2hpbGQsXG4gICAgICByZW1vdmVET01cbiAgICApO1xuICB9XG59XG5cbi8qKiBFeHBlY3Qgbm8gbW9yZSBub2RlcyAtIEFueSBub2RlcyB3aGljaCBhcmUgc3RpbGwgYXQgY3Vyc29yLCBuZWVkIHRvIGJlIHJlbW92ZWQuICovXG5mdW5jdGlvbiBleHBlY3ROb01vcmUoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0KSB7XG4gIGNvbnN0IGJvdW5kYXJ5ID0gZ2V0TGV2ZWxCb3VuZGFyeShkaWZmQ29udGV4dCk7XG4gIGlzRGV2ICYmXG4gICAgYXNzZXJ0RmFsc2UoXG4gICAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQgPT09IGRpZmZDb250ZXh0LiR2Q3VycmVudCQsXG4gICAgICBcIlBhcmVudCBhbmQgY3VycmVudCBjYW4ndCBiZSB0aGUgc2FtZVwiXG4gICAgKTtcbiAgaWYgKGRpZmZDb250ZXh0LiR2Q3VycmVudCQgIT09IG51bGwgJiYgZGlmZkNvbnRleHQuJHZDdXJyZW50JCAhPT0gYm91bmRhcnkpIHtcbiAgICB3aGlsZSAoZGlmZkNvbnRleHQuJHZDdXJyZW50JCAmJiBkaWZmQ29udGV4dC4kdkN1cnJlbnQkICE9PSBib3VuZGFyeSkge1xuICAgICAgY29uc3QgdG9SZW1vdmUgPSBkaWZmQ29udGV4dC4kdkN1cnJlbnQkO1xuICAgICAgZGlmZkNvbnRleHQuJHZDdXJyZW50JCA9IHBlZWtOZXh0U2libGluZ1dpdGhpbkJvdW5kYXJ5KGRpZmZDb250ZXh0LCBkaWZmQ29udGV4dC4kdkN1cnJlbnQkKTtcbiAgICAgIGlmIChkaWZmQ29udGV4dC4kdlBhcmVudCQgPT09IHRvUmVtb3ZlLnBhcmVudCkge1xuICAgICAgICBjbGVhbnVwKGRpZmZDb250ZXh0LiRjb250YWluZXIkLCBkaWZmQ29udGV4dC4kam91cm5hbCQsIHRvUmVtb3ZlLCBkaWZmQ29udGV4dC4kY3Vyc29yJCk7XG4gICAgICAgIC8vIElmIHdlIGFyZSBkaWZmaW5nIHByb2plY3Rpb24gdGhhbiB0aGUgcGFyZW50IGlzIG5vdCB0aGUgcGFyZW50IG9mIHRoZSBub2RlLlxuICAgICAgICAvLyBJZiB0aGF0IGlzIHRoZSBjYXNlIHdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHBhcmVudC5cbiAgICAgICAgdm5vZGVfcmVtb3ZlKGRpZmZDb250ZXh0LiRqb3VybmFsJCwgZGlmZkNvbnRleHQuJHZQYXJlbnQkLCB0b1JlbW92ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGVjdE5vVGV4dE5vZGUoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0KSB7XG4gIGlmIChkaWZmQ29udGV4dC4kdkN1cnJlbnQkICE9PSBudWxsICYmIHZub2RlX2lzVGV4dFZOb2RlKGRpZmZDb250ZXh0LiR2Q3VycmVudCQpKSB7XG4gICAgY29uc3QgdG9SZW1vdmUgPSBkaWZmQ29udGV4dC4kdkN1cnJlbnQkO1xuICAgIGRpZmZDb250ZXh0LiR2Q3VycmVudCQgPSBwZWVrTmV4dFNpYmxpbmdXaXRoaW5Cb3VuZGFyeShkaWZmQ29udGV4dCwgZGlmZkNvbnRleHQuJHZDdXJyZW50JCk7XG4gICAgdm5vZGVfcmVtb3ZlKGRpZmZDb250ZXh0LiRqb3VybmFsJCwgZGlmZkNvbnRleHQuJHZQYXJlbnQkLCB0b1JlbW92ZSwgdHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlSZWYoXG4gIHZhbHVlOiB1bmtub3duLFxuICBlbGVtZW50OiBRRWxlbWVudCxcbiAgY3VycmVudEZpbGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgdmFsdWUudmFsdWUgPSBlbGVtZW50O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZShlbGVtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRocm93IHFFcnJvcihRRXJyb3IuaW52YWxpZFJlZlZhbHVlLCBbY3VycmVudEZpbGVdKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVNpZ25hbFZhbHVlKFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lcixcbiAgdkhvc3Q6IEVsZW1lbnRWTm9kZSxcbiAga2V5OiBzdHJpbmcsXG4gIHNpZ25hbDogU2lnbmFsPHVua25vd24+LFxuICBzdWJzY3JpcHRpb25EYXRhOiBTdWJzY3JpcHRpb25EYXRhXG4pOiB1bmtub3duIHtcbiAgcmV0dXJuIHJldHJ5T25Qcm9taXNlKCgpID0+XG4gICAgdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0KHNpZ25hbCwgdkhvc3QsIGtleSwgY29udGFpbmVyLCBzdWJzY3JpcHRpb25EYXRhKVxuICApO1xufVxuXG5mdW5jdGlvbiBxdWV1ZUNvbnN0QXR0cmlidXRlUHJvbWlzZShcbiAgZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0LFxuICBlbGVtZW50OiBRRWxlbWVudCxcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBQcm9taXNlPHVua25vd24+LFxuICBpc1N2ZzogYm9vbGVhblxuKSB7XG4gIGNvbnN0IHNjb3BlZFN0eWxlSWRQcmVmaXggPSBkaWZmQ29udGV4dC4kc2NvcGVkU3R5bGVJZFByZWZpeCQ7XG4gIGNvbnN0IGF0dHJpYnV0ZVByb21pc2UgPSB2YWx1ZS50aGVuKChyZXNvbHZlZFZhbHVlKSA9PlxuICAgIGRpcmVjdFNldEF0dHJpYnV0ZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICBrZXksXG4gICAgICBzZXJpYWxpemVBdHRyaWJ1dGUoa2V5LCByZXNvbHZlZFZhbHVlLCBzY29wZWRTdHlsZUlkUHJlZml4KSxcbiAgICAgIGlzU3ZnXG4gICAgKVxuICApO1xuICBkaWZmQ29udGV4dC4kYXN5bmNBdHRyaWJ1dGVQcm9taXNlcyQucHVzaChhdHRyaWJ1dGVQcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlDb25zdElubmVySHRtbChlbGVtZW50OiBRRWxlbWVudCwgdmFsdWU6IHVua25vd24pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBTdHJpbmcodmFsdWUpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFFDb250YWluZXJBdHRyLCBRQ29udGFpbmVyVmFsdWUuSFRNTCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlDb25zdFRleHRhcmVhVmFsdWUoXG4gIGVsZW1lbnQ6IFFFbGVtZW50LFxuICB2YWx1ZTogdW5rbm93bixcbiAgY3VycmVudEZpbGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIGlmIChpc0Rldikge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci53cm9uZ1RleHRhcmVhVmFsdWUsIFtjdXJyZW50RmlsZSwgdmFsdWVdKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgKGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUgPSBlc2NhcGVIVE1MKCh2YWx1ZSBhcyBzdHJpbmcpIHx8ICcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0VsZW1lbnQoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAganN4OiBKU1hOb2RlSW50ZXJuYWwsXG4gIGVsZW1lbnROYW1lOiBzdHJpbmcsXG4gIGN1cnJlbnRGaWxlPzogc3RyaW5nIHwgbnVsbFxuKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50V2l0aE5hbWVzcGFjZShkaWZmQ29udGV4dCwgZWxlbWVudE5hbWUpIGFzIFFFbGVtZW50O1xuICBjb25zdCB2SG9zdCA9IGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgRWxlbWVudFZOb2RlO1xuICBjb25zdCBpc1N2ZyA9ICh2SG9zdC5mbGFncyAmIFZOb2RlRmxhZ3MuTlNfc3ZnKSAhPT0gMDtcbiAgY29uc3QgeyBjb25zdFByb3BzIH0gPSBqc3g7XG4gIGlmIChjb25zdFByb3BzKSB7XG4gICAgLy8gQ29uc3QgcHJvcHMgYXJlLCB3ZWxsLCBjb25zdGFudCwgdGhleSB3aWxsIG5ldmVyIGNoYW5nZSFcbiAgICAvLyBGb3IgdGhpcyByZWFzb24gd2UgY2FuIGNoZWF0IGFuZCB3cml0ZSB0aGVtIGRpcmVjdGx5IGludG8gdGhlIERPTS5cbiAgICAvLyBXZSBuZXZlciB0ZWxsIHRoZSB2Tm9kZSBhYm91dCB0aGVtIHNhdmluZyB1cyB0aW1lIGFuZCBtZW1vcnkuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uc3RQcm9wcykge1xuICAgICAgbGV0IHZhbHVlID0gY29uc3RQcm9wc1trZXldO1xuICAgICAgaWYgKGlzSHRtbEF0dHJpYnV0ZUFuRXZlbnROYW1lKGtleSkpIHtcbiAgICAgICAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGtleSwgdmFsdWUsIGVsZW1lbnQsIHZIb3N0LCBkaWZmQ29udGV4dCk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdyZWYnICYmIGFwcGx5UmVmKHZhbHVlLCBlbGVtZW50LCBjdXJyZW50RmlsZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSByZXNvbHZlU2lnbmFsVmFsdWUoXG4gICAgICAgICAgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQsXG4gICAgICAgICAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBFbGVtZW50Vk5vZGUsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHZhbHVlIGFzIFNpZ25hbDx1bmtub3duPixcbiAgICAgICAgICBkaWZmQ29udGV4dC4kc3Vic2NyaXB0aW9uRGF0YSQuJGNvbnN0JFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNQcm9taXNlKHZhbHVlKSkge1xuICAgICAgICBxdWV1ZUNvbnN0QXR0cmlidXRlUHJvbWlzZShkaWZmQ29udGV4dCwgZWxlbWVudCwga2V5LCB2YWx1ZSwgaXNTdmcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpIHtcbiAgICAgICAgYXBwbHlDb25zdElubmVySHRtbChlbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGVsZW1lbnROYW1lID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgIGtleSA9PT0gJ3ZhbHVlJyAmJlxuICAgICAgICBhcHBseUNvbnN0VGV4dGFyZWFWYWx1ZShlbGVtZW50LCB2YWx1ZSwgY3VycmVudEZpbGUpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdFNldEF0dHJpYnV0ZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAga2V5LFxuICAgICAgICBzZXJpYWxpemVBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgZGlmZkNvbnRleHQuJHNjb3BlZFN0eWxlSWRQcmVmaXgkKSxcbiAgICAgICAgaXNTdmdcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGtleSA9IGpzeC5rZXk7XG4gIGlmIChrZXkpIHtcbiAgICAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBFbGVtZW50Vk5vZGUpLmtleSA9IGtleTtcbiAgfVxuXG4gIC8vIGFwcGVuZCBjbGFzcyBhdHRyaWJ1dGUgaWYgc3R5bGVTY29wZWRJZCBleGlzdHMgYW5kIHRoZXJlIGlzIG5vIGNsYXNzIGF0dHJpYnV0ZVxuICBpZiAoZGlmZkNvbnRleHQuJHNjb3BlZFN0eWxlSWRQcmVmaXgkKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGVFeGlzdHMgPVxuICAgICAgX2hhc093blByb3BlcnR5LmNhbGwoanN4LnZhclByb3BzLCAnY2xhc3MnKSB8fFxuICAgICAgKGpzeC5jb25zdFByb3BzICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGpzeC5jb25zdFByb3BzLCAnY2xhc3MnKSk7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZUV4aXN0cykge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgZGlmZkNvbnRleHQuJHNjb3BlZFN0eWxlSWRQcmVmaXgkKTtcbiAgICB9XG4gIH1cblxuICB2bm9kZV9pbnNlcnRFbGVtZW50QmVmb3JlKFxuICAgIGRpZmZDb250ZXh0LiRqb3VybmFsJCxcbiAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQgYXMgRWxlbWVudFZOb2RlLFxuICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgRWxlbWVudFZOb2RlLFxuICAgIGdldEN1cnJlbnRJbnNlcnRCZWZvcmUoZGlmZkNvbnRleHQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyhcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuICBlbGVtZW50OiBRRWxlbWVudCxcbiAgdm5vZGU6IEVsZW1lbnRWTm9kZSxcbiAgZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0XG4pIHtcbiAgY29uc3Qgc2NvcGVkS2ViYWJOYW1lID0ga2V5LnNsaWNlKDIpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBhcnIgPSB2YWx1ZSBhcyAoUVJMSW50ZXJuYWw8KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiB8IHVuZGVmaW5lZClbXTtcbiAgICBjb25zdCBoYW5kbGVyczogRXZlbnRIYW5kbGVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGFycltpXTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXRlbS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBpdGVtW2pdO1xuICAgICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgICBoYW5kbGVycy5wdXNoKHJ1bkV2ZW50SGFuZGxlclFSTC5iaW5kKG51bGwsIGhhbmRsZXIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICBoYW5kbGVycy5wdXNoKHJ1bkV2ZW50SGFuZGxlclFSTC5iaW5kKG51bGwsIGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIChlbGVtZW50Ll9xRGlzcGF0Y2ggfHw9IHt9KVtzY29wZWRLZWJhYk5hbWVdID0gaGFuZGxlcnMubGVuZ3RoID09PSAxID8gaGFuZGxlcnNbMF0gOiBoYW5kbGVycztcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAoZWxlbWVudC5fcURpc3BhdGNoIHx8PSB7fSlbc2NvcGVkS2ViYWJOYW1lXSA9IHJ1bkV2ZW50SGFuZGxlclFSTC5iaW5kKFxuICAgICAgbnVsbCxcbiAgICAgIHZhbHVlIGFzIFFSTEludGVybmFsPCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD5cbiAgICApO1xuICB9XG5cbiAgLy8gd2luZG93IGFuZCBkb2N1bWVudCBldmVudHMgbmVlZCBhdHRycyBzbyBxd2lrIGxvYWRlciBjYW4gZmluZCB0aGVtXG4gIC8vIFRPRE8gb25seSBkbyB0aGVzZSB3aGVuIG5vdCBhbHJlYWR5IHByZXNlbnRcbiAgaWYgKGtleS5jaGFyQXQoMikgIT09ICdlJykge1xuICAgIHZub2RlX3NldEF0dHIoZGlmZkNvbnRleHQuJGpvdXJuYWwkLCB2bm9kZSwga2V5LCAnJyk7XG4gIH1cbiAgcmVnaXN0ZXJRd2lrTG9hZGVyRXZlbnQoZGlmZkNvbnRleHQsIHNjb3BlZEtlYmFiTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoTmFtZXNwYWNlKGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCwgZWxlbWVudE5hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuICBjb25zdCBkb21QYXJlbnRWTm9kZSA9IHZub2RlX2dldERvbVBhcmVudFZOb2RlKGRpZmZDb250ZXh0LiR2UGFyZW50JCwgdHJ1ZSk7XG4gIGNvbnN0IG5hbWVzcGFjZURhdGEgPSBnZXROZXdFbGVtZW50TmFtZXNwYWNlRGF0YShkb21QYXJlbnRWTm9kZSwgZWxlbWVudE5hbWUpO1xuXG4gIGNvbnN0IGN1cnJlbnREb2N1bWVudCA9IHFUZXN0ID8gZGlmZkNvbnRleHQuJGNvbnRhaW5lciQuZG9jdW1lbnQgOiBkb2N1bWVudDtcblxuICBjb25zdCBlbGVtZW50ID1cbiAgICBuYW1lc3BhY2VEYXRhLmVsZW1lbnROYW1lc3BhY2VGbGFnID09PSBWTm9kZUZsYWdzLk5TX2h0bWxcbiAgICAgID8gY3VycmVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWxlbWVudE5hbWUpXG4gICAgICA6IGN1cnJlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlRGF0YS5lbGVtZW50TmFtZXNwYWNlLCBlbGVtZW50TmFtZSk7XG4gIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgPSB2bm9kZV9uZXdFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnROYW1lKTtcbiAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJC5mbGFncyB8PSBuYW1lc3BhY2VEYXRhLmVsZW1lbnROYW1lc3BhY2VGbGFnO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZXhwZWN0RWxlbWVudChkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsIGpzeDogSlNYTm9kZUludGVybmFsLCBlbGVtZW50TmFtZTogc3RyaW5nKSB7XG4gIGlmIChkaWZmQ29udGV4dC4kaXNDcmVhdGlvbk1vZGUkKSB7XG4gICAgY3JlYXRlTmV3RWxlbWVudChkaWZmQ29udGV4dCwganN4LCBlbGVtZW50TmFtZSwgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXNFbGVtZW50Vk5vZGUgPSBkaWZmQ29udGV4dC4kdkN1cnJlbnQkICYmIHZub2RlX2lzRWxlbWVudFZOb2RlKGRpZmZDb250ZXh0LiR2Q3VycmVudCQpO1xuICAgIGNvbnN0IGlzU2FtZUVsZW1lbnROYW1lID1cbiAgICAgIGlzRWxlbWVudFZOb2RlICYmXG4gICAgICBlbGVtZW50TmFtZSA9PT0gdm5vZGVfZ2V0RWxlbWVudE5hbWUoZGlmZkNvbnRleHQuJHZDdXJyZW50JCBhcyBFbGVtZW50Vk5vZGUpO1xuICAgIGNvbnN0IGpzeEtleTogc3RyaW5nIHwgbnVsbCA9IGpzeC5rZXk7XG4gICAgY29uc3QgY3VycmVudEtleSA9IGlzRWxlbWVudFZOb2RlICYmIChkaWZmQ29udGV4dC4kdkN1cnJlbnQkIGFzIEVsZW1lbnRWTm9kZSkua2V5O1xuICAgIGlmICghaXNTYW1lRWxlbWVudE5hbWUgfHwganN4S2V5ICE9PSBjdXJyZW50S2V5KSB7XG4gICAgICBjb25zdCBzaWRlQnVmZmVyS2V5ID0gZ2V0U2lkZUJ1ZmZlcktleShlbGVtZW50TmFtZSwganN4S2V5KTtcbiAgICAgIGlmIChcbiAgICAgICAgbW92ZU9yQ3JlYXRlS2V5ZWROb2RlKFxuICAgICAgICAgIGRpZmZDb250ZXh0LFxuICAgICAgICAgIGVsZW1lbnROYW1lLFxuICAgICAgICAgIGpzeEtleSxcbiAgICAgICAgICBzaWRlQnVmZmVyS2V5LFxuICAgICAgICAgIGRpZmZDb250ZXh0LiR2UGFyZW50JCBhcyBFbGVtZW50Vk5vZGVcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGNyZWF0ZU5ld0VsZW1lbnQoZGlmZkNvbnRleHQsIGpzeCwgZWxlbWVudE5hbWUsIG51bGwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWxldGUgdGhlIGtleSBmcm9tIHRoZSBzaWRlIGJ1ZmZlciBpZiBpdCBpcyB0aGUgc2FtZSBlbGVtZW50XG4gICAgICBkZWxldGVGcm9tU2lkZUJ1ZmZlcihkaWZmQ29udGV4dCwgZWxlbWVudE5hbWUsIGpzeEtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVjb25jaWxlIGF0dHJpYnV0ZXNcblxuICBjb25zdCBqc3hQcm9wcyA9IGpzeC52YXJQcm9wcztcbiAgY29uc3Qgdk5vZGUgPSAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCB8fCBkaWZmQ29udGV4dC4kdkN1cnJlbnQkKSBhcyBFbGVtZW50Vk5vZGU7XG5cbiAgaWYgKGpzeFByb3BzKSB7XG4gICAgZGlmZlByb3BzKGRpZmZDb250ZXh0LCB2Tm9kZSwganN4UHJvcHMsIChpc0RldiAmJiBnZXRGaWxlTG9jYXRpb25Gcm9tSnN4KGpzeC5kZXYpKSB8fCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmUHJvcHMoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAgdm5vZGU6IEVsZW1lbnRWTm9kZSxcbiAgbmV3QXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGN1cnJlbnRGaWxlOiBzdHJpbmcgfCBudWxsXG4pIHtcbiAgaWYgKCFkaWZmQ29udGV4dC4kaXNDcmVhdGlvbk1vZGUkKSB7XG4gICAgLy8gaW5mbGF0ZSBvbmx5IHJlc3VtZWQgdm5vZGVzXG4gICAgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkKGRpZmZDb250ZXh0LiRjb250YWluZXIkLCB2bm9kZSk7XG4gIH1cbiAgY29uc3Qgb2xkQXR0cnMgPSB2bm9kZS5wcm9wcztcblxuICAvLyBBY3R1YWwgZGlmZmluZyBsb2dpY1xuICAvLyBBcHBseSBhbGwgbmV3IGF0dHJpYnV0ZXNcbiAgZm9yIChjb25zdCBrZXkgaW4gbmV3QXR0cnMpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld0F0dHJzW2tleV07XG5cbiAgICBpZiAob2xkQXR0cnMgJiYgX2hhc093blByb3BlcnR5LmNhbGwob2xkQXR0cnMsIGtleSkpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkQXR0cnNba2V5XTtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld1ZhbHVlIGluc3RhbmNlb2YgV3JhcHBlZFNpZ25hbEltcGwgJiZcbiAgICAgICAgICBvbGRWYWx1ZSBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWxJbXBsICYmXG4gICAgICAgICAgYXJlV3JhcHBlZFNpZ25hbHNFcXVhbChuZXdWYWx1ZSwgb2xkVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhdGNoUHJvcGVydHkoZGlmZkNvbnRleHQsIHZub2RlLCBrZXksIG5ld1ZhbHVlLCBjdXJyZW50RmlsZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XG4gICAgICBwYXRjaFByb3BlcnR5KGRpZmZDb250ZXh0LCB2bm9kZSwga2V5LCBuZXdWYWx1ZSwgY3VycmVudEZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbGRBdHRycykge1xuICAgIC8vIFJlbW92ZSBhdHRyaWJ1dGVzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IGluIG5ldyBwcm9wc1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9sZEF0dHJzKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFfaGFzT3duUHJvcGVydHkuY2FsbChuZXdBdHRycywga2V5KSAmJlxuICAgICAgICAvLyBkbyBub3QgcmVtb3ZlIHNwZWNpYWwgYXR0cmlidXRlc1xuICAgICAgICBrZXkuY2hhckF0KDApICE9PSAnOicgJiZcbiAgICAgICAgLy8gd2Uga2VlcCB0aGVzZSBoYW5kbGVyIHByb3BzIHRvIGluZGljYXRlIHRvIHF3aWtsb2FkZXIgdGhhdCB0aGVzZSBldmVudHMgYXJlIHVzZWRcbiAgICAgICAgIWlzSHRtbEF0dHJpYnV0ZUFuRXZlbnROYW1lKGtleSlcbiAgICAgICkge1xuICAgICAgICBwYXRjaFByb3BlcnR5KGRpZmZDb250ZXh0LCB2bm9kZSwga2V5LCBudWxsLCBjdXJyZW50RmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHBhdGNoUHJvcGVydHkgPSAoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAgdm5vZGU6IEVsZW1lbnRWTm9kZSxcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIGN1cnJlbnRGaWxlOiBzdHJpbmcgfCBudWxsXG4pID0+IHtcbiAgLy8gRHVyaW5nIENTUiB3ZSBkbyBoYW5kbGVycyB2aWEgcURpc3BhdGNoXG4gIGlmIChpc0h0bWxBdHRyaWJ1dGVBbkV2ZW50TmFtZShrZXkpKSB7XG4gICAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGtleSwgdmFsdWUsIHZub2RlLm5vZGUgYXMgUUVsZW1lbnQsIHZub2RlLCBkaWZmQ29udGV4dCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChcbiAgICAvLyBzZXQgb25seSBwcm9wZXJ0eSBmb3IgaXRlcmF0aW9uIGl0ZW0sIG5vdCBhbiBhdHRyaWJ1dGVcbiAgICBrZXkgPT09IElURVJBVElPTl9JVEVNX1NJTkdMRSB8fFxuICAgIGtleSA9PT0gSVRFUkFUSU9OX0lURU1fTVVMVElcbiAgKSB7XG4gICAgLy8gVE9ETzogdGhlcmUgaXMgYSBwb3RlbnRpYWwgZGVvcHRpbWl6YXRpb24gaGVyZSwgYmVjYXVzZSB3ZSBhcmUgc2V0dGluZyBkaWZmZXJlbnQga2V5cyBvbiBwcm9wcy5cbiAgICAvLyBFYWdlciBiYWlsb3V0IC0gSW5zdWZmaWNpZW50IHR5cGUgZmVlZGJhY2sgZm9yIGdlbmVyaWMga2V5ZWQgYWNjZXNzXG4gICAgdm5vZGVfc2V0UHJvcCh2bm9kZSwga2V5LCB2YWx1ZSk7XG4gICAgdm5vZGUuZmxhZ3MgfD0gVk5vZGVGbGFncy5IYXNJdGVyYXRpb25JdGVtcyB8IFZOb2RlRmxhZ3MuSW5mbGF0ZWRJdGVyYXRpb25JdGVtcztcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlO1xuXG4gIGlmIChrZXkgPT09ICdyZWYnKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHZub2RlLm5vZGU7XG4gICAgaWYgKGFwcGx5UmVmKHZhbHVlLCBlbGVtZW50IGFzIFFFbGVtZW50LCBjdXJyZW50RmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjdXJyZW50RWZmZWN0ID0gdm5vZGVbX0VGRkVDVF9CQUNLX1JFRl0/LmdldChrZXkpO1xuICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgY29uc3QgdW53cmFwcGVkU2lnbmFsID0gdmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsSW1wbCA/IHZhbHVlLiR1bndyYXBJZlNpZ25hbCQoKSA6IHZhbHVlO1xuICAgIGlmIChjdXJyZW50RWZmZWN0Py5iYWNrUmVmPy5oYXModW53cmFwcGVkU2lnbmFsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY3VycmVudEVmZmVjdCkge1xuICAgICAgY2xlYXJFZmZlY3RTdWJzY3JpcHRpb24oZGlmZkNvbnRleHQuJGNvbnRhaW5lciQsIGN1cnJlbnRFZmZlY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IHZIb3N0ID0gdm5vZGUgYXMgRWxlbWVudFZOb2RlO1xuICAgIHZhbHVlID0gcmVzb2x2ZVNpZ25hbFZhbHVlKFxuICAgICAgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQsXG4gICAgICB2SG9zdCxcbiAgICAgIGtleSxcbiAgICAgIHVud3JhcHBlZFNpZ25hbCxcbiAgICAgIGRpZmZDb250ZXh0LiRzdWJzY3JpcHRpb25EYXRhJC4kdmFyJFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGN1cnJlbnRFZmZlY3QpIHtcbiAgICAgIGNsZWFyRWZmZWN0U3Vic2NyaXB0aW9uKGRpZmZDb250ZXh0LiRjb250YWluZXIkLCBjdXJyZW50RWZmZWN0KTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNQcm9taXNlKHZhbHVlKSkge1xuICAgIGNvbnN0IHZIb3N0ID0gdm5vZGUgYXMgRWxlbWVudFZOb2RlO1xuICAgIGNvbnN0IGF0dHJpYnV0ZVByb21pc2UgPSB2YWx1ZS50aGVuKChyZXNvbHZlZFZhbHVlKSA9PiB7XG4gICAgICBzZXRBdHRyaWJ1dGUoXG4gICAgICAgIGRpZmZDb250ZXh0LiRqb3VybmFsJCxcbiAgICAgICAgdkhvc3QsXG4gICAgICAgIGtleSxcbiAgICAgICAgcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgZGlmZkNvbnRleHQuJHNjb3BlZFN0eWxlSWRQcmVmaXgkLFxuICAgICAgICBvcmlnaW5hbFZhbHVlXG4gICAgICApO1xuICAgIH0pO1xuICAgIGRpZmZDb250ZXh0LiRhc3luY0F0dHJpYnV0ZVByb21pc2VzJC5wdXNoKGF0dHJpYnV0ZVByb21pc2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZShcbiAgICBkaWZmQ29udGV4dC4kam91cm5hbCQsXG4gICAgdm5vZGUsXG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRpZmZDb250ZXh0LiRzY29wZWRTdHlsZUlkUHJlZml4JCxcbiAgICBvcmlnaW5hbFZhbHVlXG4gICk7XG59O1xuXG5mdW5jdGlvbiByZWdpc3RlclF3aWtMb2FkZXJFdmVudChkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHFXaW5kb3cgPSBxVGVzdFxuICAgID8gKGRpZmZDb250ZXh0LiRjb250YWluZXIkLmRvY3VtZW50LmRlZmF1bHRWaWV3IGFzIHFXaW5kb3cgfCBudWxsKVxuICAgIDogKHdpbmRvdyBhcyB1bmtub3duIGFzIHFXaW5kb3cpO1xuICBpZiAocVdpbmRvdykge1xuICAgIChxV2luZG93Ll9xd2lrRXYgfHw9IFtdIGFzIGFueSkucHVzaChldmVudE5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlQ2hpbGRXaXRoS2V5KFxuICBkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsXG4gIG5vZGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuICBrZXk6IHN0cmluZyB8IG51bGxcbik6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSB8IG51bGwge1xuICBsZXQgdk5vZGVXaXRoS2V5OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgaWYgKGRpZmZDb250ZXh0LiR2U2libGluZ3MkID09PSBudWxsKSB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgb25lIHdlIGFyZSBsb29raW5nIGZvclxuICAgIGNvbnN0IHZDdXJyZW50ID0gZGlmZkNvbnRleHQuJHZDdXJyZW50JDtcbiAgICBpZiAodkN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB2bm9kZV9pc0VsZW1lbnRWTm9kZSh2Q3VycmVudCkgPyB2bm9kZV9nZXRFbGVtZW50TmFtZSh2Q3VycmVudCkgOiBudWxsO1xuICAgICAgY29uc3QgdktleSA9XG4gICAgICAgIGdldEtleSh2Q3VycmVudCBhcyBWaXJ0dWFsVk5vZGUgfCBFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGUgfCBudWxsKSB8fFxuICAgICAgICBnZXRDb21wb25lbnRIYXNoKHZDdXJyZW50LCBkaWZmQ29udGV4dC4kY29udGFpbmVyJC4kZ2V0T2JqZWN0QnlJZCQpO1xuICAgICAgaWYgKHZLZXkgPT09IGtleSAmJiBuYW1lID09PSBub2RlTmFtZSkge1xuICAgICAgICByZXR1cm4gdkN1cnJlbnQgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGl0IGlzIG5vdCBtYXRlcmlhbGl6ZWQ7IHNvIG1hdGVyaWFsaXplIGl0LlxuICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3MkID0gbmV3IE1hcDxzdHJpbmcsIFZOb2RlPigpO1xuICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3NBcnJheSQgPSBbXTtcbiAgICBjb25zdCBib3VuZGFyeSA9IGdldExldmVsQm91bmRhcnkoZGlmZkNvbnRleHQpO1xuICAgIGxldCB2Tm9kZSA9IGRpZmZDb250ZXh0LiR2Q3VycmVudCQ7XG4gICAgd2hpbGUgKHZOb2RlICYmIHZOb2RlICE9PSBib3VuZGFyeSkge1xuICAgICAgY29uc3QgbmFtZSA9IHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSA/IHZub2RlX2dldEVsZW1lbnROYW1lKHZOb2RlKSA6IG51bGw7XG4gICAgICBjb25zdCB2S2V5ID1cbiAgICAgICAgZ2V0S2V5KHZOb2RlIGFzIFZpcnR1YWxWTm9kZSB8IEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IG51bGwpIHx8XG4gICAgICAgIGdldENvbXBvbmVudEhhc2godk5vZGUsIGRpZmZDb250ZXh0LiRjb250YWluZXIkLiRnZXRPYmplY3RCeUlkJCk7XG4gICAgICBpZiAodk5vZGVXaXRoS2V5ID09PSBudWxsICYmIHZLZXkgPT0ga2V5ICYmIG5hbWUgPT0gbm9kZU5hbWUpIHtcbiAgICAgICAgdk5vZGVXaXRoS2V5ID0gdk5vZGUgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZLZXkgPT09IG51bGwpIHtcbiAgICAgICAgICBkaWZmQ29udGV4dC4kdlNpYmxpbmdzQXJyYXkkLnB1c2gobmFtZSwgdk5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdlIG9ubHkgYWRkIHRoZSBlbGVtZW50cyB3aGljaCB3ZSBkaWQgbm90IGZpbmQgeWV0LlxuICAgICAgICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3MkLnNldChnZXRTaWRlQnVmZmVyS2V5KG5hbWUsIHZLZXkpLCB2Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZOb2RlID0gdk5vZGUubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmZDb250ZXh0LiR2U2libGluZ3NBcnJheSQhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGlmIChkaWZmQ29udGV4dC4kdlNpYmxpbmdzQXJyYXkkIVtpXSA9PT0gbm9kZU5hbWUpIHtcbiAgICAgICAgICB2Tm9kZVdpdGhLZXkgPSBkaWZmQ29udGV4dC4kdlNpYmxpbmdzQXJyYXkkIVtpICsgMV0gYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlO1xuICAgICAgICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3NBcnJheSQhLnNwbGljZShpLCAyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaWJsaW5nc0tleSA9IGdldFNpZGVCdWZmZXJLZXkobm9kZU5hbWUsIGtleSk7XG4gICAgICBjb25zdCBzaWJsaW5nID0gZGlmZkNvbnRleHQuJHZTaWJsaW5ncyQuZ2V0KHNpYmxpbmdzS2V5KTtcbiAgICAgIGlmIChzaWJsaW5nKSB7XG4gICAgICAgIHZOb2RlV2l0aEtleSA9IHNpYmxpbmcgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlO1xuICAgICAgICBkaWZmQ29udGV4dC4kdlNpYmxpbmdzJC5kZWxldGUoc2libGluZ3NLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbGxlY3RTaWRlQnVmZmVyU2libGluZ3MoZGlmZkNvbnRleHQsIHZOb2RlV2l0aEtleSk7XG5cbiAgcmV0dXJuIHZOb2RlV2l0aEtleTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFNpZGVCdWZmZXJTaWJsaW5ncyhkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsIHRhcmdldE5vZGU6IFZOb2RlIHwgbnVsbCk6IHZvaWQge1xuICBpZiAoIXRhcmdldE5vZGUpIHtcbiAgICBpZiAoZGlmZkNvbnRleHQuJHZDdXJyZW50JCkge1xuICAgICAgY29uc3QgbmFtZSA9IHZub2RlX2lzRWxlbWVudFZOb2RlKGRpZmZDb250ZXh0LiR2Q3VycmVudCQpXG4gICAgICAgID8gdm5vZGVfZ2V0RWxlbWVudE5hbWUoZGlmZkNvbnRleHQuJHZDdXJyZW50JClcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgdktleSA9XG4gICAgICAgIGdldEtleShkaWZmQ29udGV4dC4kdkN1cnJlbnQkIGFzIFZpcnR1YWxWTm9kZSB8IEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IG51bGwpIHx8XG4gICAgICAgIGdldENvbXBvbmVudEhhc2goZGlmZkNvbnRleHQuJHZDdXJyZW50JCwgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQuJGdldE9iamVjdEJ5SWQkKTtcbiAgICAgIGlmICh2S2V5ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc2lkZUJ1ZmZlcktleSA9IGdldFNpZGVCdWZmZXJLZXkobmFtZSwgdktleSk7XG4gICAgICAgIGRpZmZDb250ZXh0LiR2U2lkZUJ1ZmZlciQgfHw9IG5ldyBNYXAoKTtcbiAgICAgICAgZGlmZkNvbnRleHQuJHZTaWRlQnVmZmVyJC5zZXQoc2lkZUJ1ZmZlcktleSwgZGlmZkNvbnRleHQuJHZDdXJyZW50JCk7XG4gICAgICAgIGRpZmZDb250ZXh0LiR2U2libGluZ3MkPy5kZWxldGUoc2lkZUJ1ZmZlcktleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gV2FsayBmcm9tIHZDdXJyZW50IHVwIHRvIHRoZSB0YXJnZXQgbm9kZSBhbmQgY29sbGVjdCBhbGwga2V5ZWQgc2libGluZ3NcbiAgY29uc3QgYm91bmRhcnkgPSBnZXRMZXZlbEJvdW5kYXJ5KGRpZmZDb250ZXh0KTtcbiAgbGV0IHZOb2RlID0gZGlmZkNvbnRleHQuJHZDdXJyZW50JDtcbiAgd2hpbGUgKHZOb2RlICYmIHZOb2RlICE9PSB0YXJnZXROb2RlICYmIHZOb2RlICE9PSBib3VuZGFyeSkge1xuICAgIGNvbnN0IG5hbWUgPSB2bm9kZV9pc0VsZW1lbnRWTm9kZSh2Tm9kZSkgPyB2bm9kZV9nZXRFbGVtZW50TmFtZSh2Tm9kZSkgOiBudWxsO1xuICAgIGNvbnN0IHZLZXkgPVxuICAgICAgZ2V0S2V5KHZOb2RlIGFzIFZpcnR1YWxWTm9kZSB8IEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IG51bGwpIHx8XG4gICAgICBnZXRDb21wb25lbnRIYXNoKHZOb2RlLCBkaWZmQ29udGV4dC4kY29udGFpbmVyJC4kZ2V0T2JqZWN0QnlJZCQpO1xuXG4gICAgaWYgKHZLZXkgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lkZUJ1ZmZlcktleSA9IGdldFNpZGVCdWZmZXJLZXkobmFtZSwgdktleSk7XG4gICAgICBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkIHx8PSBuZXcgTWFwKCk7XG4gICAgICBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkLnNldChzaWRlQnVmZmVyS2V5LCB2Tm9kZSk7XG4gICAgICBkaWZmQ29udGV4dC4kdlNpYmxpbmdzJD8uZGVsZXRlKHNpZGVCdWZmZXJLZXkpO1xuICAgIH1cblxuICAgIHZOb2RlID0gdk5vZGUubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNpZGVCdWZmZXJLZXkobm9kZU5hbWU6IHN0cmluZyB8IG51bGwsIGtleTogc3RyaW5nKTogc3RyaW5nO1xuZnVuY3Rpb24gZ2V0U2lkZUJ1ZmZlcktleShub2RlTmFtZTogc3RyaW5nIHwgbnVsbCwga2V5OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbmZ1bmN0aW9uIGdldFNpZGVCdWZmZXJLZXkobm9kZU5hbWU6IHN0cmluZyB8IG51bGwsIGtleTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbm9kZU5hbWUgPyBub2RlTmFtZSArICc6JyArIGtleSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlRnJvbVNpZGVCdWZmZXIoXG4gIGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCxcbiAgbm9kZU5hbWU6IHN0cmluZyB8IG51bGwsXG4gIGtleTogc3RyaW5nIHwgbnVsbFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNiS2V5ID0gZ2V0U2lkZUJ1ZmZlcktleShub2RlTmFtZSwga2V5KTtcbiAgaWYgKHNiS2V5ICYmIGRpZmZDb250ZXh0LiR2U2lkZUJ1ZmZlciQ/LmhhcyhzYktleSkpIHtcbiAgICBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkLmRlbGV0ZShzYktleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFNoYXJlZCB1dGlsaXR5IHRvIHJlc29sdmUgYSBrZXllZCBub2RlIGJ5OlxuICpcbiAqIDEuIFNjYW5uaW5nIGZvcndhcmQgc2libGluZ3MgdmlhIGByZXRyaWV2ZUNoaWxkV2l0aEtleWBcbiAqIDIuIEZhbGxpbmcgYmFjayB0byB0aGUgc2lkZSBidWZmZXIgdXNpbmcgdGhlIHByb3ZpZGVkIGBzaWRlQnVmZmVyS2V5YFxuICogMy4gQ3JlYXRpbmcgYSBuZXcgbm9kZSB2aWEgYGNyZWF0ZU5ld2Agd2hlbiBub3QgZm91bmRcbiAqXG4gKiBJZiBhIG5vZGUgaXMgbW92ZWQgZnJvbSB0aGUgc2lkZSBidWZmZXIsIGl0IGlzIGluc2VydGVkIGJlZm9yZSBgdkN1cnJlbnRgIHVuZGVyXG4gKiBgcGFyZW50Rm9ySW5zZXJ0YC4gVGhlIGZ1bmN0aW9uIHVwZGF0ZXMgYHZDdXJyZW50YC9gdk5ld05vZGVgIGFjY29yZGluZ2x5IGFuZCByZXR1cm5zIHRoZSB2YWx1ZVxuICogZnJvbSBgY3JlYXRlTmV3YCB3aGVuIGEgbmV3IG5vZGUgaXMgY3JlYXRlZC5cbiAqL1xuZnVuY3Rpb24gbW92ZU9yQ3JlYXRlS2V5ZWROb2RlKFxuICBkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsXG4gIG5vZGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuICBsb29rdXBLZXk6IHN0cmluZyB8IG51bGwsXG4gIHNpZGVCdWZmZXJLZXk6IHN0cmluZyB8IG51bGwsXG4gIHBhcmVudEZvckluc2VydDogVk5vZGUsXG4gIGFkZEN1cnJlbnRUb1NpZGVCdWZmZXJPblNpZGVJbnNlcnQ/OiBib29sZWFuXG4pOiBib29sZWFuIHtcbiAgLy8gMSkgVHJ5IHRvIGZpbmQgdGhlIG5vZGUgYW1vbmcgdXBjb21pbmcgc2libGluZ3NcbiAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCA9IHJldHJpZXZlQ2hpbGRXaXRoS2V5KGRpZmZDb250ZXh0LCBub2RlTmFtZSwgbG9va3VwS2V5KTtcblxuICBpZiAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCkge1xuICAgIGlmICghc2lkZUJ1ZmZlcktleSkge1xuICAgICAgdm5vZGVfaW5zZXJ0QmVmb3JlKFxuICAgICAgICBkaWZmQ29udGV4dC4kam91cm5hbCQsXG4gICAgICAgIHBhcmVudEZvckluc2VydCBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gICAgICAgIGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQsXG4gICAgICAgIGdldEN1cnJlbnRJbnNlcnRCZWZvcmUoZGlmZkNvbnRleHQpXG4gICAgICApO1xuICAgIH1cbiAgICBkaWZmQ29udGV4dC4kdkN1cnJlbnQkID0gZGlmZkNvbnRleHQuJHZOZXdOb2RlJDtcbiAgICBkaWZmQ29udGV4dC4kdk5ld05vZGUkID0gbnVsbDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyAyKSBUcnkgc2lkZSBidWZmZXJcbiAgaWYgKHNpZGVCdWZmZXJLZXkgIT0gbnVsbCkge1xuICAgIGNvbnN0IGJ1ZmZlcmVkID0gZGlmZkNvbnRleHQuJHZTaWRlQnVmZmVyJD8uZ2V0KHNpZGVCdWZmZXJLZXkpIHx8IG51bGw7XG4gICAgaWYgKGJ1ZmZlcmVkKSB7XG4gICAgICBkaWZmQ29udGV4dC4kdlNpZGVCdWZmZXIkIS5kZWxldGUoc2lkZUJ1ZmZlcktleSk7XG4gICAgICBpZiAoYWRkQ3VycmVudFRvU2lkZUJ1ZmZlck9uU2lkZUluc2VydCAmJiBkaWZmQ29udGV4dC4kdkN1cnJlbnQkKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRLZXkgPVxuICAgICAgICAgIGdldEtleShkaWZmQ29udGV4dC4kdkN1cnJlbnQkIGFzIFZpcnR1YWxWTm9kZSB8IEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IG51bGwpIHx8XG4gICAgICAgICAgZ2V0Q29tcG9uZW50SGFzaChkaWZmQ29udGV4dC4kdkN1cnJlbnQkLCBkaWZmQ29udGV4dC4kY29udGFpbmVyJC4kZ2V0T2JqZWN0QnlJZCQpO1xuICAgICAgICBpZiAoY3VycmVudEtleSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSB2bm9kZV9pc0VsZW1lbnRWTm9kZShkaWZmQ29udGV4dC4kdkN1cnJlbnQkKVxuICAgICAgICAgICAgPyB2bm9kZV9nZXRFbGVtZW50TmFtZShkaWZmQ29udGV4dC4kdkN1cnJlbnQkKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlS2V5ID0gZ2V0U2lkZUJ1ZmZlcktleShjdXJyZW50TmFtZSwgY3VycmVudEtleSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTaWRlS2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRpZmZDb250ZXh0LiR2U2lkZUJ1ZmZlciQgfHw9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGRpZmZDb250ZXh0LiR2U2lkZUJ1ZmZlciQuc2V0KGN1cnJlbnRTaWRlS2V5LCBkaWZmQ29udGV4dC4kdkN1cnJlbnQkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE9ubHkgbW92ZSBpZiB0aGUgbm9kZSBpcyBub3QgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgaWYgKGJ1ZmZlcmVkICE9PSBkaWZmQ29udGV4dC4kdkN1cnJlbnQkKSB7XG4gICAgICAgIHZub2RlX2luc2VydEJlZm9yZShcbiAgICAgICAgICBkaWZmQ29udGV4dC4kam91cm5hbCQsXG4gICAgICAgICAgcGFyZW50Rm9ySW5zZXJ0IGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgICAgICAgICBidWZmZXJlZCxcbiAgICAgICAgICBnZXRDdXJyZW50SW5zZXJ0QmVmb3JlKGRpZmZDb250ZXh0KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGlmZkNvbnRleHQuJHZDdXJyZW50JCA9IGJ1ZmZlcmVkO1xuICAgICAgZGlmZkNvbnRleHQuJHZOZXdOb2RlJCA9IG51bGw7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gMykgQ3JlYXRlIG5ld1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXhwZWN0VmlydHVhbChkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsIHR5cGU6IFZpcnR1YWxUeXBlLCBqc3hLZXk6IHN0cmluZyB8IG51bGwpIHtcbiAgY29uc3QgY2hlY2tLZXkgPSB0eXBlID09PSBWaXJ0dWFsVHlwZS5GcmFnbWVudDtcbiAgY29uc3QgY3VycmVudEtleSA9IGdldEtleShcbiAgICBkaWZmQ29udGV4dC4kdkN1cnJlbnQkIGFzIFZpcnR1YWxWTm9kZSB8IEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IG51bGxcbiAgKTtcbiAgY29uc3QgY3VycmVudElzVmlydHVhbCA9IGRpZmZDb250ZXh0LiR2Q3VycmVudCQgJiYgdm5vZGVfaXNWaXJ0dWFsVk5vZGUoZGlmZkNvbnRleHQuJHZDdXJyZW50JCk7XG4gIGNvbnN0IGlzU2FtZU5vZGUgPSBjdXJyZW50SXNWaXJ0dWFsICYmIGN1cnJlbnRLZXkgPT09IGpzeEtleSAmJiAoY2hlY2tLZXkgPyAhIWpzeEtleSA6IHRydWUpO1xuXG4gIGlmIChpc1NhbWVOb2RlKSB7XG4gICAgLy8gQWxsIGlzIGdvb2QuXG4gICAgZGVsZXRlRnJvbVNpZGVCdWZmZXIoZGlmZkNvbnRleHQsIG51bGwsIGN1cnJlbnRLZXkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvciBmcmFnbWVudHMgd2l0aG91dCBhIGtleSwgYWx3YXlzIGNyZWF0ZSBhIG5ldyB2aXJ0dWFsIG5vZGUgKGVuc3VyZXMgcmVyZW5kZXIgc2VtYW50aWNzKVxuICBpZiAoanN4S2V5ID09PSBudWxsIHx8IGRpZmZDb250ZXh0LiRpc0NyZWF0aW9uTW9kZSQpIHtcbiAgICB2bm9kZV9pbnNlcnRWaXJ0dWFsQmVmb3JlKFxuICAgICAgZGlmZkNvbnRleHQuJGpvdXJuYWwkLFxuICAgICAgZGlmZkNvbnRleHQuJHZQYXJlbnQkIGFzIFZpcnR1YWxWTm9kZSxcbiAgICAgIChkaWZmQ29udGV4dC4kdk5ld05vZGUkID0gdm5vZGVfbmV3VmlydHVhbCgpKSxcbiAgICAgIGdldEluc2VydEJlZm9yZShkaWZmQ29udGV4dClcbiAgICApO1xuICAgIChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSkua2V5ID0ganN4S2V5O1xuICAgIGlzRGV2ICYmIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIERFQlVHX1RZUEUsIHR5cGUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoXG4gICAgbW92ZU9yQ3JlYXRlS2V5ZWROb2RlKFxuICAgICAgZGlmZkNvbnRleHQsXG4gICAgICBudWxsLFxuICAgICAganN4S2V5LFxuICAgICAgZ2V0U2lkZUJ1ZmZlcktleShudWxsLCBqc3hLZXkpLFxuICAgICAgZGlmZkNvbnRleHQuJHZQYXJlbnQkIGFzIFZpcnR1YWxWTm9kZSxcbiAgICAgIHRydWVcbiAgICApXG4gICkge1xuICAgIHZub2RlX2luc2VydFZpcnR1YWxCZWZvcmUoXG4gICAgICBkaWZmQ29udGV4dC4kam91cm5hbCQsXG4gICAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQgYXMgVmlydHVhbFZOb2RlLFxuICAgICAgKGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgPSB2bm9kZV9uZXdWaXJ0dWFsKCkpLFxuICAgICAgZ2V0SW5zZXJ0QmVmb3JlKGRpZmZDb250ZXh0KVxuICAgICk7XG4gICAgKGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgVmlydHVhbFZOb2RlKS5rZXkgPSBqc3hLZXk7XG4gICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgREVCVUdfVFlQRSwgdHlwZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXhwZWN0Q29tcG9uZW50KGRpZmZDb250ZXh0OiBEaWZmQ29udGV4dCwgY29tcG9uZW50OiBGdW5jdGlvbikge1xuICBjb25zdCBjb21wb25lbnRNZXRhID0gKGNvbXBvbmVudCBhcyBhbnkpW1NFUklBTElaQUJMRV9TVEFURV0gYXMgW1FSTEludGVybmFsPE9uUmVuZGVyRm48YW55Pj5dO1xuICBsZXQgaG9zdCA9IChkaWZmQ29udGV4dC4kdk5ld05vZGUkIHx8IGRpZmZDb250ZXh0LiR2Q3VycmVudCQpIGFzIFZpcnR1YWxWTm9kZSB8IG51bGw7XG4gIGNvbnN0IGpzeE5vZGUgPSBkaWZmQ29udGV4dC4kanN4VmFsdWUkIGFzIEpTWE5vZGVJbnRlcm5hbDtcbiAgaWYgKGNvbXBvbmVudE1ldGEpIHtcbiAgICBjb25zdCBqc3hQcm9wcyA9IGpzeE5vZGUucHJvcHMgYXMgUHJvcHNQcm94eTtcbiAgICAvLyBRQ29tcG9uZW50XG4gICAgbGV0IHNob3VsZFJlbmRlciA9IGZhbHNlO1xuICAgIGNvbnN0IFtjb21wb25lbnRRUkxdID0gY29tcG9uZW50TWV0YTtcblxuICAgIGNvbnN0IGNvbXBvbmVudEhhc2ggPSBjb21wb25lbnRRUkwuJGhhc2gkO1xuICAgIGNvbnN0IHZOb2RlQ29tcG9uZW50SGFzaCA9IGdldENvbXBvbmVudEhhc2goaG9zdCwgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQuJGdldE9iamVjdEJ5SWQkKTtcblxuICAgIGNvbnN0IGxvb2t1cEtleSA9IGpzeE5vZGUua2V5IHx8IGNvbXBvbmVudEhhc2g7XG4gICAgY29uc3Qgdk5vZGVMb29rdXBLZXkgPSBnZXRLZXkoaG9zdCkgfHwgdk5vZGVDb21wb25lbnRIYXNoO1xuXG4gICAgY29uc3QgbG9va3VwS2V5c0FyZUVxdWFsID0gbG9va3VwS2V5ID09PSB2Tm9kZUxvb2t1cEtleTtcbiAgICBjb25zdCBoYXNoZXNBcmVFcXVhbCA9IGNvbXBvbmVudEhhc2ggPT09IHZOb2RlQ29tcG9uZW50SGFzaDtcblxuICAgIGlmIChsb29rdXBLZXlzQXJlRXF1YWwpIHtcbiAgICAgIGlmIChoYXNoZXNBcmVFcXVhbCkge1xuICAgICAgICBkZWxldGVGcm9tU2lkZUJ1ZmZlcihkaWZmQ29udGV4dCwgbnVsbCwgbG9va3VwS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc2VydE5ld0NvbXBvbmVudChkaWZmQ29udGV4dCwgaG9zdCwgY29tcG9uZW50UVJMLCBqc3hQcm9wcyk7XG4gICAgICAgIGhvc3QgPSBkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZTtcbiAgICAgICAgc2hvdWxkUmVuZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vdmVPckNyZWF0ZUtleWVkTm9kZShkaWZmQ29udGV4dCwgbnVsbCwgbG9va3VwS2V5LCBsb29rdXBLZXksIGRpZmZDb250ZXh0LiR2UGFyZW50JCkpIHtcbiAgICAgICAgaW5zZXJ0TmV3Q29tcG9uZW50KGRpZmZDb250ZXh0LCBob3N0LCBjb21wb25lbnRRUkwsIGpzeFByb3BzKTtcbiAgICAgICAgc2hvdWxkUmVuZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGhvc3QgPSAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCB8fCBkaWZmQ29udGV4dC4kdkN1cnJlbnQkKSBhcyBWaXJ0dWFsVk5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGhvc3QpIHtcbiAgICAgIGNvbnN0IHZOb2RlUHJvcHMgPSB2bm9kZV9nZXRQcm9wPFByb3BzUHJveHkgfCBudWxsPihcbiAgICAgICAgaG9zdCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICAgIEVMRU1FTlRfUFJPUFMsXG4gICAgICAgIGRpZmZDb250ZXh0LiRjb250YWluZXIkLiRnZXRPYmplY3RCeUlkJFxuICAgICAgKTtcbiAgICAgIGlmICghc2hvdWxkUmVuZGVyKSB7XG4gICAgICAgIGNvbnN0IHByb3BzQ2hhbmdlZCA9IGhhbmRsZVByb3BzKGhvc3QsIGpzeFByb3BzLCB2Tm9kZVByb3BzLCBkaWZmQ29udGV4dC4kY29udGFpbmVyJCk7XG4gICAgICAgIC8vIGlmIHByb3BzIGNoYW5nZWQgYnV0IGtleSBpcyBudWxsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgbmV3IGNvbXBvbmVudCwgYmVjYXVzZSB3ZSBuZWVkIHRvIGV4ZWN1dGUgaG9va3MgZXRjXG4gICAgICAgIGlmIChwcm9wc0NoYW5nZWQgJiYganN4Tm9kZS5rZXkgPT0gbnVsbCkge1xuICAgICAgICAgIGluc2VydE5ld0NvbXBvbmVudChkaWZmQ29udGV4dCwgaG9zdCwgY29tcG9uZW50UVJMLCBqc3hQcm9wcyk7XG4gICAgICAgICAgaG9zdCA9IGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgVmlydHVhbFZOb2RlO1xuICAgICAgICAgIHNob3VsZFJlbmRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc2hvdWxkUmVuZGVyIHx8PSBwcm9wc0NoYW5nZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZW5kZXIpIHtcbiAgICAgICAgLy8gQXNzaWduIHRoZSBuZXcgUVJMIGluc3RhbmNlIHRvIHRoZSBob3N0LlxuICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IGlzIGNyZWF0ZWQgZXZlcnkgdGltZSwgc29tZXRoaW5nIHRvIGZpeCBpbiB0aGUgb3B0aW1pemVyLlxuICAgICAgICB2bm9kZV9zZXRQcm9wKGhvc3QgYXMgVmlydHVhbFZOb2RlLCBPblJlbmRlclByb3AsIGNvbXBvbmVudFFSTCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1hcmsgaG9zdCBhcyBub3QgZGVsZXRlZC4gVGhlIGhvc3QgY291bGQgaGF2ZSBiZWVuIG1hcmtlZCBhcyBkZWxldGVkIGlmIGl0IHRoZXJlIHdhcyBhXG4gICAgICAgICAqIGNsZWFudXAgcnVuLiBOb3cgd2UgZm91bmQgaXQgYW5kIHdhbnQgdG8gcmV1c2UgaXQsIHNvIHdlIG5lZWQgdG8gbWFyayBpdCBhcyBub3QgZGVsZXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIChob3N0IGFzIFZpcnR1YWxWTm9kZSkuZmxhZ3MgJj0gflZOb2RlRmxhZ3MuRGVsZXRlZDtcbiAgICAgICAgbWFya1ZOb2RlRGlydHkoXG4gICAgICAgICAgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQsXG4gICAgICAgICAgaG9zdCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICAgICAgQ2hvcmVCaXRzLkNPTVBPTkVOVCxcbiAgICAgICAgICBkaWZmQ29udGV4dC4kY3Vyc29yJFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBkZXNjZW5kQ29udGVudFRvUHJvamVjdChkaWZmQ29udGV4dCwganN4Tm9kZS5jaGlsZHJlbiwgaG9zdCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbG9va3VwS2V5ID0ganN4Tm9kZS5rZXk7XG4gICAgY29uc3Qgdk5vZGVMb29rdXBLZXkgPSBnZXRLZXkoaG9zdCk7XG4gICAgY29uc3QgbG9va3VwS2V5c0FyZUVxdWFsID0gbG9va3VwS2V5ID09PSB2Tm9kZUxvb2t1cEtleTtcbiAgICBjb25zdCB2Tm9kZUNvbXBvbmVudEhhc2ggPSBnZXRDb21wb25lbnRIYXNoKGhvc3QsIGRpZmZDb250ZXh0LiRjb250YWluZXIkLiRnZXRPYmplY3RCeUlkJCk7XG4gICAgY29uc3QgaXNJbmxpbmVDb21wb25lbnQgPSB2Tm9kZUNvbXBvbmVudEhhc2ggPT0gbnVsbDtcblxuICAgIGlmICgoaG9zdCAmJiAhaXNJbmxpbmVDb21wb25lbnQpIHx8ICFob3N0KSB7XG4gICAgICBpbnNlcnROZXdJbmxpbmVDb21wb25lbnQoZGlmZkNvbnRleHQpO1xuICAgICAgaG9zdCA9IGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgYXMgVmlydHVhbFZOb2RlO1xuICAgIH0gZWxzZSBpZiAoIWxvb2t1cEtleXNBcmVFcXVhbCkge1xuICAgICAgaWYgKFxuICAgICAgICBtb3ZlT3JDcmVhdGVLZXllZE5vZGUoXG4gICAgICAgICAgZGlmZkNvbnRleHQsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBsb29rdXBLZXksXG4gICAgICAgICAgbG9va3VwS2V5LFxuICAgICAgICAgIGRpZmZDb250ZXh0LiR2UGFyZW50JCBhcyBWaXJ0dWFsVk5vZGVcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFdlIGRpZCBub3QgZmluZCB0aGUgaW5saW5lIGNvbXBvbmVudCwgY3JlYXRlIGl0LlxuICAgICAgICBpbnNlcnROZXdJbmxpbmVDb21wb25lbnQoZGlmZkNvbnRleHQpO1xuICAgICAgfVxuICAgICAgaG9zdCA9IChkaWZmQ29udGV4dC4kdk5ld05vZGUkIHx8IGRpZmZDb250ZXh0LiR2Q3VycmVudCQpIGFzIFZpcnR1YWxWTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVsZXRlIHRoZSBrZXkgZnJvbSB0aGUgc2lkZSBidWZmZXIgaWYgaXQgaXMgdGhlIHNhbWUgY29tcG9uZW50XG4gICAgICBkZWxldGVGcm9tU2lkZUJ1ZmZlcihkaWZmQ29udGV4dCwgbnVsbCwgbG9va3VwS2V5KTtcbiAgICB9XG4gICAgaWYgKGhvc3QpIHtcbiAgICAgIGxldCBjb21wb25lbnRIb3N0OiBWTm9kZSB8IG51bGwgPSBob3N0O1xuICAgICAgLy8gRmluZCB0aGUgY2xvc2VzdCBjb21wb25lbnQgaG9zdCB3aGljaCBoYXMgYE9uUmVuZGVyYCBwcm9wLiBUaGlzIGlzIG5lZWQgZm9yIHN1YnNjcmlwdGlvbnMgY29udGV4dC5cbiAgICAgIHdoaWxlIChcbiAgICAgICAgY29tcG9uZW50SG9zdCAmJlxuICAgICAgICAodm5vZGVfaXNWaXJ0dWFsVk5vZGUoY29tcG9uZW50SG9zdClcbiAgICAgICAgICA/IHZub2RlX2dldFByb3A8T25SZW5kZXJGbjxhbnk+IHwgbnVsbD4oXG4gICAgICAgICAgICAgIGNvbXBvbmVudEhvc3QgYXMgVmlydHVhbFZOb2RlLFxuICAgICAgICAgICAgICBPblJlbmRlclByb3AsXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICkgPT09IG51bGxcbiAgICAgICAgICA6IHRydWUpXG4gICAgICApIHtcbiAgICAgICAgY29tcG9uZW50SG9zdCA9IGNvbXBvbmVudEhvc3QucGFyZW50IHx8IHZub2RlX2dldFByb2plY3Rpb25QYXJlbnRDb21wb25lbnQoY29tcG9uZW50SG9zdCk7XG4gICAgICB9XG5cbiAgICAgIHNldElubGluZUNvbXBvbmVudERhdGEoaG9zdCwgY29tcG9uZW50LCBjb21wb25lbnRIb3N0LCBqc3hOb2RlLnByb3BzIGFzIFByb3BzIHwgbnVsbCk7XG4gICAgICBtYXJrVk5vZGVEaXJ0eShcbiAgICAgICAgZGlmZkNvbnRleHQuJGNvbnRhaW5lciQsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIENob3JlQml0cy5JTkxJTkVfQ09NUE9ORU5ULFxuICAgICAgICBkaWZmQ29udGV4dC4kY3Vyc29yJFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0TmV3Q29tcG9uZW50KFxuICBkaWZmQ29udGV4dDogRGlmZkNvbnRleHQsXG4gIGhvc3Q6IFZOb2RlIHwgbnVsbCxcbiAgY29tcG9uZW50UVJMOiBRUkxJbnRlcm5hbDxPblJlbmRlckZuPGFueT4+LFxuICBqc3hQcm9wczogUHJvcHNcbikge1xuICBpZiAoaG9zdCkge1xuICAgIGNsZWFyQWxsRWZmZWN0cyhkaWZmQ29udGV4dC4kY29udGFpbmVyJCwgaG9zdCk7XG4gIH1cbiAgdm5vZGVfaW5zZXJ0VmlydHVhbEJlZm9yZShcbiAgICBkaWZmQ29udGV4dC4kam91cm5hbCQsXG4gICAgZGlmZkNvbnRleHQuJHZQYXJlbnQkIGFzIFZpcnR1YWxWTm9kZSxcbiAgICAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCA9IHZub2RlX25ld1ZpcnR1YWwoKSksXG4gICAgZ2V0SW5zZXJ0QmVmb3JlKGRpZmZDb250ZXh0KVxuICApO1xuICBjb25zdCBqc3hOb2RlID0gZGlmZkNvbnRleHQuJGpzeFZhbHVlJCBhcyBKU1hOb2RlSW50ZXJuYWw7XG4gIGlzRGV2ICYmIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIERFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLkNvbXBvbmVudCk7XG4gIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIE9uUmVuZGVyUHJvcCwgY29tcG9uZW50UVJMKTtcbiAgdm5vZGVfc2V0UHJvcChkaWZmQ29udGV4dC4kdk5ld05vZGUkIGFzIFZpcnR1YWxWTm9kZSwgRUxFTUVOVF9QUk9QUywganN4UHJvcHMpO1xuICAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUpLmtleSA9IGpzeE5vZGUua2V5O1xufVxuXG5mdW5jdGlvbiBpbnNlcnROZXdJbmxpbmVDb21wb25lbnQoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0KSB7XG4gIHZub2RlX2luc2VydFZpcnR1YWxCZWZvcmUoXG4gICAgZGlmZkNvbnRleHQuJGpvdXJuYWwkLFxuICAgIGRpZmZDb250ZXh0LiR2UGFyZW50JCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgKGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgPSB2bm9kZV9uZXdWaXJ0dWFsKCkpLFxuICAgIGdldEluc2VydEJlZm9yZShkaWZmQ29udGV4dClcbiAgKTtcbiAgY29uc3QganN4Tm9kZSA9IGRpZmZDb250ZXh0LiRqc3hWYWx1ZSQgYXMgSlNYTm9kZUludGVybmFsO1xuICBpc0RldiAmJlxuICAgIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIERFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLklubGluZUNvbXBvbmVudCk7XG4gIHZub2RlX3NldFByb3AoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUsIEVMRU1FTlRfUFJPUFMsIGpzeE5vZGUucHJvcHMpO1xuICBpZiAoanN4Tm9kZS5rZXkpIHtcbiAgICAoZGlmZkNvbnRleHQuJHZOZXdOb2RlJCBhcyBWaXJ0dWFsVk5vZGUpLmtleSA9IGpzeE5vZGUua2V5O1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGVjdFRleHQoZGlmZkNvbnRleHQ6IERpZmZDb250ZXh0LCB0ZXh0OiBzdHJpbmcpIHtcbiAgaWYgKGRpZmZDb250ZXh0LiR2Q3VycmVudCQgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlID0gdm5vZGVfZ2V0VHlwZShkaWZmQ29udGV4dC4kdkN1cnJlbnQkKTtcbiAgICBpZiAodHlwZSA9PT0gMyAvKiBUZXh0ICovKSB7XG4gICAgICBpZiAodGV4dCAhPT0gdm5vZGVfZ2V0VGV4dChkaWZmQ29udGV4dC4kdkN1cnJlbnQkIGFzIFRleHRWTm9kZSkpIHtcbiAgICAgICAgdm5vZGVfc2V0VGV4dChkaWZmQ29udGV4dC4kam91cm5hbCQsIGRpZmZDb250ZXh0LiR2Q3VycmVudCQgYXMgVGV4dFZOb2RlLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICB2bm9kZV9pbnNlcnRFbGVtZW50QmVmb3JlKFxuICAgIGRpZmZDb250ZXh0LiRqb3VybmFsJCxcbiAgICBkaWZmQ29udGV4dC4kdlBhcmVudCQsXG4gICAgKGRpZmZDb250ZXh0LiR2TmV3Tm9kZSQgPSB2bm9kZV9uZXdUZXh0KFxuICAgICAgKHFUZXN0ID8gZGlmZkNvbnRleHQuJGNvbnRhaW5lciQuZG9jdW1lbnQgOiBkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCksXG4gICAgICB0ZXh0XG4gICAgKSksXG4gICAgZ2V0Q3VycmVudEluc2VydEJlZm9yZShkaWZmQ29udGV4dClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUga2V5IGZyb20gdGhlIFZOb2RlLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFZOb2RlIHRvIHJldHJpZXZlIHRoZSBrZXkgZnJvbVxuICogQHJldHVybnMgS2V5XG4gKi9cbmZ1bmN0aW9uIGdldEtleSh2Tm9kZTogVmlydHVhbFZOb2RlIHwgRWxlbWVudFZOb2RlIHwgVGV4dFZOb2RlIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodk5vZGUgPT0gbnVsbCB8fCB2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdk5vZGUua2V5O1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb21wb25lbnQgaGFzaCBmcm9tIHRoZSBWTm9kZS5cbiAqXG4gKiBAcGFyYW0gdk5vZGUgLSBWTm9kZSB0byByZXRyaWV2ZSB0aGUga2V5IGZyb21cbiAqIEBwYXJhbSBnZXRPYmplY3QgLSBGdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgb2JqZWN0IGJ5IGlkIGZvciBRQ29tcG9uZW50IFFSTFxuICogQHJldHVybnMgSGFzaFxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRIYXNoKHZOb2RlOiBWTm9kZSB8IG51bGwsIGdldE9iamVjdDogKGlkOiBzdHJpbmcpID0+IGFueSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodk5vZGUgPT0gbnVsbCB8fCB2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBxcmwgPSB2bm9kZV9nZXRQcm9wPFFSTEludGVybmFsPih2Tm9kZSBhcyBWaXJ0dWFsVk5vZGUsIE9uUmVuZGVyUHJvcCwgZ2V0T2JqZWN0KTtcbiAgcmV0dXJuIHFybCA/IHFybC4kaGFzaCQgOiBudWxsO1xufVxuXG4vKipcbiAqIE1hcmtlciBjbGFzcyBmb3IgSlNYIHByb2plY3Rpb24uXG4gKlxuICogQXNzdW1lIHlvdSBoYXZlIGNvbXBvbmVudCBsaWtlIHNvXG4gKlxuICogYGBgXG4gKiA8U29tZUNvbXBvbmVudD5cbiAqICAgc29tZS10ZXh0XG4gKiAgIDxzcGFuIHE6c2xvdD1cIm5hbWVcIj5zb21lIG1vcmUgdGV4dDwvc3Bhbj5cbiAqICAgbW9yZS10ZXh0XG4gKiA8L1NvbWVDb21wb25lbnQ+XG4gKiBgYGBcbiAqXG4gKiBCZWZvcmUgdGhlIGA8U29tZUNvbXBldGVudC8+YCBpcyBwcm9jZXNzZWQgaXRzIGNoaWxkcmVuIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOlxuICpcbiAqIGBgYFxuICogICA8UHJvamVjdGlvbiBxOnNsb3Q9XCJcIj5cbiAqICAgICBzb21lLXRleHRcbiAqICAgICBtb3JlLXRleHRcbiAqICAgPC9Qcm9qZWN0aW9uPlxuICogICA8UHJvamVjdGlvbiBxOnNsb3Q9XCJuYW1lXCI+XG4gKiAgICAgPHNwYW4gcTpzbG90PVwibmFtZVwiPnNvbWUgbW9yZSB0ZXh0PC9zcGFuPlxuICogICA8L1Byb2plY3Rpb24+XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gUHJvamVjdGlvbigpIHt9XG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BzKFxuICBob3N0OiBWaXJ0dWFsVk5vZGUsXG4gIGpzeFByb3BzOiBQcm9wc1Byb3h5LFxuICB2Tm9kZVByb3BzOiBQcm9wc1Byb3h5IHwgbnVsbCxcbiAgY29udGFpbmVyOiBDbGllbnRDb250YWluZXJcbik6IGJvb2xlYW4ge1xuICBsZXQgc2hvdWxkUmVuZGVyID0gZmFsc2U7XG4gIGlmICh2Tm9kZVByb3BzKSB7XG4gICAgY29uc3QgY29uc3RQcm9wc0RpZmZlcmVudCA9IGhhbmRsZUNoYW5nZWRQcm9wcyhcbiAgICAgIGpzeFByb3BzW19DT05TVF9QUk9QU10sXG4gICAgICB2Tm9kZVByb3BzW19DT05TVF9QUk9QU10sXG4gICAgICB2Tm9kZVByb3BzW19QUk9QU19IQU5ETEVSXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBzaG91bGRSZW5kZXIgfHw9IGNvbnN0UHJvcHNEaWZmZXJlbnQ7XG4gICAgY29uc3QgdmFyUHJvcHNEaWZmZXJlbnQgPSBoYW5kbGVDaGFuZ2VkUHJvcHMoXG4gICAgICBqc3hQcm9wc1tfVkFSX1BST1BTXSxcbiAgICAgIHZOb2RlUHJvcHNbX1ZBUl9QUk9QU10sXG4gICAgICB2Tm9kZVByb3BzW19QUk9QU19IQU5ETEVSXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHNob3VsZFJlbmRlciB8fD0gdmFyUHJvcHNEaWZmZXJlbnQ7XG4gICAgLy8gVXBkYXRlIHRoZSBvd25lciBhZnRlciBhbGwgcHJvcHMgaGF2ZSBiZWVuIHN5bmNlZFxuICAgIHZOb2RlUHJvcHNbX09XTkVSXSA9IChqc3hQcm9wcyBhcyBQcm9wc1Byb3h5KVtfT1dORVJdO1xuICB9IGVsc2UgaWYgKGpzeFByb3BzKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gcHJvcHMgaW5zdGFuY2UsIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgLy8gV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSB3ZSBhcmUgbm90IHVzaW5nIHRoZSBwcm9wcyBpbnN0YW5jZSBmb3IgYW55dGhpbmcgZWxzZS5cbiAgICB2bm9kZV9zZXRQcm9wKGhvc3QgYXMgVmlydHVhbFZOb2RlLCBFTEVNRU5UX1BST1BTLCBqc3hQcm9wcyk7XG4gICAgdk5vZGVQcm9wcyA9IGpzeFByb3BzO1xuICB9XG4gIHJldHVybiBzaG91bGRSZW5kZXI7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNoYW5nZWRQcm9wcyhcbiAgc3JjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZHN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcHJvcHNIYW5kbGVyOiBQcm9wc1Byb3h5SGFuZGxlcixcbiAgY29udGFpbmVyOiBDbGllbnRDb250YWluZXIsXG4gIHRyaWdnZXJFZmZlY3RzOiBib29sZWFuID0gdHJ1ZVxuKTogYm9vbGVhbiB7XG4gIGlmIChpc1Byb3BzRW1wdHkoc3JjKSAmJiBpc1Byb3BzRW1wdHkoZHN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3BzSGFuZGxlci4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICAvLyBVcGRhdGUgY2hhbmdlZC9hZGRlZCBwcm9wcyBmcm9tIHNyY1xuICBpZiAoc3JjKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3JjKSB7XG4gICAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nIHx8IGtleSA9PT0gUUJhY2tSZWZzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFkc3QgfHwgc3JjW2tleV0gIT09IGRzdFtrZXldKSB7XG4gICAgICAgIGlmICh0cmlnZ2VyRWZmZWN0cykge1xuICAgICAgICAgIGlmIChkc3QpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgaW4gZHN0IEJFRk9SRSB0cmlnZ2VyaW5nIGVmZmVjdHNcbiAgICAgICAgICAgIC8vIHNvIGVmZmVjdHMgc2VlIHRoZSBuZXcgdmFsdWVcbiAgICAgICAgICAgIC8vIE5vdGU6IFZhbHVlIGlzIG5vdCB0cmlnZ2VyaW5nIGVmZmVjdHMsIGJlY2F1c2Ugd2UgYXJlIG1vZHlmaW5nIGRpcmVjdCBWQVJfUFJPUFMgb2JqZWN0XG4gICAgICAgICAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkaWRUaWdnZXIgPSB0cmlnZ2VyUHJvcHNQcm94eUVmZmVjdChwcm9wc0hhbmRsZXIsIGtleSk7XG4gICAgICAgICAgaWYgKCFkaWRUaWdnZXIpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBlZmZlY3Qgd2FzIG5vdCB0cmlnZ2VyZWQsIHRoZW4gdGhlIHByb3AgaGFzIGNoYW5nZWQgYW5kIHdlIHNob3VsZCByZXJlbmRlclxuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEVhcmx5IHJldHVybiBmb3IgY29uc3QgcHJvcHMgKG5vIGVmZmVjdHMpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgcHJvcHMgdGhhdCBhcmUgaW4gZHN0IGJ1dCBub3QgaW4gc3JjXG4gIGlmIChkc3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkc3QpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjaGlsZHJlbicgfHwga2V5ID09PSBRQmFja1JlZnMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXNyYyB8fCAhX2hhc093blByb3BlcnR5LmNhbGwoc3JjLCBrZXkpKSB7XG4gICAgICAgIGlmICh0cmlnZ2VyRWZmZWN0cykge1xuICAgICAgICAgIGRlbGV0ZSBkc3Rba2V5XTtcbiAgICAgICAgICBjb25zdCBkaWRUaWdnZXIgPSB0cmlnZ2VyUHJvcHNQcm94eUVmZmVjdChwcm9wc0hhbmRsZXIsIGtleSk7XG4gICAgICAgICAgaWYgKCFkaWRUaWdnZXIpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBlZmZlY3Qgd2FzIG5vdCB0cmlnZ2VyZWQsIHRoZW4gdGhlIHByb3AgaGFzIGNoYW5nZWQgYW5kIHdlIHNob3VsZCByZXJlbmRlclxuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYW5nZWQ7XG59XG5cbmZ1bmN0aW9uIGlzUHJvcHNFbXB0eShwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpc09iamVjdEVtcHR5KHByb3BzKTtcbn1cblxuLyoqXG4gKiBJZiB2bm9kZSBpcyByZW1vdmVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVsZWFzZSBhbGwgc3Vic2NyaXB0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHRyYXZlcnNlIHRoZSB2bm9kZSB0cmVlIGluIGRlcHRoLWZpcnN0IG9yZGVyIGFuZCByZWxlYXNlIGFsbCBzdWJzY3JpcHRpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbiB0YWtlcyBpbnRvIGFjY291bnQ6XG4gKlxuICogLSBQcm9qZWN0aW9uIG5vZGVzIGJ5IG5vdCByZWN1cnNpbmcgaW50byB0aGVtLlxuICogLSBDb21wb25lbnQgbm9kZXMgYnkgcmVjdXJzaW5nIGludG8gdGhlIGNvbXBvbmVudCBjb250ZW50IG5vZGVzICh3aGljaCBtYXkgYmUgcHJvamVjdGVkKS5cbiAqXG4gKiBAcGFyYW0gY3Vyc29yUm9vdCAtIE9wdGlvbmFsIGN1cnNvciByb290ICh2U3RhcnROb2RlKSB0byBwcm9wYWdhdGUgZGlydHkgYml0cyB0byBkdXJpbmcgZGlmZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXAoXG4gIGNvbnRhaW5lcjogQ2xpZW50Q29udGFpbmVyLFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHZOb2RlOiBWTm9kZSxcbiAgY3Vyc29yUm9vdDogVk5vZGUgfCBudWxsID0gbnVsbFxuKSB7XG4gIGxldCB2Q3Vyc29yOiBWTm9kZSB8IG51bGwgPSB2Tm9kZTtcbiAgY29uc3QgY3Vyc29yUm9vdERhdGEgPSBjdXJzb3JSb290ICYmIGlzQ3Vyc29yKGN1cnNvclJvb3QpID8gZ2V0Q3Vyc29yRGF0YShjdXJzb3JSb290KSA6IG51bGw7XG4gIC8vIERlcHRoIGZpcnN0IHRyYXZlcnNhbFxuICBpZiAodm5vZGVfaXNUZXh0Vk5vZGUodk5vZGUpKSB7XG4gICAgbWFya1ZOb2RlQXNEZWxldGVkKHZDdXJzb3IpO1xuICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBzdWJzY3JpcHRpb25zIG9yIGNoaWxkcmVuO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgdlBhcmVudDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgZG8ge1xuICAgIGlmIChjdXJzb3JSb290RGF0YSAmJiB2Q3Vyc29yICE9PSBjdXJzb3JSb290ICYmIGlzQ3Vyc29yKHZDdXJzb3IpKSB7XG4gICAgICBhYmFuZG9uQ3Vyc29yKGNvbnRhaW5lciwgY3Vyc29yUm9vdERhdGEsIHZDdXJzb3IpO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdkN1cnNvci5mbGFncztcbiAgICBpZiAodHlwZSAmIFZOb2RlRmxhZ3MuRUxFTUVOVF9PUl9WSVJUVUFMX01BU0spIHtcbiAgICAgIGNsZWFyQWxsRWZmZWN0cyhjb250YWluZXIsIHZDdXJzb3IpO1xuICAgICAgbWFya1ZOb2RlQXNEZWxldGVkKHZDdXJzb3IpO1xuXG4gICAgICBjb25zdCBpc0NvbXBvbmVudCA9XG4gICAgICAgIHR5cGUgJiBWTm9kZUZsYWdzLlZpcnR1YWwgJiZcbiAgICAgICAgdm5vZGVfZ2V0UHJvcDxPblJlbmRlckZuPGFueT4gfCBudWxsPih2Q3Vyc29yIGFzIFZpcnR1YWxWTm9kZSwgT25SZW5kZXJQcm9wLCBudWxsKSAhPT0gbnVsbDtcbiAgICAgIGlmIChpc0NvbXBvbmVudCkge1xuICAgICAgICAvLyBjbGVhbnVwIHE6c2VxIGNvbnRlbnRcbiAgICAgICAgY29uc3Qgc2VxID0gY29udGFpbmVyLmdldEhvc3RQcm9wPEFycmF5PGFueT4+KHZDdXJzb3IgYXMgVmlydHVhbFZOb2RlLCBFTEVNRU5UX1NFUSk7XG4gICAgICAgIGlmIChzZXEpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gc2VxW2ldO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2JqSXNUYXNrID0gaXNUYXNrKG9iaik7XG4gICAgICAgICAgICAgIGlmIChvYmpJc1Rhc2sgJiYgb2JqLiRmbGFncyQgJiBUYXNrRmxhZ3MuVklTSUJMRV9UQVNLKSB7XG4gICAgICAgICAgICAgICAgb2JqLiRmbGFncyQgfD0gVGFza0ZsYWdzLk5FRURTX0NMRUFOVVA7XG4gICAgICAgICAgICAgICAgbWFya1ZOb2RlRGlydHkoY29udGFpbmVyLCB2Q3Vyc29yLCBDaG9yZUJpdHMuQ0xFQU5VUCwgY3Vyc29yUm9vdCk7XG5cbiAgICAgICAgICAgICAgICAvLyBkb24ndCBjYWxsIGNsZWFudXBEZXN0cm95YWJsZSB5ZXQsIGRvIGl0IGJ5IHRoZSBzY2hlZHVsZXJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBTaWduYWxJbXBsIHx8IGlzU3RvcmUob2JqKSkge1xuICAgICAgICAgICAgICAgIGNsZWFyQWxsRWZmZWN0cyhjb250YWluZXIsIG9iaiBhcyBDb25zdW1lcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAob2JqSXNUYXNrIHx8IG9iaiBpbnN0YW5jZW9mIEFzeW5jU2lnbmFsSW1wbCkge1xuICAgICAgICAgICAgICAgIGNsZWFudXBEZXN0cm95YWJsZShvYmopO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU1BFQ0lBTCBDQVNFOiBJZiB3ZSBhcmUgYSBjb21wb25lbnQsIHdlIG5lZWQgdG8gZGVzY2VuZCBpbnRvIHRoZSBwcm9qZWN0ZWQgY29udGVudCBhbmQgcmVsZWFzZSB0aGUgY29udGVudC5cbiAgICAgICAgY29uc3QgYXR0cnMgPSAodkN1cnNvciBhcyBWaXJ0dWFsVk5vZGUpLnByb3BzO1xuICAgICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXR0cnMpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGlmIChpc1Nsb3RQcm9wKGtleSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyc1trZXldO1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhdHRyc1trZXldID0gbnVsbDsgLy8gcHJldmVudCBpbmZpbml0ZSBsb29wXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9XG4gICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gdm5vZGVfbG9jYXRlKGNvbnRhaW5lci5yb290Vk5vZGUsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6ICh2YWx1ZSBhcyB1bmtub3duIGFzIFZOb2RlKTtcbiAgICAgICAgICAgICAgICBsZXQgcHJvamVjdGlvbkNoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZChwcm9qZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdGlvbkNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhbnVwKGNvbnRhaW5lciwgam91cm5hbCwgcHJvamVjdGlvbkNoaWxkLCBjdXJzb3JSb290KTtcbiAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25DaGlsZCA9IHByb2plY3Rpb25DaGlsZC5uZXh0U2libGluZyBhcyBWTm9kZSB8IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xlYW51cFN0YWxlVW5jbGFpbWVkUHJvamVjdGlvbihjb250YWluZXIsIGpvdXJuYWwsIHByb2plY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzUHJvamVjdGlvbiA9IHZub2RlX2lzUHJvamVjdGlvbih2Q3Vyc29yKTtcbiAgICAgIC8vIERlc2NlbmQgaW50byBjaGlsZHJlblxuICAgICAgaWYgKCFpc1Byb2plY3Rpb24pIHtcbiAgICAgICAgLy8gT25seSBpZiBpdCBpcyBub3QgYSBwcm9qZWN0aW9uXG4gICAgICAgIGNvbnN0IHZGaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Q3Vyc29yKTtcbiAgICAgICAgaWYgKHZGaXJzdENoaWxkKSB7XG4gICAgICAgICAgdkN1cnNvciA9IHZGaXJzdENoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBwcm9iYWJseSBjYW4gYmUgcmVtb3ZlZFxuICAgICAgZWxzZSBpZiAodkN1cnNvciA9PT0gdk5vZGUpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGl0IGlzIGEgcHJvamVjdGlvbiBhbmQgd2UgYXJlIGF0IHRoZSByb290LCB0aGVuIHdlIHNob3VsZCBvbmx5IHdhbGsgdGhlIGNoaWxkcmVuIHRvXG4gICAgICAgICAqIG1hdGVyaWFsaXplIHRoZSBwcm9qZWN0aW9uIGNvbnRlbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBjb3VsZCBoYXZlIHJlZmVyZW5jZXMgaW4gdGhlIHZub2RlXG4gICAgICAgICAqIHJlZnMgbWFwIHdoaWNoIG5lZWQgdG8gYmUgbWF0ZXJpYWxpemVkIGJlZm9yZSBjbGVhbnVwLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgdkZpcnN0Q2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZDdXJzb3IpO1xuICAgICAgICBpZiAodkZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICB2bm9kZV93YWxrVk5vZGUodkZpcnN0Q2hpbGQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclByb2plY3Rpb25Gcm9tU2xvdFBhcmVudChjb250YWluZXIsIHZDdXJzb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSAmIFZOb2RlRmxhZ3MuVGV4dCkge1xuICAgICAgbWFya1ZOb2RlQXNEZWxldGVkKHZDdXJzb3IpO1xuICAgIH1cbiAgICAvLyBPdXQgb2YgY2hpbGRyZW5cbiAgICBpZiAodkN1cnNvciA9PT0gdk5vZGUpIHtcbiAgICAgIC8vIHdlIGFyZSB3aGVyZSB3ZSBzdGFydGVkLCB0aGlzIG1lYW5zIHRoYXQgdk5vZGUgaGFzIG5vIGNoaWxkcmVuLCBzbyB3ZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT3V0IG9mIGNoaWxkcmVuLCBnbyB0byBuZXh0IHNpYmxpbmdcbiAgICBjb25zdCB2TmV4dFNpYmxpbmcgPSB2Q3Vyc29yLm5leHRTaWJsaW5nIGFzIFZOb2RlIHwgbnVsbDtcbiAgICBpZiAodk5leHRTaWJsaW5nKSB7XG4gICAgICB2Q3Vyc29yID0gdk5leHRTaWJsaW5nO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gT3V0IG9mIHNpYmxpbmdzLCBnbyB0byBwYXJlbnRcbiAgICB2UGFyZW50ID0gdkN1cnNvci5wYXJlbnQ7XG4gICAgd2hpbGUgKHZQYXJlbnQpIHtcbiAgICAgIGlmICh2UGFyZW50ID09PSB2Tm9kZSkge1xuICAgICAgICAvLyBXZSBhcmUgYmFjayB3aGVyZSB3ZSBzdGFydGVkLCB3ZSBhcmUgZG9uZS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgdk5leHRQYXJlbnRTaWJsaW5nID0gdlBhcmVudC5uZXh0U2libGluZyBhcyBWTm9kZSB8IG51bGw7XG4gICAgICBpZiAodk5leHRQYXJlbnRTaWJsaW5nKSB7XG4gICAgICAgIHZDdXJzb3IgPSB2TmV4dFBhcmVudFNpYmxpbmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdlBhcmVudCA9IHZQYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICBpZiAodlBhcmVudCA9PSBudWxsKSB7XG4gICAgICAvLyBXZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUgYXMgYm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIGNsZWFyUHJvamVjdGlvbkZyb21TbG90UGFyZW50KGNvbnRhaW5lcjogQ2xpZW50Q29udGFpbmVyLCB2Tm9kZTogVk5vZGUpIHtcbiAgaWYgKCF2Tm9kZS5zbG90UGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNsb3ROYW1lID0gY29udGFpbmVyLmdldEhvc3RQcm9wPHN0cmluZz4odk5vZGUsIFFTbG90KTtcbiAgaWYgKHNsb3ROYW1lICE9IG51bGwgJiYgY29udGFpbmVyLmdldEhvc3RQcm9wKHZOb2RlLnNsb3RQYXJlbnQsIHNsb3ROYW1lKSA9PT0gdk5vZGUpIHtcbiAgICB2bm9kZV9zZXRQcm9wKHZOb2RlLnNsb3RQYXJlbnQsIHNsb3ROYW1lLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhbnVwU3RhbGVVbmNsYWltZWRQcm9qZWN0aW9uKFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lcixcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBwcm9qZWN0aW9uOiBWTm9kZVxuKSB7XG4gIC8vIHdlIGFyZSByZW1vdmluZyBhIG5vZGUgd2hlcmUgdGhlIHByb2plY3Rpb24gd291bGQgZ28gYWZ0ZXIgc2xvdCByZW5kZXIuXG4gIC8vIFRoaXMgaXMgbm90IG5lZWRlZCwgc28gd2UgbmVlZCB0byBjbGVhbnVwIHN0aWxsIHVuY2xhaW1lZCBwcm9qZWN0aW9uXG4gIGNvbnN0IHByb2plY3Rpb25QYXJlbnQgPSBwcm9qZWN0aW9uLnBhcmVudDtcbiAgaWYgKHByb2plY3Rpb25QYXJlbnQpIHtcbiAgICBjb25zdCBwcm9qZWN0aW9uUGFyZW50VHlwZSA9IHByb2plY3Rpb25QYXJlbnQuZmxhZ3M7XG4gICAgaWYgKFxuICAgICAgcHJvamVjdGlvblBhcmVudFR5cGUgJiBWTm9kZUZsYWdzLkVsZW1lbnQgJiZcbiAgICAgIHZub2RlX2dldEVsZW1lbnROYW1lKHByb2plY3Rpb25QYXJlbnQgYXMgRWxlbWVudFZOb2RlKSA9PT0gUVRlbXBsYXRlXG4gICAgKSB7XG4gICAgICAvLyBpZiBwYXJlbnQgaXMgdGhlIHE6dGVtcGxhdGUgZWxlbWVudCB0aGVuIHByb2plY3Rpb24gaXMgc3RpbGwgdW5jbGFpbWVkIC0gcmVtb3ZlIGl0XG4gICAgICBjbGVhclByb2plY3Rpb25Gcm9tU2xvdFBhcmVudChjb250YWluZXIsIHByb2plY3Rpb24pO1xuICAgICAgdm5vZGVfcmVtb3ZlKGpvdXJuYWwsIHByb2plY3Rpb25QYXJlbnQgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLCBwcm9qZWN0aW9uLCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1ZOb2RlQXNEZWxldGVkKHZDdXJzb3I6IFZOb2RlKSB7XG4gIC8qKlxuICAgKiBNYXJrcyB2Q3Vyc29yIGFzIGRlbGV0ZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyB0byBwcmV2ZW50IGNob3JlcyBmcm9tIHJ1bm5pbmcgYWZ0ZXIgdGhlIHZub2RlIGlzXG4gICAqIHJlbW92ZWQuIChmb3IgZXhhbXBsZSBzaWduYWwgc3Vic2NyaXB0aW9ucylcbiAgICovXG5cbiAgdkN1cnNvci5mbGFncyB8PSBWTm9kZUZsYWdzLkRlbGV0ZWQ7XG59XG5cbmZ1bmN0aW9uIGFyZVdyYXBwZWRTaWduYWxzRXF1YWwoXG4gIG9sZFNpZ25hbDogV3JhcHBlZFNpZ25hbEltcGw8YW55PixcbiAgbmV3U2lnbmFsOiBXcmFwcGVkU2lnbmFsSW1wbDxhbnk+XG4pOiBib29sZWFuIHtcbiAgaWYgKG9sZFNpZ25hbCA9PT0gbmV3U2lnbmFsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBuZXdTaWduYWwuJGZ1bmMkID09PSBvbGRTaWduYWwuJGZ1bmMkICYmIGFyZUFyZ3VtZW50c0VxdWFsKG5ld1NpZ25hbC4kYXJncyQsIG9sZFNpZ25hbC4kYXJncyQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFyZUFyZ3VtZW50c0VxdWFsKG9sZEFyZ3M6IGFueVtdIHwgdW5kZWZpbmVkLCBuZXdBcmdzOiBhbnlbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBpZiAob2xkQXJncyA9PT0gbmV3QXJncykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghb2xkQXJncyB8fCAhbmV3QXJncyB8fCBvbGRBcmdzLmxlbmd0aCAhPT0gbmV3QXJncy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRBcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9sZEFyZ3NbaV0gIT09IG5ld0FyZ3NbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zV3JhcHBlZFNpZ25hbChkYXRhOiB1bmtub3duW10sIHNpZ25hbDogU2lnbmFsPGFueT4pOiBib29sZWFuIHtcbiAgaWYgKCEoc2lnbmFsIGluc3RhbmNlb2YgV3JhcHBlZFNpZ25hbEltcGwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBkYXRhW2ldO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgV3JhcHBlZFNpZ25hbEltcGwgJiYgYXJlV3JhcHBlZFNpZ25hbHNFcXVhbChpdGVtLCBzaWduYWwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19","import { isDev, isServer } from '@qwik.dev/core/build';\nimport { qTest } from './utils/qdev';\nimport { vnode_isVNode } from '../client/vnode-utils';\nimport { isSignal } from '../reactive-primitives/utils';\nimport { clearAllEffects } from '../reactive-primitives/cleanup';\nimport { invokeApply, newRenderInvokeContext } from '../use/use-core';\nimport { isQwikComponent } from './component.public';\nimport { assertDefined } from './error/assert';\nimport { Fragment } from './jsx/jsx-runtime';\nimport { _jsxSorted } from './jsx/jsx-internal';\nimport { JSXNodeImpl, isJSXNode } from './jsx/jsx-node';\nimport { isQrl } from './qrl/qrl-utils';\nimport { EMPTY_OBJ } from './utils/flyweight';\nimport { logWarn } from './utils/log';\nimport { ELEMENT_PROPS, ELEMENT_SEQ_IDX, OnRenderProp, USE_ON_LOCAL, USE_ON_LOCAL_SEQ_IDX, } from './utils/markers';\nimport { MAX_RETRY_ON_PROMISE_COUNT, isPromise, maybeThen, safeCall } from './utils/promises';\nimport { isArray, isPrimitiveOrNullUndefined } from './utils/types';\nimport { getSubscriber } from '../reactive-primitives/subscriber';\nimport { getEventDataFromHtmlAttribute } from './utils/event-names';\nimport { isServerPlatform } from './platform/platform';\nimport { isTask } from '../use/use-task';\n/**\n * Use `executeComponent` to execute a component.\n *\n * Component execution can be complex because of:\n *\n * - It can by async\n * - It can contain many tasks which need to be awaited\n * - Each task can run multiple times if they track signals which change.\n * - The JSX may be re-generated multiple times of a task needs to be rerun due to signal change.\n * - It needs to keep track of hook state.\n *\n * For `component$`: `renderHost` === `subscriptionHost` For inlined-components: the\n * `subscriptionHost` is a parent `component$` which needs to re-execute.\n *\n * @param container\n * @param renderHost - VNode into which the component is rendered into.\n * @param subscriptionHost - VNode which will be re-executed if the component needs to re-render.\n * @param componentQRL\n * @param props\n * @returns\n */\nexport const executeComponent = (container, renderHost, subscriptionHost, componentQRL, props) => {\n    const iCtx = newRenderInvokeContext(container.$locale$, renderHost, container);\n    if (subscriptionHost) {\n        iCtx.$effectSubscriber$ = getSubscriber(subscriptionHost, \":\" /* EffectProperty.COMPONENT */);\n        iCtx.$container$ = container;\n    }\n    let componentFn;\n    container.ensureProjectionResolved(renderHost);\n    let isInlineComponent = false;\n    if (componentQRL === null) {\n        componentQRL = container.getHostProp(renderHost, OnRenderProp);\n        isDev && assertDefined(componentQRL, 'No Component found at this location');\n    }\n    if (isQrl(componentQRL)) {\n        props = props || container.getHostProp(renderHost, ELEMENT_PROPS) || EMPTY_OBJ;\n        // TODO is this possible? JSXNode handles this, no?\n        if ('children' in props) {\n            delete props.children;\n        }\n        componentFn = componentQRL.getFn(iCtx);\n    }\n    else if (isQwikComponent(componentQRL)) {\n        const qComponentFn = componentQRL;\n        componentFn = () => invokeApply(iCtx, qComponentFn, [props || EMPTY_OBJ, null, 0]);\n    }\n    else {\n        isInlineComponent = true;\n        const inlineComponent = componentQRL;\n        componentFn = () => invokeApply(iCtx, inlineComponent, [props || EMPTY_OBJ]);\n    }\n    const isSsr = qTest ? isServerPlatform() : isServer;\n    const executeComponentWithPromiseExceptionRetry = (retryCount = 0) => safeCall(() => {\n        if (!isInlineComponent) {\n            container.setHostProp(renderHost, ELEMENT_SEQ_IDX, null);\n            container.setHostProp(renderHost, USE_ON_LOCAL_SEQ_IDX, null);\n        }\n        if (retryCount > 0 && vnode_isVNode(renderHost)) {\n            clearAllEffects(container, renderHost);\n        }\n        return maybeThen(componentFn(props), (jsx) => maybeThen(iCtx.$waitOn$, () => jsx));\n    }, (jsx) => {\n        // In SSR, check if the component was marked dirty (COMPONENT bit) during execution.\n        // This happens when something completes and updates reactive primitives\n        // while we're waiting on $waitOn$. If so, we need to re-execute the component\n        // to get fresh JSX with updated values.\n        if (isSsr && !isInlineComponent) {\n            const ssrNode = renderHost;\n            if (ssrNode.dirty & 4 /* ChoreBits.COMPONENT */) {\n                ssrNode.dirty &= ~4 /* ChoreBits.COMPONENT */;\n                if (retryCount < MAX_RETRY_ON_PROMISE_COUNT) {\n                    return executeComponentWithPromiseExceptionRetry(retryCount + 1);\n                }\n            }\n        }\n        const useOnEvents = container.getHostProp(renderHost, USE_ON_LOCAL);\n        if (useOnEvents) {\n            return addUseOnEvents(container, jsx, useOnEvents);\n        }\n        return jsx;\n    }, (err) => {\n        if (isPromise(err) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {\n            return err.then(() => executeComponentWithPromiseExceptionRetry(++retryCount));\n        }\n        else {\n            if (retryCount >= MAX_RETRY_ON_PROMISE_COUNT) {\n                throw new Error(`Max retry count of component execution reached`);\n            }\n            throw err;\n        }\n    });\n    return executeComponentWithPromiseExceptionRetry();\n};\n/**\n * Adds `useOn` events to the JSX output.\n *\n * @param jsx The JSX output to modify.\n * @param useOnEvents The `useOn` events to add.\n * @returns The modified JSX output.\n */\nfunction addUseOnEvents(container, jsx, useOnEvents) {\n    const jsxElement = findFirstElementNode(jsx);\n    let jsxResult = jsx;\n    const qVisibleEvent = 'q-e:qvisible';\n    return maybeThen(jsxElement, (jsxElement) => {\n        // headless components are components that don't render a real DOM element\n        const isHeadless = !jsxElement;\n        // placeholder element is a <script> element that is used to add events to the document or window\n        let placeholderElement = null;\n        for (const key in useOnEvents) {\n            if (Object.prototype.hasOwnProperty.call(useOnEvents, key)) {\n                let targetElement = jsxElement;\n                let eventKey = key;\n                if (isHeadless) {\n                    // if the component is headless, we need to add the event to the placeholder element\n                    if (key === qVisibleEvent ||\n                        key.startsWith(\"q-d:\" /* EventNameHtmlScope.document */) ||\n                        key.startsWith(\"q-w:\" /* EventNameHtmlScope.window */)) {\n                        if (!placeholderElement) {\n                            placeholderElement = createPlaceholderScriptNode();\n                            // A headless component that projects the document root (e.g. wrapping `<head>`/`<body>`\n                            // in a `<Slot/>`) would otherwise place the placeholder `<script>` as a direct child of\n                            // `<html>`, which is invalid. On the server let the container defer it into `<head>`.\n                            const isSsr = qTest ? isServerPlatform() : isServer;\n                            if (!(isSsr && container.$deferRootPlaceholder$(placeholderElement))) {\n                                jsxResult = injectPlaceholderElement(jsxResult, placeholderElement);\n                            }\n                        }\n                        targetElement = placeholderElement;\n                    }\n                    else {\n                        if (isDev) {\n                            const sourceLocation = getUseOnSourceLocation(useOnEvents[key].qrls);\n                            logWarn('You are trying to add an event \"' +\n                                key +\n                                '\" using `useOn` hook, ' +\n                                'but a node to which you can add an event is not found. ' +\n                                'Please make sure that the component outputs a DOM element.' +\n                                (sourceLocation ? ` Offending \\`useOn\\`: ${sourceLocation}.` : ''));\n                        }\n                        continue;\n                    }\n                }\n                if (targetElement) {\n                    if (targetElement.type === 'script' && key === qVisibleEvent) {\n                        eventKey = 'q-d:qinit';\n                        if (isDev) {\n                            const sourceLocation = getUseOnSourceLocation(useOnEvents[key].qrls);\n                            logWarn(`You are trying to add the event \"${key}\" ` +\n                                'using the `useVisibleTask$` hook with the \"intersection-observer\" strategy, ' +\n                                'but this only works when the component outputs a DOM element. Falling back to ' +\n                                '\"document-ready\" instead.' +\n                                (sourceLocation ? ` Offending \\`useVisibleTask$\\`: ${sourceLocation}.` : ''));\n                        }\n                    }\n                    addUseOnEvent(targetElement, eventKey, useOnEvents[key]);\n                }\n            }\n        }\n        return jsxResult;\n    });\n}\nfunction getUseOnSourceLocation(eventQrls) {\n    for (let i = 0; i < eventQrls.length; i++) {\n        const eventQrl = eventQrls[i];\n        const task = eventQrl?.getCaptured()?.[0];\n        if (isTask(task)) {\n            const dev = task.$qrl$.dev;\n            if (dev?.file) {\n                return typeof dev.lo === 'number' && typeof dev.hi === 'number'\n                    ? `${dev.file}:${dev.lo}-${dev.hi}`\n                    : dev.file;\n            }\n        }\n    }\n    return null;\n}\n/**\n * Adds an event to the JSX element.\n *\n * @param jsxElement The JSX element to add the event to.\n * @param key The event name.\n * @param value The event value.\n */\nfunction addUseOnEvent(jsxElement, key, value) {\n    // These handlers are always there, so they go in constProps\n    const props = (jsxElement.constProps ||= {});\n    const propValue = props[key];\n    const qrls = value.qrls;\n    if (propValue == null) {\n        props[key] = qrls;\n    }\n    else if (Array.isArray(propValue)) {\n        propValue.push(...qrls);\n    }\n    else {\n        props[key] = [propValue, ...qrls];\n    }\n    const varProp = jsxElement.varProps[key];\n    if (varProp) {\n        // we need to demote the handlers to varProps\n        if (Array.isArray(propValue)) {\n            propValue.push(...props[key]);\n        }\n        else {\n            jsxElement.varProps[key] = [propValue, ...qrls];\n        }\n        props[key] = undefined;\n    }\n    const capture = value.capture;\n    const preventdefault = value.preventdefault;\n    const stoppropagation = value.stoppropagation;\n    if (!capture && !preventdefault && !stoppropagation) {\n        return;\n    }\n    const [, eventName] = getEventDataFromHtmlAttribute(key);\n    capture && addUseOnModifier(jsxElement, eventName, 'capture');\n    preventdefault && addUseOnModifier(jsxElement, eventName, 'preventdefault');\n    stoppropagation && addUseOnModifier(jsxElement, eventName, 'stoppropagation');\n}\nfunction addUseOnModifier(jsxElement, eventName, modifier) {\n    const key = `${modifier}:${eventName}`;\n    const varProps = jsxElement.varProps;\n    if (varProps === EMPTY_OBJ) {\n        jsxElement.varProps = {};\n    }\n    jsxElement.varProps[key] = true;\n}\n/**\n * Finds the first element node in the JSX output.\n *\n * @param jsx The JSX output to search.\n * @returns The first element node or null if no element node is found.\n */\nfunction findFirstElementNode(jsx) {\n    const queue = [jsx];\n    while (queue.length) {\n        const jsx = queue.shift();\n        if (isJSXNode(jsx)) {\n            if (typeof jsx.type === 'string') {\n                return jsx;\n            }\n            queue.push(jsx.children);\n        }\n        else if (isArray(jsx)) {\n            queue.push(...jsx);\n        }\n        else if (isPromise(jsx)) {\n            return maybeThen(jsx, (jsx) => findFirstElementNode(jsx));\n        }\n        else if (isSignal(jsx)) {\n            return findFirstElementNode(jsx.untrackedValue);\n        }\n    }\n    return null;\n}\n/**\n * Injects a placeholder <script> element into the JSX output.\n *\n * This is necessary for headless components (components that don't render a real DOM element) to\n * have an anchor point for `useOn` event listeners that target the document or window.\n *\n * @param jsx The JSX output to modify.\n * @param placeholder The placeholder element to inject.\n * @returns The modified JSX output.\n */\nfunction injectPlaceholderElement(jsx, placeholder) {\n    // For regular JSX nodes, we can append the placeholder to its children.\n    if (isJSXNode(jsx)) {\n        // Inline components don't always render children, so we wrap them in Fragment which does.\n        if (jsx.type !== Fragment && !isQwikComponent(jsx.type)) {\n            return _jsxSorted(Fragment, null, null, [jsx, placeholder], 0, null);\n        }\n        if (jsx.children == null) {\n            jsx.children = placeholder;\n        }\n        else if (isArray(jsx.children)) {\n            jsx.children.push(placeholder);\n        }\n        else {\n            jsx.children = [jsx.children, placeholder];\n        }\n        return jsx;\n    }\n    // For primitives, we can't add children, so we wrap them in a fragment.\n    if (isPrimitiveOrNullUndefined(jsx)) {\n        return _jsxSorted(Fragment, null, null, [jsx, placeholder], 0, null);\n    }\n    // For an array of nodes, we inject the placeholder into the first element.\n    if (isArray(jsx) && jsx.length > 0) {\n        injectPlaceholderElement(jsx[0], placeholder);\n        return jsx;\n    }\n    // For anything else we do nothing.\n    return jsx;\n}\n/** @returns An empty <script> element for adding qwik metadata attributes to */\nfunction createPlaceholderScriptNode() {\n    return new JSXNodeImpl('script', null, { hidden: '' }, null, 0, null);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvY29tcG9uZW50LWV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRyxPQUFPLEVBQUUsZUFBZSxFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osb0JBQW9CLEdBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFNB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RUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYsIGlzU2VydmVyIH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgcVRlc3QgfSBmcm9tICcuL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgdm5vZGVfaXNWTm9kZSB9IGZyb20gJy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyBpc1NpZ25hbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvdXRpbHMnO1xuaW1wb3J0IHsgY2xlYXJBbGxFZmZlY3RzIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9jbGVhbnVwJztcbmltcG9ydCB7IGludm9rZUFwcGx5LCBuZXdSZW5kZXJJbnZva2VDb250ZXh0LCB0eXBlIFJlbmRlckludm9rZUNvbnRleHQgfSBmcm9tICcuLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHsgdHlwZSBFdmVudFFSTCwgdHlwZSBVc2VPbkV2ZW50LCB0eXBlIFVzZU9uTWFwIH0gZnJvbSAnLi4vdXNlL3VzZS1vbic7XG5pbXBvcnQgeyBpc1F3aWtDb21wb25lbnQsIHR5cGUgT25SZW5kZXJGbiB9IGZyb20gJy4vY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkIH0gZnJvbSAnLi9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIHR5cGUgUHJvcHMgfSBmcm9tICcuL2pzeC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBfanN4U29ydGVkIH0gZnJvbSAnLi9qc3gvanN4LWludGVybmFsJztcbmltcG9ydCB7IEpTWE5vZGVJbXBsLCBpc0pTWE5vZGUgfSBmcm9tICcuL2pzeC9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWE5vZGVJbnRlcm5hbCwgSlNYT3V0cHV0IH0gZnJvbSAnLi9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBLbm93bkV2ZW50TmFtZXMgfSBmcm9tICcuL2pzeC90eXBlcy9qc3gtcXdpay1ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4vcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgeyBpc1FybCB9IGZyb20gJy4vcXJsL3FybC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lciwgSG9zdEVsZW1lbnQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEVNUFRZX09CSiB9IGZyb20gJy4vdXRpbHMvZmx5d2VpZ2h0JztcbmltcG9ydCB7IGxvZ1dhcm4gfSBmcm9tICcuL3V0aWxzL2xvZyc7XG5pbXBvcnQge1xuICBFTEVNRU5UX1BST1BTLFxuICBFTEVNRU5UX1NFUV9JRFgsXG4gIE9uUmVuZGVyUHJvcCxcbiAgVVNFX09OX0xPQ0FMLFxuICBVU0VfT05fTE9DQUxfU0VRX0lEWCxcbn0gZnJvbSAnLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IE1BWF9SRVRSWV9PTl9QUk9NSVNFX0NPVU5ULCBpc1Byb21pc2UsIG1heWJlVGhlbiwgc2FmZUNhbGwgfSBmcm9tICcuL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzUHJpbWl0aXZlT3JOdWxsVW5kZWZpbmVkLCB0eXBlIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBnZXRTdWJzY3JpYmVyIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zdWJzY3JpYmVyJztcbmltcG9ydCB7IEVmZmVjdFByb3BlcnR5IH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBFdmVudE5hbWVIdG1sU2NvcGUsIGdldEV2ZW50RGF0YUZyb21IdG1sQXR0cmlidXRlIH0gZnJvbSAnLi91dGlscy9ldmVudC1uYW1lcyc7XG5pbXBvcnQgeyBpc1NlcnZlclBsYXRmb3JtIH0gZnJvbSAnLi9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgdHlwZSB7IElTc3JOb2RlLCBTU1JDb250YWluZXIgfSBmcm9tICcuLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4vdm5vZGUvZW51bXMvY2hvcmUtYml0cy5lbnVtJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsSW1wbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBpc1Rhc2sgfSBmcm9tICcuLi91c2UvdXNlLXRhc2snO1xuXG4vKipcbiAqIFVzZSBgZXhlY3V0ZUNvbXBvbmVudGAgdG8gZXhlY3V0ZSBhIGNvbXBvbmVudC5cbiAqXG4gKiBDb21wb25lbnQgZXhlY3V0aW9uIGNhbiBiZSBjb21wbGV4IGJlY2F1c2Ugb2Y6XG4gKlxuICogLSBJdCBjYW4gYnkgYXN5bmNcbiAqIC0gSXQgY2FuIGNvbnRhaW4gbWFueSB0YXNrcyB3aGljaCBuZWVkIHRvIGJlIGF3YWl0ZWRcbiAqIC0gRWFjaCB0YXNrIGNhbiBydW4gbXVsdGlwbGUgdGltZXMgaWYgdGhleSB0cmFjayBzaWduYWxzIHdoaWNoIGNoYW5nZS5cbiAqIC0gVGhlIEpTWCBtYXkgYmUgcmUtZ2VuZXJhdGVkIG11bHRpcGxlIHRpbWVzIG9mIGEgdGFzayBuZWVkcyB0byBiZSByZXJ1biBkdWUgdG8gc2lnbmFsIGNoYW5nZS5cbiAqIC0gSXQgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiBob29rIHN0YXRlLlxuICpcbiAqIEZvciBgY29tcG9uZW50JGA6IGByZW5kZXJIb3N0YCA9PT0gYHN1YnNjcmlwdGlvbkhvc3RgIEZvciBpbmxpbmVkLWNvbXBvbmVudHM6IHRoZVxuICogYHN1YnNjcmlwdGlvbkhvc3RgIGlzIGEgcGFyZW50IGBjb21wb25lbnQkYCB3aGljaCBuZWVkcyB0byByZS1leGVjdXRlLlxuICpcbiAqIEBwYXJhbSBjb250YWluZXJcbiAqIEBwYXJhbSByZW5kZXJIb3N0IC0gVk5vZGUgaW50byB3aGljaCB0aGUgY29tcG9uZW50IGlzIHJlbmRlcmVkIGludG8uXG4gKiBAcGFyYW0gc3Vic2NyaXB0aW9uSG9zdCAtIFZOb2RlIHdoaWNoIHdpbGwgYmUgcmUtZXhlY3V0ZWQgaWYgdGhlIGNvbXBvbmVudCBuZWVkcyB0byByZS1yZW5kZXIuXG4gKiBAcGFyYW0gY29tcG9uZW50UVJMXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjdXRlQ29tcG9uZW50ID0gKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgcmVuZGVySG9zdDogSG9zdEVsZW1lbnQsXG4gIHN1YnNjcmlwdGlvbkhvc3Q6IEhvc3RFbGVtZW50IHwgbnVsbCxcbiAgY29tcG9uZW50UVJMOiBPblJlbmRlckZuPHVua25vd24+IHwgUVJMSW50ZXJuYWw8T25SZW5kZXJGbjx1bmtub3duPj4gfCBudWxsLFxuICBwcm9wczogUHJvcHMgfCBudWxsXG4pOiBWYWx1ZU9yUHJvbWlzZTxKU1hPdXRwdXQ+ID0+IHtcbiAgY29uc3QgaUN0eCA9IG5ld1JlbmRlckludm9rZUNvbnRleHQoXG4gICAgY29udGFpbmVyLiRsb2NhbGUkLFxuICAgIHJlbmRlckhvc3QsXG4gICAgY29udGFpbmVyXG4gICkgYXMgUmVuZGVySW52b2tlQ29udGV4dDtcbiAgaWYgKHN1YnNjcmlwdGlvbkhvc3QpIHtcbiAgICBpQ3R4LiRlZmZlY3RTdWJzY3JpYmVyJCA9IGdldFN1YnNjcmliZXIoc3Vic2NyaXB0aW9uSG9zdCwgRWZmZWN0UHJvcGVydHkuQ09NUE9ORU5UKTtcbiAgICBpQ3R4LiRjb250YWluZXIkID0gY29udGFpbmVyO1xuICB9XG4gIGxldCBjb21wb25lbnRGbjogKHByb3BzOiB1bmtub3duKSA9PiBWYWx1ZU9yUHJvbWlzZTxKU1hPdXRwdXQ+O1xuICBjb250YWluZXIuZW5zdXJlUHJvamVjdGlvblJlc29sdmVkKHJlbmRlckhvc3QpO1xuICBsZXQgaXNJbmxpbmVDb21wb25lbnQgPSBmYWxzZTtcbiAgaWYgKGNvbXBvbmVudFFSTCA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFFSTCA9IGNvbnRhaW5lci5nZXRIb3N0UHJvcChyZW5kZXJIb3N0LCBPblJlbmRlclByb3ApITtcbiAgICBpc0RldiAmJiBhc3NlcnREZWZpbmVkKGNvbXBvbmVudFFSTCwgJ05vIENvbXBvbmVudCBmb3VuZCBhdCB0aGlzIGxvY2F0aW9uJyk7XG4gIH1cbiAgaWYgKGlzUXJsKGNvbXBvbmVudFFSTCkpIHtcbiAgICBwcm9wcyA9IHByb3BzIHx8IGNvbnRhaW5lci5nZXRIb3N0UHJvcChyZW5kZXJIb3N0LCBFTEVNRU5UX1BST1BTKSB8fCBFTVBUWV9PQko7XG4gICAgLy8gVE9ETyBpcyB0aGlzIHBvc3NpYmxlPyBKU1hOb2RlIGhhbmRsZXMgdGhpcywgbm8/XG4gICAgaWYgKCdjaGlsZHJlbicgaW4gcHJvcHMpIHtcbiAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlbjtcbiAgICB9XG4gICAgY29tcG9uZW50Rm4gPSBjb21wb25lbnRRUkwuZ2V0Rm4oaUN0eCk7XG4gIH0gZWxzZSBpZiAoaXNRd2lrQ29tcG9uZW50KGNvbXBvbmVudFFSTCkpIHtcbiAgICBjb25zdCBxQ29tcG9uZW50Rm4gPSBjb21wb25lbnRRUkwgYXMgYW55IGFzIChcbiAgICAgIHByb3BzOiBQcm9wcyxcbiAgICAgIGtleTogc3RyaW5nIHwgbnVsbCxcbiAgICAgIGZsYWdzOiBudW1iZXJcbiAgICApID0+IEpTWE5vZGVJbnRlcm5hbDtcbiAgICBjb21wb25lbnRGbiA9ICgpID0+IGludm9rZUFwcGx5KGlDdHgsIHFDb21wb25lbnRGbiwgW3Byb3BzIHx8IEVNUFRZX09CSiwgbnVsbCwgMF0pO1xuICB9IGVsc2Uge1xuICAgIGlzSW5saW5lQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICBjb25zdCBpbmxpbmVDb21wb25lbnQgPSBjb21wb25lbnRRUkwgYXMgKHByb3BzOiBQcm9wcykgPT4gSlNYT3V0cHV0O1xuICAgIGNvbXBvbmVudEZuID0gKCkgPT4gaW52b2tlQXBwbHkoaUN0eCwgaW5saW5lQ29tcG9uZW50LCBbcHJvcHMgfHwgRU1QVFlfT0JKXSk7XG4gIH1cblxuICBjb25zdCBpc1NzciA9IHFUZXN0ID8gaXNTZXJ2ZXJQbGF0Zm9ybSgpIDogaXNTZXJ2ZXI7XG5cbiAgY29uc3QgZXhlY3V0ZUNvbXBvbmVudFdpdGhQcm9taXNlRXhjZXB0aW9uUmV0cnkgPSAocmV0cnlDb3VudCA9IDApOiBWYWx1ZU9yUHJvbWlzZTxKU1hPdXRwdXQ+ID0+XG4gICAgc2FmZUNhbGw8SlNYT3V0cHV0LCBKU1hPdXRwdXQsIEpTWE91dHB1dD4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICghaXNJbmxpbmVDb21wb25lbnQpIHtcbiAgICAgICAgICBjb250YWluZXIuc2V0SG9zdFByb3AocmVuZGVySG9zdCwgRUxFTUVOVF9TRVFfSURYLCBudWxsKTtcbiAgICAgICAgICBjb250YWluZXIuc2V0SG9zdFByb3AocmVuZGVySG9zdCwgVVNFX09OX0xPQ0FMX1NFUV9JRFgsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwICYmIHZub2RlX2lzVk5vZGUocmVuZGVySG9zdCkpIHtcbiAgICAgICAgICBjbGVhckFsbEVmZmVjdHMoY29udGFpbmVyLCByZW5kZXJIb3N0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXliZVRoZW4oY29tcG9uZW50Rm4ocHJvcHMpLCAoanN4KSA9PiBtYXliZVRoZW4oaUN0eC4kd2FpdE9uJCwgKCkgPT4ganN4KSk7XG4gICAgICB9LFxuICAgICAgKGpzeCkgPT4ge1xuICAgICAgICAvLyBJbiBTU1IsIGNoZWNrIGlmIHRoZSBjb21wb25lbnQgd2FzIG1hcmtlZCBkaXJ0eSAoQ09NUE9ORU5UIGJpdCkgZHVyaW5nIGV4ZWN1dGlvbi5cbiAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gc29tZXRoaW5nIGNvbXBsZXRlcyBhbmQgdXBkYXRlcyByZWFjdGl2ZSBwcmltaXRpdmVzXG4gICAgICAgIC8vIHdoaWxlIHdlJ3JlIHdhaXRpbmcgb24gJHdhaXRPbiQuIElmIHNvLCB3ZSBuZWVkIHRvIHJlLWV4ZWN1dGUgdGhlIGNvbXBvbmVudFxuICAgICAgICAvLyB0byBnZXQgZnJlc2ggSlNYIHdpdGggdXBkYXRlZCB2YWx1ZXMuXG4gICAgICAgIGlmIChpc1NzciAmJiAhaXNJbmxpbmVDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBzc3JOb2RlID0gcmVuZGVySG9zdCBhcyBJU3NyTm9kZTtcbiAgICAgICAgICBpZiAoc3NyTm9kZS5kaXJ0eSAmIENob3JlQml0cy5DT01QT05FTlQpIHtcbiAgICAgICAgICAgIHNzck5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5DT01QT05FTlQ7XG4gICAgICAgICAgICBpZiAocmV0cnlDb3VudCA8IE1BWF9SRVRSWV9PTl9QUk9NSVNFX0NPVU5UKSB7XG4gICAgICAgICAgICAgIHJldHVybiBleGVjdXRlQ29tcG9uZW50V2l0aFByb21pc2VFeGNlcHRpb25SZXRyeShyZXRyeUNvdW50ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlT25FdmVudHMgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8VXNlT25NYXA+KHJlbmRlckhvc3QsIFVTRV9PTl9MT0NBTCk7XG4gICAgICAgIGlmICh1c2VPbkV2ZW50cykge1xuICAgICAgICAgIHJldHVybiBhZGRVc2VPbkV2ZW50cyhjb250YWluZXIsIGpzeCwgdXNlT25FdmVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc3g7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBpZiAoaXNQcm9taXNlKGVycikgJiYgcmV0cnlDb3VudCA8IE1BWF9SRVRSWV9PTl9QUk9NSVNFX0NPVU5UKSB7XG4gICAgICAgICAgcmV0dXJuIGVyci50aGVuKCgpID0+XG4gICAgICAgICAgICBleGVjdXRlQ29tcG9uZW50V2l0aFByb21pc2VFeGNlcHRpb25SZXRyeSgrK3JldHJ5Q291bnQpXG4gICAgICAgICAgKSBhcyBQcm9taXNlPEpTWE91dHB1dD47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gTUFYX1JFVFJZX09OX1BST01JU0VfQ09VTlQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWF4IHJldHJ5IGNvdW50IG9mIGNvbXBvbmVudCBleGVjdXRpb24gcmVhY2hlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICByZXR1cm4gZXhlY3V0ZUNvbXBvbmVudFdpdGhQcm9taXNlRXhjZXB0aW9uUmV0cnkoKTtcbn07XG5cbi8qKlxuICogQWRkcyBgdXNlT25gIGV2ZW50cyB0byB0aGUgSlNYIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ganN4IFRoZSBKU1ggb3V0cHV0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB1c2VPbkV2ZW50cyBUaGUgYHVzZU9uYCBldmVudHMgdG8gYWRkLlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIEpTWCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIGFkZFVzZU9uRXZlbnRzKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAganN4OiBKU1hPdXRwdXQsXG4gIHVzZU9uRXZlbnRzOiBVc2VPbk1hcFxuKTogVmFsdWVPclByb21pc2U8SlNYTm9kZUludGVybmFsPHN0cmluZz4gfCBudWxsIHwgSlNYT3V0cHV0PiB7XG4gIGNvbnN0IGpzeEVsZW1lbnQgPSBmaW5kRmlyc3RFbGVtZW50Tm9kZShqc3gpO1xuICBsZXQganN4UmVzdWx0ID0ganN4O1xuICBjb25zdCBxVmlzaWJsZUV2ZW50ID0gJ3EtZTpxdmlzaWJsZSc7XG4gIHJldHVybiBtYXliZVRoZW4oanN4RWxlbWVudCwgKGpzeEVsZW1lbnQpID0+IHtcbiAgICAvLyBoZWFkbGVzcyBjb21wb25lbnRzIGFyZSBjb21wb25lbnRzIHRoYXQgZG9uJ3QgcmVuZGVyIGEgcmVhbCBET00gZWxlbWVudFxuICAgIGNvbnN0IGlzSGVhZGxlc3MgPSAhanN4RWxlbWVudDtcbiAgICAvLyBwbGFjZWhvbGRlciBlbGVtZW50IGlzIGEgPHNjcmlwdD4gZWxlbWVudCB0aGF0IGlzIHVzZWQgdG8gYWRkIGV2ZW50cyB0byB0aGUgZG9jdW1lbnQgb3Igd2luZG93XG4gICAgbGV0IHBsYWNlaG9sZGVyRWxlbWVudDogSlNYTm9kZUludGVybmFsPHN0cmluZz4gfCBudWxsID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB1c2VPbkV2ZW50cykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VPbkV2ZW50cywga2V5KSkge1xuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGpzeEVsZW1lbnQ7XG4gICAgICAgIGxldCBldmVudEtleSA9IGtleTtcblxuICAgICAgICBpZiAoaXNIZWFkbGVzcykge1xuICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaXMgaGVhZGxlc3MsIHdlIG5lZWQgdG8gYWRkIHRoZSBldmVudCB0byB0aGUgcGxhY2Vob2xkZXIgZWxlbWVudFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gcVZpc2libGVFdmVudCB8fFxuICAgICAgICAgICAga2V5LnN0YXJ0c1dpdGgoRXZlbnROYW1lSHRtbFNjb3BlLmRvY3VtZW50KSB8fFxuICAgICAgICAgICAga2V5LnN0YXJ0c1dpdGgoRXZlbnROYW1lSHRtbFNjb3BlLndpbmRvdylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghcGxhY2Vob2xkZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyRWxlbWVudCA9IGNyZWF0ZVBsYWNlaG9sZGVyU2NyaXB0Tm9kZSgpO1xuICAgICAgICAgICAgICAvLyBBIGhlYWRsZXNzIGNvbXBvbmVudCB0aGF0IHByb2plY3RzIHRoZSBkb2N1bWVudCByb290IChlLmcuIHdyYXBwaW5nIGA8aGVhZD5gL2A8Ym9keT5gXG4gICAgICAgICAgICAgIC8vIGluIGEgYDxTbG90Lz5gKSB3b3VsZCBvdGhlcndpc2UgcGxhY2UgdGhlIHBsYWNlaG9sZGVyIGA8c2NyaXB0PmAgYXMgYSBkaXJlY3QgY2hpbGQgb2ZcbiAgICAgICAgICAgICAgLy8gYDxodG1sPmAsIHdoaWNoIGlzIGludmFsaWQuIE9uIHRoZSBzZXJ2ZXIgbGV0IHRoZSBjb250YWluZXIgZGVmZXIgaXQgaW50byBgPGhlYWQ+YC5cbiAgICAgICAgICAgICAgY29uc3QgaXNTc3IgPSBxVGVzdCA/IGlzU2VydmVyUGxhdGZvcm0oKSA6IGlzU2VydmVyO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShpc1NzciAmJiAoY29udGFpbmVyIGFzIFNTUkNvbnRhaW5lcikuJGRlZmVyUm9vdFBsYWNlaG9sZGVyJChwbGFjZWhvbGRlckVsZW1lbnQpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBqc3hSZXN1bHQgPSBpbmplY3RQbGFjZWhvbGRlckVsZW1lbnQoanN4UmVzdWx0LCBwbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gcGxhY2Vob2xkZXJFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNEZXYpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc291cmNlTG9jYXRpb24gPSBnZXRVc2VPblNvdXJjZUxvY2F0aW9uKHVzZU9uRXZlbnRzW2tleV0ucXJscyk7XG4gICAgICAgICAgICAgIGxvZ1dhcm4oXG4gICAgICAgICAgICAgICAgJ1lvdSBhcmUgdHJ5aW5nIHRvIGFkZCBhbiBldmVudCBcIicgK1xuICAgICAgICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICAgICAgICdcIiB1c2luZyBgdXNlT25gIGhvb2ssICcgK1xuICAgICAgICAgICAgICAgICAgJ2J1dCBhIG5vZGUgdG8gd2hpY2ggeW91IGNhbiBhZGQgYW4gZXZlbnQgaXMgbm90IGZvdW5kLiAnICtcbiAgICAgICAgICAgICAgICAgICdQbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBvbmVudCBvdXRwdXRzIGEgRE9NIGVsZW1lbnQuJyArXG4gICAgICAgICAgICAgICAgICAoc291cmNlTG9jYXRpb24gPyBgIE9mZmVuZGluZyBcXGB1c2VPblxcYDogJHtzb3VyY2VMb2NhdGlvbn0uYCA6ICcnKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQudHlwZSA9PT0gJ3NjcmlwdCcgJiYga2V5ID09PSBxVmlzaWJsZUV2ZW50KSB7XG4gICAgICAgICAgICBldmVudEtleSA9ICdxLWQ6cWluaXQnO1xuICAgICAgICAgICAgaWYgKGlzRGV2KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxvY2F0aW9uID0gZ2V0VXNlT25Tb3VyY2VMb2NhdGlvbih1c2VPbkV2ZW50c1trZXldLnFybHMpO1xuICAgICAgICAgICAgICBsb2dXYXJuKFxuICAgICAgICAgICAgICAgIGBZb3UgYXJlIHRyeWluZyB0byBhZGQgdGhlIGV2ZW50IFwiJHtrZXl9XCIgYCArXG4gICAgICAgICAgICAgICAgICAndXNpbmcgdGhlIGB1c2VWaXNpYmxlVGFzayRgIGhvb2sgd2l0aCB0aGUgXCJpbnRlcnNlY3Rpb24tb2JzZXJ2ZXJcIiBzdHJhdGVneSwgJyArXG4gICAgICAgICAgICAgICAgICAnYnV0IHRoaXMgb25seSB3b3JrcyB3aGVuIHRoZSBjb21wb25lbnQgb3V0cHV0cyBhIERPTSBlbGVtZW50LiBGYWxsaW5nIGJhY2sgdG8gJyArXG4gICAgICAgICAgICAgICAgICAnXCJkb2N1bWVudC1yZWFkeVwiIGluc3RlYWQuJyArXG4gICAgICAgICAgICAgICAgICAoc291cmNlTG9jYXRpb24gPyBgIE9mZmVuZGluZyBcXGB1c2VWaXNpYmxlVGFzayRcXGA6ICR7c291cmNlTG9jYXRpb259LmAgOiAnJylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkVXNlT25FdmVudCh0YXJnZXRFbGVtZW50LCBldmVudEtleSwgdXNlT25FdmVudHNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzeFJlc3VsdDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFVzZU9uU291cmNlTG9jYXRpb24oZXZlbnRRcmxzOiBFdmVudFFSTDxLbm93bkV2ZW50TmFtZXM+W10pOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudFFybHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBldmVudFFybCA9IGV2ZW50UXJsc1tpXTtcbiAgICBjb25zdCB0YXNrID0gZXZlbnRRcmw/LmdldENhcHR1cmVkKCk/LlswXTtcbiAgICBpZiAoaXNUYXNrKHRhc2spKSB7XG4gICAgICBjb25zdCBkZXYgPSB0YXNrLiRxcmwkLmRldjtcbiAgICAgIGlmIChkZXY/LmZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkZXYubG8gPT09ICdudW1iZXInICYmIHR5cGVvZiBkZXYuaGkgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBgJHtkZXYuZmlsZX06JHtkZXYubG99LSR7ZGV2LmhpfWBcbiAgICAgICAgICA6IGRldi5maWxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGV2ZW50IHRvIHRoZSBKU1ggZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ganN4RWxlbWVudCBUaGUgSlNYIGVsZW1lbnQgdG8gYWRkIHRoZSBldmVudCB0by5cbiAqIEBwYXJhbSBrZXkgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGV2ZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBhZGRVc2VPbkV2ZW50KGpzeEVsZW1lbnQ6IEpTWE5vZGVJbnRlcm5hbCwga2V5OiBzdHJpbmcsIHZhbHVlOiBVc2VPbkV2ZW50KSB7XG4gIC8vIFRoZXNlIGhhbmRsZXJzIGFyZSBhbHdheXMgdGhlcmUsIHNvIHRoZXkgZ28gaW4gY29uc3RQcm9wc1xuICBjb25zdCBwcm9wcyA9IChqc3hFbGVtZW50LmNvbnN0UHJvcHMgfHw9IHt9IGFzIFByb3BzKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNba2V5XSBhc1xuICAgIHwgRXZlbnRRUkw8S25vd25FdmVudE5hbWVzPltdXG4gICAgfCBFdmVudFFSTDxLbm93bkV2ZW50TmFtZXM+XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHFybHMgPSB2YWx1ZS5xcmxzO1xuICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICBwcm9wc1trZXldID0gcXJscztcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBwcm9wVmFsdWUucHVzaCguLi5xcmxzKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wc1trZXldID0gW3Byb3BWYWx1ZSwgLi4ucXJsc107XG4gIH1cbiAgY29uc3QgdmFyUHJvcCA9IGpzeEVsZW1lbnQudmFyUHJvcHNba2V5XTtcbiAgaWYgKHZhclByb3ApIHtcbiAgICAvLyB3ZSBuZWVkIHRvIGRlbW90ZSB0aGUgaGFuZGxlcnMgdG8gdmFyUHJvcHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICBwcm9wVmFsdWUucHVzaCguLi4ocHJvcHNba2V5XSBhcyBhbnkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAganN4RWxlbWVudC52YXJQcm9wc1trZXldID0gW3Byb3BWYWx1ZSwgLi4ucXJsc107XG4gICAgfVxuICAgIHByb3BzW2tleV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYXB0dXJlID0gdmFsdWUuY2FwdHVyZTtcbiAgY29uc3QgcHJldmVudGRlZmF1bHQgPSB2YWx1ZS5wcmV2ZW50ZGVmYXVsdDtcbiAgY29uc3Qgc3RvcHByb3BhZ2F0aW9uID0gdmFsdWUuc3RvcHByb3BhZ2F0aW9uO1xuICBpZiAoIWNhcHR1cmUgJiYgIXByZXZlbnRkZWZhdWx0ICYmICFzdG9wcHJvcGFnYXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgWywgZXZlbnROYW1lXSA9IGdldEV2ZW50RGF0YUZyb21IdG1sQXR0cmlidXRlKGtleSk7XG4gIGNhcHR1cmUgJiYgYWRkVXNlT25Nb2RpZmllcihqc3hFbGVtZW50LCBldmVudE5hbWUsICdjYXB0dXJlJyk7XG4gIHByZXZlbnRkZWZhdWx0ICYmIGFkZFVzZU9uTW9kaWZpZXIoanN4RWxlbWVudCwgZXZlbnROYW1lLCAncHJldmVudGRlZmF1bHQnKTtcbiAgc3RvcHByb3BhZ2F0aW9uICYmIGFkZFVzZU9uTW9kaWZpZXIoanN4RWxlbWVudCwgZXZlbnROYW1lLCAnc3RvcHByb3BhZ2F0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFkZFVzZU9uTW9kaWZpZXIoXG4gIGpzeEVsZW1lbnQ6IEpTWE5vZGVJbnRlcm5hbCxcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIG1vZGlmaWVyOiBrZXlvZiBPbWl0PFVzZU9uRXZlbnQsICdxcmxzJz5cbikge1xuICBjb25zdCBrZXkgPSBgJHttb2RpZmllcn06JHtldmVudE5hbWV9YDtcbiAgY29uc3QgdmFyUHJvcHMgPSBqc3hFbGVtZW50LnZhclByb3BzO1xuICBpZiAodmFyUHJvcHMgPT09IEVNUFRZX09CSikge1xuICAgIGpzeEVsZW1lbnQudmFyUHJvcHMgPSB7fTtcbiAgfVxuICBqc3hFbGVtZW50LnZhclByb3BzW2tleV0gPSB0cnVlO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IG5vZGUgaW4gdGhlIEpTWCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIGpzeCBUaGUgSlNYIG91dHB1dCB0byBzZWFyY2guXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgZWxlbWVudCBub2RlIG9yIG51bGwgaWYgbm8gZWxlbWVudCBub2RlIGlzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kRmlyc3RFbGVtZW50Tm9kZShqc3g6IEpTWE91dHB1dCk6IFZhbHVlT3JQcm9taXNlPEpTWE5vZGVJbnRlcm5hbDxzdHJpbmc+IHwgbnVsbD4ge1xuICBjb25zdCBxdWV1ZTogYW55W10gPSBbanN4XTtcbiAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkge1xuICAgIGNvbnN0IGpzeCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKGlzSlNYTm9kZShqc3gpKSB7XG4gICAgICBpZiAodHlwZW9mIGpzeC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4ganN4IGFzIEpTWE5vZGVJbnRlcm5hbDxzdHJpbmc+O1xuICAgICAgfVxuICAgICAgcXVldWUucHVzaChqc3guY2hpbGRyZW4pO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShqc3gpKSB7XG4gICAgICBxdWV1ZS5wdXNoKC4uLmpzeCk7XG4gICAgfSBlbHNlIGlmIChpc1Byb21pc2U8SlNYT3V0cHV0Pihqc3gpKSB7XG4gICAgICByZXR1cm4gbWF5YmVUaGVuKGpzeCwgKGpzeCkgPT4gZmluZEZpcnN0RWxlbWVudE5vZGUoanN4KSk7XG4gICAgfSBlbHNlIGlmIChpc1NpZ25hbChqc3gpKSB7XG4gICAgICByZXR1cm4gZmluZEZpcnN0RWxlbWVudE5vZGUoKGpzeCBhcyBTaWduYWxJbXBsKS51bnRyYWNrZWRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEluamVjdHMgYSBwbGFjZWhvbGRlciA8c2NyaXB0PiBlbGVtZW50IGludG8gdGhlIEpTWCBvdXRwdXQuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGhlYWRsZXNzIGNvbXBvbmVudHMgKGNvbXBvbmVudHMgdGhhdCBkb24ndCByZW5kZXIgYSByZWFsIERPTSBlbGVtZW50KSB0b1xuICogaGF2ZSBhbiBhbmNob3IgcG9pbnQgZm9yIGB1c2VPbmAgZXZlbnQgbGlzdGVuZXJzIHRoYXQgdGFyZ2V0IHRoZSBkb2N1bWVudCBvciB3aW5kb3cuXG4gKlxuICogQHBhcmFtIGpzeCBUaGUgSlNYIG91dHB1dCB0byBtb2RpZnkuXG4gKiBAcGFyYW0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgdG8gaW5qZWN0LlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIEpTWCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIGluamVjdFBsYWNlaG9sZGVyRWxlbWVudChqc3g6IEpTWE91dHB1dCwgcGxhY2Vob2xkZXI6IEpTWE5vZGVJbnRlcm5hbDxzdHJpbmc+KTogSlNYT3V0cHV0IHtcbiAgLy8gRm9yIHJlZ3VsYXIgSlNYIG5vZGVzLCB3ZSBjYW4gYXBwZW5kIHRoZSBwbGFjZWhvbGRlciB0byBpdHMgY2hpbGRyZW4uXG4gIGlmIChpc0pTWE5vZGUoanN4KSkge1xuICAgIC8vIElubGluZSBjb21wb25lbnRzIGRvbid0IGFsd2F5cyByZW5kZXIgY2hpbGRyZW4sIHNvIHdlIHdyYXAgdGhlbSBpbiBGcmFnbWVudCB3aGljaCBkb2VzLlxuICAgIGlmIChqc3gudHlwZSAhPT0gRnJhZ21lbnQgJiYgIWlzUXdpa0NvbXBvbmVudChqc3gudHlwZSkpIHtcbiAgICAgIHJldHVybiBfanN4U29ydGVkKEZyYWdtZW50LCBudWxsLCBudWxsLCBbanN4LCBwbGFjZWhvbGRlcl0sIDAsIG51bGwpO1xuICAgIH1cblxuICAgIGlmIChqc3guY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAganN4LmNoaWxkcmVuID0gcGxhY2Vob2xkZXI7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KGpzeC5jaGlsZHJlbikpIHtcbiAgICAgIGpzeC5jaGlsZHJlbi5wdXNoKHBsYWNlaG9sZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAganN4LmNoaWxkcmVuID0gW2pzeC5jaGlsZHJlbiwgcGxhY2Vob2xkZXJdO1xuICAgIH1cbiAgICByZXR1cm4ganN4O1xuICB9XG5cbiAgLy8gRm9yIHByaW1pdGl2ZXMsIHdlIGNhbid0IGFkZCBjaGlsZHJlbiwgc28gd2Ugd3JhcCB0aGVtIGluIGEgZnJhZ21lbnQuXG4gIGlmIChpc1ByaW1pdGl2ZU9yTnVsbFVuZGVmaW5lZChqc3gpKSB7XG4gICAgcmV0dXJuIF9qc3hTb3J0ZWQoRnJhZ21lbnQsIG51bGwsIG51bGwsIFtqc3gsIHBsYWNlaG9sZGVyXSwgMCwgbnVsbCk7XG4gIH1cblxuICAvLyBGb3IgYW4gYXJyYXkgb2Ygbm9kZXMsIHdlIGluamVjdCB0aGUgcGxhY2Vob2xkZXIgaW50byB0aGUgZmlyc3QgZWxlbWVudC5cbiAgaWYgKGlzQXJyYXkoanN4KSAmJiBqc3gubGVuZ3RoID4gMCkge1xuICAgIGluamVjdFBsYWNlaG9sZGVyRWxlbWVudChqc3hbMF0sIHBsYWNlaG9sZGVyKTtcbiAgICByZXR1cm4ganN4O1xuICB9XG5cbiAgLy8gRm9yIGFueXRoaW5nIGVsc2Ugd2UgZG8gbm90aGluZy5cbiAgcmV0dXJuIGpzeDtcbn1cblxuLyoqIEByZXR1cm5zIEFuIGVtcHR5IDxzY3JpcHQ+IGVsZW1lbnQgZm9yIGFkZGluZyBxd2lrIG1ldGFkYXRhIGF0dHJpYnV0ZXMgdG8gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBsYWNlaG9sZGVyU2NyaXB0Tm9kZSgpOiBKU1hOb2RlSW50ZXJuYWw8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgSlNYTm9kZUltcGwoJ3NjcmlwdCcsIG51bGwsIHsgaGlkZGVuOiAnJyB9LCBudWxsLCAwLCBudWxsKTtcbn1cbiJdfQ==","import { isDev } from '@qwik.dev/core/build';\nimport { isJSXNode } from '../shared/jsx/jsx-node';\nimport { maybeThen } from '../shared/utils/promises';\nimport { createDiffContext, vnode_diff_range } from './vnode-diff';\nimport { vnode_getFirstChild, vnode_insertBefore, vnode_remove, vnode_truncate, } from './vnode-utils';\nfunction collectChildren(first, last = null) {\n    const children = [];\n    let child = first;\n    while (child) {\n        children.push(child);\n        if (child === last) {\n            break;\n        }\n        child = child.nextSibling;\n    }\n    return children;\n}\nfunction renderKeyedRow(item, index, key, renderItem) {\n    const jsx = renderItem(item, index);\n    if (isDev && !isJSXNode(jsx)) {\n        throw new Error('Each item$ must return a single JSX node');\n    }\n    jsx.key = key;\n    return jsx;\n}\nfunction buildJsxRange(items, nextKeys, keyOf, renderItem, start, end) {\n    const jsxItems = new Array(end - start + 1);\n    for (let i = start; i <= end; i++) {\n        const key = nextKeys[i] ?? (nextKeys[i] = keyOf(items[i], i));\n        jsxItems[i - start] = renderKeyedRow(items[i], i, key, renderItem);\n    }\n    return jsxItems;\n}\nfunction firstInsertedBeforeAnchor(parent, anchor, count) {\n    let inserted = (anchor ? anchor.previousSibling : parent.lastChild);\n    for (let i = 1; i < count && inserted; i++) {\n        inserted = inserted.previousSibling;\n    }\n    return inserted;\n}\nfunction longestIncreasingSubsequencePositions(arr) {\n    const n = arr.length;\n    if (n === 0) {\n        return [];\n    }\n    const tails = [];\n    const prev = new Array(n).fill(-1);\n    for (let i = 0; i < n; i++) {\n        const x = arr[i];\n        let low = 0;\n        let high = tails.length;\n        while (low < high) {\n            const mid = (low + high) >> 1;\n            if (arr[tails[mid]] < x) {\n                low = mid + 1;\n            }\n            else {\n                high = mid;\n            }\n        }\n        if (low > 0) {\n            prev[i] = tails[low - 1];\n        }\n        if (low === tails.length) {\n            tails.push(i);\n        }\n        else {\n            tails[low] = i;\n        }\n    }\n    const lis = [];\n    let current = tails[tails.length - 1];\n    while (current !== -1) {\n        lis.push(current);\n        current = prev[current];\n    }\n    lis.reverse();\n    return lis;\n}\nexport function reconcileKeyedLoopToParent(container, journal, parent, cursor, items, keyOf, renderItem) {\n    const clientContainer = container;\n    const nextLength = items.length;\n    const firstLoopChild = vnode_getFirstChild(parent);\n    const diffContext = createDiffContext(clientContainer, journal, cursor, null);\n    const nextKeys = new Array(nextLength);\n    if (firstLoopChild === null) {\n        if (nextLength > 0) {\n            return vnode_diff_range(clientContainer, journal, buildJsxRange(items, nextKeys, keyOf, renderItem, 0, nextLength - 1), parent, null, null, cursor, null, true, diffContext);\n        }\n        return;\n    }\n    if (nextLength === 0) {\n        vnode_truncate(journal, parent, firstLoopChild, true);\n        return;\n    }\n    let start = 0;\n    let nextEnd = nextLength - 1;\n    let oldStart = firstLoopChild;\n    while (oldStart &&\n        start <= nextEnd &&\n        oldStart.key === (nextKeys[start] ??= keyOf(items[start], start))) {\n        oldStart = oldStart.nextSibling;\n        start++;\n    }\n    if (oldStart === null) {\n        if (start > nextEnd) {\n            return;\n        }\n        return vnode_diff_range(clientContainer, journal, buildJsxRange(items, nextKeys, keyOf, renderItem, start, nextEnd), parent, null, null, cursor, null, true, diffContext);\n    }\n    if (start > nextEnd) {\n        vnode_truncate(journal, parent, oldStart, true);\n        return;\n    }\n    const oldStartBoundary = oldStart.previousSibling;\n    let oldEnd = parent.lastChild;\n    while (oldEnd !== oldStartBoundary &&\n        nextEnd >= start &&\n        oldEnd.key === (nextKeys[nextEnd] ??= keyOf(items[nextEnd], nextEnd))) {\n        oldEnd = oldEnd.previousSibling;\n        nextEnd--;\n    }\n    const suffixAnchor = oldEnd ? oldEnd.nextSibling : oldStart;\n    if (start > nextEnd) {\n        let child = oldStart;\n        while (child && child !== suffixAnchor) {\n            const nextChild = child.nextSibling;\n            vnode_remove(journal, parent, child, true);\n            child = nextChild;\n        }\n        return;\n    }\n    if (oldEnd === oldStartBoundary) {\n        const anchor = suffixAnchor;\n        return vnode_diff_range(clientContainer, journal, buildJsxRange(items, nextKeys, keyOf, renderItem, start, nextEnd), parent, anchor, anchor, cursor, null, true, diffContext);\n    }\n    for (let i = start; i <= nextEnd; i++) {\n        nextKeys[i] ??= keyOf(items[i], i);\n    }\n    const middleLength = nextEnd - start + 1;\n    const nextIndexByKey = new Map();\n    for (let i = start; i <= nextEnd; i++) {\n        nextIndexByKey.set(nextKeys[i], i - start);\n    }\n    const prev = collectChildren(oldStart, oldEnd);\n    const survivors = [];\n    const prevRelIndexByKey = new Map();\n    for (let i = 0; i < prev.length; i++) {\n        const prevNode = prev[i];\n        const prevKey = prevNode.key;\n        if (nextIndexByKey.has(prevKey)) {\n            prevRelIndexByKey.set(prevKey, survivors.length);\n            survivors.push(prevNode);\n        }\n        else {\n            vnode_remove(journal, parent, prevNode, true);\n        }\n    }\n    const nextRefs = new Int32Array(middleLength);\n    nextRefs.fill(-1);\n    const seq = [];\n    const seqOffsets = [];\n    for (let offset = 0; offset < middleLength; offset++) {\n        const relIndex = prevRelIndexByKey.get(nextKeys[start + offset]);\n        if (relIndex !== undefined) {\n            nextRefs[offset] = relIndex;\n            seqOffsets.push(offset);\n            seq.push(relIndex);\n        }\n    }\n    const keepMask = new Uint8Array(middleLength);\n    const lisPositions = longestIncreasingSubsequencePositions(seq);\n    for (let i = 0; i < lisPositions.length; i++) {\n        keepMask[seqOffsets[lisPositions[i]]] = 1;\n    }\n    let index = nextEnd;\n    let anchor = suffixAnchor;\n    const resume = () => {\n        while (index >= start) {\n            const offset = index - start;\n            if (keepMask[offset] === 1) {\n                anchor = survivors[nextRefs[offset]];\n                index--;\n                continue;\n            }\n            const existingRelIndex = nextRefs[offset];\n            if (existingRelIndex !== -1) {\n                const node = survivors[existingRelIndex];\n                const alreadyPlaced = anchor === null ? parent.lastChild === node : node.nextSibling === anchor;\n                if (!alreadyPlaced) {\n                    vnode_insertBefore(journal, parent, node, anchor);\n                }\n                anchor = node;\n                index--;\n                continue;\n            }\n            let blockStart = index;\n            while (blockStart > start) {\n                const prevOffset = blockStart - 1 - start;\n                if (keepMask[prevOffset] === 1 || nextRefs[prevOffset] !== -1) {\n                    break;\n                }\n                blockStart--;\n            }\n            const blockLength = index - blockStart + 1;\n            const result = vnode_diff_range(clientContainer, journal, buildJsxRange(items, nextKeys, null, renderItem, blockStart, index), parent, anchor, anchor, cursor, null, true, diffContext);\n            return maybeThen(result, () => {\n                const firstInserted = firstInsertedBeforeAnchor(parent, anchor, blockLength);\n                if (isDev && !firstInserted) {\n                    throw new Error('Failed to insert keyed loop block');\n                }\n                anchor = firstInserted;\n                index = blockStart - 1;\n                return resume();\n            });\n        }\n    };\n    return resume();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLWtleWVkLWxvb3AuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvY2xpZW50L3JlY29uY2lsZS1rZXllZC1sb29wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTXJELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRSxPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLFNBQVMsZUFBZSxDQUFDLEtBQW9CLEVBQUUsT0FBNkIsSUFBSTtJQUM5RSxNQUFNLFFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBQ3JDLElBQUksS0FBSyxHQUFpQixLQUFLLENBQUM7SUFFaEMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBc0IsQ0FBQyxDQUFDO1FBQ3RDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25CLE1BQU07UUFDUixDQUFDO1FBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUEyQixDQUFDO0lBQzVDLENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLElBQU8sRUFDUCxLQUFhLEVBQ2IsR0FBUSxFQUNSLFVBQWlEO0lBRWpELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFZLENBQUM7SUFDL0MsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixN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bXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc2VydmVyL3F3aWstdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDdXJzb3IgfSBmcm9tICcuLi9zaGFyZWQvY3Vyc29yL2N1cnNvcic7XG5pbXBvcnQgeyBpc0pTWE5vZGUgfSBmcm9tICcuLi9zaGFyZWQvanN4L2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgSlNYTm9kZSwgSlNYT3V0cHV0IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgeyBtYXliZVRoZW4gfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS9lbGVtZW50LXZub2RlJztcbmltcG9ydCB0eXBlIHsgVmlydHVhbFZOb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3ZpcnR1YWwtdm5vZGUnO1xuaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92bm9kZSc7XG5pbXBvcnQgdHlwZSB7IENsaWVudENvbnRhaW5lciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGlmZkNvbnRleHQsIHZub2RlX2RpZmZfcmFuZ2UgfSBmcm9tICcuL3Zub2RlLWRpZmYnO1xuaW1wb3J0IHtcbiAgdHlwZSBWTm9kZUpvdXJuYWwsXG4gIHZub2RlX2dldEZpcnN0Q2hpbGQsXG4gIHZub2RlX2luc2VydEJlZm9yZSxcbiAgdm5vZGVfcmVtb3ZlLFxuICB2bm9kZV90cnVuY2F0ZSxcbn0gZnJvbSAnLi92bm9kZS11dGlscyc7XG5cbnR5cGUgS2V5ID0gc3RyaW5nO1xudHlwZSBLZXllZFJvd1ZOb2RlID0gRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlO1xuXG5mdW5jdGlvbiBjb2xsZWN0Q2hpbGRyZW4oZmlyc3Q6IEtleWVkUm93Vk5vZGUsIGxhc3Q6IEtleWVkUm93Vk5vZGUgfCBudWxsID0gbnVsbCk6IEtleWVkUm93Vk5vZGVbXSB7XG4gIGNvbnN0IGNoaWxkcmVuOiBLZXllZFJvd1ZOb2RlW10gPSBbXTtcbiAgbGV0IGNoaWxkOiBWTm9kZSB8IG51bGwgPSBmaXJzdDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBjaGlsZHJlbi5wdXNoKGNoaWxkIGFzIEtleWVkUm93Vk5vZGUpO1xuICAgIGlmIChjaGlsZCA9PT0gbGFzdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiByZW5kZXJLZXllZFJvdzxUPihcbiAgaXRlbTogVCxcbiAgaW5kZXg6IG51bWJlcixcbiAga2V5OiBLZXksXG4gIHJlbmRlckl0ZW06IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBKU1hPdXRwdXRcbik6IEpTWE5vZGUge1xuICBjb25zdCBqc3ggPSByZW5kZXJJdGVtKGl0ZW0sIGluZGV4KSBhcyBKU1hOb2RlO1xuICBpZiAoaXNEZXYgJiYgIWlzSlNYTm9kZShqc3gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFYWNoIGl0ZW0kIG11c3QgcmV0dXJuIGEgc2luZ2xlIEpTWCBub2RlJyk7XG4gIH1cbiAganN4LmtleSA9IGtleTtcbiAgcmV0dXJuIGpzeDtcbn1cblxuZnVuY3Rpb24gYnVpbGRKc3hSYW5nZTxUPihcbiAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgbmV4dEtleXM6IEtleVtdLFxuICBrZXlPZjogKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBLZXkpIHwgbnVsbCxcbiAgcmVuZGVySXRlbTogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IEpTWE91dHB1dCxcbiAgc3RhcnQ6IG51bWJlcixcbiAgZW5kOiBudW1iZXJcbik6IEpTWE5vZGVbXSB7XG4gIGNvbnN0IGpzeEl0ZW1zOiBKU1hOb2RlW10gPSBuZXcgQXJyYXkoZW5kIC0gc3RhcnQgKyAxKTtcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBuZXh0S2V5c1tpXSA/PyAobmV4dEtleXNbaV0gPSBrZXlPZiEoaXRlbXNbaV0sIGkpKTtcbiAgICBqc3hJdGVtc1tpIC0gc3RhcnRdID0gcmVuZGVyS2V5ZWRSb3coaXRlbXNbaV0sIGksIGtleSwgcmVuZGVySXRlbSk7XG4gIH1cblxuICByZXR1cm4ganN4SXRlbXM7XG59XG5cbmZ1bmN0aW9uIGZpcnN0SW5zZXJ0ZWRCZWZvcmVBbmNob3IoXG4gIHBhcmVudDogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLFxuICBhbmNob3I6IFZOb2RlIHwgbnVsbCxcbiAgY291bnQ6IG51bWJlclxuKTogS2V5ZWRSb3dWTm9kZSB8IG51bGwge1xuICBsZXQgaW5zZXJ0ZWQgPSAoYW5jaG9yID8gYW5jaG9yLnByZXZpb3VzU2libGluZyA6IHBhcmVudC5sYXN0Q2hpbGQpIGFzIEtleWVkUm93Vk5vZGUgfCBudWxsO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgY291bnQgJiYgaW5zZXJ0ZWQ7IGkrKykge1xuICAgIGluc2VydGVkID0gaW5zZXJ0ZWQucHJldmlvdXNTaWJsaW5nIGFzIEtleWVkUm93Vk5vZGUgfCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGluc2VydGVkO1xufVxuXG5mdW5jdGlvbiBsb25nZXN0SW5jcmVhc2luZ1N1YnNlcXVlbmNlUG9zaXRpb25zKGFycjogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IG4gPSBhcnIubGVuZ3RoO1xuICBpZiAobiA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHRhaWxzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBwcmV2OiBudW1iZXJbXSA9IG5ldyBBcnJheShuKS5maWxsKC0xKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGNvbnN0IHggPSBhcnJbaV07XG5cbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgaGlnaCA9IHRhaWxzLmxlbmd0aDtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgY29uc3QgbWlkID0gKGxvdyArIGhpZ2gpID4+IDE7XG4gICAgICBpZiAoYXJyW3RhaWxzW21pZF1dIDwgeCkge1xuICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG93ID4gMCkge1xuICAgICAgcHJldltpXSA9IHRhaWxzW2xvdyAtIDFdO1xuICAgIH1cblxuICAgIGlmIChsb3cgPT09IHRhaWxzLmxlbmd0aCkge1xuICAgICAgdGFpbHMucHVzaChpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFpbHNbbG93XSA9IGk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGlzOiBudW1iZXJbXSA9IFtdO1xuICBsZXQgY3VycmVudCA9IHRhaWxzW3RhaWxzLmxlbmd0aCAtIDFdO1xuICB3aGlsZSAoY3VycmVudCAhPT0gLTEpIHtcbiAgICBsaXMucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gcHJldltjdXJyZW50XTtcbiAgfVxuXG4gIGxpcy5yZXZlcnNlKCk7XG4gIHJldHVybiBsaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGVLZXllZExvb3BUb1BhcmVudDxUPihcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgcGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gIGN1cnNvcjogQ3Vyc29yLFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICBrZXlPZjogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IEtleSxcbiAgcmVuZGVySXRlbTogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IEpTWE91dHB1dFxuKTogVmFsdWVPclByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjbGllbnRDb250YWluZXIgPSBjb250YWluZXIgYXMgQ2xpZW50Q29udGFpbmVyO1xuICBjb25zdCBuZXh0TGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICBjb25zdCBmaXJzdExvb3BDaGlsZCA9IHZub2RlX2dldEZpcnN0Q2hpbGQocGFyZW50KSBhcyBLZXllZFJvd1ZOb2RlIHwgbnVsbDtcbiAgY29uc3QgZGlmZkNvbnRleHQgPSBjcmVhdGVEaWZmQ29udGV4dChjbGllbnRDb250YWluZXIsIGpvdXJuYWwsIGN1cnNvciwgbnVsbCk7XG4gIGNvbnN0IG5leHRLZXlzID0gbmV3IEFycmF5PEtleT4obmV4dExlbmd0aCk7XG5cbiAgaWYgKGZpcnN0TG9vcENoaWxkID09PSBudWxsKSB7XG4gICAgaWYgKG5leHRMZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdm5vZGVfZGlmZl9yYW5nZShcbiAgICAgICAgY2xpZW50Q29udGFpbmVyLFxuICAgICAgICBqb3VybmFsLFxuICAgICAgICBidWlsZEpzeFJhbmdlKGl0ZW1zLCBuZXh0S2V5cywga2V5T2YsIHJlbmRlckl0ZW0sIDAsIG5leHRMZW5ndGggLSAxKSxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJzb3IsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGRpZmZDb250ZXh0XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0TGVuZ3RoID09PSAwKSB7XG4gICAgdm5vZGVfdHJ1bmNhdGUoam91cm5hbCwgcGFyZW50LCBmaXJzdExvb3BDaGlsZCwgdHJ1ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IG5leHRFbmQgPSBuZXh0TGVuZ3RoIC0gMTtcbiAgbGV0IG9sZFN0YXJ0OiBLZXllZFJvd1ZOb2RlIHwgbnVsbCA9IGZpcnN0TG9vcENoaWxkO1xuXG4gIHdoaWxlIChcbiAgICBvbGRTdGFydCAmJlxuICAgIHN0YXJ0IDw9IG5leHRFbmQgJiZcbiAgICBvbGRTdGFydC5rZXkgPT09IChuZXh0S2V5c1tzdGFydF0gPz89IGtleU9mKGl0ZW1zW3N0YXJ0XSwgc3RhcnQpKVxuICApIHtcbiAgICBvbGRTdGFydCA9IG9sZFN0YXJ0Lm5leHRTaWJsaW5nIGFzIEtleWVkUm93Vk5vZGUgfCBudWxsO1xuICAgIHN0YXJ0Kys7XG4gIH1cblxuICBpZiAob2xkU3RhcnQgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhcnQgPiBuZXh0RW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZub2RlX2RpZmZfcmFuZ2UoXG4gICAgICBjbGllbnRDb250YWluZXIsXG4gICAgICBqb3VybmFsLFxuICAgICAgYnVpbGRKc3hSYW5nZShpdGVtcywgbmV4dEtleXMsIGtleU9mLCByZW5kZXJJdGVtLCBzdGFydCwgbmV4dEVuZCksXG4gICAgICBwYXJlbnQsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIGN1cnNvcixcbiAgICAgIG51bGwsXG4gICAgICB0cnVlLFxuICAgICAgZGlmZkNvbnRleHRcbiAgICApO1xuICB9XG5cbiAgaWYgKHN0YXJ0ID4gbmV4dEVuZCkge1xuICAgIHZub2RlX3RydW5jYXRlKGpvdXJuYWwsIHBhcmVudCwgb2xkU3RhcnQsIHRydWUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9sZFN0YXJ0Qm91bmRhcnkgPSBvbGRTdGFydC5wcmV2aW91c1NpYmxpbmcgYXMgS2V5ZWRSb3dWTm9kZSB8IG51bGw7XG4gIGxldCBvbGRFbmQgPSBwYXJlbnQubGFzdENoaWxkIGFzIEtleWVkUm93Vk5vZGUgfCBudWxsO1xuXG4gIHdoaWxlIChcbiAgICBvbGRFbmQgIT09IG9sZFN0YXJ0Qm91bmRhcnkgJiZcbiAgICBuZXh0RW5kID49IHN0YXJ0ICYmXG4gICAgb2xkRW5kIS5rZXkgPT09IChuZXh0S2V5c1tuZXh0RW5kXSA/Pz0ga2V5T2YoaXRlbXNbbmV4dEVuZF0sIG5leHRFbmQpKVxuICApIHtcbiAgICBvbGRFbmQgPSBvbGRFbmQhLnByZXZpb3VzU2libGluZyBhcyBLZXllZFJvd1ZOb2RlIHwgbnVsbDtcbiAgICBuZXh0RW5kLS07XG4gIH1cblxuICBjb25zdCBzdWZmaXhBbmNob3IgPSBvbGRFbmQgPyAob2xkRW5kLm5leHRTaWJsaW5nIGFzIEtleWVkUm93Vk5vZGUgfCBudWxsKSA6IG9sZFN0YXJ0O1xuXG4gIGlmIChzdGFydCA+IG5leHRFbmQpIHtcbiAgICBsZXQgY2hpbGQ6IEtleWVkUm93Vk5vZGUgfCBudWxsID0gb2xkU3RhcnQ7XG4gICAgd2hpbGUgKGNoaWxkICYmIGNoaWxkICE9PSBzdWZmaXhBbmNob3IpIHtcbiAgICAgIGNvbnN0IG5leHRDaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nIGFzIEtleWVkUm93Vk5vZGUgfCBudWxsO1xuICAgICAgdm5vZGVfcmVtb3ZlKGpvdXJuYWwsIHBhcmVudCwgY2hpbGQsIHRydWUpO1xuICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvbGRFbmQgPT09IG9sZFN0YXJ0Qm91bmRhcnkpIHtcbiAgICBjb25zdCBhbmNob3IgPSBzdWZmaXhBbmNob3I7XG5cbiAgICByZXR1cm4gdm5vZGVfZGlmZl9yYW5nZShcbiAgICAgIGNsaWVudENvbnRhaW5lcixcbiAgICAgIGpvdXJuYWwsXG4gICAgICBidWlsZEpzeFJhbmdlKGl0ZW1zLCBuZXh0S2V5cywga2V5T2YsIHJlbmRlckl0ZW0sIHN0YXJ0LCBuZXh0RW5kKSxcbiAgICAgIHBhcmVudCxcbiAgICAgIGFuY2hvcixcbiAgICAgIGFuY2hvcixcbiAgICAgIGN1cnNvcixcbiAgICAgIG51bGwsXG4gICAgICB0cnVlLFxuICAgICAgZGlmZkNvbnRleHRcbiAgICApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IG5leHRFbmQ7IGkrKykge1xuICAgIG5leHRLZXlzW2ldID8/PSBrZXlPZihpdGVtc1tpXSwgaSk7XG4gIH1cblxuICBjb25zdCBtaWRkbGVMZW5ndGggPSBuZXh0RW5kIC0gc3RhcnQgKyAxO1xuICBjb25zdCBuZXh0SW5kZXhCeUtleSA9IG5ldyBNYXA8S2V5LCBudW1iZXI+KCk7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBuZXh0RW5kOyBpKyspIHtcbiAgICBuZXh0SW5kZXhCeUtleS5zZXQobmV4dEtleXNbaV0sIGkgLSBzdGFydCk7XG4gIH1cblxuICBjb25zdCBwcmV2ID0gY29sbGVjdENoaWxkcmVuKG9sZFN0YXJ0LCBvbGRFbmQhKTtcbiAgY29uc3Qgc3Vydml2b3JzOiBLZXllZFJvd1ZOb2RlW10gPSBbXTtcbiAgY29uc3QgcHJldlJlbEluZGV4QnlLZXkgPSBuZXcgTWFwPEtleSwgbnVtYmVyPigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXYubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcmV2Tm9kZSA9IHByZXZbaV07XG4gICAgY29uc3QgcHJldktleSA9IHByZXZOb2RlLmtleSBhcyBLZXk7XG5cbiAgICBpZiAobmV4dEluZGV4QnlLZXkuaGFzKHByZXZLZXkpKSB7XG4gICAgICBwcmV2UmVsSW5kZXhCeUtleS5zZXQocHJldktleSwgc3Vydml2b3JzLmxlbmd0aCk7XG4gICAgICBzdXJ2aXZvcnMucHVzaChwcmV2Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlX3JlbW92ZShqb3VybmFsLCBwYXJlbnQsIHByZXZOb2RlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXh0UmVmcyA9IG5ldyBJbnQzMkFycmF5KG1pZGRsZUxlbmd0aCk7XG4gIG5leHRSZWZzLmZpbGwoLTEpO1xuXG4gIGNvbnN0IHNlcTogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc2VxT2Zmc2V0czogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBtaWRkbGVMZW5ndGg7IG9mZnNldCsrKSB7XG4gICAgY29uc3QgcmVsSW5kZXggPSBwcmV2UmVsSW5kZXhCeUtleS5nZXQobmV4dEtleXNbc3RhcnQgKyBvZmZzZXRdKTtcbiAgICBpZiAocmVsSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV4dFJlZnNbb2Zmc2V0XSA9IHJlbEluZGV4O1xuICAgICAgc2VxT2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICBzZXEucHVzaChyZWxJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qga2VlcE1hc2sgPSBuZXcgVWludDhBcnJheShtaWRkbGVMZW5ndGgpO1xuICBjb25zdCBsaXNQb3NpdGlvbnMgPSBsb25nZXN0SW5jcmVhc2luZ1N1YnNlcXVlbmNlUG9zaXRpb25zKHNlcSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzUG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAga2VlcE1hc2tbc2VxT2Zmc2V0c1tsaXNQb3NpdGlvbnNbaV1dXSA9IDE7XG4gIH1cblxuICBsZXQgaW5kZXggPSBuZXh0RW5kO1xuICBsZXQgYW5jaG9yID0gc3VmZml4QW5jaG9yIGFzIFZOb2RlIHwgbnVsbDtcblxuICBjb25zdCByZXN1bWUgPSAoKTogVmFsdWVPclByb21pc2U8dm9pZD4gPT4ge1xuICAgIHdoaWxlIChpbmRleCA+PSBzdGFydCkge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gaW5kZXggLSBzdGFydDtcblxuICAgICAgaWYgKGtlZXBNYXNrW29mZnNldF0gPT09IDEpIHtcbiAgICAgICAgYW5jaG9yID0gc3Vydml2b3JzW25leHRSZWZzW29mZnNldF1dO1xuICAgICAgICBpbmRleC0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhpc3RpbmdSZWxJbmRleCA9IG5leHRSZWZzW29mZnNldF07XG4gICAgICBpZiAoZXhpc3RpbmdSZWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHN1cnZpdm9yc1tleGlzdGluZ1JlbEluZGV4XTtcbiAgICAgICAgY29uc3QgYWxyZWFkeVBsYWNlZCA9XG4gICAgICAgICAgYW5jaG9yID09PSBudWxsID8gcGFyZW50Lmxhc3RDaGlsZCA9PT0gbm9kZSA6IG5vZGUubmV4dFNpYmxpbmcgPT09IGFuY2hvcjtcblxuICAgICAgICBpZiAoIWFscmVhZHlQbGFjZWQpIHtcbiAgICAgICAgICB2bm9kZV9pbnNlcnRCZWZvcmUoam91cm5hbCwgcGFyZW50LCBub2RlLCBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgYW5jaG9yID0gbm9kZTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBibG9ja1N0YXJ0ID0gaW5kZXg7XG4gICAgICB3aGlsZSAoYmxvY2tTdGFydCA+IHN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHByZXZPZmZzZXQgPSBibG9ja1N0YXJ0IC0gMSAtIHN0YXJ0O1xuICAgICAgICBpZiAoa2VlcE1hc2tbcHJldk9mZnNldF0gPT09IDEgfHwgbmV4dFJlZnNbcHJldk9mZnNldF0gIT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYmxvY2tTdGFydC0tO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9ja0xlbmd0aCA9IGluZGV4IC0gYmxvY2tTdGFydCArIDE7XG4gICAgICBjb25zdCByZXN1bHQgPSB2bm9kZV9kaWZmX3JhbmdlKFxuICAgICAgICBjbGllbnRDb250YWluZXIsXG4gICAgICAgIGpvdXJuYWwsXG4gICAgICAgIGJ1aWxkSnN4UmFuZ2UoaXRlbXMsIG5leHRLZXlzLCBudWxsLCByZW5kZXJJdGVtLCBibG9ja1N0YXJ0LCBpbmRleCksXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIGN1cnNvcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZGlmZkNvbnRleHRcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBtYXliZVRoZW4ocmVzdWx0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5zZXJ0ZWQgPSBmaXJzdEluc2VydGVkQmVmb3JlQW5jaG9yKHBhcmVudCwgYW5jaG9yLCBibG9ja0xlbmd0aCk7XG4gICAgICAgIGlmIChpc0RldiAmJiAhZmlyc3RJbnNlcnRlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGluc2VydCBrZXllZCBsb29wIGJsb2NrJyk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jaG9yID0gZmlyc3RJbnNlcnRlZDtcbiAgICAgICAgaW5kZXggPSBibG9ja1N0YXJ0IC0gMTtcbiAgICAgICAgcmV0dXJuIHJlc3VtZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiByZXN1bWUoKTtcbn1cbiJdfQ==","import { vnode_createErrorDiv, vnode_insertElementBefore, vnode_isElementVNode, } from '../../client/vnode-utils';\nimport { vnode_diff } from '../../client/vnode-diff';\nimport { Task, runTask } from '../../use/use-task';\nimport { executeComponent } from '../component-execution';\nimport { ELEMENT_SEQ, ELEMENT_PROPS, OnRenderProp, QScopedStyle } from '../utils/markers';\nimport { addComponentStylePrefix } from '../utils/scoped-styles';\nimport { isPromise, maybeThen, retryOnPromise, safeCall } from '../utils/promises';\nimport { isSignal, scheduleEffects } from '../../reactive-primitives/utils';\nimport { createSetAttributeOperation } from '../vnode/types/dom-vnode-operation';\nimport { HOST_SIGNAL, ERROR_DATA_KEY, NODE_DIFF_DATA_KEY, NODE_PROPS_DATA_KEY, INLINE_COMPONENT_DATA_KEY, } from './cursor-props';\nimport { invoke, newInvokeContext, untrack } from '../../use/use-core';\nimport { cleanupDestroyable } from '../../use/utils/destroyable';\nimport { reconcileKeyedLoopToParent } from '../../client/reconcile-keyed-loop';\nimport { _getProps } from '../jsx/props-proxy';\n/**\n * Executes tasks for a vNode if the TASKS dirty bit is set. Tasks are stored in the ELEMENT_SEQ\n * property and executed in order.\n *\n * Behavior:\n *\n * - Resources: Just run, don't save promise anywhere\n * - Tasks: Chain promises only between each other\n * - VisibleTasks: Store promises in afterFlush on cursor root for client, we need to wait for all\n *   visible tasks to complete before flushing changes to the DOM. On server, we keep them on vNode\n *   for streaming.\n *\n * @param vNode - The vNode to execute tasks for\n * @param container - The container\n * @param cursor - The cursor root vNode, should be set on client only\n * @returns Promise if any regular task returns a promise, void otherwise\n */\nexport function executeTasks(vNode, container, cursorData) {\n    vNode.dirty &= ~1 /* ChoreBits.TASKS */;\n    const elementSeq = container.getHostProp(vNode, ELEMENT_SEQ);\n    if (!elementSeq || elementSeq.length === 0) {\n        // No tasks to execute, clear the bit\n        return;\n    }\n    // Execute all tasks in sequence\n    let taskPromise;\n    for (let i = 0; i < elementSeq.length; i++) {\n        const item = elementSeq[i];\n        if (item instanceof Task) {\n            const task = item;\n            // Skip if task is not dirty\n            if (!(task.$flags$ & 4 /* TaskFlags.DIRTY */)) {\n                continue;\n            }\n            if (task.$flags$ & 1 /* TaskFlags.VISIBLE_TASK */) {\n                // VisibleTasks: store for execution after flush (don't execute now)\n                (cursorData.afterFlushTasks ||= []).push(task);\n            }\n            else {\n                // Regular tasks: chain promises only between each other\n                const isRenderBlocking = !!(task.$flags$ & 8 /* TaskFlags.RENDER_BLOCKING */);\n                const result = runTask(task, container, vNode);\n                if (isPromise(result)) {\n                    if (isRenderBlocking) {\n                        taskPromise = taskPromise\n                            ? taskPromise.then(() => result)\n                            : result;\n                    }\n                    else {\n                        // TODO: set extrapromises on vNode instead of cursorData if server\n                        (cursorData.extraPromises ||= []).push(result);\n                    }\n                }\n            }\n        }\n    }\n    return taskPromise;\n}\nexport function setInlineComponentData(vNode, componentFn, subscriptionHost, jsxProps) {\n    const props = (vNode.props ||= {});\n    props[INLINE_COMPONENT_DATA_KEY] = {\n        componentFn,\n        subscriptionHost,\n        props: jsxProps,\n    };\n}\nfunction getInlineComponentData(vNode) {\n    const props = vNode.props;\n    const data = props?.[INLINE_COMPONENT_DATA_KEY] || null;\n    if (data) {\n        delete props[INLINE_COMPONENT_DATA_KEY];\n    }\n    return data;\n}\nfunction getNodeDiffPayload(vNode) {\n    const props = vNode.props;\n    return props?.[NODE_DIFF_DATA_KEY];\n}\nexport function setNodeDiffPayload(vNode, payload) {\n    const props = (vNode.props ||= {});\n    props[NODE_DIFF_DATA_KEY] = payload;\n}\nfunction getErrorPayload(vNode) {\n    const props = vNode.props;\n    return props?.[ERROR_DATA_KEY] ?? null;\n}\nexport function setErrorPayload(vNode, error) {\n    const props = (vNode.props ||= {});\n    props[ERROR_DATA_KEY] = error;\n}\nexport function executeErrorWrap(vNode, journal) {\n    vNode.dirty &= ~512 /* ChoreBits.ERROR_WRAP */;\n    const err = getErrorPayload(vNode);\n    if (!err) {\n        return;\n    }\n    // cleanup payload\n    setErrorPayload(vNode, null);\n    const vHost = vNode;\n    const vHostParent = vHost.parent;\n    const vHostNextSibling = vHost.nextSibling;\n    const vErrorDiv = vnode_createErrorDiv(journal, document, vHost, err);\n    // If the host is an element node, we need to insert the error div into its parent.\n    const insertHost = vnode_isElementVNode(vHost) ? vHostParent || vHost : vHost;\n    // If the host is different then we need to insert errored-host in the same position as the host.\n    const insertBefore = insertHost === vHost ? null : vHostNextSibling;\n    vnode_insertElementBefore(journal, insertHost, vErrorDiv, insertBefore);\n    // vnode_createErrorDiv moves children into the errored-host element, which can\n    // mark the host with CHILDREN dirty bit. Clear it along with dirtyChildren to\n    // avoid an infinite loop — those children are now under errored-host, not this host.\n    // This is safe because CHILDREN is always processed before ERROR_WRAP in the walker,\n    // so any pre-existing child work has already completed.\n    vNode.dirty &= ~64 /* ChoreBits.CHILDREN */;\n    vNode.dirtyChildren = null;\n}\nexport function executeNodeDiff(vNode, container, journal, cursor) {\n    vNode.dirty &= ~2 /* ChoreBits.NODE_DIFF */;\n    const domVNode = vNode;\n    let jsx = getNodeDiffPayload(vNode);\n    if (!jsx) {\n        return;\n    }\n    // cleanup payload\n    setNodeDiffPayload(vNode, null);\n    if (isSignal(jsx)) {\n        jsx = jsx.value;\n    }\n    return vnode_diff(container, journal, jsx, domVNode, cursor, null);\n}\n/**\n * Executes a component for a vNode if the COMPONENT dirty bit is set. Gets the component QRL from\n * OnRenderProp and executes it.\n *\n * @param vNode - The vNode to execute component for\n * @param container - The container\n * @returns Promise if component execution is async, void otherwise\n */\nexport function executeComponentChore(vNode, container, journal, cursor) {\n    vNode.dirty &= ~4 /* ChoreBits.COMPONENT */;\n    const host = vNode;\n    const componentQRL = container.getHostProp(host, OnRenderProp);\n    if (!componentQRL) {\n        return;\n    }\n    const props = container.getHostProp(host, ELEMENT_PROPS) || null;\n    return executeComponentFunction(container, host, host, componentQRL, props, journal, cursor);\n}\nexport function executeInlineComponentChore(vNode, container, journal, cursor) {\n    vNode.dirty &= ~8 /* ChoreBits.INLINE_COMPONENT */;\n    const host = vNode;\n    const inlineComponentData = getInlineComponentData(vNode);\n    if (!inlineComponentData) {\n        return;\n    }\n    return executeComponentFunction(container, host, inlineComponentData.subscriptionHost || container.rootVNode, inlineComponentData.componentFn, inlineComponentData.props, journal, cursor);\n}\nfunction executeComponentFunction(container, host, subscriptionHost, componentFn, props, journal, cursor) {\n    const result = safeCall(() => executeComponent(container, host, subscriptionHost, componentFn, props), (jsx) => {\n        const styleScopedId = container.getHostProp(host, QScopedStyle);\n        return retryOnPromise(() => vnode_diff(container, journal, jsx, host, cursor, addComponentStylePrefix(styleScopedId)));\n    }, (err) => {\n        container.handleError(err, host);\n    });\n    if (isPromise(result)) {\n        return result;\n    }\n    return;\n}\n/**\n * Gets node prop data from a vNode.\n *\n * @param vNode - The vNode to get node prop data from\n * @returns Array of NodeProp, or null if none\n */\nfunction getNodePropData(vNode) {\n    const props = (vNode.props ||= {});\n    return props[NODE_PROPS_DATA_KEY] ?? null;\n}\n/**\n * Sets node prop data for a vNode.\n *\n * @param vNode - The vNode to set node prop data for\n * @param property - The property to set node prop data for\n * @param nodeProp - The node prop data to set\n */\nexport function setNodePropData(vNode, property, nodeProp) {\n    const props = (vNode.props ||= {});\n    let data = props[NODE_PROPS_DATA_KEY];\n    if (!data) {\n        data = new Map();\n        props[NODE_PROPS_DATA_KEY] = data;\n    }\n    data.set(property, nodeProp);\n}\n/**\n * Clears node prop data from a vNode.\n *\n * @param vNode - The vNode to clear node prop data from\n */\nfunction clearNodePropData(vNode) {\n    const props = (vNode.props ||= {});\n    delete props[NODE_PROPS_DATA_KEY];\n}\nfunction setNodeProp(domVNode, journal, property, value, isConst, scopedStyleIdPrefix = null) {\n    journal.push(createSetAttributeOperation(domVNode.node, property, value, scopedStyleIdPrefix, (domVNode.flags & 512 /* VNodeFlags.NS_svg */) !== 0));\n    if (!isConst) {\n        if (domVNode.props && value == null) {\n            delete domVNode.props[property];\n        }\n        else {\n            (domVNode.props ||= {})[property] = value;\n        }\n    }\n}\n/**\n * Executes node prop updates for a vNode if the NODE_PROPS dirty bit is set. Processes all pending\n * node prop updates that were stored via addPendingNodeProp.\n *\n * @param vNode - The vNode to execute node props for\n * @param container - The container\n * @returns Void\n */\nexport function executeNodeProps(vNode, journal) {\n    vNode.dirty &= ~16 /* ChoreBits.NODE_PROPS */;\n    if (!(vNode.flags & 1 /* VNodeFlags.Element */)) {\n        return;\n    }\n    const allPropData = getNodePropData(vNode);\n    if (!allPropData || allPropData.size === 0) {\n        return;\n    }\n    const domVNode = vNode;\n    // Process all pending node prop updates\n    for (const [property, nodeProp] of allPropData.entries()) {\n        let value = nodeProp.value;\n        if (isSignal(value)) {\n            // TODO: Handle async signals (promises) - need to track pending async prop data\n            value = value.value;\n        }\n        // Pass raw value and scopedStyleIdPrefix - serialization happens in flush\n        const isConst = nodeProp.isConst;\n        setNodeProp(domVNode, journal, property, value, isConst, nodeProp.scopedStyleIdPrefix);\n    }\n    // Clear pending prop data after processing\n    clearNodePropData(vNode);\n}\n/**\n * Execute visible task cleanups and add promises to extraPromises.\n *\n * @param vNode - The vNode to cleanup\n * @param container - The container\n * @returns Void\n */\nexport function executeCleanup(vNode, container) {\n    vNode.dirty &= ~128 /* ChoreBits.CLEANUP */;\n    // TODO add promises to extraPromises\n    const elementSeq = container.getHostProp(vNode, ELEMENT_SEQ);\n    if (!elementSeq || elementSeq.length === 0) {\n        // No tasks to execute, clear the bit\n        return;\n    }\n    for (let i = 0; i < elementSeq.length; i++) {\n        const item = elementSeq[i];\n        if (item instanceof Task) {\n            if (item.$flags$ & 16 /* TaskFlags.NEEDS_CLEANUP */) {\n                item.$flags$ &= ~16 /* TaskFlags.NEEDS_CLEANUP */;\n                const task = item;\n                cleanupDestroyable(task);\n            }\n        }\n    }\n}\n/**\n * Executes compute/recompute chores for a vNode if the COMPUTE dirty bit is set. This handles\n * signal recomputation and effect scheduling.\n *\n * @param vNode - The vNode to execute compute for\n * @param container - The container\n * @returns Promise if computation is async, void otherwise\n */\nexport function executeCompute(vNode, container) {\n    vNode.dirty &= ~32 /* ChoreBits.COMPUTE */;\n    const target = container.getHostProp(vNode, HOST_SIGNAL);\n    if (!target) {\n        return;\n    }\n    const effects = target.$effects$;\n    const ctx = newInvokeContext();\n    ctx.$container$ = container;\n    // needed for computed signals and throwing QRLs\n    return maybeThen(retryOnPromise(() => invoke.call(target, ctx, target.$computeIfNeeded$)), () => {\n        if (target.$flags$ & 2 /* SignalFlags.RUN_EFFECTS */) {\n            target.$flags$ &= ~2 /* SignalFlags.RUN_EFFECTS */;\n            return scheduleEffects(container, target, effects);\n        }\n    });\n}\n/**\n * Executes a reconcile chore for a vNode if the RECONCILE dirty bit is set. This handles the\n * reconciliation of a keyed loop.\n *\n * @param container - The container\n * @param journal - The journal\n * @param vNode - The vNode\n * @returns Promise if reconcile is async, void otherwise\n */\nexport function executeReconcile(vNode, container, journal, cursor) {\n    vNode.dirty &= ~256 /* ChoreBits.RECONCILE */;\n    const host = vNode;\n    const props = container.getHostProp(host, ELEMENT_PROPS) || null;\n    if (!props) {\n        return;\n    }\n    let items = _getProps(props, 'items');\n    if (isSignal(items)) {\n        items = untrack(items);\n    }\n    const keyQrl = _getProps(props, 'key$');\n    const itemQrl = _getProps(props, 'item$');\n    const keyOf = keyQrl.resolved;\n    const itemFn = itemQrl.resolved;\n    if (keyOf !== undefined && itemFn !== undefined) {\n        return reconcileKeyedLoopToParent(container, journal, host, cursor, items, keyOf, itemFn);\n    }\n    return maybeThen(keyQrl.resolve(), (resolvedKeyOf) => maybeThen(itemQrl.resolve(), (resolvedItemFn) => reconcileKeyedLoopToParent(container, journal, host, cursor, items, resolvedKeyOf, resolvedItemFn)));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvcmUtZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9jdXJzb3IvY2hvcmUtZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLG9CQUFvQixHQUNyQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFhLE9BQU8sRUFBZSxNQUFNLG9CQUFvQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFNbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVqRixPQUFPLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBRW5CLHlCQUF5QixHQUMxQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHakUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7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QUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUVoQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sMEJBQTBCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQ25ELFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUM5QywwQkFBMEIsQ0FDeEIsU0FBUyxFQUNULE9BQU8sRUFDUCxJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFDTCxhQUFhLEVBQ2IsY0FBYyxDQUNmLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgVk5vZGVKb3VybmFsLFxuICB2bm9kZV9jcmVhdGVFcnJvckRpdixcbiAgdm5vZGVfaW5zZXJ0RWxlbWVudEJlZm9yZSxcbiAgdm5vZGVfaXNFbGVtZW50Vk5vZGUsXG59IGZyb20gJy4uLy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyB2bm9kZV9kaWZmIH0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLWRpZmYnO1xuaW1wb3J0IHsgVGFzaywgVGFza0ZsYWdzLCBydW5UYXNrLCB0eXBlIFRhc2tGbiB9IGZyb20gJy4uLy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQgeyBleGVjdXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50LWV4ZWN1dGlvbic7XG5pbXBvcnQgdHlwZSB7IE9uUmVuZGVyRm4gfSBmcm9tICcuLi9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB0eXBlIHsgUHJvcHMgfSBmcm9tICcuLi9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgQ2hvcmVCaXRzIH0gZnJvbSAnLi4vdm5vZGUvZW51bXMvY2hvcmUtYml0cy5lbnVtJztcbmltcG9ydCB7IEVMRU1FTlRfU0VRLCBFTEVNRU5UX1BST1BTLCBPblJlbmRlclByb3AsIFFTY29wZWRTdHlsZSB9IGZyb20gJy4uL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgYWRkQ29tcG9uZW50U3R5bGVQcmVmaXggfSBmcm9tICcuLi91dGlscy9zY29wZWQtc3R5bGVzJztcbmltcG9ydCB7IGlzUHJvbWlzZSwgbWF5YmVUaGVuLCByZXRyeU9uUHJvbWlzZSwgc2FmZUNhbGwgfSBmcm9tICcuLi91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIsIEhvc3RFbGVtZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4uL3Zub2RlL3Zub2RlJztcbmltcG9ydCB7IFZOb2RlRmxhZ3MsIHR5cGUgQ2xpZW50Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTm9kZVByb3AgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB7IGlzU2lnbmFsLCBzY2hlZHVsZUVmZmVjdHMgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFZOb2RlIH0gZnJvbSAnLi4vdm5vZGUvZWxlbWVudC12bm9kZSc7XG5pbXBvcnQgdHlwZSB7IFZpcnR1YWxWTm9kZSB9IGZyb20gJy4uL3Zub2RlL3ZpcnR1YWwtdm5vZGUnO1xuaW1wb3J0IHsgY3JlYXRlU2V0QXR0cmlidXRlT3BlcmF0aW9uIH0gZnJvbSAnLi4vdm5vZGUvdHlwZXMvZG9tLXZub2RlLW9wZXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEpTWE91dHB1dCB9IGZyb20gJy4uL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQge1xuICBIT1NUX1NJR05BTCxcbiAgRVJST1JfREFUQV9LRVksXG4gIE5PREVfRElGRl9EQVRBX0tFWSxcbiAgTk9ERV9QUk9QU19EQVRBX0tFWSxcbiAgdHlwZSBDdXJzb3JEYXRhLFxuICBJTkxJTkVfQ09NUE9ORU5UX0RBVEFfS0VZLFxufSBmcm9tICcuL2N1cnNvci1wcm9wcyc7XG5pbXBvcnQgeyBpbnZva2UsIG5ld0ludm9rZUNvbnRleHQsIHVudHJhY2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBXcmFwcGVkU2lnbmFsSW1wbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC93cmFwcGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IFNpZ25hbEZsYWdzIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBjbGVhbnVwRGVzdHJveWFibGUgfSBmcm9tICcuLi8uLi91c2UvdXRpbHMvZGVzdHJveWFibGUnO1xuaW1wb3J0IHR5cGUgeyBJU3NyTm9kZSB9IGZyb20gJy4uLy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDdXJzb3IgfSBmcm9tICcuL2N1cnNvcic7XG5pbXBvcnQgeyByZWNvbmNpbGVLZXllZExvb3BUb1BhcmVudCB9IGZyb20gJy4uLy4uL2NsaWVudC9yZWNvbmNpbGUta2V5ZWQtbG9vcCc7XG5pbXBvcnQgeyBfZ2V0UHJvcHMgfSBmcm9tICcuLi9qc3gvcHJvcHMtcHJveHknO1xuaW1wb3J0IHR5cGUgeyBFYWNoUHJvcHMgfSBmcm9tICcuLi8uLi9jb250cm9sLWZsb3cvZWFjaCc7XG5pbXBvcnQgdHlwZSB7IERvbUNvbnRhaW5lciB9IGZyb20gJy4uLy4uL2NsaWVudC9kb20tY29udGFpbmVyJztcblxuaW50ZXJmYWNlIElubGluZUNvbXBvbmVudERhdGEge1xuICBjb21wb25lbnRGbjogRnVuY3Rpb247XG4gIHN1YnNjcmlwdGlvbkhvc3Q6IEhvc3RFbGVtZW50IHwgbnVsbDtcbiAgcHJvcHM6IFByb3BzIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyB0YXNrcyBmb3IgYSB2Tm9kZSBpZiB0aGUgVEFTS1MgZGlydHkgYml0IGlzIHNldC4gVGFza3MgYXJlIHN0b3JlZCBpbiB0aGUgRUxFTUVOVF9TRVFcbiAqIHByb3BlcnR5IGFuZCBleGVjdXRlZCBpbiBvcmRlci5cbiAqXG4gKiBCZWhhdmlvcjpcbiAqXG4gKiAtIFJlc291cmNlczogSnVzdCBydW4sIGRvbid0IHNhdmUgcHJvbWlzZSBhbnl3aGVyZVxuICogLSBUYXNrczogQ2hhaW4gcHJvbWlzZXMgb25seSBiZXR3ZWVuIGVhY2ggb3RoZXJcbiAqIC0gVmlzaWJsZVRhc2tzOiBTdG9yZSBwcm9taXNlcyBpbiBhZnRlckZsdXNoIG9uIGN1cnNvciByb290IGZvciBjbGllbnQsIHdlIG5lZWQgdG8gd2FpdCBmb3IgYWxsXG4gKiAgIHZpc2libGUgdGFza3MgdG8gY29tcGxldGUgYmVmb3JlIGZsdXNoaW5nIGNoYW5nZXMgdG8gdGhlIERPTS4gT24gc2VydmVyLCB3ZSBrZWVwIHRoZW0gb24gdk5vZGVcbiAqICAgZm9yIHN0cmVhbWluZy5cbiAqXG4gKiBAcGFyYW0gdk5vZGUgLSBUaGUgdk5vZGUgdG8gZXhlY3V0ZSB0YXNrcyBmb3JcbiAqIEBwYXJhbSBjb250YWluZXIgLSBUaGUgY29udGFpbmVyXG4gKiBAcGFyYW0gY3Vyc29yIC0gVGhlIGN1cnNvciByb290IHZOb2RlLCBzaG91bGQgYmUgc2V0IG9uIGNsaWVudCBvbmx5XG4gKiBAcmV0dXJucyBQcm9taXNlIGlmIGFueSByZWd1bGFyIHRhc2sgcmV0dXJucyBhIHByb21pc2UsIHZvaWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlVGFza3MoXG4gIHZOb2RlOiBWTm9kZSxcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGN1cnNvckRhdGE6IEN1cnNvckRhdGFcbik6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHtcbiAgdk5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5UQVNLUztcblxuICBjb25zdCBlbGVtZW50U2VxID0gY29udGFpbmVyLmdldEhvc3RQcm9wPHVua25vd25bXSB8IG51bGw+KHZOb2RlLCBFTEVNRU5UX1NFUSk7XG5cbiAgaWYgKCFlbGVtZW50U2VxIHx8IGVsZW1lbnRTZXEubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gTm8gdGFza3MgdG8gZXhlY3V0ZSwgY2xlYXIgdGhlIGJpdFxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEV4ZWN1dGUgYWxsIHRhc2tzIGluIHNlcXVlbmNlXG4gIGxldCB0YXNrUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRTZXEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpdGVtID0gZWxlbWVudFNlcVtpXTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFRhc2spIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBpdGVtIGFzIFRhc2s8VGFza0ZuLCBUYXNrRm4+O1xuXG4gICAgICAvLyBTa2lwIGlmIHRhc2sgaXMgbm90IGRpcnR5XG4gICAgICBpZiAoISh0YXNrLiRmbGFncyQgJiBUYXNrRmxhZ3MuRElSVFkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFzay4kZmxhZ3MkICYgVGFza0ZsYWdzLlZJU0lCTEVfVEFTSykge1xuICAgICAgICAvLyBWaXNpYmxlVGFza3M6IHN0b3JlIGZvciBleGVjdXRpb24gYWZ0ZXIgZmx1c2ggKGRvbid0IGV4ZWN1dGUgbm93KVxuICAgICAgICAoY3Vyc29yRGF0YS5hZnRlckZsdXNoVGFza3MgfHw9IFtdKS5wdXNoKHRhc2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVndWxhciB0YXNrczogY2hhaW4gcHJvbWlzZXMgb25seSBiZXR3ZWVuIGVhY2ggb3RoZXJcbiAgICAgICAgY29uc3QgaXNSZW5kZXJCbG9ja2luZyA9ICEhKHRhc2suJGZsYWdzJCAmIFRhc2tGbGFncy5SRU5ERVJfQkxPQ0tJTkcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBydW5UYXNrKHRhc2ssIGNvbnRhaW5lciwgdk5vZGUpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoaXNSZW5kZXJCbG9ja2luZykge1xuICAgICAgICAgICAgdGFza1Byb21pc2UgPSB0YXNrUHJvbWlzZVxuICAgICAgICAgICAgICA/IHRhc2tQcm9taXNlLnRoZW4oKCkgPT4gcmVzdWx0IGFzIFByb21pc2U8dm9pZD4pXG4gICAgICAgICAgICAgIDogKHJlc3VsdCBhcyBQcm9taXNlPHZvaWQ+KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVE9ETzogc2V0IGV4dHJhcHJvbWlzZXMgb24gdk5vZGUgaW5zdGVhZCBvZiBjdXJzb3JEYXRhIGlmIHNlcnZlclxuICAgICAgICAgICAgKGN1cnNvckRhdGEuZXh0cmFQcm9taXNlcyB8fD0gW10pLnB1c2gocmVzdWx0IGFzIFByb21pc2U8dm9pZD4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXNrUHJvbWlzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldElubGluZUNvbXBvbmVudERhdGEoXG4gIHZOb2RlOiBWTm9kZSxcbiAgY29tcG9uZW50Rm46IEZ1bmN0aW9uLFxuICBzdWJzY3JpcHRpb25Ib3N0OiBWTm9kZSB8IG51bGwsXG4gIGpzeFByb3BzOiBQcm9wcyB8IG51bGxcbik6IHZvaWQge1xuICBjb25zdCBwcm9wcyA9ICh2Tm9kZS5wcm9wcyB8fD0ge30pIGFzIFByb3BzO1xuICBwcm9wc1tJTkxJTkVfQ09NUE9ORU5UX0RBVEFfS0VZXSA9IHtcbiAgICBjb21wb25lbnRGbixcbiAgICBzdWJzY3JpcHRpb25Ib3N0LFxuICAgIHByb3BzOiBqc3hQcm9wcyxcbiAgfSBzYXRpc2ZpZXMgSW5saW5lQ29tcG9uZW50RGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5saW5lQ29tcG9uZW50RGF0YSh2Tm9kZTogVk5vZGUpOiBJbmxpbmVDb21wb25lbnREYXRhIHwgbnVsbCB7XG4gIGNvbnN0IHByb3BzID0gdk5vZGUucHJvcHMgYXMgUHJvcHM7XG4gIGNvbnN0IGRhdGEgPSAocHJvcHM/LltJTkxJTkVfQ09NUE9ORU5UX0RBVEFfS0VZXSBhcyBJbmxpbmVDb21wb25lbnREYXRhKSB8fCBudWxsO1xuICBpZiAoZGF0YSkge1xuICAgIGRlbGV0ZSBwcm9wc1tJTkxJTkVfQ09NUE9ORU5UX0RBVEFfS0VZXTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9kZURpZmZQYXlsb2FkKHZOb2RlOiBWTm9kZSk6IEpTWE91dHB1dCB8IG51bGwge1xuICBjb25zdCBwcm9wcyA9IHZOb2RlLnByb3BzIGFzIFByb3BzO1xuICByZXR1cm4gcHJvcHM/LltOT0RFX0RJRkZfREFUQV9LRVldIGFzIEpTWE91dHB1dCB8IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXROb2RlRGlmZlBheWxvYWQodk5vZGU6IFZOb2RlLCBwYXlsb2FkOiBKU1hPdXRwdXQgfCBTaWduYWw8SlNYT3V0cHV0Pik6IHZvaWQge1xuICBjb25zdCBwcm9wcyA9ICh2Tm9kZS5wcm9wcyB8fD0ge30pIGFzIFByb3BzO1xuICBwcm9wc1tOT0RFX0RJRkZfREFUQV9LRVldID0gcGF5bG9hZDtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JQYXlsb2FkKHZOb2RlOiBWTm9kZSk6IEVycm9yIHwgbnVsbCB7XG4gIGNvbnN0IHByb3BzID0gdk5vZGUucHJvcHMgYXMgUHJvcHM7XG4gIHJldHVybiAocHJvcHM/LltFUlJPUl9EQVRBX0tFWV0gYXMgRXJyb3IpID8/IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvclBheWxvYWQodk5vZGU6IFZOb2RlLCBlcnJvcjogRXJyb3IgfCBudWxsKTogdm9pZCB7XG4gIGNvbnN0IHByb3BzID0gKHZOb2RlLnByb3BzIHx8PSB7fSkgYXMgUHJvcHM7XG4gIHByb3BzW0VSUk9SX0RBVEFfS0VZXSA9IGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUVycm9yV3JhcCh2Tm9kZTogVk5vZGUsIGpvdXJuYWw6IFZOb2RlSm91cm5hbCk6IHZvaWQge1xuICB2Tm9kZS5kaXJ0eSAmPSB+Q2hvcmVCaXRzLkVSUk9SX1dSQVA7XG5cbiAgY29uc3QgZXJyID0gZ2V0RXJyb3JQYXlsb2FkKHZOb2RlKTtcbiAgaWYgKCFlcnIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gY2xlYW51cCBwYXlsb2FkXG4gIHNldEVycm9yUGF5bG9hZCh2Tm9kZSwgbnVsbCk7XG5cbiAgY29uc3Qgdkhvc3QgPSB2Tm9kZTtcbiAgY29uc3Qgdkhvc3RQYXJlbnQgPSB2SG9zdC5wYXJlbnQ7XG4gIGNvbnN0IHZIb3N0TmV4dFNpYmxpbmcgPSB2SG9zdC5uZXh0U2libGluZyBhcyBWTm9kZSB8IG51bGw7XG4gIGNvbnN0IHZFcnJvckRpdiA9IHZub2RlX2NyZWF0ZUVycm9yRGl2KGpvdXJuYWwsIGRvY3VtZW50LCB2SG9zdCwgZXJyKTtcbiAgLy8gSWYgdGhlIGhvc3QgaXMgYW4gZWxlbWVudCBub2RlLCB3ZSBuZWVkIHRvIGluc2VydCB0aGUgZXJyb3IgZGl2IGludG8gaXRzIHBhcmVudC5cbiAgY29uc3QgaW5zZXJ0SG9zdCA9IHZub2RlX2lzRWxlbWVudFZOb2RlKHZIb3N0KSA/IHZIb3N0UGFyZW50IHx8IHZIb3N0IDogdkhvc3Q7XG4gIC8vIElmIHRoZSBob3N0IGlzIGRpZmZlcmVudCB0aGVuIHdlIG5lZWQgdG8gaW5zZXJ0IGVycm9yZWQtaG9zdCBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgaG9zdC5cbiAgY29uc3QgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0SG9zdCA9PT0gdkhvc3QgPyBudWxsIDogdkhvc3ROZXh0U2libGluZztcbiAgdm5vZGVfaW5zZXJ0RWxlbWVudEJlZm9yZShcbiAgICBqb3VybmFsLFxuICAgIGluc2VydEhvc3QgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLFxuICAgIHZFcnJvckRpdixcbiAgICBpbnNlcnRCZWZvcmVcbiAgKTtcbiAgLy8gdm5vZGVfY3JlYXRlRXJyb3JEaXYgbW92ZXMgY2hpbGRyZW4gaW50byB0aGUgZXJyb3JlZC1ob3N0IGVsZW1lbnQsIHdoaWNoIGNhblxuICAvLyBtYXJrIHRoZSBob3N0IHdpdGggQ0hJTERSRU4gZGlydHkgYml0LiBDbGVhciBpdCBhbG9uZyB3aXRoIGRpcnR5Q2hpbGRyZW4gdG9cbiAgLy8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCDigJQgdGhvc2UgY2hpbGRyZW4gYXJlIG5vdyB1bmRlciBlcnJvcmVkLWhvc3QsIG5vdCB0aGlzIGhvc3QuXG4gIC8vIFRoaXMgaXMgc2FmZSBiZWNhdXNlIENISUxEUkVOIGlzIGFsd2F5cyBwcm9jZXNzZWQgYmVmb3JlIEVSUk9SX1dSQVAgaW4gdGhlIHdhbGtlcixcbiAgLy8gc28gYW55IHByZS1leGlzdGluZyBjaGlsZCB3b3JrIGhhcyBhbHJlYWR5IGNvbXBsZXRlZC5cbiAgdk5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5DSElMRFJFTjtcbiAgdk5vZGUuZGlydHlDaGlsZHJlbiA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlTm9kZURpZmYoXG4gIHZOb2RlOiBWTm9kZSxcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgY3Vyc29yOiBDdXJzb3Jcbik6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHtcbiAgdk5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5OT0RFX0RJRkY7XG5cbiAgY29uc3QgZG9tVk5vZGUgPSB2Tm9kZSBhcyBFbGVtZW50Vk5vZGU7XG4gIGxldCBqc3ggPSBnZXROb2RlRGlmZlBheWxvYWQodk5vZGUpO1xuICBpZiAoIWpzeCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBjbGVhbnVwIHBheWxvYWRcbiAgc2V0Tm9kZURpZmZQYXlsb2FkKHZOb2RlLCBudWxsKTtcbiAgaWYgKGlzU2lnbmFsKGpzeCkpIHtcbiAgICBqc3ggPSBqc3gudmFsdWUgYXMgYW55O1xuICB9XG4gIHJldHVybiB2bm9kZV9kaWZmKGNvbnRhaW5lciBhcyBDbGllbnRDb250YWluZXIsIGpvdXJuYWwsIGpzeCwgZG9tVk5vZGUsIGN1cnNvciwgbnVsbCk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21wb25lbnQgZm9yIGEgdk5vZGUgaWYgdGhlIENPTVBPTkVOVCBkaXJ0eSBiaXQgaXMgc2V0LiBHZXRzIHRoZSBjb21wb25lbnQgUVJMIGZyb21cbiAqIE9uUmVuZGVyUHJvcCBhbmQgZXhlY3V0ZXMgaXQuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gVGhlIHZOb2RlIHRvIGV4ZWN1dGUgY29tcG9uZW50IGZvclxuICogQHBhcmFtIGNvbnRhaW5lciAtIFRoZSBjb250YWluZXJcbiAqIEByZXR1cm5zIFByb21pc2UgaWYgY29tcG9uZW50IGV4ZWN1dGlvbiBpcyBhc3luYywgdm9pZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVDb21wb25lbnRDaG9yZShcbiAgdk5vZGU6IFZOb2RlLFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBjdXJzb3I6IEN1cnNvclxuKTogVmFsdWVPclByb21pc2U8dm9pZD4ge1xuICB2Tm9kZS5kaXJ0eSAmPSB+Q2hvcmVCaXRzLkNPTVBPTkVOVDtcbiAgY29uc3QgaG9zdCA9IHZOb2RlIGFzIEhvc3RFbGVtZW50O1xuICBjb25zdCBjb21wb25lbnRRUkwgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8UVJMSW50ZXJuYWw8T25SZW5kZXJGbjx1bmtub3duPj4gfCBudWxsPihcbiAgICBob3N0LFxuICAgIE9uUmVuZGVyUHJvcFxuICApO1xuXG4gIGlmICghY29tcG9uZW50UVJMKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvcHMgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8UHJvcHMgfCBudWxsPihob3N0LCBFTEVNRU5UX1BST1BTKSB8fCBudWxsO1xuXG4gIHJldHVybiBleGVjdXRlQ29tcG9uZW50RnVuY3Rpb24oY29udGFpbmVyLCBob3N0LCBob3N0LCBjb21wb25lbnRRUkwsIHByb3BzLCBqb3VybmFsLCBjdXJzb3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUlubGluZUNvbXBvbmVudENob3JlKFxuICB2Tm9kZTogVk5vZGUsXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIGN1cnNvcjogQ3Vyc29yXG4pOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPiB7XG4gIHZOb2RlLmRpcnR5ICY9IH5DaG9yZUJpdHMuSU5MSU5FX0NPTVBPTkVOVDtcbiAgY29uc3QgaG9zdCA9IHZOb2RlIGFzIEhvc3RFbGVtZW50O1xuICBjb25zdCBpbmxpbmVDb21wb25lbnREYXRhID0gZ2V0SW5saW5lQ29tcG9uZW50RGF0YSh2Tm9kZSk7XG4gIGlmICghaW5saW5lQ29tcG9uZW50RGF0YSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBleGVjdXRlQ29tcG9uZW50RnVuY3Rpb24oXG4gICAgY29udGFpbmVyLFxuICAgIGhvc3QsXG4gICAgaW5saW5lQ29tcG9uZW50RGF0YS5zdWJzY3JpcHRpb25Ib3N0IHx8IChjb250YWluZXIgYXMgRG9tQ29udGFpbmVyKS5yb290Vk5vZGUsXG4gICAgaW5saW5lQ29tcG9uZW50RGF0YS5jb21wb25lbnRGbiBhcyBPblJlbmRlckZuPHVua25vd24+LFxuICAgIGlubGluZUNvbXBvbmVudERhdGEucHJvcHMsXG4gICAgam91cm5hbCxcbiAgICBjdXJzb3JcbiAgKTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZUNvbXBvbmVudEZ1bmN0aW9uKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgaG9zdDogSG9zdEVsZW1lbnQsXG4gIHN1YnNjcmlwdGlvbkhvc3Q6IEhvc3RFbGVtZW50LFxuICBjb21wb25lbnRGbjogT25SZW5kZXJGbjx1bmtub3duPiB8IFFSTEludGVybmFsPE9uUmVuZGVyRm48dW5rbm93bj4+LFxuICBwcm9wczogUHJvcHMgfCBudWxsLFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIGN1cnNvcjogQ3Vyc29yXG4pIHtcbiAgY29uc3QgcmVzdWx0ID0gc2FmZUNhbGwoXG4gICAgKCkgPT4gZXhlY3V0ZUNvbXBvbmVudChjb250YWluZXIsIGhvc3QsIHN1YnNjcmlwdGlvbkhvc3QsIGNvbXBvbmVudEZuLCBwcm9wcyksXG4gICAgKGpzeCkgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVTY29wZWRJZCA9IGNvbnRhaW5lci5nZXRIb3N0UHJvcDxzdHJpbmc+KGhvc3QsIFFTY29wZWRTdHlsZSk7XG4gICAgICByZXR1cm4gcmV0cnlPblByb21pc2UoKCkgPT5cbiAgICAgICAgdm5vZGVfZGlmZihcbiAgICAgICAgICBjb250YWluZXIgYXMgQ2xpZW50Q29udGFpbmVyLFxuICAgICAgICAgIGpvdXJuYWwsXG4gICAgICAgICAganN4LFxuICAgICAgICAgIGhvc3QgYXMgVk5vZGUsXG4gICAgICAgICAgY3Vyc29yLFxuICAgICAgICAgIGFkZENvbXBvbmVudFN0eWxlUHJlZml4KHN0eWxlU2NvcGVkSWQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSxcbiAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnRhaW5lci5oYW5kbGVFcnJvcihlcnIsIGhvc3QpO1xuICAgIH1cbiAgKTtcblxuICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFByb21pc2U8dm9pZD47XG4gIH1cblxuICByZXR1cm47XG59XG5cbi8qKlxuICogR2V0cyBub2RlIHByb3AgZGF0YSBmcm9tIGEgdk5vZGUuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gVGhlIHZOb2RlIHRvIGdldCBub2RlIHByb3AgZGF0YSBmcm9tXG4gKiBAcmV0dXJucyBBcnJheSBvZiBOb2RlUHJvcCwgb3IgbnVsbCBpZiBub25lXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVQcm9wRGF0YSh2Tm9kZTogVk5vZGUpOiBNYXA8c3RyaW5nLCBOb2RlUHJvcD4gfCBudWxsIHtcbiAgY29uc3QgcHJvcHMgPSAodk5vZGUucHJvcHMgfHw9IHt9KSBhcyBQcm9wcztcbiAgcmV0dXJuIChwcm9wc1tOT0RFX1BST1BTX0RBVEFfS0VZXSBhcyBNYXA8c3RyaW5nLCBOb2RlUHJvcD4gfCBudWxsKSA/PyBudWxsO1xufVxuXG4vKipcbiAqIFNldHMgbm9kZSBwcm9wIGRhdGEgZm9yIGEgdk5vZGUuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gVGhlIHZOb2RlIHRvIHNldCBub2RlIHByb3AgZGF0YSBmb3JcbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBzZXQgbm9kZSBwcm9wIGRhdGEgZm9yXG4gKiBAcGFyYW0gbm9kZVByb3AgLSBUaGUgbm9kZSBwcm9wIGRhdGEgdG8gc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROb2RlUHJvcERhdGEodk5vZGU6IFZOb2RlLCBwcm9wZXJ0eTogc3RyaW5nLCBub2RlUHJvcDogTm9kZVByb3ApOiB2b2lkIHtcbiAgY29uc3QgcHJvcHMgPSAodk5vZGUucHJvcHMgfHw9IHt9KSBhcyBQcm9wcztcbiAgbGV0IGRhdGEgPSBwcm9wc1tOT0RFX1BST1BTX0RBVEFfS0VZXSBhcyBNYXA8c3RyaW5nLCBOb2RlUHJvcD4gfCBudWxsO1xuICBpZiAoIWRhdGEpIHtcbiAgICBkYXRhID0gbmV3IE1hcCgpO1xuICAgIHByb3BzW05PREVfUFJPUFNfREFUQV9LRVldID0gZGF0YTtcbiAgfVxuICBkYXRhLnNldChwcm9wZXJ0eSwgbm9kZVByb3ApO1xufVxuXG4vKipcbiAqIENsZWFycyBub2RlIHByb3AgZGF0YSBmcm9tIGEgdk5vZGUuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gVGhlIHZOb2RlIHRvIGNsZWFyIG5vZGUgcHJvcCBkYXRhIGZyb21cbiAqL1xuZnVuY3Rpb24gY2xlYXJOb2RlUHJvcERhdGEodk5vZGU6IFZOb2RlKTogdm9pZCB7XG4gIGNvbnN0IHByb3BzID0gKHZOb2RlLnByb3BzIHx8PSB7fSkgYXMgUHJvcHM7XG4gIGRlbGV0ZSBwcm9wc1tOT0RFX1BST1BTX0RBVEFfS0VZXTtcbn1cblxuZnVuY3Rpb24gc2V0Tm9kZVByb3AoXG4gIGRvbVZOb2RlOiBFbGVtZW50Vk5vZGUsXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgcHJvcGVydHk6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgaXNDb25zdDogYm9vbGVhbixcbiAgc2NvcGVkU3R5bGVJZFByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbik6IHZvaWQge1xuICBqb3VybmFsLnB1c2goXG4gICAgY3JlYXRlU2V0QXR0cmlidXRlT3BlcmF0aW9uKFxuICAgICAgZG9tVk5vZGUubm9kZSEsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHZhbHVlLFxuICAgICAgc2NvcGVkU3R5bGVJZFByZWZpeCxcbiAgICAgIChkb21WTm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuTlNfc3ZnKSAhPT0gMFxuICAgIClcbiAgKTtcbiAgaWYgKCFpc0NvbnN0KSB7XG4gICAgaWYgKGRvbVZOb2RlLnByb3BzICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSBkb21WTm9kZS5wcm9wc1twcm9wZXJ0eV07XG4gICAgfSBlbHNlIHtcbiAgICAgIChkb21WTm9kZS5wcm9wcyB8fD0ge30pW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEV4ZWN1dGVzIG5vZGUgcHJvcCB1cGRhdGVzIGZvciBhIHZOb2RlIGlmIHRoZSBOT0RFX1BST1BTIGRpcnR5IGJpdCBpcyBzZXQuIFByb2Nlc3NlcyBhbGwgcGVuZGluZ1xuICogbm9kZSBwcm9wIHVwZGF0ZXMgdGhhdCB3ZXJlIHN0b3JlZCB2aWEgYWRkUGVuZGluZ05vZGVQcm9wLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFRoZSB2Tm9kZSB0byBleGVjdXRlIG5vZGUgcHJvcHMgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lclxuICogQHJldHVybnMgVm9pZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZU5vZGVQcm9wcyh2Tm9kZTogVk5vZGUsIGpvdXJuYWw6IFZOb2RlSm91cm5hbCk6IHZvaWQge1xuICB2Tm9kZS5kaXJ0eSAmPSB+Q2hvcmVCaXRzLk5PREVfUFJPUFM7XG4gIGlmICghKHZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5FbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFsbFByb3BEYXRhID0gZ2V0Tm9kZVByb3BEYXRhKHZOb2RlKTtcbiAgaWYgKCFhbGxQcm9wRGF0YSB8fCBhbGxQcm9wRGF0YS5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZG9tVk5vZGUgPSB2Tm9kZSBhcyBFbGVtZW50Vk5vZGU7XG5cbiAgLy8gUHJvY2VzcyBhbGwgcGVuZGluZyBub2RlIHByb3AgdXBkYXRlc1xuICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgbm9kZVByb3BdIG9mIGFsbFByb3BEYXRhLmVudHJpZXMoKSkge1xuICAgIGxldCB2YWx1ZTogU2lnbmFsPGFueT4gfCBzdHJpbmcgPSBub2RlUHJvcC52YWx1ZTtcbiAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgYXN5bmMgc2lnbmFscyAocHJvbWlzZXMpIC0gbmVlZCB0byB0cmFjayBwZW5kaW5nIGFzeW5jIHByb3AgZGF0YVxuICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSBhcyBhbnk7XG4gICAgfVxuXG4gICAgLy8gUGFzcyByYXcgdmFsdWUgYW5kIHNjb3BlZFN0eWxlSWRQcmVmaXggLSBzZXJpYWxpemF0aW9uIGhhcHBlbnMgaW4gZmx1c2hcbiAgICBjb25zdCBpc0NvbnN0ID0gbm9kZVByb3AuaXNDb25zdDtcbiAgICBzZXROb2RlUHJvcChkb21WTm9kZSwgam91cm5hbCwgcHJvcGVydHksIHZhbHVlLCBpc0NvbnN0LCBub2RlUHJvcC5zY29wZWRTdHlsZUlkUHJlZml4KTtcbiAgfVxuXG4gIC8vIENsZWFyIHBlbmRpbmcgcHJvcCBkYXRhIGFmdGVyIHByb2Nlc3NpbmdcbiAgY2xlYXJOb2RlUHJvcERhdGEodk5vZGUpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdmlzaWJsZSB0YXNrIGNsZWFudXBzIGFuZCBhZGQgcHJvbWlzZXMgdG8gZXh0cmFQcm9taXNlcy5cbiAqXG4gKiBAcGFyYW0gdk5vZGUgLSBUaGUgdk5vZGUgdG8gY2xlYW51cFxuICogQHBhcmFtIGNvbnRhaW5lciAtIFRoZSBjb250YWluZXJcbiAqIEByZXR1cm5zIFZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVDbGVhbnVwKHZOb2RlOiBWTm9kZSwgY29udGFpbmVyOiBDb250YWluZXIpOiB2b2lkIHtcbiAgdk5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5DTEVBTlVQO1xuXG4gIC8vIFRPRE8gYWRkIHByb21pc2VzIHRvIGV4dHJhUHJvbWlzZXNcblxuICBjb25zdCBlbGVtZW50U2VxID0gY29udGFpbmVyLmdldEhvc3RQcm9wPHVua25vd25bXSB8IG51bGw+KHZOb2RlLCBFTEVNRU5UX1NFUSk7XG5cbiAgaWYgKCFlbGVtZW50U2VxIHx8IGVsZW1lbnRTZXEubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gTm8gdGFza3MgdG8gZXhlY3V0ZSwgY2xlYXIgdGhlIGJpdFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudFNlcS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50U2VxW2ldO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVGFzaykge1xuICAgICAgaWYgKGl0ZW0uJGZsYWdzJCAmIFRhc2tGbGFncy5ORUVEU19DTEVBTlVQKSB7XG4gICAgICAgIGl0ZW0uJGZsYWdzJCAmPSB+VGFza0ZsYWdzLk5FRURTX0NMRUFOVVA7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBpdGVtIGFzIFRhc2s8VGFza0ZuLCBUYXNrRm4+O1xuICAgICAgICBjbGVhbnVwRGVzdHJveWFibGUodGFzayk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgY29tcHV0ZS9yZWNvbXB1dGUgY2hvcmVzIGZvciBhIHZOb2RlIGlmIHRoZSBDT01QVVRFIGRpcnR5IGJpdCBpcyBzZXQuIFRoaXMgaGFuZGxlc1xuICogc2lnbmFsIHJlY29tcHV0YXRpb24gYW5kIGVmZmVjdCBzY2hlZHVsaW5nLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFRoZSB2Tm9kZSB0byBleGVjdXRlIGNvbXB1dGUgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lclxuICogQHJldHVybnMgUHJvbWlzZSBpZiBjb21wdXRhdGlvbiBpcyBhc3luYywgdm9pZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVDb21wdXRlKFxuICB2Tm9kZTogVk5vZGUgfCBJU3NyTm9kZSxcbiAgY29udGFpbmVyOiBDb250YWluZXJcbik6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHtcbiAgdk5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5DT01QVVRFO1xuICBjb25zdCB0YXJnZXQgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8V3JhcHBlZFNpZ25hbEltcGw8dW5rbm93bj4gfCBudWxsPih2Tm9kZSwgSE9TVF9TSUdOQUwpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlZmZlY3RzID0gdGFyZ2V0LiRlZmZlY3RzJDtcblxuICBjb25zdCBjdHggPSBuZXdJbnZva2VDb250ZXh0KCk7XG4gIGN0eC4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgLy8gbmVlZGVkIGZvciBjb21wdXRlZCBzaWduYWxzIGFuZCB0aHJvd2luZyBRUkxzXG4gIHJldHVybiBtYXliZVRoZW4oXG4gICAgcmV0cnlPblByb21pc2UoKCkgPT5cbiAgICAgIGludm9rZS5jYWxsKHRhcmdldCwgY3R4LCAodGFyZ2V0IGFzIFdyYXBwZWRTaWduYWxJbXBsPHVua25vd24+KS4kY29tcHV0ZUlmTmVlZGVkJClcbiAgICApLFxuICAgICgpID0+IHtcbiAgICAgIGlmICgodGFyZ2V0IGFzIFdyYXBwZWRTaWduYWxJbXBsPHVua25vd24+KS4kZmxhZ3MkICYgU2lnbmFsRmxhZ3MuUlVOX0VGRkVDVFMpIHtcbiAgICAgICAgKHRhcmdldCBhcyBXcmFwcGVkU2lnbmFsSW1wbDx1bmtub3duPikuJGZsYWdzJCAmPSB+U2lnbmFsRmxhZ3MuUlVOX0VGRkVDVFM7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZUVmZmVjdHMoY29udGFpbmVyLCB0YXJnZXQsIGVmZmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHJlY29uY2lsZSBjaG9yZSBmb3IgYSB2Tm9kZSBpZiB0aGUgUkVDT05DSUxFIGRpcnR5IGJpdCBpcyBzZXQuIFRoaXMgaGFuZGxlcyB0aGVcbiAqIHJlY29uY2lsaWF0aW9uIG9mIGEga2V5ZWQgbG9vcC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIC0gVGhlIGNvbnRhaW5lclxuICogQHBhcmFtIGpvdXJuYWwgLSBUaGUgam91cm5hbFxuICogQHBhcmFtIHZOb2RlIC0gVGhlIHZOb2RlXG4gKiBAcmV0dXJucyBQcm9taXNlIGlmIHJlY29uY2lsZSBpcyBhc3luYywgdm9pZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVSZWNvbmNpbGUoXG4gIHZOb2RlOiBWTm9kZSxcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgY3Vyc29yOiBDdXJzb3Jcbik6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHtcbiAgdk5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5SRUNPTkNJTEU7XG4gIGNvbnN0IGhvc3QgPSB2Tm9kZSBhcyBFbGVtZW50Vk5vZGU7XG4gIGNvbnN0IHByb3BzID0gY29udGFpbmVyLmdldEhvc3RQcm9wPFByb3BzIHwgbnVsbD4oaG9zdCwgRUxFTUVOVF9QUk9QUykgfHwgbnVsbDtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgaXRlbXMgPSBfZ2V0UHJvcHMocHJvcHMsICdpdGVtcycgc2F0aXNmaWVzIGtleW9mIEVhY2hQcm9wczxhbnk+KSBhcyBhbnlbXTtcbiAgaWYgKGlzU2lnbmFsKGl0ZW1zKSkge1xuICAgIGl0ZW1zID0gdW50cmFjayhpdGVtcykgYXMgYW55W107XG4gIH1cbiAgY29uc3Qga2V5UXJsID0gX2dldFByb3BzKHByb3BzLCAna2V5JCcgc2F0aXNmaWVzIGtleW9mIEVhY2hQcm9wczxhbnk+KSBhcyBRUkxJbnRlcm5hbDxcbiAgICAoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmdcbiAgPjtcbiAgY29uc3QgaXRlbVFybCA9IF9nZXRQcm9wcyhwcm9wcywgJ2l0ZW0kJyBzYXRpc2ZpZXMga2V5b2YgRWFjaFByb3BzPGFueT4pIGFzIFFSTEludGVybmFsPFxuICAgIChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IEpTWE91dHB1dFxuICA+O1xuICBjb25zdCBrZXlPZiA9IGtleVFybC5yZXNvbHZlZDtcbiAgY29uc3QgaXRlbUZuID0gaXRlbVFybC5yZXNvbHZlZDtcblxuICBpZiAoa2V5T2YgIT09IHVuZGVmaW5lZCAmJiBpdGVtRm4gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZWNvbmNpbGVLZXllZExvb3BUb1BhcmVudChjb250YWluZXIsIGpvdXJuYWwsIGhvc3QsIGN1cnNvciwgaXRlbXMsIGtleU9mLCBpdGVtRm4pO1xuICB9XG5cbiAgcmV0dXJuIG1heWJlVGhlbihrZXlRcmwucmVzb2x2ZSgpLCAocmVzb2x2ZWRLZXlPZikgPT5cbiAgICBtYXliZVRoZW4oaXRlbVFybC5yZXNvbHZlKCksIChyZXNvbHZlZEl0ZW1GbikgPT5cbiAgICAgIHJlY29uY2lsZUtleWVkTG9vcFRvUGFyZW50KFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGpvdXJuYWwsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIGN1cnNvcixcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIHJlc29sdmVkS2V5T2YsXG4gICAgICAgIHJlc29sdmVkSXRlbUZuXG4gICAgICApXG4gICAgKVxuICApO1xufVxuIl19","import { vnode_journalToString } from '../../client/vnode-utils';\nimport { runTask } from '../../use/use-task';\nimport { directSetAttribute } from '../utils/attribute';\nimport { dangerouslySetInnerHTML, QContainerAttr } from '../utils/markers';\nimport { serializeAttribute } from '../utils/styles';\nimport { DeleteOperation, InsertOrMoveOperation, RemoveAllChildrenOperation, SetAttributeOperation, SetTextOperation, } from '../vnode/types/dom-vnode-operation';\nimport { getCursorData } from './cursor-props';\nconst DEBUG = false;\n/**\n * Executes the flush phase for a cursor.\n *\n * @param cursor - The cursor to execute the flush phase for\n * @param container - The container to execute the flush phase for\n */\nexport function executeFlushPhase(cursor, container) {\n    const cursorData = getCursorData(cursor);\n    const journal = cursorData.journal;\n    if (journal && journal.length > 0) {\n        _flushJournal(journal);\n        cursorData.journal = null;\n    }\n    executeAfterFlush(container, cursorData);\n}\nlet _insertBefore = null;\nconst fastInsertBefore = (insertBeforeParent, target, insertBefore) => {\n    if (!_insertBefore) {\n        _insertBefore = insertBeforeParent.insertBefore;\n    }\n    _insertBefore.call(insertBeforeParent, target, insertBefore);\n};\nexport function _flushJournal(journal) {\n    DEBUG && console.warn('walkCursor: flushing journal', vnode_journalToString(journal));\n    let batchParent = null;\n    let batchBefore = null;\n    let batchNodes = null;\n    const batchSet = new Set();\n    const flush = () => {\n        if (batchNodes) {\n            if (batchNodes.length === 1) {\n                fastInsertBefore(batchParent, batchNodes[0], batchBefore);\n            }\n            else {\n                const doc = batchParent.ownerDocument || batchParent;\n                const fragment = doc.createDocumentFragment();\n                for (let i = 0; i < batchNodes.length; i++) {\n                    fragment.appendChild(batchNodes[i]);\n                }\n                fastInsertBefore(batchParent, fragment, batchBefore);\n            }\n            batchNodes = null;\n            batchParent = null;\n            batchBefore = null;\n            batchSet.clear();\n        }\n    };\n    for (let i = 0; i < journal.length; i++) {\n        const operation = journal[i];\n        if (operation instanceof InsertOrMoveOperation) {\n            if (batchParent === operation.parent && batchBefore === operation.beforeTarget) {\n                if (!batchNodes) {\n                    batchNodes = [];\n                }\n                batchNodes.push(operation.target);\n                batchSet.add(operation.target);\n                continue;\n            }\n            if (batchNodes) {\n                // If we have an existing batch, we need to check if the new operation conflicts with it.\n                // 1. If we are inserting into the same parent but with a different \"before\" reference, we must flush.\n                if (batchParent === operation.parent) {\n                    flush();\n                    batchParent = operation.parent;\n                    batchBefore = operation.beforeTarget;\n                    batchNodes = [operation.target];\n                    batchSet.add(operation.target);\n                    continue;\n                }\n                // 2. If we are moving a node that is currently in the batch, or moving the node that is the reference for the batch.\n                if (batchSet.has(operation.target) ||\n                    (batchBefore && operation.target === batchBefore) ||\n                    (batchParent && operation.target === batchParent)) {\n                    flush();\n                    batchParent = operation.parent;\n                    batchBefore = operation.beforeTarget;\n                    batchNodes = [operation.target];\n                    batchSet.add(operation.target);\n                    continue;\n                }\n                // 3. Otherwise, we can execute this operation immediately without flushing the current batch.\n                // This is important for \"interleaved\" inserts, e.g. inserting <tr> into <tbody> (batched)\n                // and then inserting <td> into that <tr> (immediate).\n                // The <tr> is in memory, so inserting <td> into it is fine and doesn't require the <tr> to be in the DOM.\n            }\n            else {\n                batchParent = operation.parent;\n                batchBefore = operation.beforeTarget;\n                batchNodes = [operation.target];\n                batchSet.add(operation.target);\n                continue;\n            }\n            fastInsertBefore(operation.parent, operation.target, operation.beforeTarget);\n            continue;\n        }\n        if (operation instanceof DeleteOperation) {\n            if (batchSet.has(operation.target) ||\n                (batchBefore && operation.target === batchBefore) ||\n                (batchParent && operation.target === batchParent)) {\n                flush();\n            }\n            operation.target.remove();\n            continue;\n        }\n        if (operation instanceof RemoveAllChildrenOperation) {\n            if (batchSet.has(operation.target) ||\n                (batchBefore && operation.target === batchBefore) ||\n                (batchParent && operation.target === batchParent)) {\n                flush();\n            }\n            // Removing children of a node in the batch is safe (clears detached node)\n            const removeParent = operation.target;\n            removeParent.textContent = '';\n            continue;\n        }\n        if (operation instanceof SetTextOperation) {\n            operation.target.nodeValue = operation.text;\n        }\n        else if (operation instanceof SetAttributeOperation) {\n            const element = operation.target;\n            const attrName = operation.attrName;\n            const rawValue = operation.attrValue;\n            const attrValue = rawValue != null\n                ? serializeAttribute(attrName, rawValue, operation.scopedStyleIdPrefix)\n                : null;\n            const shouldRemove = attrValue == null || attrValue === false;\n            if (isBooleanAttr(element, attrName)) {\n                element[attrName] = parseBoolean(attrValue);\n            }\n            else if (attrName === dangerouslySetInnerHTML) {\n                if (batchParent === element) {\n                    flush();\n                }\n                element.innerHTML = attrValue;\n                element.setAttribute(QContainerAttr, \"html\" /* QContainerValue.HTML */);\n            }\n            else if (shouldRemove) {\n                element.removeAttribute(attrName);\n            }\n            else if (attrName === 'value' && attrName in element) {\n                element.value = attrValue;\n            }\n            else {\n                directSetAttribute(element, attrName, attrValue, operation.isSvg);\n            }\n        }\n    }\n    flush();\n}\nfunction executeAfterFlush(container, cursorData) {\n    const visibleTasks = cursorData.afterFlushTasks;\n    if (!visibleTasks || visibleTasks.length === 0) {\n        cursorData.afterFlushTasks = null;\n        return;\n    }\n    DEBUG &&\n        console.warn('walkCursor: executeAfterFlush', visibleTasks.map((t) => t.$qrl$.$symbol$));\n    for (let i = 0; i < visibleTasks.length; i++) {\n        const task = visibleTasks[i];\n        runTask(task, container, task.$el$);\n    }\n    cursorData.afterFlushTasks = null;\n}\nconst isBooleanAttr = (element, key) => {\n    const isBoolean = key == 'allowfullscreen' ||\n        key == 'async' ||\n        key == 'autofocus' ||\n        key == 'autoplay' ||\n        key == 'checked' ||\n        key == 'controls' ||\n        key == 'default' ||\n        key == 'defer' ||\n        key == 'disabled' ||\n        key == 'formnovalidate' ||\n        key == 'inert' ||\n        key == 'ismap' ||\n        key == 'itemscope' ||\n        key == 'loop' ||\n        key == 'multiple' ||\n        key == 'muted' ||\n        key == 'nomodule' ||\n        key == 'novalidate' ||\n        key == 'open' ||\n        key == 'playsinline' ||\n        key == 'readonly' ||\n        key == 'required' ||\n        key == 'reversed' ||\n        key == 'selected';\n    return isBoolean && key in element;\n};\nconst parseBoolean = (value) => {\n    if (value === 'false') {\n        return false;\n    }\n    return Boolean(value);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLWZsdXNoLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9jdXJzb3IvY3Vyc29yLWZsdXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsZ0JBQWdCLEdBQ2pCLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7QUFFcEI7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBYyxFQUFFLFNBQW9CO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUUsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO0lBQ25DLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELElBQUksYUFBYSxHQUFp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QVU7UUFDakIsR0FBRyxJQUFJLFlBQVk7UUFDbkIsR0FBRyxJQUFJLE1BQU07UUFDYixHQUFHLElBQUksYUFBYTtRQUNwQixHQUFHLElBQUksVUFBVTtRQUNqQixHQUFHLElBQUksVUFBVTtRQUNqQixHQUFHLElBQUksVUFBVTtRQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0lBQ3BCLE9BQU8sU0FBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDckMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUE4QixFQUFXLEVBQUU7SUFDL0QsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdm5vZGVfam91cm5hbFRvU3RyaW5nLCB0eXBlIFZOb2RlSm91cm5hbCB9IGZyb20gJy4uLy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyBydW5UYXNrIH0gZnJvbSAnLi4vLi4vdXNlL3VzZS10YXNrJztcbmltcG9ydCB7IFFDb250YWluZXJWYWx1ZSwgdHlwZSBDb250YWluZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJlY3RTZXRBdHRyaWJ1dGUgfSBmcm9tICcuLi91dGlscy9hdHRyaWJ1dGUnO1xuaW1wb3J0IHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIFFDb250YWluZXJBdHRyIH0gZnJvbSAnLi4vdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBzZXJpYWxpemVBdHRyaWJ1dGUgfSBmcm9tICcuLi91dGlscy9zdHlsZXMnO1xuaW1wb3J0IHtcbiAgRGVsZXRlT3BlcmF0aW9uLFxuICBJbnNlcnRPck1vdmVPcGVyYXRpb24sXG4gIFJlbW92ZUFsbENoaWxkcmVuT3BlcmF0aW9uLFxuICBTZXRBdHRyaWJ1dGVPcGVyYXRpb24sXG4gIFNldFRleHRPcGVyYXRpb24sXG59IGZyb20gJy4uL3Zub2RlL3R5cGVzL2RvbS12bm9kZS1vcGVyYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBDdXJzb3IgfSBmcm9tICcuL2N1cnNvcic7XG5pbXBvcnQgeyBnZXRDdXJzb3JEYXRhLCB0eXBlIEN1cnNvckRhdGEgfSBmcm9tICcuL2N1cnNvci1wcm9wcyc7XG5cbmNvbnN0IERFQlVHID0gZmFsc2U7XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGZsdXNoIHBoYXNlIGZvciBhIGN1cnNvci5cbiAqXG4gKiBAcGFyYW0gY3Vyc29yIC0gVGhlIGN1cnNvciB0byBleGVjdXRlIHRoZSBmbHVzaCBwaGFzZSBmb3JcbiAqIEBwYXJhbSBjb250YWluZXIgLSBUaGUgY29udGFpbmVyIHRvIGV4ZWN1dGUgdGhlIGZsdXNoIHBoYXNlIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUZsdXNoUGhhc2UoY3Vyc29yOiBDdXJzb3IsIGNvbnRhaW5lcjogQ29udGFpbmVyKTogdm9pZCB7XG4gIGNvbnN0IGN1cnNvckRhdGEgPSBnZXRDdXJzb3JEYXRhKGN1cnNvcikhO1xuICBjb25zdCBqb3VybmFsID0gY3Vyc29yRGF0YS5qb3VybmFsO1xuICBpZiAoam91cm5hbCAmJiBqb3VybmFsLmxlbmd0aCA+IDApIHtcbiAgICBfZmx1c2hKb3VybmFsKGpvdXJuYWwpO1xuICAgIGN1cnNvckRhdGEuam91cm5hbCA9IG51bGw7XG4gIH1cbiAgZXhlY3V0ZUFmdGVyRmx1c2goY29udGFpbmVyLCBjdXJzb3JEYXRhKTtcbn1cblxubGV0IF9pbnNlcnRCZWZvcmU6IHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgfCBudWxsID0gbnVsbDtcblxuY29uc3QgZmFzdEluc2VydEJlZm9yZSA9IChcbiAgaW5zZXJ0QmVmb3JlUGFyZW50OiBOb2RlLFxuICB0YXJnZXQ6IE5vZGUsXG4gIGluc2VydEJlZm9yZTogTm9kZSB8IG51bGxcbik6IHZvaWQgPT4ge1xuICBpZiAoIV9pbnNlcnRCZWZvcmUpIHtcbiAgICBfaW5zZXJ0QmVmb3JlID0gaW5zZXJ0QmVmb3JlUGFyZW50Lmluc2VydEJlZm9yZTtcbiAgfVxuICBfaW5zZXJ0QmVmb3JlLmNhbGwoaW5zZXJ0QmVmb3JlUGFyZW50LCB0YXJnZXQsIGluc2VydEJlZm9yZSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX2ZsdXNoSm91cm5hbChqb3VybmFsOiBWTm9kZUpvdXJuYWwpOiB2b2lkIHtcbiAgREVCVUcgJiYgY29uc29sZS53YXJuKCd3YWxrQ3Vyc29yOiBmbHVzaGluZyBqb3VybmFsJywgdm5vZGVfam91cm5hbFRvU3RyaW5nKGpvdXJuYWwpKTtcbiAgbGV0IGJhdGNoUGFyZW50OiBOb2RlIHwgbnVsbCA9IG51bGw7XG4gIGxldCBiYXRjaEJlZm9yZTogTm9kZSB8IG51bGwgPSBudWxsO1xuICBsZXQgYmF0Y2hOb2RlczogTm9kZVtdIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGJhdGNoU2V0ID0gbmV3IFNldDxOb2RlPigpO1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmIChiYXRjaE5vZGVzKSB7XG4gICAgICBpZiAoYmF0Y2hOb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmFzdEluc2VydEJlZm9yZShiYXRjaFBhcmVudCEsIGJhdGNoTm9kZXNbMF0sIGJhdGNoQmVmb3JlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGJhdGNoUGFyZW50IS5vd25lckRvY3VtZW50IHx8IChiYXRjaFBhcmVudCBhcyBEb2N1bWVudCk7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYmF0Y2hOb2Rlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZmFzdEluc2VydEJlZm9yZShiYXRjaFBhcmVudCEsIGZyYWdtZW50LCBiYXRjaEJlZm9yZSk7XG4gICAgICB9XG4gICAgICBiYXRjaE5vZGVzID0gbnVsbDtcbiAgICAgIGJhdGNoUGFyZW50ID0gbnVsbDtcbiAgICAgIGJhdGNoQmVmb3JlID0gbnVsbDtcbiAgICAgIGJhdGNoU2V0LmNsZWFyKCk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgam91cm5hbC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGpvdXJuYWxbaV07XG4gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydE9yTW92ZU9wZXJhdGlvbikge1xuICAgICAgaWYgKGJhdGNoUGFyZW50ID09PSBvcGVyYXRpb24ucGFyZW50ICYmIGJhdGNoQmVmb3JlID09PSBvcGVyYXRpb24uYmVmb3JlVGFyZ2V0KSB7XG4gICAgICAgIGlmICghYmF0Y2hOb2Rlcykge1xuICAgICAgICAgIGJhdGNoTm9kZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBiYXRjaE5vZGVzLnB1c2gob3BlcmF0aW9uLnRhcmdldCk7XG4gICAgICAgIGJhdGNoU2V0LmFkZChvcGVyYXRpb24udGFyZ2V0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChiYXRjaE5vZGVzKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhpc3RpbmcgYmF0Y2gsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIG5ldyBvcGVyYXRpb24gY29uZmxpY3RzIHdpdGggaXQuXG4gICAgICAgIC8vIDEuIElmIHdlIGFyZSBpbnNlcnRpbmcgaW50byB0aGUgc2FtZSBwYXJlbnQgYnV0IHdpdGggYSBkaWZmZXJlbnQgXCJiZWZvcmVcIiByZWZlcmVuY2UsIHdlIG11c3QgZmx1c2guXG4gICAgICAgIGlmIChiYXRjaFBhcmVudCA9PT0gb3BlcmF0aW9uLnBhcmVudCkge1xuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgICAgYmF0Y2hQYXJlbnQgPSBvcGVyYXRpb24ucGFyZW50O1xuICAgICAgICAgIGJhdGNoQmVmb3JlID0gb3BlcmF0aW9uLmJlZm9yZVRhcmdldDtcbiAgICAgICAgICBiYXRjaE5vZGVzID0gW29wZXJhdGlvbi50YXJnZXRdO1xuICAgICAgICAgIGJhdGNoU2V0LmFkZChvcGVyYXRpb24udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAyLiBJZiB3ZSBhcmUgbW92aW5nIGEgbm9kZSB0aGF0IGlzIGN1cnJlbnRseSBpbiB0aGUgYmF0Y2gsIG9yIG1vdmluZyB0aGUgbm9kZSB0aGF0IGlzIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBiYXRjaC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGJhdGNoU2V0LmhhcyhvcGVyYXRpb24udGFyZ2V0KSB8fFxuICAgICAgICAgIChiYXRjaEJlZm9yZSAmJiBvcGVyYXRpb24udGFyZ2V0ID09PSBiYXRjaEJlZm9yZSkgfHxcbiAgICAgICAgICAoYmF0Y2hQYXJlbnQgJiYgb3BlcmF0aW9uLnRhcmdldCA9PT0gYmF0Y2hQYXJlbnQpXG4gICAgICAgICkge1xuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgICAgYmF0Y2hQYXJlbnQgPSBvcGVyYXRpb24ucGFyZW50O1xuICAgICAgICAgIGJhdGNoQmVmb3JlID0gb3BlcmF0aW9uLmJlZm9yZVRhcmdldDtcbiAgICAgICAgICBiYXRjaE5vZGVzID0gW29wZXJhdGlvbi50YXJnZXRdO1xuICAgICAgICAgIGJhdGNoU2V0LmFkZChvcGVyYXRpb24udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLiBPdGhlcndpc2UsIHdlIGNhbiBleGVjdXRlIHRoaXMgb3BlcmF0aW9uIGltbWVkaWF0ZWx5IHdpdGhvdXQgZmx1c2hpbmcgdGhlIGN1cnJlbnQgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBcImludGVybGVhdmVkXCIgaW5zZXJ0cywgZS5nLiBpbnNlcnRpbmcgPHRyPiBpbnRvIDx0Ym9keT4gKGJhdGNoZWQpXG4gICAgICAgIC8vIGFuZCB0aGVuIGluc2VydGluZyA8dGQ+IGludG8gdGhhdCA8dHI+IChpbW1lZGlhdGUpLlxuICAgICAgICAvLyBUaGUgPHRyPiBpcyBpbiBtZW1vcnksIHNvIGluc2VydGluZyA8dGQ+IGludG8gaXQgaXMgZmluZSBhbmQgZG9lc24ndCByZXF1aXJlIHRoZSA8dHI+IHRvIGJlIGluIHRoZSBET00uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXRjaFBhcmVudCA9IG9wZXJhdGlvbi5wYXJlbnQ7XG4gICAgICAgIGJhdGNoQmVmb3JlID0gb3BlcmF0aW9uLmJlZm9yZVRhcmdldDtcbiAgICAgICAgYmF0Y2hOb2RlcyA9IFtvcGVyYXRpb24udGFyZ2V0XTtcbiAgICAgICAgYmF0Y2hTZXQuYWRkKG9wZXJhdGlvbi50YXJnZXQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZmFzdEluc2VydEJlZm9yZShvcGVyYXRpb24ucGFyZW50LCBvcGVyYXRpb24udGFyZ2V0LCBvcGVyYXRpb24uYmVmb3JlVGFyZ2V0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBEZWxldGVPcGVyYXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgYmF0Y2hTZXQuaGFzKG9wZXJhdGlvbi50YXJnZXQpIHx8XG4gICAgICAgIChiYXRjaEJlZm9yZSAmJiBvcGVyYXRpb24udGFyZ2V0ID09PSBiYXRjaEJlZm9yZSkgfHxcbiAgICAgICAgKGJhdGNoUGFyZW50ICYmIG9wZXJhdGlvbi50YXJnZXQgPT09IGJhdGNoUGFyZW50KVxuICAgICAgKSB7XG4gICAgICAgIGZsdXNoKCk7XG4gICAgICB9XG4gICAgICBvcGVyYXRpb24udGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlbW92ZUFsbENoaWxkcmVuT3BlcmF0aW9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJhdGNoU2V0LmhhcyhvcGVyYXRpb24udGFyZ2V0KSB8fFxuICAgICAgICAoYmF0Y2hCZWZvcmUgJiYgb3BlcmF0aW9uLnRhcmdldCA9PT0gYmF0Y2hCZWZvcmUpIHx8XG4gICAgICAgIChiYXRjaFBhcmVudCAmJiBvcGVyYXRpb24udGFyZ2V0ID09PSBiYXRjaFBhcmVudClcbiAgICAgICkge1xuICAgICAgICBmbHVzaCgpO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZpbmcgY2hpbGRyZW4gb2YgYSBub2RlIGluIHRoZSBiYXRjaCBpcyBzYWZlIChjbGVhcnMgZGV0YWNoZWQgbm9kZSlcbiAgICAgIGNvbnN0IHJlbW92ZVBhcmVudCA9IG9wZXJhdGlvbi50YXJnZXQ7XG4gICAgICByZW1vdmVQYXJlbnQudGV4dENvbnRlbnQgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBTZXRUZXh0T3BlcmF0aW9uKSB7XG4gICAgICBvcGVyYXRpb24udGFyZ2V0Lm5vZGVWYWx1ZSA9IG9wZXJhdGlvbi50ZXh0O1xuICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgU2V0QXR0cmlidXRlT3BlcmF0aW9uKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gb3BlcmF0aW9uLnRhcmdldDtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gb3BlcmF0aW9uLmF0dHJOYW1lO1xuICAgICAgY29uc3QgcmF3VmFsdWUgPSBvcGVyYXRpb24uYXR0clZhbHVlO1xuICAgICAgY29uc3QgYXR0clZhbHVlID1cbiAgICAgICAgcmF3VmFsdWUgIT0gbnVsbFxuICAgICAgICAgID8gc2VyaWFsaXplQXR0cmlidXRlKGF0dHJOYW1lLCByYXdWYWx1ZSwgb3BlcmF0aW9uLnNjb3BlZFN0eWxlSWRQcmVmaXgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3Qgc2hvdWxkUmVtb3ZlID0gYXR0clZhbHVlID09IG51bGwgfHwgYXR0clZhbHVlID09PSBmYWxzZTtcbiAgICAgIGlmIChpc0Jvb2xlYW5BdHRyKGVsZW1lbnQsIGF0dHJOYW1lKSkge1xuICAgICAgICAoZWxlbWVudCBhcyBhbnkpW2F0dHJOYW1lXSA9IHBhcnNlQm9vbGVhbihhdHRyVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PT0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpIHtcbiAgICAgICAgaWYgKGJhdGNoUGFyZW50ID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgICAoZWxlbWVudCBhcyBhbnkpLmlubmVySFRNTCA9IGF0dHJWYWx1ZTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoUUNvbnRhaW5lckF0dHIsIFFDb250YWluZXJWYWx1ZS5IVE1MKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkUmVtb3ZlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT09ICd2YWx1ZScgJiYgYXR0ck5hbWUgaW4gZWxlbWVudCkge1xuICAgICAgICAoZWxlbWVudCBhcyBhbnkpLnZhbHVlID0gYXR0clZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0U2V0QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIG9wZXJhdGlvbi5pc1N2Zyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZsdXNoKCk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVBZnRlckZsdXNoKGNvbnRhaW5lcjogQ29udGFpbmVyLCBjdXJzb3JEYXRhOiBDdXJzb3JEYXRhKTogdm9pZCB7XG4gIGNvbnN0IHZpc2libGVUYXNrcyA9IGN1cnNvckRhdGEuYWZ0ZXJGbHVzaFRhc2tzO1xuICBpZiAoIXZpc2libGVUYXNrcyB8fCB2aXNpYmxlVGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgY3Vyc29yRGF0YS5hZnRlckZsdXNoVGFza3MgPSBudWxsO1xuICAgIHJldHVybjtcbiAgfVxuICBERUJVRyAmJlxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICd3YWxrQ3Vyc29yOiBleGVjdXRlQWZ0ZXJGbHVzaCcsXG4gICAgICB2aXNpYmxlVGFza3MubWFwKCh0KSA9PiB0LiRxcmwkLiRzeW1ib2wkKVxuICAgICk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmlzaWJsZVRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGFzayA9IHZpc2libGVUYXNrc1tpXTtcbiAgICBydW5UYXNrKHRhc2ssIGNvbnRhaW5lciwgdGFzay4kZWwkKTtcbiAgfVxuICBjdXJzb3JEYXRhLmFmdGVyRmx1c2hUYXNrcyA9IG51bGw7XG59XG5cbmNvbnN0IGlzQm9vbGVhbkF0dHIgPSAoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgaXNCb29sZWFuID1cbiAgICBrZXkgPT0gJ2FsbG93ZnVsbHNjcmVlbicgfHxcbiAgICBrZXkgPT0gJ2FzeW5jJyB8fFxuICAgIGtleSA9PSAnYXV0b2ZvY3VzJyB8fFxuICAgIGtleSA9PSAnYXV0b3BsYXknIHx8XG4gICAga2V5ID09ICdjaGVja2VkJyB8fFxuICAgIGtleSA9PSAnY29udHJvbHMnIHx8XG4gICAga2V5ID09ICdkZWZhdWx0JyB8fFxuICAgIGtleSA9PSAnZGVmZXInIHx8XG4gICAga2V5ID09ICdkaXNhYmxlZCcgfHxcbiAgICBrZXkgPT0gJ2Zvcm1ub3ZhbGlkYXRlJyB8fFxuICAgIGtleSA9PSAnaW5lcnQnIHx8XG4gICAga2V5ID09ICdpc21hcCcgfHxcbiAgICBrZXkgPT0gJ2l0ZW1zY29wZScgfHxcbiAgICBrZXkgPT0gJ2xvb3AnIHx8XG4gICAga2V5ID09ICdtdWx0aXBsZScgfHxcbiAgICBrZXkgPT0gJ211dGVkJyB8fFxuICAgIGtleSA9PSAnbm9tb2R1bGUnIHx8XG4gICAga2V5ID09ICdub3ZhbGlkYXRlJyB8fFxuICAgIGtleSA9PSAnb3BlbicgfHxcbiAgICBrZXkgPT0gJ3BsYXlzaW5saW5lJyB8fFxuICAgIGtleSA9PSAncmVhZG9ubHknIHx8XG4gICAga2V5ID09ICdyZXF1aXJlZCcgfHxcbiAgICBrZXkgPT0gJ3JldmVyc2VkJyB8fFxuICAgIGtleSA9PSAnc2VsZWN0ZWQnO1xuICByZXR1cm4gaXNCb29sZWFuICYmIGtleSBpbiBlbGVtZW50O1xufTtcblxuY29uc3QgcGFyc2VCb29sZWFuID0gKHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufTtcbiJdfQ==","/**\n * @file Cursor walker implementation for cursor-based scheduling.\n *\n *   Implements depth-first traversal of the vDOM tree, processing dirty vNodes and their children.\n *   Handles promise blocking, time-slicing, and cursor position tracking.\n */\nimport { isServerPlatform } from '../platform/platform';\nimport { qTest } from '../utils/qdev';\nimport { executeCleanup, executeComponentChore, executeCompute, executeErrorWrap, executeInlineComponentChore, executeNodeDiff, executeNodeProps, executeReconcile, executeTasks, } from './chore-execution';\nimport { addCursor, isCursor } from './cursor';\nimport { setCursorPosition, getCursorData } from './cursor-props';\nimport { getHighestPriorityCursor, pauseCursor, removeCursorFromQueue, resumeCursor, } from './cursor-queue';\nimport { executeFlushPhase } from './cursor-flush';\nimport { createMicroTask, createMacroTask } from '../platform/next-tick';\nimport { isPromise } from '../utils/promises';\nimport { assertDefined, assertFalse } from '../error/assert';\nimport { isDev, isServer } from '@qwik.dev/core/build';\nimport { QCursorBoundary } from '../utils/markers';\nimport { addCursorBoundary, clearNearestCursorBoundary, resolveCursorBoundaries, } from '../../use/use-cursor-boundary';\nconst DEBUG = false;\nconst nextMicroTask = createMicroTask(processCursorQueue);\nconst nextMacroTask = createMacroTask(processCursorQueue);\nlet isNextTickScheduled = false;\nexport function triggerCursors() {\n    if (!isNextTickScheduled) {\n        isNextTickScheduled = true;\n        nextMicroTask();\n    }\n}\n/** Schedule continuation as macrotask to yield to browser (for time-slicing) */\nfunction scheduleYield() {\n    if (!isNextTickScheduled) {\n        isNextTickScheduled = true;\n        nextMacroTask();\n    }\n}\n/**\n * Processes the cursor queue, walking each cursor in turn.\n *\n * @param options - Walk options (time budget, etc.)\n */\nexport function processCursorQueue() {\n    isNextTickScheduled = false;\n    const startTime = performance.now();\n    const yieldTime = startTime + 15; // 16 ms = 60 FPS, use 15 to yield slightly before next frame\n    let cursor = null;\n    while ((cursor = getHighestPriorityCursor())) {\n        if (walkCursor(cursor, yieldTime)) {\n            // Cursor overran time budget, yield to browser\n            // Note that each tick we process at least one thing\n            scheduleYield();\n            return;\n        }\n    }\n}\n/**\n * Walks a cursor through the vDOM tree, processing dirty vNodes in depth-first order.\n *\n * The walker:\n *\n * 1. Starts from the cursor root (or resumes from cursor position)\n * 2. Processes dirty vNodes using executeChoreSequence\n * 3. If the vNode is not dirty, moves to the next vNode\n * 4. If the vNode is dirty, executes the chores\n * 5. If the chore is a promise, pauses the cursor and resumes in next tick\n * 6. If the time budget is exceeded, pauses the cursor and resumes in next tick\n * 7. Updates cursor position as it walks\n *\n * Note that there is only one walker for all containers in the app with the same Qwik version.\n *\n * @param cursor - The cursor to walk\n * @param until - Time budget (timestamp to yield by)\n * @returns `true` if the walk was paused due to time budget (do not process more cursors in this\n *   tick)\n */\nexport function walkCursor(cursor, until) {\n    const isRunningOnServer = qTest ? isServerPlatform() : isServer;\n    const cursorData = getCursorData(cursor);\n    // Check if cursor is blocked by a promise\n    const blockingPromise = cursorData.promise;\n    if (blockingPromise) {\n        return;\n    }\n    const container = cursorData.container;\n    isDev && assertDefined(container, 'Cursor container not found');\n    // Check if cursor is already complete\n    if (!cursor.dirty) {\n        finishWalk(container, cursor, cursorData, isRunningOnServer);\n        return;\n    }\n    const journal = (cursorData.journal ||= []);\n    // Get starting position (resume from last position or start at root)\n    let currentVNode = null;\n    let count = 0;\n    while ((currentVNode = cursorData.position)) {\n        DEBUG && console.warn('walkCursor', currentVNode.toString());\n        if (DEBUG && count++ > 1000) {\n            throw new Error('Infinite loop detected in cursor walker');\n        }\n        if (cursorData.promise) {\n            return;\n        }\n        // Skip if the vNode is not dirty\n        if (!(currentVNode.dirty & 1023 /* ChoreBits.DIRTY_MASK */)) {\n            // Move to next node\n            __EXPERIMENTAL__.suspense && clearNearestCursorBoundary(currentVNode);\n            setCursorPosition(container, cursorData, getNextVNode(currentVNode, cursor, container));\n            continue;\n        }\n        // Skip if the vNode is deleted\n        if (currentVNode.flags & 32 /* VNodeFlags.Deleted */) {\n            // if deleted, run cleanup if needed\n            if (currentVNode.dirty & 128 /* ChoreBits.CLEANUP */) {\n                executeCleanup(currentVNode, container);\n            }\n            else if (currentVNode.dirty & 64 /* ChoreBits.CHILDREN */) {\n                const next = tryDescendDirtyChildren(container, cursorData, currentVNode, cursor);\n                if (next !== null) {\n                    currentVNode = next;\n                    continue;\n                }\n            }\n            // Clear dirty bits and move to next node\n            currentVNode.dirty &= ~1023 /* ChoreBits.DIRTY_MASK */;\n            setCursorPosition(container, cursorData, getNextVNode(currentVNode, cursor, container));\n            continue;\n        }\n        let result;\n        try {\n            // Execute chores in order\n            if (currentVNode.dirty & 1 /* ChoreBits.TASKS */) {\n                result = executeTasks(currentVNode, container, cursorData);\n            }\n            else if (currentVNode.dirty & 2 /* ChoreBits.NODE_DIFF */) {\n                result = executeNodeDiff(currentVNode, container, journal, cursor);\n            }\n            else if (currentVNode.dirty & 4 /* ChoreBits.COMPONENT */) {\n                result = executeComponentChore(currentVNode, container, journal, cursor);\n            }\n            else if (currentVNode.dirty & 8 /* ChoreBits.INLINE_COMPONENT */) {\n                result = executeInlineComponentChore(currentVNode, container, journal, cursor);\n            }\n            else if (currentVNode.dirty & 256 /* ChoreBits.RECONCILE */) {\n                result = executeReconcile(currentVNode, container, journal, cursor);\n            }\n            else if (currentVNode.dirty & 16 /* ChoreBits.NODE_PROPS */) {\n                executeNodeProps(currentVNode, journal);\n            }\n            else if (currentVNode.dirty & 32 /* ChoreBits.COMPUTE */) {\n                result = executeCompute(currentVNode, container);\n            }\n            else if (currentVNode.dirty & 64 /* ChoreBits.CHILDREN */) {\n                const next = tryDescendDirtyChildren(container, cursorData, currentVNode, cursor);\n                if (next !== null) {\n                    currentVNode = next;\n                    continue;\n                }\n            }\n            else if (currentVNode.dirty & 512 /* ChoreBits.ERROR_WRAP */) {\n                // Must run after CHILDREN so that all descendant chores (e.g. signal text\n                // NODE_DIFF updates) are flushed before we reparent children into the\n                // errored-host wrapper element.\n                executeErrorWrap(currentVNode, journal);\n            }\n        }\n        catch (error) {\n            container.handleError(error, currentVNode);\n        }\n        // Handle blocking promise\n        if (result && isPromise(result)) {\n            DEBUG && console.warn('walkCursor: blocking promise', currentVNode.toString());\n            addCursorBoundary(cursorData, currentVNode);\n            // Store promise on cursor and pause\n            const blockingPromise = result;\n            cursorData.promise = blockingPromise;\n            pauseCursor(cursor, container);\n            const host = currentVNode;\n            blockingPromise\n                .catch((error) => {\n                if (cursorData.promise === blockingPromise) {\n                    container.handleError(error, host);\n                }\n            })\n                .finally(() => {\n                if (cursorData.promise !== blockingPromise) {\n                    return;\n                }\n                cursorData.promise = null;\n                resumeCursor(cursor, container);\n                triggerCursors();\n            });\n            return;\n        }\n        // Check time budget (only for DOM, not SSR)\n        if (performance.now() >= until) {\n            return true;\n        }\n    }\n    isDev &&\n        assertFalse(!!(cursor.dirty & 1023 /* ChoreBits.DIRTY_MASK */ && !cursorData.position), 'Cursor is still dirty and position is not set after walking');\n    finishWalk(container, cursor, cursorData, isRunningOnServer);\n}\nfunction finishWalk(container, cursor, cursorData, isServer) {\n    if (!(cursor.dirty & 1023 /* ChoreBits.DIRTY_MASK */)) {\n        removeCursorFromQueue(cursor, container);\n        DEBUG && console.warn('walkCursor: cursor done', cursor.toString());\n        if (!isServer) {\n            executeFlushPhase(cursor, container);\n        }\n        resolveCursorBoundaries(cursorData);\n        if (cursorData.extraPromises) {\n            Promise.all(cursorData.extraPromises).then(() => {\n                resolveCursor(container);\n            });\n            return;\n        }\n        resolveCursor(container);\n    }\n}\nexport function resolveCursor(container) {\n    DEBUG && console.warn(`walkCursor: cursor resolved, ${container.$pendingCount$} remaining`);\n    container.$checkPendingCount$();\n}\n/**\n * If the vNode has dirty children, partitions them, sets cursor to first dirty child, and returns\n * that child. Otherwise clears CHILDREN bit and returns null.\n */\nexport function tryDescendDirtyChildren(container, cursorData, currentVNode, cursor) {\n    const dirtyChildren = currentVNode.dirtyChildren;\n    if (!dirtyChildren || dirtyChildren.length === 0) {\n        currentVNode.dirty &= ~64 /* ChoreBits.CHILDREN */;\n        clearNearestCursorBoundary(currentVNode);\n        return null;\n    }\n    partitionDirtyChildren(dirtyChildren, currentVNode);\n    currentVNode.nextDirtyChildIndex = 0;\n    const next = getNextVNode(dirtyChildren[0], cursor, container);\n    setCursorPosition(container, cursorData, next);\n    return next;\n}\n/**\n * Partitions dirtyChildren array so non-projections come first, projections last. Uses in-place\n * swapping to avoid allocations.\n */\nexport function partitionDirtyChildren(dirtyChildren, parent) {\n    let writeIndex = 0;\n    for (let readIndex = 0; readIndex < dirtyChildren.length; readIndex++) {\n        const child = dirtyChildren[readIndex];\n        if (child.parent === parent) {\n            // Non-projection, move to front\n            if (writeIndex !== readIndex) {\n                const temp = dirtyChildren[writeIndex];\n                dirtyChildren[writeIndex] = child;\n                dirtyChildren[readIndex] = temp;\n            }\n            writeIndex++;\n        }\n    }\n}\n/** @returns Next vNode to process, or null if traversal is complete */\nexport function getNextVNode(vNode, cursor, container) {\n    if (vNode === cursor) {\n        if (cursor.dirty & 1023 /* ChoreBits.DIRTY_MASK */) {\n            return cursor;\n        }\n        return null;\n    }\n    // Prefer slotParent (logical owner) for Projections, fall back to parent\n    let parent = null;\n    if (vNode.slotParent && vNode.slotParent.dirty & 64 /* ChoreBits.CHILDREN */) {\n        parent = vNode.slotParent;\n    }\n    else if (vNode.parent && vNode.parent.dirty & 64 /* ChoreBits.CHILDREN */) {\n        parent = vNode.parent;\n    }\n    if (!parent) {\n        if (cursor.dirty & 1023 /* ChoreBits.DIRTY_MASK */) {\n            return cursor;\n        }\n        return null;\n    }\n    const dirtyChildren = parent.dirtyChildren;\n    let index = parent.nextDirtyChildIndex;\n    const len = dirtyChildren.length;\n    let count = len;\n    while (count-- > 0) {\n        const nextVNode = dirtyChildren[index];\n        if (nextVNode.dirty & 1023 /* ChoreBits.DIRTY_MASK */) {\n            if (container && splitCursorBoundary(container, nextVNode)) {\n                index++;\n                if (index === len) {\n                    index = 0;\n                }\n                continue;\n            }\n            parent.nextDirtyChildIndex = (index + 1) % len;\n            return nextVNode;\n        }\n        index++;\n        if (index === len) {\n            index = 0;\n        }\n    }\n    // all array items checked, children are no longer dirty\n    parent.dirty &= ~64 /* ChoreBits.CHILDREN */;\n    parent.dirtyChildren = null;\n    parent.nextDirtyChildIndex = 0;\n    __EXPERIMENTAL__.suspense && clearNearestCursorBoundary(parent);\n    return getNextVNode(parent, cursor, container);\n}\nfunction splitCursorBoundary(container, vNode) {\n    if (!__EXPERIMENTAL__.suspense) {\n        return false;\n    }\n    if (!vNode.props ||\n        !(QCursorBoundary in vNode.props) ||\n        !container.getHostProp(vNode, QCursorBoundary)) {\n        return false;\n    }\n    if (!isCursor(vNode)) {\n        addCursor(container, vNode, 0);\n    }\n    return true;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLXdhbGtlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvY3Vyc29yL2N1cnNvci13YWxrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE9BQU8sRUFDTCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFlBQVksR0FDYixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFlLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkYsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFD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TyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUNoQyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksMEJBQTBCLENBQUMsTUFBTyxDQUFDLENBQUM7SUFDakUsT0FBTyxZQUFZLENBQUMsTUFBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxTQUFvQixFQUFFLEtBQVk7SUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQ0UsQ0FBQyxLQUFLLENBQUMsS0FBSztRQUNaLENBQUMsQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQWlCLEtBQVksRUFBRSxlQUFlLENBQUMsRUFDckUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZSBDdXJzb3Igd2Fsa2VyIGltcGxlbWVudGF0aW9uIGZvciBjdXJzb3ItYmFzZWQgc2NoZWR1bGluZy5cbiAqXG4gKiAgIEltcGxlbWVudHMgZGVwdGgtZmlyc3QgdHJhdmVyc2FsIG9mIHRoZSB2RE9NIHRyZWUsIHByb2Nlc3NpbmcgZGlydHkgdk5vZGVzIGFuZCB0aGVpciBjaGlsZHJlbi5cbiAqICAgSGFuZGxlcyBwcm9taXNlIGJsb2NraW5nLCB0aW1lLXNsaWNpbmcsIGFuZCBjdXJzb3IgcG9zaXRpb24gdHJhY2tpbmcuXG4gKi9cblxuaW1wb3J0IHsgaXNTZXJ2ZXJQbGF0Zm9ybSB9IGZyb20gJy4uL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vdm5vZGUvdm5vZGUnO1xuaW1wb3J0IHtcbiAgZXhlY3V0ZUNsZWFudXAsXG4gIGV4ZWN1dGVDb21wb25lbnRDaG9yZSxcbiAgZXhlY3V0ZUNvbXB1dGUsXG4gIGV4ZWN1dGVFcnJvcldyYXAsXG4gIGV4ZWN1dGVJbmxpbmVDb21wb25lbnRDaG9yZSxcbiAgZXhlY3V0ZU5vZGVEaWZmLFxuICBleGVjdXRlTm9kZVByb3BzLFxuICBleGVjdXRlUmVjb25jaWxlLFxuICBleGVjdXRlVGFza3MsXG59IGZyb20gJy4vY2hvcmUtZXhlY3V0aW9uJztcbmltcG9ydCB7IGFkZEN1cnNvciwgaXNDdXJzb3IsIHR5cGUgQ3Vyc29yIH0gZnJvbSAnLi9jdXJzb3InO1xuaW1wb3J0IHsgc2V0Q3Vyc29yUG9zaXRpb24sIGdldEN1cnNvckRhdGEsIHR5cGUgQ3Vyc29yRGF0YSB9IGZyb20gJy4vY3Vyc29yLXByb3BzJztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4uL3Zub2RlL2VudW1zL2Nob3JlLWJpdHMuZW51bSc7XG5pbXBvcnQge1xuICBnZXRIaWdoZXN0UHJpb3JpdHlDdXJzb3IsXG4gIHBhdXNlQ3Vyc29yLFxuICByZW1vdmVDdXJzb3JGcm9tUXVldWUsXG4gIHJlc3VtZUN1cnNvcixcbn0gZnJvbSAnLi9jdXJzb3ItcXVldWUnO1xuaW1wb3J0IHsgZXhlY3V0ZUZsdXNoUGhhc2UgfSBmcm9tICcuL2N1cnNvci1mbHVzaCc7XG5pbXBvcnQgeyBjcmVhdGVNaWNyb1Rhc2ssIGNyZWF0ZU1hY3JvVGFzayB9IGZyb20gJy4uL3BsYXRmb3JtL25leHQtdGljayc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCwgYXNzZXJ0RmFsc2UgfSBmcm9tICcuLi9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBWTm9kZUZsYWdzIH0gZnJvbSAnLi4vLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7IGlzRGV2LCBpc1NlcnZlciB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IFFDdXJzb3JCb3VuZGFyeSB9IGZyb20gJy4uL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHtcbiAgYWRkQ3Vyc29yQm91bmRhcnksXG4gIGNsZWFyTmVhcmVzdEN1cnNvckJvdW5kYXJ5LFxuICByZXNvbHZlQ3Vyc29yQm91bmRhcmllcyxcbiAgdHlwZSBDdXJzb3JCb3VuZGFyeSxcbn0gZnJvbSAnLi4vLi4vdXNlL3VzZS1jdXJzb3ItYm91bmRhcnknO1xuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuXG5jb25zdCBuZXh0TWljcm9UYXNrID0gY3JlYXRlTWljcm9UYXNrKHByb2Nlc3NDdXJzb3JRdWV1ZSk7XG5jb25zdCBuZXh0TWFjcm9UYXNrID0gY3JlYXRlTWFjcm9UYXNrKHByb2Nlc3NDdXJzb3JRdWV1ZSk7XG5sZXQgaXNOZXh0VGlja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckN1cnNvcnMoKTogdm9pZCB7XG4gIGlmICghaXNOZXh0VGlja1NjaGVkdWxlZCkge1xuICAgIGlzTmV4dFRpY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIG5leHRNaWNyb1Rhc2soKTtcbiAgfVxufVxuXG4vKiogU2NoZWR1bGUgY29udGludWF0aW9uIGFzIG1hY3JvdGFzayB0byB5aWVsZCB0byBicm93c2VyIChmb3IgdGltZS1zbGljaW5nKSAqL1xuZnVuY3Rpb24gc2NoZWR1bGVZaWVsZCgpOiB2b2lkIHtcbiAgaWYgKCFpc05leHRUaWNrU2NoZWR1bGVkKSB7XG4gICAgaXNOZXh0VGlja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgbmV4dE1hY3JvVGFzaygpO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBjdXJzb3IgcXVldWUsIHdhbGtpbmcgZWFjaCBjdXJzb3IgaW4gdHVybi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFdhbGsgb3B0aW9ucyAodGltZSBidWRnZXQsIGV0Yy4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ3Vyc29yUXVldWUoKTogdm9pZCB7XG4gIGlzTmV4dFRpY2tTY2hlZHVsZWQgPSBmYWxzZTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHlpZWxkVGltZSA9IHN0YXJ0VGltZSArIDE1OyAvLyAxNiBtcyA9IDYwIEZQUywgdXNlIDE1IHRvIHlpZWxkIHNsaWdodGx5IGJlZm9yZSBuZXh0IGZyYW1lXG5cbiAgbGV0IGN1cnNvcjogQ3Vyc29yIHwgbnVsbCA9IG51bGw7XG4gIHdoaWxlICgoY3Vyc29yID0gZ2V0SGlnaGVzdFByaW9yaXR5Q3Vyc29yKCkpKSB7XG4gICAgaWYgKHdhbGtDdXJzb3IoY3Vyc29yLCB5aWVsZFRpbWUpKSB7XG4gICAgICAvLyBDdXJzb3Igb3ZlcnJhbiB0aW1lIGJ1ZGdldCwgeWllbGQgdG8gYnJvd3NlclxuICAgICAgLy8gTm90ZSB0aGF0IGVhY2ggdGljayB3ZSBwcm9jZXNzIGF0IGxlYXN0IG9uZSB0aGluZ1xuICAgICAgc2NoZWR1bGVZaWVsZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFdhbGtzIGEgY3Vyc29yIHRocm91Z2ggdGhlIHZET00gdHJlZSwgcHJvY2Vzc2luZyBkaXJ0eSB2Tm9kZXMgaW4gZGVwdGgtZmlyc3Qgb3JkZXIuXG4gKlxuICogVGhlIHdhbGtlcjpcbiAqXG4gKiAxLiBTdGFydHMgZnJvbSB0aGUgY3Vyc29yIHJvb3QgKG9yIHJlc3VtZXMgZnJvbSBjdXJzb3IgcG9zaXRpb24pXG4gKiAyLiBQcm9jZXNzZXMgZGlydHkgdk5vZGVzIHVzaW5nIGV4ZWN1dGVDaG9yZVNlcXVlbmNlXG4gKiAzLiBJZiB0aGUgdk5vZGUgaXMgbm90IGRpcnR5LCBtb3ZlcyB0byB0aGUgbmV4dCB2Tm9kZVxuICogNC4gSWYgdGhlIHZOb2RlIGlzIGRpcnR5LCBleGVjdXRlcyB0aGUgY2hvcmVzXG4gKiA1LiBJZiB0aGUgY2hvcmUgaXMgYSBwcm9taXNlLCBwYXVzZXMgdGhlIGN1cnNvciBhbmQgcmVzdW1lcyBpbiBuZXh0IHRpY2tcbiAqIDYuIElmIHRoZSB0aW1lIGJ1ZGdldCBpcyBleGNlZWRlZCwgcGF1c2VzIHRoZSBjdXJzb3IgYW5kIHJlc3VtZXMgaW4gbmV4dCB0aWNrXG4gKiA3LiBVcGRhdGVzIGN1cnNvciBwb3NpdGlvbiBhcyBpdCB3YWxrc1xuICpcbiAqIE5vdGUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YWxrZXIgZm9yIGFsbCBjb250YWluZXJzIGluIHRoZSBhcHAgd2l0aCB0aGUgc2FtZSBRd2lrIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIGN1cnNvciAtIFRoZSBjdXJzb3IgdG8gd2Fsa1xuICogQHBhcmFtIHVudGlsIC0gVGltZSBidWRnZXQgKHRpbWVzdGFtcCB0byB5aWVsZCBieSlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgd2FsayB3YXMgcGF1c2VkIGR1ZSB0byB0aW1lIGJ1ZGdldCAoZG8gbm90IHByb2Nlc3MgbW9yZSBjdXJzb3JzIGluIHRoaXNcbiAqICAgdGljaylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhbGtDdXJzb3IoY3Vyc29yOiBDdXJzb3IsIHVudGlsOiBudW1iZXIpOiBib29sZWFuIHwgdm9pZCB7XG4gIGNvbnN0IGlzUnVubmluZ09uU2VydmVyID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcjtcblxuICBjb25zdCBjdXJzb3JEYXRhID0gZ2V0Q3Vyc29yRGF0YShjdXJzb3IpITtcblxuICAvLyBDaGVjayBpZiBjdXJzb3IgaXMgYmxvY2tlZCBieSBhIHByb21pc2VcbiAgY29uc3QgYmxvY2tpbmdQcm9taXNlID0gY3Vyc29yRGF0YS5wcm9taXNlO1xuICBpZiAoYmxvY2tpbmdQcm9taXNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gY3Vyc29yRGF0YS5jb250YWluZXI7XG4gIGlzRGV2ICYmIGFzc2VydERlZmluZWQoY29udGFpbmVyLCAnQ3Vyc29yIGNvbnRhaW5lciBub3QgZm91bmQnKTtcblxuICAvLyBDaGVjayBpZiBjdXJzb3IgaXMgYWxyZWFkeSBjb21wbGV0ZVxuICBpZiAoIWN1cnNvci5kaXJ0eSkge1xuICAgIGZpbmlzaFdhbGsoY29udGFpbmVyLCBjdXJzb3IsIGN1cnNvckRhdGEsIGlzUnVubmluZ09uU2VydmVyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBqb3VybmFsID0gKGN1cnNvckRhdGEuam91cm5hbCB8fD0gW10pO1xuXG4gIC8vIEdldCBzdGFydGluZyBwb3NpdGlvbiAocmVzdW1lIGZyb20gbGFzdCBwb3NpdGlvbiBvciBzdGFydCBhdCByb290KVxuICBsZXQgY3VycmVudFZOb2RlOiBWTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIGxldCBjb3VudCA9IDA7XG4gIHdoaWxlICgoY3VycmVudFZOb2RlID0gY3Vyc29yRGF0YS5wb3NpdGlvbikpIHtcbiAgICBERUJVRyAmJiBjb25zb2xlLndhcm4oJ3dhbGtDdXJzb3InLCBjdXJyZW50Vk5vZGUudG9TdHJpbmcoKSk7XG4gICAgaWYgKERFQlVHICYmIGNvdW50KysgPiAxMDAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGxvb3AgZGV0ZWN0ZWQgaW4gY3Vyc29yIHdhbGtlcicpO1xuICAgIH1cbiAgICBpZiAoY3Vyc29yRGF0YS5wcm9taXNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBpZiB0aGUgdk5vZGUgaXMgbm90IGRpcnR5XG4gICAgaWYgKCEoY3VycmVudFZOb2RlLmRpcnR5ICYgQ2hvcmVCaXRzLkRJUlRZX01BU0spKSB7XG4gICAgICAvLyBNb3ZlIHRvIG5leHQgbm9kZVxuICAgICAgX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSAmJiBjbGVhck5lYXJlc3RDdXJzb3JCb3VuZGFyeShjdXJyZW50Vk5vZGUpO1xuICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oY29udGFpbmVyLCBjdXJzb3JEYXRhLCBnZXROZXh0Vk5vZGUoY3VycmVudFZOb2RlLCBjdXJzb3IsIGNvbnRhaW5lcikpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gU2tpcCBpZiB0aGUgdk5vZGUgaXMgZGVsZXRlZFxuICAgIGlmIChjdXJyZW50Vk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLkRlbGV0ZWQpIHtcbiAgICAgIC8vIGlmIGRlbGV0ZWQsIHJ1biBjbGVhbnVwIGlmIG5lZWRlZFxuICAgICAgaWYgKGN1cnJlbnRWTm9kZS5kaXJ0eSAmIENob3JlQml0cy5DTEVBTlVQKSB7XG4gICAgICAgIGV4ZWN1dGVDbGVhbnVwKGN1cnJlbnRWTm9kZSwgY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZOb2RlLmRpcnR5ICYgQ2hvcmVCaXRzLkNISUxEUkVOKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0cnlEZXNjZW5kRGlydHlDaGlsZHJlbihjb250YWluZXIsIGN1cnNvckRhdGEsIGN1cnJlbnRWTm9kZSwgY3Vyc29yKTtcbiAgICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50Vk5vZGUgPSBuZXh0O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDbGVhciBkaXJ0eSBiaXRzIGFuZCBtb3ZlIHRvIG5leHQgbm9kZVxuICAgICAgY3VycmVudFZOb2RlLmRpcnR5ICY9IH5DaG9yZUJpdHMuRElSVFlfTUFTSztcbiAgICAgIHNldEN1cnNvclBvc2l0aW9uKGNvbnRhaW5lciwgY3Vyc29yRGF0YSwgZ2V0TmV4dFZOb2RlKGN1cnJlbnRWTm9kZSwgY3Vyc29yLCBjb250YWluZXIpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBFeGVjdXRlIGNob3JlcyBpbiBvcmRlclxuICAgICAgaWYgKGN1cnJlbnRWTm9kZS5kaXJ0eSAmIENob3JlQml0cy5UQVNLUykge1xuICAgICAgICByZXN1bHQgPSBleGVjdXRlVGFza3MoY3VycmVudFZOb2RlLCBjb250YWluZXIsIGN1cnNvckRhdGEpO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50Vk5vZGUuZGlydHkgJiBDaG9yZUJpdHMuTk9ERV9ESUZGKSB7XG4gICAgICAgIHJlc3VsdCA9IGV4ZWN1dGVOb2RlRGlmZihjdXJyZW50Vk5vZGUsIGNvbnRhaW5lciwgam91cm5hbCwgY3Vyc29yKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZOb2RlLmRpcnR5ICYgQ2hvcmVCaXRzLkNPTVBPTkVOVCkge1xuICAgICAgICByZXN1bHQgPSBleGVjdXRlQ29tcG9uZW50Q2hvcmUoY3VycmVudFZOb2RlLCBjb250YWluZXIsIGpvdXJuYWwsIGN1cnNvcik7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWTm9kZS5kaXJ0eSAmIENob3JlQml0cy5JTkxJTkVfQ09NUE9ORU5UKSB7XG4gICAgICAgIHJlc3VsdCA9IGV4ZWN1dGVJbmxpbmVDb21wb25lbnRDaG9yZShjdXJyZW50Vk5vZGUsIGNvbnRhaW5lciwgam91cm5hbCwgY3Vyc29yKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZOb2RlLmRpcnR5ICYgQ2hvcmVCaXRzLlJFQ09OQ0lMRSkge1xuICAgICAgICByZXN1bHQgPSBleGVjdXRlUmVjb25jaWxlKGN1cnJlbnRWTm9kZSwgY29udGFpbmVyLCBqb3VybmFsLCBjdXJzb3IpO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50Vk5vZGUuZGlydHkgJiBDaG9yZUJpdHMuTk9ERV9QUk9QUykge1xuICAgICAgICBleGVjdXRlTm9kZVByb3BzKGN1cnJlbnRWTm9kZSwgam91cm5hbCk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWTm9kZS5kaXJ0eSAmIENob3JlQml0cy5DT01QVVRFKSB7XG4gICAgICAgIHJlc3VsdCA9IGV4ZWN1dGVDb21wdXRlKGN1cnJlbnRWTm9kZSwgY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZOb2RlLmRpcnR5ICYgQ2hvcmVCaXRzLkNISUxEUkVOKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0cnlEZXNjZW5kRGlydHlDaGlsZHJlbihjb250YWluZXIsIGN1cnNvckRhdGEsIGN1cnJlbnRWTm9kZSwgY3Vyc29yKTtcbiAgICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50Vk5vZGUgPSBuZXh0O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWTm9kZS5kaXJ0eSAmIENob3JlQml0cy5FUlJPUl9XUkFQKSB7XG4gICAgICAgIC8vIE11c3QgcnVuIGFmdGVyIENISUxEUkVOIHNvIHRoYXQgYWxsIGRlc2NlbmRhbnQgY2hvcmVzIChlLmcuIHNpZ25hbCB0ZXh0XG4gICAgICAgIC8vIE5PREVfRElGRiB1cGRhdGVzKSBhcmUgZmx1c2hlZCBiZWZvcmUgd2UgcmVwYXJlbnQgY2hpbGRyZW4gaW50byB0aGVcbiAgICAgICAgLy8gZXJyb3JlZC1ob3N0IHdyYXBwZXIgZWxlbWVudC5cbiAgICAgICAgZXhlY3V0ZUVycm9yV3JhcChjdXJyZW50Vk5vZGUsIGpvdXJuYWwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb250YWluZXIuaGFuZGxlRXJyb3IoZXJyb3IsIGN1cnJlbnRWTm9kZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJsb2NraW5nIHByb21pc2VcbiAgICBpZiAocmVzdWx0ICYmIGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICBERUJVRyAmJiBjb25zb2xlLndhcm4oJ3dhbGtDdXJzb3I6IGJsb2NraW5nIHByb21pc2UnLCBjdXJyZW50Vk5vZGUudG9TdHJpbmcoKSk7XG4gICAgICBhZGRDdXJzb3JCb3VuZGFyeShjdXJzb3JEYXRhLCBjdXJyZW50Vk5vZGUpO1xuICAgICAgLy8gU3RvcmUgcHJvbWlzZSBvbiBjdXJzb3IgYW5kIHBhdXNlXG4gICAgICBjb25zdCBibG9ja2luZ1Byb21pc2UgPSByZXN1bHQ7XG4gICAgICBjdXJzb3JEYXRhLnByb21pc2UgPSBibG9ja2luZ1Byb21pc2U7XG4gICAgICBwYXVzZUN1cnNvcihjdXJzb3IsIGNvbnRhaW5lcik7XG5cbiAgICAgIGNvbnN0IGhvc3QgPSBjdXJyZW50Vk5vZGU7XG4gICAgICBibG9ja2luZ1Byb21pc2VcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChjdXJzb3JEYXRhLnByb21pc2UgPT09IGJsb2NraW5nUHJvbWlzZSkge1xuICAgICAgICAgICAgY29udGFpbmVyLmhhbmRsZUVycm9yKGVycm9yLCBob3N0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAoY3Vyc29yRGF0YS5wcm9taXNlICE9PSBibG9ja2luZ1Byb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3Vyc29yRGF0YS5wcm9taXNlID0gbnVsbDtcbiAgICAgICAgICByZXN1bWVDdXJzb3IoY3Vyc29yLCBjb250YWluZXIpO1xuICAgICAgICAgIHRyaWdnZXJDdXJzb3JzKCk7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIHRpbWUgYnVkZ2V0IChvbmx5IGZvciBET00sIG5vdCBTU1IpXG4gICAgaWYgKHBlcmZvcm1hbmNlLm5vdygpID49IHVudGlsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaXNEZXYgJiZcbiAgICBhc3NlcnRGYWxzZShcbiAgICAgICEhKGN1cnNvci5kaXJ0eSAmIENob3JlQml0cy5ESVJUWV9NQVNLICYmICFjdXJzb3JEYXRhLnBvc2l0aW9uKSxcbiAgICAgICdDdXJzb3IgaXMgc3RpbGwgZGlydHkgYW5kIHBvc2l0aW9uIGlzIG5vdCBzZXQgYWZ0ZXIgd2Fsa2luZydcbiAgICApO1xuICBmaW5pc2hXYWxrKGNvbnRhaW5lciwgY3Vyc29yLCBjdXJzb3JEYXRhLCBpc1J1bm5pbmdPblNlcnZlcik7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFdhbGsoXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICBjdXJzb3I6IEN1cnNvcixcbiAgY3Vyc29yRGF0YTogQ3Vyc29yRGF0YSxcbiAgaXNTZXJ2ZXI6IGJvb2xlYW5cbik6IHZvaWQge1xuICBpZiAoIShjdXJzb3IuZGlydHkgJiBDaG9yZUJpdHMuRElSVFlfTUFTSykpIHtcbiAgICByZW1vdmVDdXJzb3JGcm9tUXVldWUoY3Vyc29yLCBjb250YWluZXIpO1xuICAgIERFQlVHICYmIGNvbnNvbGUud2Fybignd2Fsa0N1cnNvcjogY3Vyc29yIGRvbmUnLCBjdXJzb3IudG9TdHJpbmcoKSk7XG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgZXhlY3V0ZUZsdXNoUGhhc2UoY3Vyc29yLCBjb250YWluZXIpO1xuICAgIH1cblxuICAgIHJlc29sdmVDdXJzb3JCb3VuZGFyaWVzKGN1cnNvckRhdGEpO1xuXG4gICAgaWYgKGN1cnNvckRhdGEuZXh0cmFQcm9taXNlcykge1xuICAgICAgUHJvbWlzZS5hbGwoY3Vyc29yRGF0YS5leHRyYVByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZUN1cnNvcihjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVzb2x2ZUN1cnNvcihjb250YWluZXIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ3Vyc29yKGNvbnRhaW5lcjogQ29udGFpbmVyKTogdm9pZCB7XG4gIERFQlVHICYmIGNvbnNvbGUud2Fybihgd2Fsa0N1cnNvcjogY3Vyc29yIHJlc29sdmVkLCAke2NvbnRhaW5lci4kcGVuZGluZ0NvdW50JH0gcmVtYWluaW5nYCk7XG4gIGNvbnRhaW5lci4kY2hlY2tQZW5kaW5nQ291bnQkKCk7XG59XG5cbi8qKlxuICogSWYgdGhlIHZOb2RlIGhhcyBkaXJ0eSBjaGlsZHJlbiwgcGFydGl0aW9ucyB0aGVtLCBzZXRzIGN1cnNvciB0byBmaXJzdCBkaXJ0eSBjaGlsZCwgYW5kIHJldHVybnNcbiAqIHRoYXQgY2hpbGQuIE90aGVyd2lzZSBjbGVhcnMgQ0hJTERSRU4gYml0IGFuZCByZXR1cm5zIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlEZXNjZW5kRGlydHlDaGlsZHJlbihcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGN1cnNvckRhdGE6IEN1cnNvckRhdGEsXG4gIGN1cnJlbnRWTm9kZTogVk5vZGUsXG4gIGN1cnNvcjogQ3Vyc29yXG4pOiBWTm9kZSB8IG51bGwge1xuICBjb25zdCBkaXJ0eUNoaWxkcmVuID0gY3VycmVudFZOb2RlLmRpcnR5Q2hpbGRyZW47XG4gIGlmICghZGlydHlDaGlsZHJlbiB8fCBkaXJ0eUNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgIGN1cnJlbnRWTm9kZS5kaXJ0eSAmPSB+Q2hvcmVCaXRzLkNISUxEUkVOO1xuICAgIGNsZWFyTmVhcmVzdEN1cnNvckJvdW5kYXJ5KGN1cnJlbnRWTm9kZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcGFydGl0aW9uRGlydHlDaGlsZHJlbihkaXJ0eUNoaWxkcmVuLCBjdXJyZW50Vk5vZGUpO1xuICBjdXJyZW50Vk5vZGUubmV4dERpcnR5Q2hpbGRJbmRleCA9IDA7XG4gIGNvbnN0IG5leHQgPSBnZXROZXh0Vk5vZGUoZGlydHlDaGlsZHJlblswXSwgY3Vyc29yLCBjb250YWluZXIpITtcbiAgc2V0Q3Vyc29yUG9zaXRpb24oY29udGFpbmVyLCBjdXJzb3JEYXRhLCBuZXh0KTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogUGFydGl0aW9ucyBkaXJ0eUNoaWxkcmVuIGFycmF5IHNvIG5vbi1wcm9qZWN0aW9ucyBjb21lIGZpcnN0LCBwcm9qZWN0aW9ucyBsYXN0LiBVc2VzIGluLXBsYWNlXG4gKiBzd2FwcGluZyB0byBhdm9pZCBhbGxvY2F0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpdGlvbkRpcnR5Q2hpbGRyZW4oZGlydHlDaGlsZHJlbjogVk5vZGVbXSwgcGFyZW50OiBWTm9kZSk6IHZvaWQge1xuICBsZXQgd3JpdGVJbmRleCA9IDA7XG4gIGZvciAobGV0IHJlYWRJbmRleCA9IDA7IHJlYWRJbmRleCA8IGRpcnR5Q2hpbGRyZW4ubGVuZ3RoOyByZWFkSW5kZXgrKykge1xuICAgIGNvbnN0IGNoaWxkID0gZGlydHlDaGlsZHJlbltyZWFkSW5kZXhdO1xuICAgIGlmIChjaGlsZC5wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgLy8gTm9uLXByb2plY3Rpb24sIG1vdmUgdG8gZnJvbnRcbiAgICAgIGlmICh3cml0ZUluZGV4ICE9PSByZWFkSW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IGRpcnR5Q2hpbGRyZW5bd3JpdGVJbmRleF07XG4gICAgICAgIGRpcnR5Q2hpbGRyZW5bd3JpdGVJbmRleF0gPSBjaGlsZDtcbiAgICAgICAgZGlydHlDaGlsZHJlbltyZWFkSW5kZXhdID0gdGVtcDtcbiAgICAgIH1cbiAgICAgIHdyaXRlSW5kZXgrKztcbiAgICB9XG4gIH1cbn1cblxuLyoqIEByZXR1cm5zIE5leHQgdk5vZGUgdG8gcHJvY2Vzcywgb3IgbnVsbCBpZiB0cmF2ZXJzYWwgaXMgY29tcGxldGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Vk5vZGUodk5vZGU6IFZOb2RlLCBjdXJzb3I6IEN1cnNvciwgY29udGFpbmVyPzogQ29udGFpbmVyKTogVk5vZGUgfCBudWxsIHtcbiAgaWYgKHZOb2RlID09PSBjdXJzb3IpIHtcbiAgICBpZiAoY3Vyc29yLmRpcnR5ICYgQ2hvcmVCaXRzLkRJUlRZX01BU0spIHtcbiAgICAgIHJldHVybiBjdXJzb3I7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIFByZWZlciBzbG90UGFyZW50IChsb2dpY2FsIG93bmVyKSBmb3IgUHJvamVjdGlvbnMsIGZhbGwgYmFjayB0byBwYXJlbnRcbiAgbGV0IHBhcmVudDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgaWYgKHZOb2RlLnNsb3RQYXJlbnQgJiYgdk5vZGUuc2xvdFBhcmVudC5kaXJ0eSAmIENob3JlQml0cy5DSElMRFJFTikge1xuICAgIHBhcmVudCA9IHZOb2RlLnNsb3RQYXJlbnQ7XG4gIH0gZWxzZSBpZiAodk5vZGUucGFyZW50ICYmIHZOb2RlLnBhcmVudC5kaXJ0eSAmIENob3JlQml0cy5DSElMRFJFTikge1xuICAgIHBhcmVudCA9IHZOb2RlLnBhcmVudDtcbiAgfVxuXG4gIGlmICghcGFyZW50KSB7XG4gICAgaWYgKGN1cnNvci5kaXJ0eSAmIENob3JlQml0cy5ESVJUWV9NQVNLKSB7XG4gICAgICByZXR1cm4gY3Vyc29yO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBkaXJ0eUNoaWxkcmVuID0gcGFyZW50LmRpcnR5Q2hpbGRyZW4hO1xuICBsZXQgaW5kZXggPSBwYXJlbnQubmV4dERpcnR5Q2hpbGRJbmRleDtcblxuICBjb25zdCBsZW4gPSBkaXJ0eUNoaWxkcmVuIS5sZW5ndGg7XG4gIGxldCBjb3VudCA9IGxlbjtcbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgY29uc3QgbmV4dFZOb2RlID0gZGlydHlDaGlsZHJlbltpbmRleF07XG4gICAgaWYgKG5leHRWTm9kZS5kaXJ0eSAmIENob3JlQml0cy5ESVJUWV9NQVNLKSB7XG4gICAgICBpZiAoY29udGFpbmVyICYmIHNwbGl0Q3Vyc29yQm91bmRhcnkoY29udGFpbmVyLCBuZXh0Vk5vZGUpKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGlmIChpbmRleCA9PT0gbGVuKSB7XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Lm5leHREaXJ0eUNoaWxkSW5kZXggPSAoaW5kZXggKyAxKSAlIGxlbjtcbiAgICAgIHJldHVybiBuZXh0Vk5vZGU7XG4gICAgfVxuICAgIGluZGV4Kys7XG4gICAgaWYgKGluZGV4ID09PSBsZW4pIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gIH1cbiAgLy8gYWxsIGFycmF5IGl0ZW1zIGNoZWNrZWQsIGNoaWxkcmVuIGFyZSBubyBsb25nZXIgZGlydHlcbiAgcGFyZW50IS5kaXJ0eSAmPSB+Q2hvcmVCaXRzLkNISUxEUkVOO1xuICBwYXJlbnQhLmRpcnR5Q2hpbGRyZW4gPSBudWxsO1xuICBwYXJlbnQhLm5leHREaXJ0eUNoaWxkSW5kZXggPSAwO1xuICBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIGNsZWFyTmVhcmVzdEN1cnNvckJvdW5kYXJ5KHBhcmVudCEpO1xuICByZXR1cm4gZ2V0TmV4dFZOb2RlKHBhcmVudCEsIGN1cnNvciwgY29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gc3BsaXRDdXJzb3JCb3VuZGFyeShjb250YWluZXI6IENvbnRhaW5lciwgdk5vZGU6IFZOb2RlKTogYm9vbGVhbiB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgIXZOb2RlLnByb3BzIHx8XG4gICAgIShRQ3Vyc29yQm91bmRhcnkgaW4gdk5vZGUucHJvcHMpIHx8XG4gICAgIWNvbnRhaW5lci5nZXRIb3N0UHJvcDxDdXJzb3JCb3VuZGFyeT4odk5vZGUgYXMgYW55LCBRQ3Vyc29yQm91bmRhcnkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNDdXJzb3Iodk5vZGUpKSB7XG4gICAgYWRkQ3Vyc29yKGNvbnRhaW5lciwgdk5vZGUsIDApO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19","import { setCursorData } from './cursor-props';\nimport { addCursorToQueue } from './cursor-queue';\nimport { triggerCursors } from './cursor-walker';\n/**\n * Adds a cursor to the given vNode (makes the vNode a cursor). Sets the cursor priority and\n * position to the root vNode itself.\n *\n * @param root - The vNode that will become the cursor root (dirty root)\n * @param priority - Priority level (lower = higher priority, 0 is default)\n * @returns The vNode itself, now acting as a cursor\n */\nexport function addCursor(container, root, priority) {\n    const cursorData = {\n        afterFlushTasks: null,\n        extraPromises: null,\n        journal: null,\n        container: container,\n        position: root,\n        priority: priority,\n        promise: null,\n        boundaries: null,\n    };\n    setCursorData(root, cursorData);\n    const cursor = root;\n    cursor.flags |= 256 /* VNodeFlags.Cursor */;\n    // Add cursor to global queue\n    addCursorToQueue(container, cursor);\n    triggerCursors();\n    return cursor;\n}\n/**\n * Checks if a vNode is a cursor (has CURSOR flag set).\n *\n * @param vNode - The vNode to check\n * @returns True if the vNode has the CURSOR flag set\n */\nexport function isCursor(vNode) {\n    return (vNode.flags & 256 /* VNodeFlags.Cursor */) !== 0;\n}\n/**\n * Checks if a cursor is complete (root vNode is clean). According to RFC section 3.2: \"when a\n * cursor finally marks its root vNode clean, that means the entire subtree is clean.\"\n *\n * @param cursor - The cursor to check\n * @returns True if the cursor's root vNode has no dirty bits\n */\nexport function isCursorComplete(cursor) {\n    return cursor.dirty === 0;\n}\n/**\n * Finds the root cursor for the given vNode.\n *\n * @param vNode - The vNode to find the cursor for\n * @returns The cursor that contains the vNode, or null if no cursor is found\n */\nexport function findCursor(vNode) {\n    while (vNode) {\n        if (isCursor(vNode)) {\n            return vNode;\n        }\n        vNode = vNode.parent || vNode.slotParent;\n    }\n    return null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9jdXJzb3IvY3Vyc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBVWpEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLFNBQW9CLEVBQUUsSUFBVyxFQUFFLFFBQWdCO0lBQzNFLE1BQU0sVUFBVSxHQUFlO1FBQzdCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLE9BQU8sRUFBRSxJQUFJO1FBQ2IsU0FBUyxFQUFFLFNBQVM7UUFDcEIsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVUsRUFBRSxJQUFJO0tBQ2pCLENBQUM7SUFFRixhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWhDLE1BQU0sTUFBTSxHQUFHLElBQWMsQ0FBQztJQUM5QixNQUFNLENBQUMsS0FBSywrQkFBcUIsQ0FBQztJQUNsQyw2QkFBNkI7SUFDN0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXBDLGNBQWMsRUFBRSxDQUFDO0lBRWpCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssOEJBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjO0lBQzdDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFZO0lBQ3JDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELEtBQUssR0FBSSxLQUFlLENBQUMsTUFBTSxJQUFLLEtBQWUsQ0FBQyxVQUFXLENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZOb2RlRmxhZ3MgfSBmcm9tICcuLi8uLi9jbGllbnQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vdm5vZGUvdm5vZGUnO1xuaW1wb3J0IHsgdHlwZSBDdXJzb3JEYXRhLCBzZXRDdXJzb3JEYXRhIH0gZnJvbSAnLi9jdXJzb3ItcHJvcHMnO1xuaW1wb3J0IHsgYWRkQ3Vyc29yVG9RdWV1ZSB9IGZyb20gJy4vY3Vyc29yLXF1ZXVlJztcbmltcG9ydCB7IHRyaWdnZXJDdXJzb3JzIH0gZnJvbSAnLi9jdXJzb3Itd2Fsa2VyJztcblxuLyoqXG4gKiBBIGN1cnNvciBpcyBhIHZOb2RlIHRoYXQgaGFzIHRoZSBDVVJTT1IgZmxhZyBzZXQgYW5kIHByaW9yaXR5IHN0b3JlZCBpbiBwcm9wcy5cbiAqXG4gKiBUaGUgY3Vyc29yIHJvb3QgaXMgdGhlIHZOb2RlIHdoZXJlIHRoZSBjdXJzb3Igd2FzIGNyZWF0ZWQgKHRoZSBkaXJ0eSByb290KS4gVGhlIGN1cnNvcidzIGN1cnJlbnRcbiAqIHBvc2l0aW9uIGlzIHRyYWNrZWQgaW4gdGhlIHZOb2RlJ3MgcHJvcHMuXG4gKi9cbmV4cG9ydCB0eXBlIEN1cnNvciA9IFZOb2RlO1xuXG4vKipcbiAqIEFkZHMgYSBjdXJzb3IgdG8gdGhlIGdpdmVuIHZOb2RlIChtYWtlcyB0aGUgdk5vZGUgYSBjdXJzb3IpLiBTZXRzIHRoZSBjdXJzb3IgcHJpb3JpdHkgYW5kXG4gKiBwb3NpdGlvbiB0byB0aGUgcm9vdCB2Tm9kZSBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHJvb3QgLSBUaGUgdk5vZGUgdGhhdCB3aWxsIGJlY29tZSB0aGUgY3Vyc29yIHJvb3QgKGRpcnR5IHJvb3QpXG4gKiBAcGFyYW0gcHJpb3JpdHkgLSBQcmlvcml0eSBsZXZlbCAobG93ZXIgPSBoaWdoZXIgcHJpb3JpdHksIDAgaXMgZGVmYXVsdClcbiAqIEByZXR1cm5zIFRoZSB2Tm9kZSBpdHNlbGYsIG5vdyBhY3RpbmcgYXMgYSBjdXJzb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEN1cnNvcihjb250YWluZXI6IENvbnRhaW5lciwgcm9vdDogVk5vZGUsIHByaW9yaXR5OiBudW1iZXIpOiBDdXJzb3Ige1xuICBjb25zdCBjdXJzb3JEYXRhOiBDdXJzb3JEYXRhID0ge1xuICAgIGFmdGVyRmx1c2hUYXNrczogbnVsbCxcbiAgICBleHRyYVByb21pc2VzOiBudWxsLFxuICAgIGpvdXJuYWw6IG51bGwsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgcG9zaXRpb246IHJvb3QsXG4gICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgIHByb21pc2U6IG51bGwsXG4gICAgYm91bmRhcmllczogbnVsbCxcbiAgfTtcblxuICBzZXRDdXJzb3JEYXRhKHJvb3QsIGN1cnNvckRhdGEpO1xuXG4gIGNvbnN0IGN1cnNvciA9IHJvb3QgYXMgQ3Vyc29yO1xuICBjdXJzb3IuZmxhZ3MgfD0gVk5vZGVGbGFncy5DdXJzb3I7XG4gIC8vIEFkZCBjdXJzb3IgdG8gZ2xvYmFsIHF1ZXVlXG4gIGFkZEN1cnNvclRvUXVldWUoY29udGFpbmVyLCBjdXJzb3IpO1xuXG4gIHRyaWdnZXJDdXJzb3JzKCk7XG5cbiAgcmV0dXJuIGN1cnNvcjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2Tm9kZSBpcyBhIGN1cnNvciAoaGFzIENVUlNPUiBmbGFnIHNldCkuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gVGhlIHZOb2RlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2Tm9kZSBoYXMgdGhlIENVUlNPUiBmbGFnIHNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJzb3Iodk5vZGU6IFZOb2RlKTogdk5vZGUgaXMgQ3Vyc29yIHtcbiAgcmV0dXJuICh2Tm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuQ3Vyc29yKSAhPT0gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjdXJzb3IgaXMgY29tcGxldGUgKHJvb3Qgdk5vZGUgaXMgY2xlYW4pLiBBY2NvcmRpbmcgdG8gUkZDIHNlY3Rpb24gMy4yOiBcIndoZW4gYVxuICogY3Vyc29yIGZpbmFsbHkgbWFya3MgaXRzIHJvb3Qgdk5vZGUgY2xlYW4sIHRoYXQgbWVhbnMgdGhlIGVudGlyZSBzdWJ0cmVlIGlzIGNsZWFuLlwiXG4gKlxuICogQHBhcmFtIGN1cnNvciAtIFRoZSBjdXJzb3IgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnNvcidzIHJvb3Qgdk5vZGUgaGFzIG5vIGRpcnR5IGJpdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ3Vyc29yQ29tcGxldGUoY3Vyc29yOiBDdXJzb3IpOiBib29sZWFuIHtcbiAgcmV0dXJuIGN1cnNvci5kaXJ0eSA9PT0gMDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBjdXJzb3IgZm9yIHRoZSBnaXZlbiB2Tm9kZS5cbiAqXG4gKiBAcGFyYW0gdk5vZGUgLSBUaGUgdk5vZGUgdG8gZmluZCB0aGUgY3Vyc29yIGZvclxuICogQHJldHVybnMgVGhlIGN1cnNvciB0aGF0IGNvbnRhaW5zIHRoZSB2Tm9kZSwgb3IgbnVsbCBpZiBubyBjdXJzb3IgaXMgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDdXJzb3Iodk5vZGU6IFZOb2RlKTogQ3Vyc29yIHwgbnVsbCB7XG4gIHdoaWxlICh2Tm9kZSkge1xuICAgIGlmIChpc0N1cnNvcih2Tm9kZSkpIHtcbiAgICAgIHJldHVybiB2Tm9kZTtcbiAgICB9XG4gICAgdk5vZGUgPSAodk5vZGUgYXMgVk5vZGUpLnBhcmVudCB8fCAodk5vZGUgYXMgVk5vZGUpLnNsb3RQYXJlbnQhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19","import { runTask, Task } from '../../use/use-task';\nimport { ELEMENT_PROPS, ELEMENT_SEQ } from '../utils/markers';\nimport { logWarn } from '../utils/log';\nimport { serializeAttribute } from '../utils/styles';\nimport { NODE_PROPS_DATA_KEY } from './cursor-props';\nimport { isSignal } from '../../reactive-primitives/signal.public';\nimport { executeCompute } from './chore-execution';\nimport { isPromise } from '../utils/promises';\nimport { _getProps } from '../jsx/props-proxy';\nimport { untrack } from '../../use/use-core';\nimport { isDev } from '@qwik.dev/core/build';\n/** @internal */\nexport function _executeSsrChores(container, ssrNode) {\n    if (!(ssrNode.flags & 1 /* SsrNodeFlags.Updatable */)) {\n        if (ssrNode.dirty & 16 /* ChoreBits.NODE_PROPS */) {\n            executeNodePropChore(container, ssrNode);\n        }\n        if (ssrNode.dirty & 32 /* ChoreBits.COMPUTE */) {\n            executeCompute(ssrNode, container);\n        }\n        if (isDev && ssrNode.dirty & 1023 /* ChoreBits.DIRTY_MASK */) {\n            // We are running on the server.\n            // On server we can't schedule task for a different host!\n            // Server is SSR, and therefore scheduling for anything but the current host\n            // implies that things need to be re-run and that is not supported because of streaming.\n            const warningMessage = `A chore was scheduled on a host element that has already been streamed to the client.\n        This can lead to inconsistencies between Server-Side Rendering (SSR) and Client-Side Rendering (CSR).\n        \n        Problematic chore:\n          - Host: ${ssrNode.toString()}\n          - Nearest element location: ${ssrNode.currentFile}\n        \n        This is often caused by modifying a signal in an already rendered component during SSR.`;\n            logWarn(warningMessage);\n        }\n        ssrNode.dirty &= ~1023 /* ChoreBits.DIRTY_MASK */;\n        return;\n    }\n    let promise = null;\n    if (ssrNode.dirty & 1 /* ChoreBits.TASKS */) {\n        const result = executeTasksChore(container, ssrNode);\n        if (isPromise(result)) {\n            promise = result;\n        }\n    }\n    if (ssrNode.dirty & 256 /* ChoreBits.RECONCILE */) {\n        const result = executeReconcileChore(container, ssrNode);\n        promise = promise ? promise.then(() => result) : result;\n    }\n    // In SSR, we don't handle the COMPONENT bit here.\n    // During initial render, if a task completes and marks the component dirty,\n    // we want to leave the COMPONENT bit set so that executeComponent can detect\n    // it after $waitOn$ completes and re-execute the component function.\n    // executeComponent will clear the bit after re-executing.\n    // Clear all dirty bits EXCEPT COMPONENT\n    ssrNode.dirty &= ~(1023 /* ChoreBits.DIRTY_MASK */ & ~4 /* ChoreBits.COMPONENT */);\n    if (promise) {\n        return promise;\n    }\n}\nfunction executeTasksChore(container, ssrNode) {\n    ssrNode.dirty &= ~1 /* ChoreBits.TASKS */;\n    const elementSeq = ssrNode.getProp(ELEMENT_SEQ);\n    if (!elementSeq || elementSeq.length === 0) {\n        // No tasks to execute, clear the bit\n        return null;\n    }\n    let promise = null;\n    for (let i = 0; i < elementSeq.length; i++) {\n        const item = elementSeq[i];\n        if (item instanceof Task) {\n            const task = item;\n            // Skip if task is not dirty\n            if (!(task.$flags$ & 4 /* TaskFlags.DIRTY */)) {\n                continue;\n            }\n            const result = runTask(task, container, ssrNode);\n            promise = promise ? promise.then(() => result) : result;\n        }\n    }\n    return promise;\n}\nexport function executeNodePropChore(container, ssrNode) {\n    ssrNode.dirty &= ~16 /* ChoreBits.NODE_PROPS */;\n    const allPropData = ssrNode.getProp(NODE_PROPS_DATA_KEY);\n    if (!allPropData || allPropData.size === 0) {\n        return;\n    }\n    for (const [property, nodeProp] of allPropData.entries()) {\n        let value = nodeProp.value;\n        if (isSignal(value)) {\n            // TODO: Handle async signals (promises) - need to track pending async prop data\n            value = value.value;\n        }\n        const serializedValue = serializeAttribute(property, value, nodeProp.scopedStyleIdPrefix);\n        container.addBackpatchEntry(ssrNode.id, property, serializedValue);\n    }\n}\nexport async function executeReconcileChore(container, ssrNode) {\n    ssrNode.dirty &= ~256 /* ChoreBits.RECONCILE */;\n    const host = ssrNode;\n    const props = container.getHostProp(host, ELEMENT_PROPS) || null;\n    if (!props) {\n        return;\n    }\n    let items = _getProps(props, 'items');\n    if (isSignal(items)) {\n        items = untrack(items);\n    }\n    const keyOf = (await _getProps(props, 'key$').resolve());\n    const itemFn = (await _getProps(props, 'item$').resolve());\n    const children = [];\n    for (let i = 0; i < items.length; i++) {\n        const item = items[i];\n        const jsx = itemFn(item, i);\n        const key = keyOf(item, i);\n        jsx.key = key;\n        children.push(jsx);\n    }\n    await container.renderJSX(children, {\n        currentStyleScoped: null,\n        parentComponentFrame: container.getComponentFrame(0),\n    });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWNob3JlLWV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvY3Vyc29yL3Nzci1jaG9yZS1leGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdDLGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFNBQXVCLEVBQ3ZCLE9BQWlCO0lBRWpCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLGlDQUF5QixDQUFDLEVBQUUsQ0FBQztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLGdDQUF1QixFQUFFLENBQUM7WUFDekMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLDZCQUFv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QztJQUM5RSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFVLENBQUM7SUFDbEMsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFDYixTQUFTLENBQUMsS0FBSyxFQUFFLE1BQXFDLENBR3ZELENBQUMsT0FBTyxFQUFFLENBQXlDLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUNkLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBc0MsQ0FHeEQsQ0FBQyxPQUFPLEVBQUUsQ0FBMEMsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBYyxFQUFFLENBQUM7SUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2QsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtRQUNsQyxrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7S0FDckQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSVNzck5vZGUsIFNTUkNvbnRhaW5lciB9IGZyb20gJy4uLy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHsgcnVuVGFzaywgVGFzaywgVGFza0ZsYWdzLCB0eXBlIFRhc2tGbiB9IGZyb20gJy4uLy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQgeyBTc3JOb2RlRmxhZ3MsIHR5cGUgQ29udGFpbmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRUxFTUVOVF9QUk9QUywgRUxFTUVOVF9TRVEgfSBmcm9tICcuLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVPclByb21pc2UgfSBmcm9tICcuLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBDaG9yZUJpdHMgfSBmcm9tICcuLi92bm9kZS9lbnVtcy9jaG9yZS1iaXRzLmVudW0nO1xuaW1wb3J0IHsgbG9nV2FybiB9IGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgeyBzZXJpYWxpemVBdHRyaWJ1dGUgfSBmcm9tICcuLi91dGlscy9zdHlsZXMnO1xuaW1wb3J0IHsgTk9ERV9QUk9QU19EQVRBX0tFWSB9IGZyb20gJy4vY3Vyc29yLXByb3BzJztcbmltcG9ydCB0eXBlIHsgTm9kZVByb3AgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB7IGlzU2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBleGVjdXRlQ29tcHV0ZSB9IGZyb20gJy4vY2hvcmUtZXhlY3V0aW9uJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IHR5cGUgUHJvcHMgfSBmcm9tICcuLi9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHR5cGUgeyBFYWNoUHJvcHMgfSBmcm9tICcuLi8uLi9jb250cm9sLWZsb3cvZWFjaCc7XG5pbXBvcnQgeyBfZ2V0UHJvcHMgfSBmcm9tICcuLi9qc3gvcHJvcHMtcHJveHknO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBKU1hOb2RlIH0gZnJvbSAnLi4vanN4L3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB7IF9qc3hTb3J0ZWQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyB1bnRyYWNrIH0gZnJvbSAnLi4vLi4vdXNlL3VzZS1jb3JlJztcbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gX2V4ZWN1dGVTc3JDaG9yZXMoXG4gIGNvbnRhaW5lcjogU1NSQ29udGFpbmVyLFxuICBzc3JOb2RlOiBJU3NyTm9kZVxuKTogVmFsdWVPclByb21pc2U8dm9pZD4ge1xuICBpZiAoIShzc3JOb2RlLmZsYWdzICYgU3NyTm9kZUZsYWdzLlVwZGF0YWJsZSkpIHtcbiAgICBpZiAoc3NyTm9kZS5kaXJ0eSAmIENob3JlQml0cy5OT0RFX1BST1BTKSB7XG4gICAgICBleGVjdXRlTm9kZVByb3BDaG9yZShjb250YWluZXIsIHNzck5vZGUpO1xuICAgIH1cbiAgICBpZiAoc3NyTm9kZS5kaXJ0eSAmIENob3JlQml0cy5DT01QVVRFKSB7XG4gICAgICBleGVjdXRlQ29tcHV0ZShzc3JOb2RlLCBjb250YWluZXIpO1xuICAgIH1cbiAgICBpZiAoaXNEZXYgJiYgc3NyTm9kZS5kaXJ0eSAmIENob3JlQml0cy5ESVJUWV9NQVNLKSB7XG4gICAgICAvLyBXZSBhcmUgcnVubmluZyBvbiB0aGUgc2VydmVyLlxuICAgICAgLy8gT24gc2VydmVyIHdlIGNhbid0IHNjaGVkdWxlIHRhc2sgZm9yIGEgZGlmZmVyZW50IGhvc3QhXG4gICAgICAvLyBTZXJ2ZXIgaXMgU1NSLCBhbmQgdGhlcmVmb3JlIHNjaGVkdWxpbmcgZm9yIGFueXRoaW5nIGJ1dCB0aGUgY3VycmVudCBob3N0XG4gICAgICAvLyBpbXBsaWVzIHRoYXQgdGhpbmdzIG5lZWQgdG8gYmUgcmUtcnVuIGFuZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSBvZiBzdHJlYW1pbmcuXG4gICAgICBjb25zdCB3YXJuaW5nTWVzc2FnZSA9IGBBIGNob3JlIHdhcyBzY2hlZHVsZWQgb24gYSBob3N0IGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHN0cmVhbWVkIHRvIHRoZSBjbGllbnQuXG4gICAgICAgIFRoaXMgY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gU2VydmVyLVNpZGUgUmVuZGVyaW5nIChTU1IpIGFuZCBDbGllbnQtU2lkZSBSZW5kZXJpbmcgKENTUikuXG4gICAgICAgIFxuICAgICAgICBQcm9ibGVtYXRpYyBjaG9yZTpcbiAgICAgICAgICAtIEhvc3Q6ICR7c3NyTm9kZS50b1N0cmluZygpfVxuICAgICAgICAgIC0gTmVhcmVzdCBlbGVtZW50IGxvY2F0aW9uOiAke3Nzck5vZGUuY3VycmVudEZpbGV9XG4gICAgICAgIFxuICAgICAgICBUaGlzIGlzIG9mdGVuIGNhdXNlZCBieSBtb2RpZnlpbmcgYSBzaWduYWwgaW4gYW4gYWxyZWFkeSByZW5kZXJlZCBjb21wb25lbnQgZHVyaW5nIFNTUi5gO1xuICAgICAgbG9nV2Fybih3YXJuaW5nTWVzc2FnZSk7XG4gICAgfVxuICAgIHNzck5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5ESVJUWV9NQVNLO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwcm9taXNlOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBpZiAoc3NyTm9kZS5kaXJ0eSAmIENob3JlQml0cy5UQVNLUykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dGVUYXNrc0Nob3JlKGNvbnRhaW5lciwgc3NyTm9kZSk7XG4gICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICBwcm9taXNlID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGlmIChzc3JOb2RlLmRpcnR5ICYgQ2hvcmVCaXRzLlJFQ09OQ0lMRSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dGVSZWNvbmNpbGVDaG9yZShjb250YWluZXIsIHNzck5vZGUpO1xuICAgIHByb21pc2UgPSBwcm9taXNlID8gcHJvbWlzZS50aGVuKCgpID0+IHJlc3VsdCkgOiByZXN1bHQ7XG4gIH1cblxuICAvLyBJbiBTU1IsIHdlIGRvbid0IGhhbmRsZSB0aGUgQ09NUE9ORU5UIGJpdCBoZXJlLlxuICAvLyBEdXJpbmcgaW5pdGlhbCByZW5kZXIsIGlmIGEgdGFzayBjb21wbGV0ZXMgYW5kIG1hcmtzIHRoZSBjb21wb25lbnQgZGlydHksXG4gIC8vIHdlIHdhbnQgdG8gbGVhdmUgdGhlIENPTVBPTkVOVCBiaXQgc2V0IHNvIHRoYXQgZXhlY3V0ZUNvbXBvbmVudCBjYW4gZGV0ZWN0XG4gIC8vIGl0IGFmdGVyICR3YWl0T24kIGNvbXBsZXRlcyBhbmQgcmUtZXhlY3V0ZSB0aGUgY29tcG9uZW50IGZ1bmN0aW9uLlxuICAvLyBleGVjdXRlQ29tcG9uZW50IHdpbGwgY2xlYXIgdGhlIGJpdCBhZnRlciByZS1leGVjdXRpbmcuXG5cbiAgLy8gQ2xlYXIgYWxsIGRpcnR5IGJpdHMgRVhDRVBUIENPTVBPTkVOVFxuICBzc3JOb2RlLmRpcnR5ICY9IH4oQ2hvcmVCaXRzLkRJUlRZX01BU0sgJiB+Q2hvcmVCaXRzLkNPTVBPTkVOVCk7XG5cbiAgaWYgKHByb21pc2UpIHtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleGVjdXRlVGFza3NDaG9yZShjb250YWluZXI6IENvbnRhaW5lciwgc3NyTm9kZTogSVNzck5vZGUpOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPiB8IG51bGwge1xuICBzc3JOb2RlLmRpcnR5ICY9IH5DaG9yZUJpdHMuVEFTS1M7XG4gIGNvbnN0IGVsZW1lbnRTZXEgPSBzc3JOb2RlLmdldFByb3AoRUxFTUVOVF9TRVEpO1xuICBpZiAoIWVsZW1lbnRTZXEgfHwgZWxlbWVudFNlcS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyB0YXNrcyB0byBleGVjdXRlLCBjbGVhciB0aGUgYml0XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbGV0IHByb21pc2U6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudFNlcS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50U2VxW2ldO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVGFzaykge1xuICAgICAgY29uc3QgdGFzayA9IGl0ZW0gYXMgVGFzazxUYXNrRm4sIFRhc2tGbj47XG5cbiAgICAgIC8vIFNraXAgaWYgdGFzayBpcyBub3QgZGlydHlcbiAgICAgIGlmICghKHRhc2suJGZsYWdzJCAmIFRhc2tGbGFncy5ESVJUWSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJ1blRhc2sodGFzaywgY29udGFpbmVyLCBzc3JOb2RlKTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlID8gcHJvbWlzZS50aGVuKCgpID0+IHJlc3VsdCBhcyBQcm9taXNlPHZvaWQ+KSA6IChyZXN1bHQgYXMgUHJvbWlzZTx2b2lkPik7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZU5vZGVQcm9wQ2hvcmUoY29udGFpbmVyOiBTU1JDb250YWluZXIsIHNzck5vZGU6IElTc3JOb2RlKTogdm9pZCB7XG4gIHNzck5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5OT0RFX1BST1BTO1xuXG4gIGNvbnN0IGFsbFByb3BEYXRhID0gc3NyTm9kZS5nZXRQcm9wKE5PREVfUFJPUFNfREFUQV9LRVkpIGFzIE1hcDxzdHJpbmcsIE5vZGVQcm9wPiB8IG51bGw7XG4gIGlmICghYWxsUHJvcERhdGEgfHwgYWxsUHJvcERhdGEuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3Byb3BlcnR5LCBub2RlUHJvcF0gb2YgYWxsUHJvcERhdGEuZW50cmllcygpKSB7XG4gICAgbGV0IHZhbHVlOiBTaWduYWw8YW55PiB8IHN0cmluZyA9IG5vZGVQcm9wLnZhbHVlO1xuICAgIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBhc3luYyBzaWduYWxzIChwcm9taXNlcykgLSBuZWVkIHRvIHRyYWNrIHBlbmRpbmcgYXN5bmMgcHJvcCBkYXRhXG4gICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlIGFzIGFueTtcbiAgICB9XG4gICAgY29uc3Qgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplQXR0cmlidXRlKHByb3BlcnR5LCB2YWx1ZSwgbm9kZVByb3Auc2NvcGVkU3R5bGVJZFByZWZpeCk7XG4gICAgY29udGFpbmVyLmFkZEJhY2twYXRjaEVudHJ5KHNzck5vZGUuaWQsIHByb3BlcnR5LCBzZXJpYWxpemVkVmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlUmVjb25jaWxlQ2hvcmUoXG4gIGNvbnRhaW5lcjogU1NSQ29udGFpbmVyLFxuICBzc3JOb2RlOiBJU3NyTm9kZVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHNzck5vZGUuZGlydHkgJj0gfkNob3JlQml0cy5SRUNPTkNJTEU7XG4gIGNvbnN0IGhvc3QgPSBzc3JOb2RlO1xuICBjb25zdCBwcm9wcyA9IGNvbnRhaW5lci5nZXRIb3N0UHJvcDxQcm9wcyB8IG51bGw+KGhvc3QsIEVMRU1FTlRfUFJPUFMpIHx8IG51bGw7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGl0ZW1zID0gX2dldFByb3BzKHByb3BzLCAnaXRlbXMnIHNhdGlzZmllcyBrZXlvZiBFYWNoUHJvcHM8YW55PikgYXMgYW55W107XG4gIGlmIChpc1NpZ25hbChpdGVtcykpIHtcbiAgICBpdGVtcyA9IHVudHJhY2soaXRlbXMpIGFzIGFueVtdO1xuICB9XG4gIGNvbnN0IGtleU9mID0gKGF3YWl0IChcbiAgICBfZ2V0UHJvcHMocHJvcHMsICdrZXkkJyBzYXRpc2ZpZXMga2V5b2YgRWFjaFByb3BzPGFueT4pIGFzIFFSTEludGVybmFsPFxuICAgICAgKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nXG4gICAgPlxuICApLnJlc29sdmUoKSkgYXMgKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nO1xuICBjb25zdCBpdGVtRm4gPSAoYXdhaXQgKFxuICAgIF9nZXRQcm9wcyhwcm9wcywgJ2l0ZW0kJyBzYXRpc2ZpZXMga2V5b2YgRWFjaFByb3BzPGFueT4pIGFzIFFSTEludGVybmFsPFxuICAgICAgKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gSlNYTm9kZVxuICAgID5cbiAgKS5yZXNvbHZlKCkpIGFzIChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IEpTWE5vZGU7XG4gIGNvbnN0IGNoaWxkcmVuOiBKU1hOb2RlW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICBjb25zdCBqc3ggPSBpdGVtRm4oaXRlbSwgaSkhO1xuICAgIGNvbnN0IGtleSA9IGtleU9mKGl0ZW0sIGkpO1xuICAgIGpzeC5rZXkgPSBrZXk7XG4gICAgY2hpbGRyZW4ucHVzaChqc3gpO1xuICB9XG4gIGF3YWl0IGNvbnRhaW5lci5yZW5kZXJKU1goY2hpbGRyZW4sIHtcbiAgICBjdXJyZW50U3R5bGVTY29wZWQ6IG51bGwsXG4gICAgcGFyZW50Q29tcG9uZW50RnJhbWU6IGNvbnRhaW5lci5nZXRDb21wb25lbnRGcmFtZSgwKSxcbiAgfSk7XG59XG4iXX0=","import { isServer } from '@qwik.dev/core/build';\nimport { qTest } from '../utils/qdev';\nimport { addCursor, findCursor, isCursor } from '../cursor/cursor';\nimport { getCursorData } from '../cursor/cursor-props';\nimport { _executeSsrChores } from '../cursor/ssr-chore-execution';\nimport { isServerPlatform } from '../platform/platform';\nimport { throwErrorAndStop } from '../utils/log';\nimport { isPromise } from '../utils/promises';\nimport { getNearestCursorBoundary, getOwnCursorBoundary, setNearestCursorBoundary, } from '../../use/use-cursor-boundary';\n/** Reusable path array to avoid allocations */\nconst reusablePath = [];\n/** Propagates CHILDREN dirty bits through the collected path up to the target ancestor */\nfunction propagatePath(target) {\n    for (let i = 0; i < reusablePath.length; i++) {\n        const child = reusablePath[i];\n        const parent = reusablePath[i + 1] || target;\n        parent.dirty |= 64 /* ChoreBits.CHILDREN */;\n        parent.dirtyChildren ||= [];\n        if (!parent.dirtyChildren.includes(child)) {\n            parent.dirtyChildren.push(child);\n        }\n    }\n}\n/**\n * Propagates dirty bits from vNode up to the specified cursorRoot. Used during diff when we know\n * the cursor root to merge with. Also updates cursor position if we pass through any cursors.\n */\nfunction propagateToCursorRoot(container, vNode, cursorRoot) {\n    reusablePath.push(vNode);\n    let cursorBoundary = getOwnCursorBoundary(container, vNode);\n    let current = vNode.slotParent || vNode.parent;\n    while (current) {\n        const isDirty = current.dirty & 1023 /* ChoreBits.DIRTY_MASK */;\n        const currentIsCursor = isCursor(current);\n        if (__EXPERIMENTAL__.suspense) {\n            cursorBoundary ||=\n                getOwnCursorBoundary(container, current) ||\n                    (isDirty ? getNearestCursorBoundary(container, current) : null);\n        }\n        // Stop when we reach the cursor root or a dirty ancestor\n        if (current === cursorRoot || isDirty) {\n            // Known cursor root / dirty ancestor case: cache the boundary discovered while walking\n            // before attaching this dirty vnode to the existing scheduled subtree.\n            setNearestCursorBoundary(vNode, cursorBoundary);\n            propagatePath(current);\n            // Update cursor position if current is a cursor\n            if (currentIsCursor) {\n                const cursorData = getCursorData(current);\n                if (cursorData.position !== current) {\n                    cursorData.position = vNode;\n                }\n            }\n            reusablePath.length = 0;\n            return;\n        }\n        // Update cursor position if we pass through a cursor on the way up\n        if (currentIsCursor) {\n            const cursorData = getCursorData(current);\n            if (cursorData.position !== current) {\n                cursorData.position = vNode;\n            }\n        }\n        reusablePath.push(current);\n        current = current.slotParent || current.parent;\n    }\n    reusablePath.length = 0;\n    throwErrorAndStop('Cursor root not found in current path!');\n}\n/**\n * Finds a blocking cursor or dirty ancestor and propagates dirty bits to it. Returns true if found\n * and attached, false if a new cursor should be created.\n */\nfunction findAndPropagateToBlockingCursor(container, vNode) {\n    reusablePath.push(vNode);\n    let cursorBoundary = __EXPERIMENTAL__.suspense\n        ? getOwnCursorBoundary(container, vNode)\n        : null;\n    let current = vNode.slotParent || vNode.parent;\n    while (current) {\n        const currentIsCursor = isCursor(current);\n        if (__EXPERIMENTAL__.suspense) {\n            cursorBoundary ||=\n                getOwnCursorBoundary(container, current) ||\n                    (currentIsCursor ? getNearestCursorBoundary(container, current) : null);\n        }\n        if (currentIsCursor) {\n            // Existing cursor case: attach this dirty vnode to the blocking cursor found above it and\n            // remember that cursor's nearest boundary for async/suspense bookkeeping.\n            setNearestCursorBoundary(vNode, cursorBoundary);\n            propagatePath(current);\n            reusablePath.length = 0;\n            return true;\n        }\n        reusablePath.push(current);\n        current = current.slotParent || current.parent;\n    }\n    // New cursor case: no blocking cursor was found above this vnode, so cache the nearest boundary\n    // before the caller creates a cursor rooted at this vnode.\n    setNearestCursorBoundary(vNode, cursorBoundary);\n    reusablePath.length = 0;\n    return false;\n}\nfunction isSsrNodeGuard(_vNode) {\n    return qTest ? isServerPlatform() : isServer;\n}\n/**\n * Marks a vNode as dirty and propagates dirty bits up the tree.\n *\n * @param container - The container\n * @param vNode - The vNode to mark dirty\n * @param bits - The dirty bits to set\n * @param cursorRoot - If provided, propagate dirty bits up to this cursor root (used during diff).\n *   If null, will search for a blocking cursor or create a new one.\n */\nexport function markVNodeDirty(container, vNode, bits, cursorRoot = null) {\n    const prevDirty = vNode.dirty;\n    vNode.dirty |= bits;\n    if (isSsrNodeGuard(vNode)) {\n        const result = _executeSsrChores(container, vNode);\n        if (isPromise(result)) {\n            container.$renderPromise$ = container.$renderPromise$\n                ? container.$renderPromise$.then(() => result)\n                : result;\n        }\n        return;\n    }\n    const isRealDirty = bits & 1023 /* ChoreBits.DIRTY_MASK */;\n    // If already dirty, no need to propagate again\n    if ((isRealDirty ? prevDirty & 1023 /* ChoreBits.DIRTY_MASK */ : prevDirty) || vNode === cursorRoot) {\n        return;\n    }\n    const parent = vNode.slotParent || vNode.parent;\n    // If cursorRoot is provided, propagate up to it\n    if (cursorRoot && isRealDirty && parent && !parent.dirty) {\n        propagateToCursorRoot(container, vNode, cursorRoot);\n        return;\n    }\n    // We must attach to a cursor subtree if it exists\n    if (parent && parent.dirty & 1023 /* ChoreBits.DIRTY_MASK */) {\n        // Dirty parent case: this vnode joins an already scheduled subtree, so inherit the parent's\n        // nearest boundary unless this vnode owns a boundary itself.\n        setNearestCursorBoundary(vNode, getOwnCursorBoundary(container, vNode) || getNearestCursorBoundary(container, parent));\n        if (isRealDirty) {\n            parent.dirty |= 64 /* ChoreBits.CHILDREN */;\n        }\n        parent.dirtyChildren ||= [];\n        if (!parent.dirtyChildren.includes(vNode)) {\n            parent.dirtyChildren.push(vNode);\n        }\n        if (isRealDirty && vNode.dirtyChildren) {\n            // this node is maybe an ancestor of the current cursor position\n            // if so we must restart from here\n            const cursor = findCursor(vNode);\n            if (cursor) {\n                const cursorData = getCursorData(cursor);\n                let cursorPosition = cursorData.position;\n                if (cursorPosition) {\n                    // find the ancestor of the cursor position that is current vNode\n                    while (cursorPosition !== cursor) {\n                        cursorPosition = cursorPosition.slotParent || cursorPosition.parent;\n                        if (cursorPosition === vNode) {\n                            // set cursor position to this node\n                            cursorData.position = vNode;\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    else if (!isCursor(vNode)) {\n        // Check if there's an existing cursor that is blocking (executing a render-blocking task)\n        // If so, merge with it instead of creating a new cursor (single-pass find + propagate)\n        if (!findAndPropagateToBlockingCursor(container, vNode)) {\n            // No blocking cursor found, create a new one\n            addCursor(container, vNode, 0);\n        }\n    }\n    else {\n        // Existing cursor-root case: the vnode is already the scheduled cursor, so only its own\n        // boundary can be authoritative here.\n        setNearestCursorBoundary(vNode, getOwnCursorBoundary(container, vNode));\n    }\n}\nexport function addVNodeOperation(journal, operation) {\n    journal.push(operation);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtZGlydHkuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3Zub2RlL3Zub2RlLWRpcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQix3QkFBd0IsR0FFekIsTUFBTSwrQkFBK0IsQ0FBQztBQUt2QywrQ0FBK0M7QUFDL0MsTUFBTSxZQUFZLEdBQVksRUFBRSxDQUFDO0FBRWpDLDBGQUEwRjtBQUMxRixTQUFTLGFBQWEsQ0FBQyxNQUFhO0lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxLQUFLLCtCQUFzQixDQUFDO1FBQ25D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S0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCw2Q0FBNkM7WUFDN0MsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sd0ZBQXdGO1FBQ3hGLHNDQUFzQztRQUN0Qyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBcUIsRUFBRSxTQUF5QjtJQUNoRixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5pbXBvcnQgeyB0eXBlIFZOb2RlSm91cm5hbCB9IGZyb20gJy4uLy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgdHlwZSB7IElTc3JOb2RlLCBTU1JDb250YWluZXIgfSBmcm9tICcuLi8uLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7IGFkZEN1cnNvciwgZmluZEN1cnNvciwgaXNDdXJzb3IgfSBmcm9tICcuLi9jdXJzb3IvY3Vyc29yJztcbmltcG9ydCB7IGdldEN1cnNvckRhdGEsIHR5cGUgQ3Vyc29yRGF0YSB9IGZyb20gJy4uL2N1cnNvci9jdXJzb3ItcHJvcHMnO1xuaW1wb3J0IHsgX2V4ZWN1dGVTc3JDaG9yZXMgfSBmcm9tICcuLi9jdXJzb3Ivc3NyLWNob3JlLWV4ZWN1dGlvbic7XG5pbXBvcnQgeyBpc1NlcnZlclBsYXRmb3JtIH0gZnJvbSAnLi4vcGxhdGZvcm0vcGxhdGZvcm0nO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyB0aHJvd0Vycm9yQW5kU3RvcCB9IGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBnZXROZWFyZXN0Q3Vyc29yQm91bmRhcnksXG4gIGdldE93bkN1cnNvckJvdW5kYXJ5LFxuICBzZXROZWFyZXN0Q3Vyc29yQm91bmRhcnksXG4gIHR5cGUgQ3Vyc29yQm91bmRhcnksXG59IGZyb20gJy4uLy4uL3VzZS91c2UtY3Vyc29yLWJvdW5kYXJ5JztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4vZW51bXMvY2hvcmUtYml0cy5lbnVtJztcbmltcG9ydCB0eXBlIHsgVk5vZGVPcGVyYXRpb24gfSBmcm9tICcuL3R5cGVzL2RvbS12bm9kZS1vcGVyYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4vdm5vZGUnO1xuXG4vKiogUmV1c2FibGUgcGF0aCBhcnJheSB0byBhdm9pZCBhbGxvY2F0aW9ucyAqL1xuY29uc3QgcmV1c2FibGVQYXRoOiBWTm9kZVtdID0gW107XG5cbi8qKiBQcm9wYWdhdGVzIENISUxEUkVOIGRpcnR5IGJpdHMgdGhyb3VnaCB0aGUgY29sbGVjdGVkIHBhdGggdXAgdG8gdGhlIHRhcmdldCBhbmNlc3RvciAqL1xuZnVuY3Rpb24gcHJvcGFnYXRlUGF0aCh0YXJnZXQ6IFZOb2RlKTogdm9pZCB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmV1c2FibGVQYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSByZXVzYWJsZVBhdGhbaV07XG4gICAgY29uc3QgcGFyZW50ID0gcmV1c2FibGVQYXRoW2kgKyAxXSB8fCB0YXJnZXQ7XG4gICAgcGFyZW50LmRpcnR5IHw9IENob3JlQml0cy5DSElMRFJFTjtcbiAgICBwYXJlbnQuZGlydHlDaGlsZHJlbiB8fD0gW107XG4gICAgaWYgKCFwYXJlbnQuZGlydHlDaGlsZHJlbi5pbmNsdWRlcyhjaGlsZCkpIHtcbiAgICAgIHBhcmVudC5kaXJ0eUNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BhZ2F0ZXMgZGlydHkgYml0cyBmcm9tIHZOb2RlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY3Vyc29yUm9vdC4gVXNlZCBkdXJpbmcgZGlmZiB3aGVuIHdlIGtub3dcbiAqIHRoZSBjdXJzb3Igcm9vdCB0byBtZXJnZSB3aXRoLiBBbHNvIHVwZGF0ZXMgY3Vyc29yIHBvc2l0aW9uIGlmIHdlIHBhc3MgdGhyb3VnaCBhbnkgY3Vyc29ycy5cbiAqL1xuZnVuY3Rpb24gcHJvcGFnYXRlVG9DdXJzb3JSb290KGNvbnRhaW5lcjogQ29udGFpbmVyLCB2Tm9kZTogVk5vZGUsIGN1cnNvclJvb3Q6IFZOb2RlKTogdm9pZCB7XG4gIHJldXNhYmxlUGF0aC5wdXNoKHZOb2RlKTtcbiAgbGV0IGN1cnNvckJvdW5kYXJ5ID0gZ2V0T3duQ3Vyc29yQm91bmRhcnkoY29udGFpbmVyLCB2Tm9kZSk7XG4gIGxldCBjdXJyZW50OiBWTm9kZSB8IG51bGwgPSB2Tm9kZS5zbG90UGFyZW50IHx8IHZOb2RlLnBhcmVudDtcblxuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGNvbnN0IGlzRGlydHkgPSBjdXJyZW50LmRpcnR5ICYgQ2hvcmVCaXRzLkRJUlRZX01BU0s7XG4gICAgY29uc3QgY3VycmVudElzQ3Vyc29yID0gaXNDdXJzb3IoY3VycmVudCk7XG4gICAgaWYgKF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICAgIGN1cnNvckJvdW5kYXJ5IHx8PVxuICAgICAgICBnZXRPd25DdXJzb3JCb3VuZGFyeShjb250YWluZXIsIGN1cnJlbnQpIHx8XG4gICAgICAgIChpc0RpcnR5ID8gZ2V0TmVhcmVzdEN1cnNvckJvdW5kYXJ5KGNvbnRhaW5lciwgY3VycmVudCkgOiBudWxsKTtcbiAgICB9XG5cbiAgICAvLyBTdG9wIHdoZW4gd2UgcmVhY2ggdGhlIGN1cnNvciByb290IG9yIGEgZGlydHkgYW5jZXN0b3JcbiAgICBpZiAoY3VycmVudCA9PT0gY3Vyc29yUm9vdCB8fCBpc0RpcnR5KSB7XG4gICAgICAvLyBLbm93biBjdXJzb3Igcm9vdCAvIGRpcnR5IGFuY2VzdG9yIGNhc2U6IGNhY2hlIHRoZSBib3VuZGFyeSBkaXNjb3ZlcmVkIHdoaWxlIHdhbGtpbmdcbiAgICAgIC8vIGJlZm9yZSBhdHRhY2hpbmcgdGhpcyBkaXJ0eSB2bm9kZSB0byB0aGUgZXhpc3Rpbmcgc2NoZWR1bGVkIHN1YnRyZWUuXG4gICAgICBzZXROZWFyZXN0Q3Vyc29yQm91bmRhcnkodk5vZGUsIGN1cnNvckJvdW5kYXJ5KTtcbiAgICAgIHByb3BhZ2F0ZVBhdGgoY3VycmVudCk7XG4gICAgICAvLyBVcGRhdGUgY3Vyc29yIHBvc2l0aW9uIGlmIGN1cnJlbnQgaXMgYSBjdXJzb3JcbiAgICAgIGlmIChjdXJyZW50SXNDdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY3Vyc29yRGF0YTogQ3Vyc29yRGF0YSA9IGdldEN1cnNvckRhdGEoY3VycmVudCkhO1xuICAgICAgICBpZiAoY3Vyc29yRGF0YS5wb3NpdGlvbiAhPT0gY3VycmVudCkge1xuICAgICAgICAgIGN1cnNvckRhdGEucG9zaXRpb24gPSB2Tm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV1c2FibGVQYXRoLmxlbmd0aCA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnNvciBwb3NpdGlvbiBpZiB3ZSBwYXNzIHRocm91Z2ggYSBjdXJzb3Igb24gdGhlIHdheSB1cFxuICAgIGlmIChjdXJyZW50SXNDdXJzb3IpIHtcbiAgICAgIGNvbnN0IGN1cnNvckRhdGE6IEN1cnNvckRhdGEgPSBnZXRDdXJzb3JEYXRhKGN1cnJlbnQpITtcbiAgICAgIGlmIChjdXJzb3JEYXRhLnBvc2l0aW9uICE9PSBjdXJyZW50KSB7XG4gICAgICAgIGN1cnNvckRhdGEucG9zaXRpb24gPSB2Tm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXVzYWJsZVBhdGgucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5zbG90UGFyZW50IHx8IGN1cnJlbnQucGFyZW50O1xuICB9XG4gIHJldXNhYmxlUGF0aC5sZW5ndGggPSAwO1xuICB0aHJvd0Vycm9yQW5kU3RvcCgnQ3Vyc29yIHJvb3Qgbm90IGZvdW5kIGluIGN1cnJlbnQgcGF0aCEnKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGJsb2NraW5nIGN1cnNvciBvciBkaXJ0eSBhbmNlc3RvciBhbmQgcHJvcGFnYXRlcyBkaXJ0eSBiaXRzIHRvIGl0LiBSZXR1cm5zIHRydWUgaWYgZm91bmRcbiAqIGFuZCBhdHRhY2hlZCwgZmFsc2UgaWYgYSBuZXcgY3Vyc29yIHNob3VsZCBiZSBjcmVhdGVkLlxuICovXG5mdW5jdGlvbiBmaW5kQW5kUHJvcGFnYXRlVG9CbG9ja2luZ0N1cnNvcihjb250YWluZXI6IENvbnRhaW5lciwgdk5vZGU6IFZOb2RlKTogYm9vbGVhbiB7XG4gIHJldXNhYmxlUGF0aC5wdXNoKHZOb2RlKTtcbiAgbGV0IGN1cnNvckJvdW5kYXJ5OiBDdXJzb3JCb3VuZGFyeSB8IG51bGwgPSBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlXG4gICAgPyBnZXRPd25DdXJzb3JCb3VuZGFyeShjb250YWluZXIsIHZOb2RlKVxuICAgIDogbnVsbDtcbiAgbGV0IGN1cnJlbnQ6IFZOb2RlIHwgbnVsbCA9IHZOb2RlLnNsb3RQYXJlbnQgfHwgdk5vZGUucGFyZW50O1xuXG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgY29uc3QgY3VycmVudElzQ3Vyc29yID0gaXNDdXJzb3IoY3VycmVudCk7XG4gICAgaWYgKF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICAgIGN1cnNvckJvdW5kYXJ5IHx8PVxuICAgICAgICBnZXRPd25DdXJzb3JCb3VuZGFyeShjb250YWluZXIsIGN1cnJlbnQpIHx8XG4gICAgICAgIChjdXJyZW50SXNDdXJzb3IgPyBnZXROZWFyZXN0Q3Vyc29yQm91bmRhcnkoY29udGFpbmVyLCBjdXJyZW50KSA6IG51bGwpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SXNDdXJzb3IpIHtcbiAgICAgIC8vIEV4aXN0aW5nIGN1cnNvciBjYXNlOiBhdHRhY2ggdGhpcyBkaXJ0eSB2bm9kZSB0byB0aGUgYmxvY2tpbmcgY3Vyc29yIGZvdW5kIGFib3ZlIGl0IGFuZFxuICAgICAgLy8gcmVtZW1iZXIgdGhhdCBjdXJzb3IncyBuZWFyZXN0IGJvdW5kYXJ5IGZvciBhc3luYy9zdXNwZW5zZSBib29ra2VlcGluZy5cbiAgICAgIHNldE5lYXJlc3RDdXJzb3JCb3VuZGFyeSh2Tm9kZSwgY3Vyc29yQm91bmRhcnkpO1xuICAgICAgcHJvcGFnYXRlUGF0aChjdXJyZW50KTtcbiAgICAgIHJldXNhYmxlUGF0aC5sZW5ndGggPSAwO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV1c2FibGVQYXRoLnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQuc2xvdFBhcmVudCB8fCBjdXJyZW50LnBhcmVudDtcbiAgfVxuICAvLyBOZXcgY3Vyc29yIGNhc2U6IG5vIGJsb2NraW5nIGN1cnNvciB3YXMgZm91bmQgYWJvdmUgdGhpcyB2bm9kZSwgc28gY2FjaGUgdGhlIG5lYXJlc3QgYm91bmRhcnlcbiAgLy8gYmVmb3JlIHRoZSBjYWxsZXIgY3JlYXRlcyBhIGN1cnNvciByb290ZWQgYXQgdGhpcyB2bm9kZS5cbiAgc2V0TmVhcmVzdEN1cnNvckJvdW5kYXJ5KHZOb2RlLCBjdXJzb3JCb3VuZGFyeSk7XG4gIHJldXNhYmxlUGF0aC5sZW5ndGggPSAwO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3NyTm9kZUd1YXJkKF92Tm9kZTogVk5vZGUgfCBJU3NyTm9kZSk6IF92Tm9kZSBpcyBJU3NyTm9kZSB7XG4gIHJldHVybiBxVGVzdCA/IGlzU2VydmVyUGxhdGZvcm0oKSA6IGlzU2VydmVyO1xufVxuLyoqXG4gKiBNYXJrcyBhIHZOb2RlIGFzIGRpcnR5IGFuZCBwcm9wYWdhdGVzIGRpcnR5IGJpdHMgdXAgdGhlIHRyZWUuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciAtIFRoZSBjb250YWluZXJcbiAqIEBwYXJhbSB2Tm9kZSAtIFRoZSB2Tm9kZSB0byBtYXJrIGRpcnR5XG4gKiBAcGFyYW0gYml0cyAtIFRoZSBkaXJ0eSBiaXRzIHRvIHNldFxuICogQHBhcmFtIGN1cnNvclJvb3QgLSBJZiBwcm92aWRlZCwgcHJvcGFnYXRlIGRpcnR5IGJpdHMgdXAgdG8gdGhpcyBjdXJzb3Igcm9vdCAodXNlZCBkdXJpbmcgZGlmZikuXG4gKiAgIElmIG51bGwsIHdpbGwgc2VhcmNoIGZvciBhIGJsb2NraW5nIGN1cnNvciBvciBjcmVhdGUgYSBuZXcgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya1ZOb2RlRGlydHkoXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICB2Tm9kZTogVk5vZGUgfCBJU3NyTm9kZSxcbiAgYml0czogQ2hvcmVCaXRzLFxuICBjdXJzb3JSb290OiBWTm9kZSB8IG51bGwgPSBudWxsXG4pOiB2b2lkIHtcbiAgY29uc3QgcHJldkRpcnR5ID0gdk5vZGUuZGlydHk7XG4gIHZOb2RlLmRpcnR5IHw9IGJpdHM7XG4gIGlmIChpc1Nzck5vZGVHdWFyZCh2Tm9kZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBfZXhlY3V0ZVNzckNob3Jlcyhjb250YWluZXIgYXMgU1NSQ29udGFpbmVyLCB2Tm9kZSBhcyBJU3NyTm9kZSk7XG4gICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICBjb250YWluZXIuJHJlbmRlclByb21pc2UkID0gY29udGFpbmVyLiRyZW5kZXJQcm9taXNlJFxuICAgICAgICA/IGNvbnRhaW5lci4kcmVuZGVyUHJvbWlzZSQudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgIDogcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNSZWFsRGlydHkgPSBiaXRzICYgQ2hvcmVCaXRzLkRJUlRZX01BU0s7XG4gIC8vIElmIGFscmVhZHkgZGlydHksIG5vIG5lZWQgdG8gcHJvcGFnYXRlIGFnYWluXG4gIGlmICgoaXNSZWFsRGlydHkgPyBwcmV2RGlydHkgJiBDaG9yZUJpdHMuRElSVFlfTUFTSyA6IHByZXZEaXJ0eSkgfHwgdk5vZGUgPT09IGN1cnNvclJvb3QpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFyZW50ID0gdk5vZGUuc2xvdFBhcmVudCB8fCB2Tm9kZS5wYXJlbnQ7XG5cbiAgLy8gSWYgY3Vyc29yUm9vdCBpcyBwcm92aWRlZCwgcHJvcGFnYXRlIHVwIHRvIGl0XG4gIGlmIChjdXJzb3JSb290ICYmIGlzUmVhbERpcnR5ICYmIHBhcmVudCAmJiAhcGFyZW50LmRpcnR5KSB7XG4gICAgcHJvcGFnYXRlVG9DdXJzb3JSb290KGNvbnRhaW5lciwgdk5vZGUsIGN1cnNvclJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdlIG11c3QgYXR0YWNoIHRvIGEgY3Vyc29yIHN1YnRyZWUgaWYgaXQgZXhpc3RzXG4gIGlmIChwYXJlbnQgJiYgcGFyZW50LmRpcnR5ICYgQ2hvcmVCaXRzLkRJUlRZX01BU0spIHtcbiAgICAvLyBEaXJ0eSBwYXJlbnQgY2FzZTogdGhpcyB2bm9kZSBqb2lucyBhbiBhbHJlYWR5IHNjaGVkdWxlZCBzdWJ0cmVlLCBzbyBpbmhlcml0IHRoZSBwYXJlbnQnc1xuICAgIC8vIG5lYXJlc3QgYm91bmRhcnkgdW5sZXNzIHRoaXMgdm5vZGUgb3ducyBhIGJvdW5kYXJ5IGl0c2VsZi5cbiAgICBzZXROZWFyZXN0Q3Vyc29yQm91bmRhcnkoXG4gICAgICB2Tm9kZSxcbiAgICAgIGdldE93bkN1cnNvckJvdW5kYXJ5KGNvbnRhaW5lciwgdk5vZGUpIHx8IGdldE5lYXJlc3RDdXJzb3JCb3VuZGFyeShjb250YWluZXIsIHBhcmVudClcbiAgICApO1xuICAgIGlmIChpc1JlYWxEaXJ0eSkge1xuICAgICAgcGFyZW50LmRpcnR5IHw9IENob3JlQml0cy5DSElMRFJFTjtcbiAgICB9XG4gICAgcGFyZW50LmRpcnR5Q2hpbGRyZW4gfHw9IFtdO1xuICAgIGlmICghcGFyZW50LmRpcnR5Q2hpbGRyZW4uaW5jbHVkZXModk5vZGUpKSB7XG4gICAgICBwYXJlbnQuZGlydHlDaGlsZHJlbi5wdXNoKHZOb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNSZWFsRGlydHkgJiYgdk5vZGUuZGlydHlDaGlsZHJlbikge1xuICAgICAgLy8gdGhpcyBub2RlIGlzIG1heWJlIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxuICAgICAgLy8gaWYgc28gd2UgbXVzdCByZXN0YXJ0IGZyb20gaGVyZVxuICAgICAgY29uc3QgY3Vyc29yID0gZmluZEN1cnNvcih2Tm9kZSk7XG4gICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGN1cnNvckRhdGEgPSBnZXRDdXJzb3JEYXRhKGN1cnNvcikhO1xuICAgICAgICBsZXQgY3Vyc29yUG9zaXRpb24gPSBjdXJzb3JEYXRhLnBvc2l0aW9uO1xuICAgICAgICBpZiAoY3Vyc29yUG9zaXRpb24pIHtcbiAgICAgICAgICAvLyBmaW5kIHRoZSBhbmNlc3RvciBvZiB0aGUgY3Vyc29yIHBvc2l0aW9uIHRoYXQgaXMgY3VycmVudCB2Tm9kZVxuICAgICAgICAgIHdoaWxlIChjdXJzb3JQb3NpdGlvbiAhPT0gY3Vyc29yKSB7XG4gICAgICAgICAgICBjdXJzb3JQb3NpdGlvbiA9IGN1cnNvclBvc2l0aW9uLnNsb3RQYXJlbnQgfHwgY3Vyc29yUG9zaXRpb24ucGFyZW50ITtcbiAgICAgICAgICAgIGlmIChjdXJzb3JQb3NpdGlvbiA9PT0gdk5vZGUpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGN1cnNvciBwb3NpdGlvbiB0byB0aGlzIG5vZGVcbiAgICAgICAgICAgICAgY3Vyc29yRGF0YS5wb3NpdGlvbiA9IHZOb2RlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWlzQ3Vyc29yKHZOb2RlKSkge1xuICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgY3Vyc29yIHRoYXQgaXMgYmxvY2tpbmcgKGV4ZWN1dGluZyBhIHJlbmRlci1ibG9ja2luZyB0YXNrKVxuICAgIC8vIElmIHNvLCBtZXJnZSB3aXRoIGl0IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgY3Vyc29yIChzaW5nbGUtcGFzcyBmaW5kICsgcHJvcGFnYXRlKVxuICAgIGlmICghZmluZEFuZFByb3BhZ2F0ZVRvQmxvY2tpbmdDdXJzb3IoY29udGFpbmVyLCB2Tm9kZSkpIHtcbiAgICAgIC8vIE5vIGJsb2NraW5nIGN1cnNvciBmb3VuZCwgY3JlYXRlIGEgbmV3IG9uZVxuICAgICAgYWRkQ3Vyc29yKGNvbnRhaW5lciwgdk5vZGUsIDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBFeGlzdGluZyBjdXJzb3Itcm9vdCBjYXNlOiB0aGUgdm5vZGUgaXMgYWxyZWFkeSB0aGUgc2NoZWR1bGVkIGN1cnNvciwgc28gb25seSBpdHMgb3duXG4gICAgLy8gYm91bmRhcnkgY2FuIGJlIGF1dGhvcml0YXRpdmUgaGVyZS5cbiAgICBzZXROZWFyZXN0Q3Vyc29yQm91bmRhcnkodk5vZGUsIGdldE93bkN1cnNvckJvdW5kYXJ5KGNvbnRhaW5lciwgdk5vZGUpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkVk5vZGVPcGVyYXRpb24oam91cm5hbDogVk5vZGVKb3VybmFsLCBvcGVyYXRpb246IFZOb2RlT3BlcmF0aW9uKTogdm9pZCB7XG4gIGpvdXJuYWwucHVzaChvcGVyYXRpb24pO1xufVxuIl19","export const fastGetter = (prototype, name) => {\n    let getter;\n    while (prototype && !(getter = Object.getOwnPropertyDescriptor(prototype, name)?.get)) {\n        prototype = Object.getPrototypeOf(prototype);\n    }\n    return (getter ||\n        function () {\n            return this[name];\n        });\n};\n/**\n * Creates a cached fast property accessor by pulling the native getter from the prototype chain.\n * The getter is resolved lazily on the first call and then reused, bypassing prototype lookups on\n * every subsequent access.\n */\nexport const createFastGetter = (propName) => {\n    let getter = null;\n    return (node) => {\n        if (!getter) {\n            getter = fastGetter(node, propName);\n        }\n        return getter.call(node);\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG90eXBlLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC9wcm90b3R5cGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUksU0FBYyxFQUFFLElBQVksRUFBSyxFQUFFO0lBQy9ELElBQUksTUFBVyxDQUFDO0lBQ2hCLE9BQU8sU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RGLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPLENBQ0wsTUFBTTtRQUNOO1lBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBeUIsUUFBZ0IsRUFBdUIsRUFBRTtJQUNoRyxJQUFJLE1BQU0sR0FBK0IsSUFBSSxDQUFDO0lBQzlDLE9BQU8sQ0FBQyxJQUFVLEVBQUssRUFBRTtRQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsVUFBVSxDQUFvQixJQUFJLEVBQUUsUUFBUSxDQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZmFzdEdldHRlciA9IDxUPihwcm90b3R5cGU6IGFueSwgbmFtZTogc3RyaW5nKTogVCA9PiB7XG4gIGxldCBnZXR0ZXI6IGFueTtcbiAgd2hpbGUgKHByb3RvdHlwZSAmJiAhKGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG90eXBlLCBuYW1lKT8uZ2V0KSkge1xuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICB9XG4gIHJldHVybiAoXG4gICAgZ2V0dGVyIHx8XG4gICAgZnVuY3Rpb24gKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXNbbmFtZV07XG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2FjaGVkIGZhc3QgcHJvcGVydHkgYWNjZXNzb3IgYnkgcHVsbGluZyB0aGUgbmF0aXZlIGdldHRlciBmcm9tIHRoZSBwcm90b3R5cGUgY2hhaW4uXG4gKiBUaGUgZ2V0dGVyIGlzIHJlc29sdmVkIGxhemlseSBvbiB0aGUgZmlyc3QgY2FsbCBhbmQgdGhlbiByZXVzZWQsIGJ5cGFzc2luZyBwcm90b3R5cGUgbG9va3VwcyBvblxuICogZXZlcnkgc3Vic2VxdWVudCBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGYXN0R2V0dGVyID0gPFRoaXMgZXh0ZW5kcyBvYmplY3QsIFI+KHByb3BOYW1lOiBzdHJpbmcpOiAoKG5vZGU6IFRoaXMpID0+IFIpID0+IHtcbiAgbGV0IGdldHRlcjogKCh0aGlzOiBUaGlzKSA9PiBSKSB8IG51bGwgPSBudWxsO1xuICByZXR1cm4gKG5vZGU6IFRoaXMpOiBSID0+IHtcbiAgICBpZiAoIWdldHRlcikge1xuICAgICAgZ2V0dGVyID0gZmFzdEdldHRlcjwodGhpczogVGhpcykgPT4gUj4obm9kZSwgcHJvcE5hbWUpITtcbiAgICB9XG4gICAgcmV0dXJuIGdldHRlci5jYWxsKG5vZGUpO1xuICB9O1xufTtcbiJdfQ==","/**\n * @file\n *\n *   VNode is a DOM like API for walking the DOM but it:\n *\n *   1. Encodes virtual nodes which don't exist in the DOM\n *   2. Can serialize as part of SSR and than deserialize on the client.\n *\n *   # Virtual\n *\n *   You can think of a Virtual node just like an additional `<div>` in that it groups related child\n *   nodes together. But unlike a `<div>` which has a real DOM node and hence implications for CSS,\n *   Virtual nodes have no DOM impact, they are invisible.\n *\n *   # Portal\n *\n *   Two Virtual nodes can be linked together to form a Portal. Portals are useful for projecting\n *   content or just rendering content in a different location in the tree, while maintaining a\n *   logical relationship.\n *\n *   Portals have:\n *\n *   - Portal Source: A Virtual node which can refer to one ore more Destination Portals by name.\n *   - Destination Portal: A Virtual node which acts as a destination but also has a pointer back to the\n *       Portal Source\n *\n *   ## Example:\n *\n *   Given this code:\n *\n *   ```typescript\n *   const Parent = component$(() => {\n *     return (\n *       <Child>\n *         Projection Content\n *         <span q:slot=\"secondary\">Secondary Content</span>\n *         <span q:slot=\"other\">Other Content</span>\n *       </Child>\n *     };\n *   });\n *\n *   const Child = component$(() => {\n *     return (\n *       <div>\n *         <Slot>Default Primary</Slot>\n *         <Slot name=\"secondary\">Default Secondary</Slot>\n *       </div>\n *     );\n *   });\n *\n *   render(<body><main><Parent/></main><body>);\n * ```\n *\n *   Will render like so:\n *\n *   ```html\n *   <body>\n *     <main>\n *       <Virtual Parent q:portal=\":3A;secondary:3B;other:5A\" q:id=\"2A\">\n *         <Virtual Child>\n *           <div>\n *             <Virtual Slot q:id=\"3A\" q:portal=\"^:2A;:3A\"> Projection Content </Virtual>\n *             <Virtual Slot q:id=\"3B\" q:portal=\"^:2A;:3B\">\n *               <span q:slot=\"secondary\">Secondary Content</span>\n *             </Virtual>\n *           </div>\n *         </Virtual>\n *       </Virtual>\n *     </main>\n *     <q:template>\n *       <Virtual q:portal=\"^:2A\" q:id=\"5A\">\n *         <span q:slot=\"other\">Other Content</span>\n *       </Virtual>\n *       <Virtual q:portal=\"^:2A\" q:id=\"3A\">\n *         Default Primary\n *       </Virtual>\n *       <Virtual q:portal=\"^:2A\" q:id=\"3B\">\n *         Default Secondary\n *       </Virtual>\n *     <q:template>\n *   </body>\n * ```\n *\n *   Explanation:\n *\n *   - `q:portal=\":3A;secondary:3B;other:5A\"`\n *\n *       - Name: ``; Ref: `3A` - Where the default content went.\n *       - Name: `secondary`; Ref: `3B` - Where the 'secondary' content went.\n *       - Name: `other`; Ref: `%A` - Where the `other` content went. (Notice in this case the content is\n *               left over and os it ends up en the `q:templates`. We can share one '<q:template>`\n *               for all left over content.)\n *   - `q:portal=\"^:2A;:3A\"`\n *\n *       - Name: `^`; Ref: `2A` - Special pointer to the parent portal\n *       - Name: ``; Ref: `3A` - Location of the default content in case there is nothing projected here.\n *\n *   ## Rendering\n *\n *   During SSR, the rendered can delay rendering the JSX nodes until correct portal comes up. The ID\n *   system is already can make lazy references to the Nodes.\n *\n *   Client side rendering does not need to deal with IDs or `<q:template>` as un-rendered vNodes do\n *   not need to be serialized into DOM, and can remain on heap.\n *\n *   ## Context\n *\n *   When looking up context it is possible to follow you real render parents or follow the portals.\n *   All information is encoded in the portals.\n *\n *   ## Slot Projection\n *\n *   The ultimate user of portals is Slot projection. But the vNode do not understand slots, rather\n *   they understand portal primitives which makes Slot implementation much simpler.\n *\n *   NOTE: The portals need to have IDs during serialization only. Once runtime takes over, there is\n *   no need to have IDs or to write overflow to the `<q:template>`\n */\nimport { isDev } from '@qwik.dev/core/build';\nimport { qTest } from '../shared/utils/qdev';\nimport { qwikDebugToString } from '../debug';\nimport { assertDefined, assertEqual, assertFalse, assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { DEBUG_TYPE, VirtualTypeName, } from '../shared/types';\nimport { isText } from '../shared/utils/element';\nimport { dangerouslySetInnerHTML, debugStyleScopeIdPrefixAttr, ELEMENT_ID, ELEMENT_PROPS, ELEMENT_SEQ, ELEMENT_SEQ_IDX, ITERATION_ITEM_MULTI, ITERATION_ITEM_SINGLE, OnRenderProp, Q_PROPS_SEPARATOR, QContainerAttr, QContainerAttrEnd, QContainerIsland, QContainerIslandEnd, QCtxAttr, QIgnore, QIgnoreEnd, QScopedStyle, QSlot, QStyle, QSuspenseResolved, QSuspenseResultParent, QTargetElement, } from '../shared/utils/markers';\nimport { isHtmlElement } from '../shared/utils/types';\nimport { VNodeDataChar } from '../shared/vnode-data-types';\nimport { _getQContainerElement, getDomContainer, getDomContainerFromQContainerElement, } from './dom-container';\nimport { getNewElementNamespaceData, vnode_cloneElementWithNamespace, vnode_getElementNamespaceFlags, } from './vnode-namespace';\nimport { mergeMaps } from '../shared/utils/maps';\nimport { isHtmlAttributeAnEventName } from '../shared/utils/event-names';\nimport { VNode } from '../shared/vnode/vnode';\nimport { ElementVNode } from '../shared/vnode/element-vnode';\nimport { TextVNode } from '../shared/vnode/text-vnode';\nimport { VirtualVNode } from '../shared/vnode/virtual-vnode';\nimport { addVNodeOperation } from '../shared/vnode/vnode-dirty';\nimport { createDeleteOperation, createInsertOrMoveOperation, createRemoveAllChildrenOperation, createSetAttributeOperation, createSetTextOperation, DeleteOperation, InsertOrMoveOperation, RemoveAllChildrenOperation, SetAttributeOperation, SetTextOperation, } from '../shared/vnode/types/dom-vnode-operation';\nimport { isCursor } from '../shared/cursor/cursor';\nimport { _EFFECT_BACK_REF } from '../reactive-primitives/backref';\nimport { _flushJournal } from '../shared/cursor/cursor-flush';\nimport { createFastGetter, fastGetter } from './prototype-utils';\nimport { decodeVNodeDataString } from '../shared/utils/character-escaping';\nimport { isQrl } from '../shared/qrl/qrl-utils';\nimport { parseQRL } from '../shared/serdes/index';\nimport { runEventHandlerQRL } from './run-qrl';\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_newElement = (element, elementName, key = null) => {\n    isDev && assertEqual(fastNodeType(element), 1 /* ELEMENT_NODE */, 'Expecting element node.');\n    const vnode = new ElementVNode(key, 1 /* VNodeFlags.Element */ | 8 /* VNodeFlags.Inflated */ | (-1 << 12 /* VNodeFlagsIndex.shift */), // Flag\n    null, null, null, null, null, null, element, elementName);\n    element.vNode = vnode;\n    return vnode;\n};\nexport const vnode_newUnMaterializedElement = (element) => {\n    isDev && assertEqual(fastNodeType(element), 1 /* ELEMENT_NODE */, 'Expecting element node.');\n    const vnode = new ElementVNode(null, 1 /* VNodeFlags.Element */ | (-1 << 12 /* VNodeFlagsIndex.shift */), // Flag\n    null, null, null, null, undefined, undefined, element, undefined);\n    element.vNode = vnode;\n    return vnode;\n};\nexport const vnode_newSharedText = (previousTextNode, sharedTextNode, textContent) => {\n    isDev &&\n        sharedTextNode &&\n        assertEqual(fastNodeType(sharedTextNode), 3 /* TEXT_NODE */, 'Expecting text node.');\n    const vnode = new TextVNode(4 /* VNodeFlags.Text */ | (-1 << 12 /* VNodeFlagsIndex.shift */), // Flag\n    null, // Parent\n    previousTextNode, // Previous TextNode (usually first child)\n    null, // Next sibling\n    null, sharedTextNode, textContent);\n    return vnode;\n};\nexport const vnode_newText = (textNode, textContent) => {\n    const vnode = new TextVNode(4 /* VNodeFlags.Text */ | 8 /* VNodeFlags.Inflated */ | (-1 << 12 /* VNodeFlagsIndex.shift */), // Flags\n    null, // Parent\n    null, // No previous sibling\n    null, // We may have a next sibling.\n    null, textNode, // TextNode\n    textContent // Text Content\n    );\n    isDev && assertEqual(fastNodeType(textNode), 3 /* TEXT_NODE */, 'Expecting text node.');\n    isDev && assertFalse(vnode_isElementVNode(vnode), 'Incorrect format of TextVNode.');\n    isDev && assertTrue(vnode_isTextVNode(vnode), 'Incorrect format of TextVNode.');\n    isDev && assertFalse(vnode_isVirtualVNode(vnode), 'Incorrect format of TextVNode.');\n    return vnode;\n};\n/** @internal */\nexport const vnode_newVirtual = () => {\n    const vnode = new VirtualVNode(null, 2 /* VNodeFlags.Virtual */ | (-1 << 12 /* VNodeFlagsIndex.shift */), // Flags\n    null, null, null, null, null, null);\n    isDev && assertFalse(vnode_isElementVNode(vnode), 'Incorrect format of TextVNode.');\n    isDev && assertFalse(vnode_isTextVNode(vnode), 'Incorrect format of TextVNode.');\n    isDev && assertTrue(vnode_isVirtualVNode(vnode), 'Incorrect format of TextVNode.');\n    return vnode;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_isVNode = (vNode) => {\n    return vNode instanceof VNode;\n};\n/** @internal */\nexport const vnode_isElementVNode = (vNode) => {\n    return (vNode.flags & 1 /* VNodeFlags.Element */) === 1 /* VNodeFlags.Element */;\n};\nexport const vnode_isElementOrTextVNode = (vNode) => {\n    isDev && assertDefined(vNode, 'Missing vNode');\n    const flag = vNode.flags;\n    return (flag & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */) !== 0;\n};\nexport const vnode_isElementOrVirtualVNode = (vNode) => {\n    isDev && assertDefined(vNode, 'Missing vNode');\n    const flag = vNode.flags;\n    return (flag & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0;\n};\n/** @internal */\nexport const vnode_isMaterialized = (vNode) => {\n    isDev && assertDefined(vNode, 'Missing vNode');\n    const flag = vNode.flags;\n    return ((flag & 1 /* VNodeFlags.Element */) === 1 /* VNodeFlags.Element */ &&\n        vNode.firstChild !== undefined &&\n        vNode.lastChild !== undefined);\n};\n/** @internal */\nexport const vnode_isTextVNode = (vNode) => {\n    return (vNode.flags & 4 /* VNodeFlags.Text */) === 4 /* VNodeFlags.Text */;\n};\n/** @internal */\nexport const vnode_isVirtualVNode = (vNode) => {\n    return (vNode.flags & 2 /* VNodeFlags.Virtual */) === 2 /* VNodeFlags.Virtual */;\n};\nexport const vnode_isProjection = (vNode) => {\n    isDev && assertDefined(vNode, 'Missing vNode');\n    const flag = vNode.flags;\n    return ((flag & 2 /* VNodeFlags.Virtual */) === 2 /* VNodeFlags.Virtual */ && vnode_getProp(vNode, QSlot, null) !== null);\n};\nconst ensureTextVNode = (vNode) => {\n    isDev &&\n        assertTrue(vnode_isTextVNode(vNode), 'Expecting TextVNode was: ' + vnode_getNodeTypeName(vNode));\n    return vNode;\n};\nconst ensureElementOrVirtualVNode = (vNode) => {\n    isDev && assertDefined(vNode, 'Missing vNode');\n    isDev &&\n        assertTrue((vNode.flags & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0, 'Expecting ElementVNode or VirtualVNode was: ' + vnode_getNodeTypeName(vNode));\n};\nexport const ensureElementVNode = (vNode) => {\n    isDev &&\n        assertTrue(vnode_isElementVNode(vNode), 'Expecting ElementVNode was: ' + vnode_getNodeTypeName(vNode));\n    return vNode;\n};\nexport const vnode_getNodeTypeName = (vNode) => {\n    if (vNode) {\n        const flags = vNode.flags;\n        switch (flags & 7 /* VNodeFlags.TYPE_MASK */) {\n            case 1 /* VNodeFlags.Element */:\n                return 'Element';\n            case 2 /* VNodeFlags.Virtual */:\n                return 'Virtual';\n            case 4 /* VNodeFlags.Text */:\n                return 'Text';\n        }\n    }\n    return '<unknown>';\n};\n/** @internal */\nexport const vnode_getProp = (vNode, key, getObject) => {\n    if (vnode_isElementVNode(vNode) || vnode_isVirtualVNode(vNode)) {\n        const value = vNode.props?.[key] ?? null;\n        if (typeof value === 'string' && getObject) {\n            const result = getObject(value);\n            vNode.props[key] = result;\n            return result;\n        }\n        return value;\n    }\n    return null;\n};\n/** @internal */\nexport const vnode_setProp = (vNode, key, value) => {\n    if (value == null && vNode.props) {\n        delete vNode.props[key];\n    }\n    else {\n        vNode.props ||= {};\n        vNode.props[key] = value;\n    }\n};\nexport const vnode_setAttr = (journal, vNode, key, value, scopedStyleIdPrefix = null) => {\n    if (vnode_isElementVNode(vNode)) {\n        qTest &&\n            scopedStyleIdPrefix &&\n            vnode_setProp(vNode, debugStyleScopeIdPrefixAttr, scopedStyleIdPrefix);\n        vnode_setProp(vNode, key, value);\n        addVNodeOperation(journal, createSetAttributeOperation(vNode.node, key, value, scopedStyleIdPrefix, (vNode.flags & 512 /* VNodeFlags.NS_svg */) !== 0));\n    }\n};\nexport const vnode_ensureElementKeyInflated = (vnode) => {\n    if (vnode.key) {\n        return;\n    }\n    const value = fastGetAttribute(vnode.node, Q_PROPS_SEPARATOR);\n    if (value) {\n        vnode.key = value;\n    }\n};\n/** @internal */\nexport const vnode_ensureElementInflated = (container, vnode) => {\n    if ((vnode.flags & 15 /* VNodeFlags.INFLATED_TYPE_MASK */) === 1 /* VNodeFlags.Element */) {\n        const elementVNode = vnode;\n        elementVNode.flags ^= 8 /* VNodeFlags.Inflated */;\n        const element = elementVNode.node;\n        const attributes = element.attributes;\n        let isConst = false;\n        for (let idx = 0; idx < attributes.length; idx++) {\n            const attr = attributes[idx];\n            const key = attr.name;\n            // We need to grab all handlers, even const ones, because as soon as qDispatch exists, qwikloader will use it\n            if (isHtmlAttributeAnEventName(key)) {\n                registerQrlHandlers(attr, key, container, element);\n                continue;\n            }\n            if (isConst) {\n                // Do nothing, we're only interested in recovering event handlers from the const attributes.\n            }\n            else if (key === Q_PROPS_SEPARATOR || !key) {\n                // SVG in Domino does not support ':' so it becomes an empty string.\n                // all attributes after the ':' are considered immutable, and so we ignore them.\n                const value = attr.value;\n                if (value) {\n                    // don't assign empty string as a key\n                    elementVNode.key = value;\n                }\n                isConst = true;\n            }\n            else if (key.startsWith(QContainerAttr)) {\n                const value = attr.value;\n                if (value === \"html\" /* QContainerValue.HTML */) {\n                    vnode_setProp(elementVNode, 'dangerouslySetInnerHTML', element.innerHTML);\n                }\n                else if (value === \"text\" /* QContainerValue.TEXT */ && 'value' in element) {\n                    vnode_setProp(elementVNode, 'value', element.value);\n                }\n            }\n            else {\n                const value = attr.value;\n                vnode_setProp(elementVNode, key, value);\n            }\n        }\n        if (vnode_getProp(elementVNode, ITERATION_ITEM_SINGLE, null) !== null ||\n            vnode_getProp(elementVNode, ITERATION_ITEM_MULTI, null) !== null) {\n            vnode.flags |= 64 /* VNodeFlags.HasIterationItems */;\n        }\n    }\n};\nconst unwrapEventHandlerQrl = (handler) => {\n    if (handler.$symbol$ === '_run') {\n        const innerHandler = handler.getCaptured()?.[0];\n        if (isQrl(innerHandler)) {\n            return innerHandler;\n        }\n    }\n    return handler;\n};\nfunction registerQrlHandlers(attr, key, container, element) {\n    const value = attr.value;\n    const scopedKebabName = key.slice(2);\n    const qrls = value.split('|');\n    const handlers = [];\n    for (let i = 0; i < qrls.length; i++) {\n        const handler = unwrapEventHandlerQrl(parseQRL(qrls[i], container));\n        // These QRLs are mostly _run and _task and don't need wrapping with retryOnPromise\n        handlers.push(runEventHandlerQRL.bind(null, handler));\n    }\n    (element._qDispatch ||= {})[scopedKebabName] = handlers.length === 1 ? handlers[0] : handlers;\n}\n/** Walks the direct children of a parent node and calls the callback for each child. */\nexport function vnode_walkDirectChildren(journal, vParent, callback) {\n    let vNode = vnode_getFirstChild(vParent);\n    while (vNode) {\n        if (vnode_isTextVNode(vNode)) {\n            vnode_ensureTextInflated(journal, vNode);\n            callback(vNode, vParent);\n        }\n        else if (vnode_isElementVNode(vNode)) {\n            callback(vNode, vParent);\n        }\n        else {\n            // for virtual nodes, we need to walk their children\n            vnode_walkDirectChildren(journal, vNode, callback);\n        }\n        vNode = vNode.nextSibling;\n    }\n}\n/** Walks the VNode tree and materialize it using `vnode_getFirstChild`. */\nexport function vnode_walkVNode(vNode, callback) {\n    let vCursor = vNode;\n    // Depth first traversal\n    if (vnode_isTextVNode(vNode)) {\n        callback?.(vNode, null);\n        return;\n    }\n    let vParent = null;\n    do {\n        if (callback?.(vCursor, vParent)) {\n            return;\n        }\n        const vFirstChild = vnode_getFirstChild(vCursor);\n        if (vFirstChild) {\n            vCursor = vFirstChild;\n            continue;\n        }\n        // Out of children\n        if (vCursor === vNode) {\n            // we are where we started, this means that vNode has no children, so we are done.\n            return;\n        }\n        // Out of children, go to next sibling\n        const vNextSibling = vCursor.nextSibling;\n        if (vNextSibling) {\n            vCursor = vNextSibling;\n            continue;\n        }\n        // Out of siblings, go to parent\n        vParent = vCursor.parent;\n        while (vParent) {\n            if (vParent === vNode) {\n                // We are back where we started, we are done.\n                return;\n            }\n            const vNextParentSibling = vParent.nextSibling;\n            if (vNextParentSibling) {\n                vCursor = vNextParentSibling;\n                break;\n            }\n            vParent = vParent.parent;\n        }\n        if (vParent == null) {\n            // We are done.\n            return;\n        }\n    } while (true);\n}\nexport function vnode_getDOMContainer(vNode) {\n    let cursor = vNode;\n    while (cursor) {\n        if (vnode_isElementVNode(cursor)) {\n            const qContainerElement = _getQContainerElement(cursor.node);\n            if (!qContainerElement) {\n                return null;\n            }\n            return getDomContainerFromQContainerElement(qContainerElement);\n        }\n        cursor = cursor.parent;\n    }\n    return null;\n}\n/**\n * Returns the previous/next sibling but from the point of view of the DOM.\n *\n * Given:\n *\n * ```\n * <div>\n *   <>a</>\n *   <>\n *     <></>\n *     <>b</>\n *     <></>\n *   </>\n *   <>c</>\n * </div>\n * ```\n *\n * Then:\n *\n * - Next: if we start at `a` the next DOM sibling is `b`, than `c`.\n * - Previous: if we start at `c` the next DOM sibling is `b`, than `a`.\n *\n * @param vNode - Starting node\n * @param nextDirection - Direction to search true=next, false=previous\n * @param descend - If true, than we will descend into the children first.\n * @returns\n */\n// TODO: split this function into two, one for next and one for previous.\nconst vnode_getDomSibling = (vNode, nextDirection, descend) => {\n    let cursor = vNode;\n    // first make sure we have a DOM node or no children.\n    while (descend && cursor && vnode_isVirtualVNode(cursor)) {\n        const child = nextDirection ? cursor.firstChild : cursor.lastChild;\n        if (!child) {\n            break;\n        }\n        if (child.flags & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */) {\n            return child;\n        }\n        cursor = child;\n    }\n    while (cursor) {\n        // Look at the previous/next sibling.\n        let sibling = nextDirection\n            ? cursor.nextSibling\n            : cursor.previousSibling;\n        if (sibling && sibling.flags & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */) {\n            // we found a previous/next DOM node, return it.\n            return sibling;\n        }\n        else if (!sibling) {\n            // If we don't have a sibling than walk up the tree until you find one.\n            let virtual = cursor.parent;\n            if (virtual && !vnode_isVirtualVNode(virtual)) {\n                return null;\n            }\n            while (virtual &&\n                !(sibling = nextDirection ? virtual.nextSibling : virtual.previousSibling)) {\n                virtual = virtual.parent;\n                if (virtual && !vnode_isVirtualVNode(virtual)) {\n                    // the parent node is not virtual, so we are done here.\n                    return null;\n                }\n            }\n            if (!sibling) {\n                // If we did not find a sibling, than we are done.\n                return null;\n            }\n            if (vnode_isTextVNode(sibling) && virtual && vnode_isElementVNode(virtual)) {\n                // sibling to the real element is a text node, this is not a sibling\n                return null;\n            }\n        }\n        // At this point `sibling` is a next node to look at.\n        // Next step is to descend until we find a DOM done.\n        while (sibling) {\n            cursor = sibling;\n            if (cursor.flags & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */ && vnode_getNode(cursor)) {\n                // we have to check that we actually have a node, because it could be a text node which is\n                // zero length and which does not have a representation in the DOM.\n                return cursor;\n            }\n            sibling = nextDirection\n                ? cursor.firstChild\n                : cursor.lastChild;\n        }\n        // If we are here we did not find anything and we need to go up the tree again.\n    }\n    return null;\n};\nexport const vnode_ensureTextInflated = (journal, vnode) => {\n    const textVNode = ensureTextVNode(vnode);\n    const flags = textVNode.flags;\n    if ((flags & 8 /* VNodeFlags.Inflated */) === 0) {\n        const parentNode = vnode_getDomParent(vnode, true);\n        isDev && assertDefined(parentNode, 'Missing parent node.');\n        const sharedTextNode = textVNode.node;\n        const doc = fastOwnerDocument(parentNode);\n        // Walk the previous siblings and inflate them.\n        let vCursor = vnode_getDomSibling(vnode, false, true);\n        // If text node is 0 length, than there is no text node.\n        // In that case we use the next node as a reference, in which\n        // case we know that the next node MUST be either NULL or an Element.\n        const node = vnode_getDomSibling(vnode, true, true);\n        const insertBeforeNode = sharedTextNode ||\n            ((node && vnode_isElementVNode(node) ? node.node : node?.node) || null);\n        let lastPreviousTextNode = insertBeforeNode;\n        while (vCursor && vnode_isTextVNode(vCursor)) {\n            if ((vCursor.flags & 8 /* VNodeFlags.Inflated */) === 0) {\n                const textNode = doc.createTextNode(vCursor.text);\n                addVNodeOperation(journal, createInsertOrMoveOperation(textNode, parentNode, lastPreviousTextNode));\n                lastPreviousTextNode = textNode;\n                vCursor.node = textNode;\n                vCursor.flags |= 8 /* VNodeFlags.Inflated */;\n            }\n            vCursor = vnode_getDomSibling(vCursor, false, true);\n        }\n        // Walk the next siblings and inflate them.\n        vCursor = vnode;\n        while (vCursor && vnode_isTextVNode(vCursor)) {\n            const next = vnode_getDomSibling(vCursor, true, true);\n            const isLastNode = next ? !vnode_isTextVNode(next) : true;\n            if ((vCursor.flags & 8 /* VNodeFlags.Inflated */) === 0) {\n                if (isLastNode && sharedTextNode) {\n                    addVNodeOperation(journal, createSetTextOperation(sharedTextNode, vCursor.text));\n                }\n                else {\n                    const textNode = doc.createTextNode(vCursor.text);\n                    addVNodeOperation(journal, createInsertOrMoveOperation(textNode, parentNode, insertBeforeNode));\n                    vCursor.node = textNode;\n                }\n                vCursor.flags |= 8 /* VNodeFlags.Inflated */;\n            }\n            vCursor = next;\n        }\n    }\n};\nexport const vnode_locate = (rootVNode, id) => {\n    ensureElementVNode(rootVNode);\n    let vNode = rootVNode;\n    const containerElement = rootVNode.node;\n    const qVNodeRefs = containerElement.qVNodeRefs;\n    let elementOffset = -1;\n    let refElement;\n    const localId = typeof id === 'string' ? id : '';\n    if (typeof id === 'string') {\n        isDev && assertDefined(qVNodeRefs, 'Missing qVNodeRefs.');\n        elementOffset = parseInt(localId);\n        refElement = qVNodeRefs.get(elementOffset);\n    }\n    else {\n        refElement = id;\n        const qElement = refElement;\n        const cachedVNode = qElement.vNode;\n        if (cachedVNode) {\n            return cachedVNode;\n        }\n        if (__EXPERIMENTAL__.suspense && qElement._qSegment) {\n            vNode = vnode_newUnMaterializedElement(refElement);\n            vnode_ensureElementKeyInflated(vNode);\n            qElement.vNode = vNode;\n            return vNode;\n        }\n    }\n    isDev &&\n        assertDefined(refElement, 'Missing refElement ' + (typeof id === 'string' ? `for id ${id}` : ''));\n    if (!vnode_isVNode(refElement)) {\n        isDev &&\n            assertTrue(containerElement.contains(refElement), `Couldn't find the element inside the container while locating the VNode.`);\n        if (__EXPERIMENTAL__.suspense && refElement._qSegment) {\n            vNode = refElement.vNode || vnode_newUnMaterializedElement(refElement);\n            vnode_ensureElementKeyInflated(vNode);\n        }\n        else {\n            // We need to find the vnode.\n            let parent = refElement;\n            const elementPath = [refElement];\n            while (parent && parent !== containerElement && !parent.vNode) {\n                parent = parent.parentElement;\n                elementPath.push(parent);\n            }\n            if (parent.vNode) {\n                vNode = parent.vNode;\n            }\n            // Start at rootVNode and follow the `elementPath` to find the vnode.\n            for (let i = elementPath.length - 2; i >= 0; i--) {\n                vNode = vnode_getVNodeForChildNode(vNode, elementPath[i]);\n            }\n        }\n        if (elementOffset != -1) {\n            refElement.vNode = vNode;\n            qVNodeRefs.set(elementOffset, vNode);\n        }\n    }\n    else {\n        vNode = refElement;\n    }\n    if (typeof id === 'string') {\n        // process virtual node search.\n        const idLength = localId.length;\n        let idx = indexOfAlphanumeric(localId, idLength);\n        let childIdx = 0;\n        while (idx < idLength) {\n            const ch = localId.charCodeAt(idx);\n            childIdx *= 26 /* a-z */;\n            if (ch >= 97 /* a */) {\n                // is lowercase\n                childIdx += ch - 97 /* a */;\n            }\n            else {\n                // is uppercase\n                childIdx += ch - 65 /* A */;\n                vNode = vnode_getChildWithIdx(vNode, childIdx);\n                childIdx = 0;\n            }\n            idx++;\n        }\n    }\n    return vNode;\n};\nconst vnode_getChildWithIdx = (vNode, childIdx) => {\n    let child = vnode_getFirstChild(vNode);\n    isDev && assertDefined(child, 'Missing child.');\n    while (child.flags >>> 12 /* VNodeFlagsIndex.shift */ !== childIdx) {\n        child = child.nextSibling;\n        isDev && assertDefined(child, 'Missing child.');\n    }\n    return child;\n};\nconst vNodeStack = [];\n/** @internal */\nexport const vnode_getVNodeForChildNode = (vNode, childElement) => {\n    ensureElementVNode(vNode);\n    let child = vnode_getFirstChild(vNode);\n    isDev && assertDefined(child, 'Missing child.');\n    while (child && (child instanceof ElementVNode ? child.node !== childElement : true)) {\n        if (vnode_isVirtualVNode(child)) {\n            const next = child.nextSibling;\n            const firstChild = vnode_getFirstChild(child);\n            if (firstChild) {\n                next && vNodeStack.push(next);\n                child = firstChild;\n            }\n            else {\n                child = next || (vNodeStack.length ? vNodeStack.pop() : null);\n            }\n        }\n        else {\n            const next = child.nextSibling;\n            if (next) {\n                child = next;\n            }\n            else {\n                child = next || vNodeStack.pop();\n            }\n        }\n        isDev && assertDefined(child, 'Missing child.');\n    }\n    while (vNodeStack.length) {\n        vNodeStack.pop();\n    }\n    ensureElementVNode(child);\n    isDev && assertEqual(child.node, childElement, 'Child not found.');\n    // console.log('FOUND', child[VNodeProps.node]?.outerHTML);\n    return child;\n};\nconst indexOfAlphanumeric = (id, length) => {\n    let idx = id.charCodeAt(0) === 45 /* - */ ? 1 : 0;\n    while (idx < length) {\n        const ch = id.charCodeAt(idx);\n        if (ch >= 48 /* 0 */ && ch <= 57 /* 9 */) {\n            idx++;\n        }\n        else {\n            return idx;\n        }\n    }\n    return length;\n};\nexport const vnode_createErrorDiv = (journal, document, host, err) => {\n    const errorDiv = document.createElement('errored-host');\n    if (err && err instanceof Error) {\n        errorDiv.props = { error: err };\n    }\n    errorDiv.setAttribute('q:key', '_error_');\n    const vErrorDiv = vnode_newElement(errorDiv, 'errored-host');\n    if (vnode_isElementOrTextVNode(host)) {\n        vnode_insertBefore(journal, vErrorDiv, host, null);\n    }\n    else {\n        // first collect all the children, we can't move them while walking the children\n        const children = [];\n        vnode_walkDirectChildren(journal, host, (vNode) => {\n            children.push(vNode);\n        });\n        for (let i = 0; i < children.length; i++) {\n            vnode_insertBefore(journal, vErrorDiv, children[i], null);\n        }\n    }\n    return vErrorDiv;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_journalToString = (journal) => {\n    const lines = ['JOURNAL:'];\n    let idx = 0;\n    const length = journal.length;\n    function stringify(...args) {\n        lines.push(args\n            .map((arg) => {\n            if (typeof arg === 'string') {\n                return arg;\n            }\n            else if (arg && isHtmlElement(arg)) {\n                const html = arg.outerHTML;\n                const hasChildNodes = !!arg.firstElementChild;\n                const idx = html.indexOf('>');\n                const lastIdx = html.lastIndexOf('<');\n                return idx > 0 && hasChildNodes\n                    ? html.substring(0, idx + 1) + '...' + html.substring(lastIdx)\n                    : html;\n            }\n            else if (arg && isText(arg)) {\n                return JSON.stringify(arg.nodeValue);\n            }\n            else {\n                return String(arg);\n            }\n        })\n            .join(' '));\n    }\n    while (idx < length) {\n        const op = journal[idx++];\n        if (op instanceof SetTextOperation) {\n            stringify('SetText');\n            stringify('  ', op.text);\n            stringify('   -->', op.target);\n        }\n        else if (op instanceof SetAttributeOperation) {\n            stringify('SetAttribute');\n            stringify('  ', op.attrName);\n            stringify('   key', op.attrName);\n            stringify('   val', op.attrValue);\n        }\n        else if (op instanceof DeleteOperation) {\n            stringify('Delete');\n            stringify('   -->', op.target);\n        }\n        else if (op instanceof RemoveAllChildrenOperation) {\n            stringify('RemoveAllChildren');\n            stringify('   -->', op.target);\n        }\n        else if (op instanceof InsertOrMoveOperation) {\n            stringify('InsertOrMove');\n            const parent = op.parent;\n            const insertBefore = op.beforeTarget;\n            stringify('  ', parent);\n            stringify('   -->', op.target);\n            if (insertBefore) {\n                stringify('      ', insertBefore);\n            }\n        }\n    }\n    lines.push('END JOURNAL');\n    return lines.join('\\n');\n};\nexport const vnode_applyJournal = _flushJournal;\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_insertElementBefore = (journal, parent, newChild, insertBefore) => {\n    ensureElementOrVirtualVNode(parent);\n    const parentIsElement = vnode_isElementVNode(parent);\n    if (parentIsElement) {\n        ensureMaterialized(parent);\n    }\n    const newChildCurrentParent = newChild.parent;\n    if (newChild === insertBefore) {\n        // invalid insertBefore. We can't insert before self reference\n        // prevent infinity loop and putting self reference to next sibling\n        if (newChildCurrentParent) {\n            // early return, as the newChild is already in the tree and we are already in the correct position\n            return;\n        }\n        else {\n            // if the newChild is not in the tree, than we insert it at the end of the list\n            insertBefore = null;\n        }\n    }\n    vnode_unlinkFromOldParent(journal, newChildCurrentParent, parent, newChild);\n    const childNode = newChild.node;\n    const parentIsDeleted = parent.flags & 32 /* VNodeFlags.Deleted */;\n    const parentNode = parentIsElement ? parent.node : vnode_getDomParent(parent, false);\n    if (parentNode && !parentIsDeleted) {\n        addVNodeOperation(journal, createInsertOrMoveOperation(childNode, parentNode, vnode_findInsertBefore(journal, parent, insertBefore)?.node ?? null));\n    }\n    // link newChild into the previous/next list\n    vnode_connectSiblings(parent, newChild, insertBefore);\n    if (parentIsDeleted) {\n        // if the parent is deleted, then the new child is also deleted\n        newChild.flags |= 32 /* VNodeFlags.Deleted */;\n    }\n};\nexport const vnode_insertVirtualBefore = (journal, parent, newChild, insertBefore) => {\n    ensureElementOrVirtualVNode(parent);\n    const parentIsElement = vnode_isElementVNode(parent);\n    if (parentIsElement) {\n        ensureMaterialized(parent);\n    }\n    const newChildCurrentParent = newChild.parent;\n    if (newChild === insertBefore) {\n        // invalid insertBefore. We can't insert before self reference\n        // prevent infinity loop and putting self reference to next sibling\n        if (newChildCurrentParent) {\n            // early return, as the newChild is already in the tree and we are already in the correct position\n            return;\n        }\n        else {\n            // if the newChild is not in the tree, than we insert it at the end of the list\n            insertBefore = null;\n        }\n    }\n    vnode_unlinkFromOldParent(journal, newChildCurrentParent, parent, newChild);\n    const parentIsDeleted = parent.flags & 32 /* VNodeFlags.Deleted */;\n    const targetEl = !parentIsElement && parent.flags & 2048 /* VNodeFlags.HasTargetElement */\n        ? parent.props?.[QTargetElement]\n        : null;\n    const domParentVNode = targetEl\n        ? null\n        : parentIsElement\n            ? parent\n            : vnode_getDomParentVNode(parent, false);\n    const parentNode = targetEl || domParentVNode?.node;\n    const adjustedInsertBefore = vnode_findInsertBefore(journal, parent, insertBefore);\n    const adjustedInsertBeforeNode = adjustedInsertBefore?.node ?? null;\n    const isProjection = vnode_isProjection(newChild);\n    if (isProjection && domParentVNode && (domParentVNode.flags & 1536 /* VNodeFlags.NAMESPACE_MASK */) !== 0) {\n        const domParentVNode = vnode_getDomParentVNode(parent, false);\n        const adjustedInsertBeforeNode = vnode_findInsertBefore(journal, parent, insertBefore)?.node ?? null;\n        /**\n         * Find the parent node and the dom children with the correct namespaces before we unlink the\n         * previous node. If we don't do this, we will end up with situations where we inflate text\n         * nodes from shared text node not correctly.\n         *\n         * Example:\n         *\n         * ```\n         * <Component>\n         *   <Projection>a</Projection>\n         *   <Projection>b</Projection>\n         * </Component>\n         * ```\n         *\n         * Projection nodes are virtual nodes, so they don't have a dom parent. They will be written to\n         * the q:template element if not visible at the start. Inside the q:template element, the\n         * projection nodes will be streamed as single text node \"ab\". We need to split it, but if we\n         * unlink the previous or next sibling, we don't know that after \"a\" node is \"b\". So we need to\n         * find children first (and inflate them).\n         */\n        const { elementNamespace, elementNamespaceFlag } = getNewElementNamespaceData(domParentVNode, newChild);\n        vnode_walkDirectChildren(journal, newChild, (vNode) => {\n            if (vnode_isTextVNode(vNode)) {\n                addVNodeOperation(journal, createInsertOrMoveOperation(vNode.node, parentNode, adjustedInsertBeforeNode));\n            }\n            else {\n                if ((vNode.flags & 1536 /* VNodeFlags.NAMESPACE_MASK */) !== elementNamespaceFlag) {\n                    const newChildElement = vnode_cloneElementWithNamespace(vNode, domParentVNode, elementNamespace, elementNamespaceFlag);\n                    if (newChildElement) {\n                        vNode.node = newChildElement;\n                    }\n                }\n                addVNodeOperation(journal, createInsertOrMoveOperation(vNode.node, parentNode, adjustedInsertBeforeNode));\n            }\n        });\n    }\n    else if (\n    // for projection there can be no parent node\n    parentNode &&\n        !parentIsDeleted) {\n        vnode_walkDirectChildren(journal, newChild, (vNode) => {\n            addVNodeOperation(journal, createInsertOrMoveOperation(vNode.node, parentNode, adjustedInsertBeforeNode));\n        });\n    }\n    vnode_connectSiblings(parent, newChild, insertBefore);\n    if (parentIsDeleted) {\n        // if the parent is deleted, then the new child is also deleted\n        newChild.flags |= 32 /* VNodeFlags.Deleted */;\n    }\n};\nconst vnode_findInsertBefore = (journal, parent, insertBefore) => {\n    let adjustedInsertBefore = null;\n    if (insertBefore == null) {\n        if (vnode_isVirtualVNode(parent)) {\n            // If `insertBefore` is null, than we need to insert at the end of the list.\n            // Well, not quite. If the parent is a virtual node, our \"last node\" is not the same\n            // as the DOM \"last node\". So in that case we need to look for the \"next node\" from\n            // our parent.\n            adjustedInsertBefore = vnode_getDomSibling(parent, true, false);\n        }\n    }\n    else if (vnode_isVirtualVNode(insertBefore)) {\n        // If the `insertBefore` is virtual, than we need to descend into the virtual and find e actual\n        adjustedInsertBefore = vnode_getDomSibling(insertBefore, true, true);\n    }\n    else {\n        adjustedInsertBefore = insertBefore;\n    }\n    adjustedInsertBefore &&\n        vnode_isTextVNode(adjustedInsertBefore) &&\n        vnode_ensureTextInflated(journal, adjustedInsertBefore);\n    return adjustedInsertBefore;\n};\nexport const vnode_connectSiblings = (parent, vNode, vNext) => {\n    const vPrevious = vNext ? vNext.previousSibling : parent.lastChild;\n    if (vNext) {\n        vNext.previousSibling = vNode;\n    }\n    else {\n        parent.lastChild = vNode;\n    }\n    if (vPrevious) {\n        vPrevious.nextSibling = vNode;\n    }\n    else {\n        parent.firstChild = vNode;\n    }\n    vNode.previousSibling = vPrevious;\n    vNode.nextSibling = vNext;\n    vNode.parent = parent;\n};\nconst vnode_unlinkFromOldParent = (journal, currentParent, newParent, newChild) => {\n    /**\n     * Ensure that the previous node is unlinked.\n     *\n     * We need to do it before finding the adjustedInsertBefore. The problem is when you try to render\n     * the same projection multiple times in the same node but under different conditions. We reuse\n     * projection nodes, so when this happens, we can end up with a situation where the node is\n     * inserted before node above it.\n     *\n     * Example:\n     *\n     * ```\n     * <>\n     *   {props.toggle && <Slot />}\n     *   {!props.toggle && (\n     *     <>\n     *       <Slot />\n     *     </>\n     *   )}\n     * </>\n     * ```\n     *\n     * Projected content:\n     *\n     * ```\n     * <h1>Test</h1>\n     * <p>Test content</p>\n     * ```\n     *\n     * If we don't unlink the previous node, we will end up at some point with the following:\n     *\n     * ```\n     * <h1>Test</h1>\n     * <p>Test content</p> // <-- inserted before the first h1\n     * <h1>Test</h1> // <-- to remove, but still in the tree\n     * <p>Test content</p> // <-- to remove\n     * ```\n     */\n    if (currentParent &&\n        (newChild.previousSibling || newChild.nextSibling || currentParent !== newParent)) {\n        vnode_remove(journal, currentParent, newChild, false);\n    }\n};\n/**\n * When a projection vnode is about to be repositioned (moved in the vnode tree), its trailing text\n * node must be inflated before the projection is unlinked from its current sibling chain.\n * `vnode_ensureTextInflated` relies on `vnode_getDomSibling` to locate adjacent text nodes and\n * decide which one is \"last\" (i.e. the one that gets to reuse the shared SSR DOM `Text` node). Once\n * the projection is unlinked, its `nextSibling` becomes `null`, so `getDomSibling` can no longer\n * cross the boundary to find a trailing sibling such as an empty-string text node — causing\n * `isLastNode` to be `true` prematurely and corrupting the shared DOM text node. Inflating the\n * trailing text node while the siblings are still connected gives it its own fresh DOM node and\n * avoids the corruption.\n *\n * Example:\n *\n * ```\n * <Component>\n *   <button>\n *     <InlineComponent>\n *       <span>\n *         \"*\"\n *       </span>\n *     </InlineComponent>\n *     <Projection> // <-- this projection when unlinked from the siblings will cause the \"test\" text node to be considered the last node without inflating it\n *       \"test\" // <-- this text node is sharing the same DOM node with the \"\"\n *     </Projection>\n *     \"\" <-- this text node is sharing the same DOM node with the \"test\"\n *   </button>\n * </Component>\n * ```\n */\nexport const vnode_inflateProjectionTrailingText = (journal, projection) => {\n    // Follow lastChild through any inner virtual wrappers to reach the actual trailing text node.\n    let last = projection;\n    while (last && vnode_isVirtualVNode(last)) {\n        last = last.lastChild;\n    }\n    if (last && vnode_isTextVNode(last) && (last.flags & 8 /* VNodeFlags.Inflated */) === 0) {\n        vnode_ensureTextInflated(journal, last);\n    }\n};\n/** @internal */\nexport const vnode_insertBefore = (journal, parent, newChild, insertBefore) => {\n    if (vnode_isElementOrTextVNode(newChild)) {\n        vnode_insertElementBefore(journal, parent, newChild, insertBefore);\n    }\n    else {\n        vnode_insertVirtualBefore(journal, parent, newChild, insertBefore);\n    }\n};\nexport const vnode_getDomParent = (vnode, includeProjection) => {\n    while (vnode && !vnode_isElementVNode(vnode)) {\n        if (vnode.flags & 2048 /* VNodeFlags.HasTargetElement */) {\n            return vnode.props?.[QTargetElement];\n        }\n        vnode = (vnode.parent || (includeProjection ? vnode.slotParent : null));\n    }\n    return vnode ? vnode.node : null;\n};\nexport const vnode_getDomParentVNode = (vnode, includeProjection) => {\n    while (vnode && !vnode_isElementVNode(vnode)) {\n        vnode = vnode.parent || (includeProjection ? vnode.slotParent : null);\n    }\n    return vnode;\n};\n/** @internal */\nexport const vnode_remove = (journal, vParent, vToRemove, removeDOM) => {\n    isDev && assertEqual(vParent, vToRemove.parent, 'Parent mismatch.');\n    if (vnode_isTextVNode(vToRemove)) {\n        vnode_ensureTextInflated(journal, vToRemove);\n    }\n    if (removeDOM) {\n        const isInnerHTMLParent = vnode_getProp(vParent, dangerouslySetInnerHTML, null) !== null;\n        if (isInnerHTMLParent) {\n            // ignore children, as they are inserted via innerHTML\n            return;\n        }\n        if (vnode_isElementOrTextVNode(vToRemove)) {\n            addVNodeOperation(journal, createDeleteOperation(vToRemove.node));\n        }\n        else {\n            vnode_walkDirectChildren(journal, vToRemove, (vNode) => {\n                addVNodeOperation(journal, createDeleteOperation(vNode.node));\n            });\n        }\n    }\n    const vPrevious = vToRemove.previousSibling;\n    const vNext = vToRemove.nextSibling;\n    if (vPrevious) {\n        vPrevious.nextSibling = vNext;\n    }\n    else {\n        vParent.firstChild = vNext;\n    }\n    if (vNext) {\n        vNext.previousSibling = vPrevious;\n    }\n    else {\n        vParent.lastChild = vPrevious;\n    }\n    vToRemove.previousSibling = null;\n    vToRemove.nextSibling = null;\n};\nexport const vnode_queryDomNodes = (container, journal, vNode, selector, cb) => {\n    if (vnode_isElementVNode(vNode)) {\n        const element = vnode_getNode(vNode);\n        if (element.matches(selector)) {\n            cb(element);\n        }\n        else {\n            const found = element.querySelectorAll(selector);\n            for (let i = 0; i < found.length; i++) {\n                cb(found[i]);\n            }\n        }\n    }\n    else {\n        let child = vnode_getFirstChild(vNode);\n        while (child) {\n            vnode_queryDomNodes(container, journal, child, selector, cb);\n            child = child.nextSibling;\n        }\n    }\n};\nexport const vnode_truncate = (journal, vParent, vDelete, removeDOM = true) => {\n    isDev && assertDefined(vDelete, 'Missing vDelete.');\n    const parent = vnode_getDomParent(vParent, true);\n    if (parent && removeDOM) {\n        if (vnode_isElementOrTextVNode(vParent)) {\n            addVNodeOperation(journal, createRemoveAllChildrenOperation(vParent.node));\n        }\n        else {\n            const domParentVNode = vnode_getDomParentVNode(vParent, false);\n            if (domParentVNode &&\n                domParentVNode.firstChild === vParent &&\n                domParentVNode.lastChild === vParent) {\n                addVNodeOperation(journal, createRemoveAllChildrenOperation(parent));\n            }\n            else {\n                vnode_walkDirectChildren(journal, vParent, (vNode) => {\n                    addVNodeOperation(journal, createDeleteOperation(vNode.node));\n                });\n            }\n        }\n    }\n    const vPrevious = vDelete.previousSibling;\n    if (vPrevious) {\n        vPrevious.nextSibling = null;\n    }\n    else {\n        vParent.firstChild = null;\n    }\n    vParent.lastChild = vPrevious;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\n/** @internal */\nexport const vnode_getElementName = (vnode) => {\n    const elementVNode = ensureElementVNode(vnode);\n    let elementName = elementVNode.elementName;\n    if (elementName === undefined) {\n        const element = elementVNode.node;\n        const nodeName = fastNodeName(element).toLowerCase();\n        elementName = elementVNode.elementName = nodeName;\n        elementVNode.flags |= vnode_getElementNamespaceFlags(element);\n    }\n    return elementName;\n};\nexport const vnode_getText = (textVNode) => {\n    let text = textVNode.text;\n    if (text === undefined) {\n        text = textVNode.text = textVNode.node.nodeValue;\n    }\n    return text;\n};\nexport const vnode_setText = (journal, textVNode, text) => {\n    vnode_ensureTextInflated(journal, textVNode);\n    textVNode.text = text;\n    addVNodeOperation(journal, createSetTextOperation(textVNode.node, text));\n};\n/** @internal */\nexport const vnode_getFirstChild = (vnode) => {\n    if (vnode_isTextVNode(vnode)) {\n        return null;\n    }\n    let vFirstChild = vnode.firstChild;\n    if (__EXPERIMENTAL__.suspense &&\n        vFirstChild === undefined &&\n        vnode_isElementVNode(vnode) &&\n        hasOnlySuspensePlaceholder(vnode.node)) {\n        return null;\n    }\n    if (vFirstChild === undefined) {\n        vFirstChild = ensureMaterialized(vnode);\n    }\n    return vFirstChild;\n};\nconst vnode_materialize = (vNode) => {\n    const element = vNode.node;\n    const firstChild = fastFirstChild(element);\n    const vNodeData = fastOwnerDocument(element)?.qVNodeData?.get(element);\n    const vFirstChild = materialize(vNode, element, firstChild, vNodeData);\n    return vFirstChild;\n};\nexport const splitVNodeData = (vNodeData) => {\n    const elementVNodeDataStartIdx = 2;\n    const elementVNodeDataEndIdx = vNodeData.indexOf('||', elementVNodeDataStartIdx);\n    const elementVNodeData = vNodeData.substring(elementVNodeDataStartIdx, elementVNodeDataEndIdx);\n    const virtualVNodeData = vNodeData.substring(elementVNodeDataEndIdx + 2);\n    return { elementVNodeData, virtualVNodeData };\n};\nconst materialize = (vNode, element, firstChild, vNodeData) => {\n    vnode_ensureElementKeyInflated(vNode);\n    const segmentId = __EXPERIMENTAL__.suspense ? element._qSegment || null : null;\n    if (vNodeData) {\n        if (vNodeData.charCodeAt(0) === VNodeDataChar.SEPARATOR &&\n            vNodeData.charCodeAt(1) === VNodeDataChar.SEPARATOR) {\n            /**\n             * If vNodeData start with the `VNodeDataChar.SEPARATOR` then it means that the vNodeData\n             * contains some data for DOM element. We need to split it to DOM element vNodeData and\n             * virtual element vNodeData.\n             *\n             * For example `||=6`4||2{J=7`3|q:type|S}` should split into `=6`4`and`2{J=7`3|q:type|S}`,\n             * where `=6`4` is vNodeData for the DOM element.\n             */\n            const split = splitVNodeData(vNodeData);\n            const elementVNodeData = split.elementVNodeData;\n            vNodeData = split.virtualVNodeData;\n            // Materialize DOM element from HTML. If the `vNodeData` is not empty,\n            // then also materialize virtual element from vNodeData\n            const vFirstChild = materializeFromDOM(vNode, firstChild, elementVNodeData, segmentId);\n            if (!vNodeData) {\n                //  If it is empty then we don't need to call the `materializeFromVNodeData`.\n                return vFirstChild;\n            }\n        }\n        // Materialize virtual element form vNodeData\n        return materializeFromVNodeData(vNode, vNodeData, element, firstChild, segmentId);\n    }\n    else {\n        // Materialize DOM element from HTML only\n        return materializeFromDOM(vNode, firstChild, undefined, segmentId);\n    }\n};\nexport const ensureMaterialized = (vnode) => {\n    const vParent = ensureElementVNode(vnode);\n    let vFirstChild = vParent.firstChild;\n    if (vFirstChild === undefined) {\n        // need to materialize the vNode.\n        const element = vParent.node;\n        if (vParent.parent && shouldIgnoreChildren(element)) {\n            // We have a container with html value, must ignore the content.\n            vFirstChild = vParent.firstChild = vParent.lastChild = null;\n        }\n        else {\n            vFirstChild = vnode_materialize(vParent);\n        }\n    }\n    isDev && assertTrue(vParent.firstChild !== undefined, 'Did not materialize.');\n    isDev && assertTrue(vParent.lastChild !== undefined, 'Did not materialize.');\n    return vFirstChild;\n};\nlet _fastHasAttribute = null;\nexport const shouldIgnoreChildren = (node) => {\n    if (!_fastHasAttribute) {\n        _fastHasAttribute = node.hasAttribute;\n    }\n    return _fastHasAttribute.call(node, QContainerAttr);\n};\nlet _fastGetAttribute = null;\nexport const fastGetAttribute = (element, key) => {\n    if (!_fastGetAttribute) {\n        _fastGetAttribute = element.getAttribute;\n    }\n    return _fastGetAttribute.call(element, key);\n};\nconst fastNodeType = createFastGetter('nodeType');\nconst fastIsTextOrElement = (node) => {\n    const type = fastNodeType(node);\n    return type === /* Node.TEXT_NODE */ 3 || type === /* Node.ELEMENT_NODE */ 1;\n};\nlet _fastNextSibling = null;\nexport const fastNextSibling = (node) => {\n    if (!_fastNextSibling) {\n        _fastNextSibling = fastGetter(node, 'nextSibling');\n    }\n    if (!_fastFirstChild) {\n        _fastFirstChild = fastGetter(node, 'firstChild');\n    }\n    while (node) {\n        node = _fastNextSibling.call(node);\n        if (node !== null) {\n            const type = fastNodeType(node);\n            if (type === /* Node.TEXT_NODE */ 3 || type === /* Node.ELEMENT_NODE */ 1) {\n                break;\n            }\n            else if (type === /* Node.COMMENT_NODE */ 8) {\n                const nodeValue = node.nodeValue;\n                if (nodeValue?.startsWith(QIgnore)) {\n                    return getNodeAfterCommentNode(node, QContainerIsland, _fastNextSibling, _fastFirstChild);\n                }\n                else if (node.nodeValue?.startsWith(QContainerIslandEnd)) {\n                    // Search for either the next container-island or the end of the q:ignore block,\n                    // whichever comes first. This handles multiple islands within a single q:ignore.\n                    return getNodeAfterCommentNode(node, [QContainerIsland, QIgnoreEnd], _fastNextSibling, _fastFirstChild);\n                }\n                else if (nodeValue?.startsWith(QContainerAttr)) {\n                    while (node && (node = _fastNextSibling.call(node))) {\n                        if (fastNodeType(node) === /* Node.COMMENT_NODE */ 8 &&\n                            node.nodeValue?.startsWith(QContainerAttrEnd)) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    return node;\n};\nfunction getNodeAfterCommentNode(node, commentValue, nextSibling, firstChild) {\n    const isSingleValue = typeof commentValue === 'string';\n    const length = commentValue.length;\n    while (node) {\n        const nodeValue = node.nodeValue;\n        let isMatch;\n        if (isSingleValue) {\n            isMatch = nodeValue?.startsWith(commentValue);\n        }\n        else {\n            for (let i = 0; i < length; i++) {\n                if (nodeValue?.startsWith(commentValue[i])) {\n                    isMatch = true;\n                    break;\n                }\n            }\n        }\n        if (isMatch) {\n            node = nextSibling.call(node) || null;\n            return node;\n        }\n        let nextNode = firstChild.call(node);\n        if (!nextNode) {\n            nextNode = nextSibling.call(node);\n        }\n        // Go up through parents until we find one with a next sibling\n        while (!nextNode) {\n            nextNode = fastParentNode(node);\n            if (!nextNode) {\n                break;\n            }\n            node = nextNode;\n            nextNode = nextSibling.call(nextNode);\n        }\n        node = nextNode;\n    }\n    return null;\n}\nconst fastParentNode = createFastGetter('parentNode');\nlet _fastFirstChild = null;\nconst fastFirstChild = (node) => {\n    if (!_fastFirstChild) {\n        _fastFirstChild = fastGetter(node, 'firstChild');\n    }\n    node = node && _fastFirstChild.call(node);\n    // Handle q:ignore as first child (e.g. qwikify$ Host with reactify$ projections).\n    // Navigate depth-first to the first q:container-island and return its first element.\n    if (node && fastNodeType(node) === /* Node.COMMENT_NODE */ 8) {\n        if (!_fastNextSibling) {\n            _fastNextSibling = fastGetter(node, 'nextSibling');\n        }\n        if (node.nodeValue?.startsWith(QIgnore)) {\n            return getNodeAfterCommentNode(node, QContainerIsland, _fastNextSibling, _fastFirstChild);\n        }\n    }\n    while (node && !fastIsTextOrElement(node)) {\n        node = fastNextSibling(node);\n    }\n    return node;\n};\nexport const fastNamespaceURI = createFastGetter('namespaceURI');\nexport const fastNodeName = createFastGetter('nodeName');\nconst fastOwnerDocument = createFastGetter('ownerDocument');\nconst materializeFromDOM = (vParent, firstChild, vData, segmentId) => {\n    let vFirstChild = null;\n    let idx = 0;\n    const skipElements = () => {\n        while (isElement(child) && shouldSkipElement(child)) {\n            child = fastNextSibling(child);\n        }\n    };\n    // materialize from DOM\n    let child = firstChild;\n    skipElements();\n    let vChild = null;\n    while (child) {\n        const nodeType = fastNodeType(child);\n        let vNextChild = null;\n        if (nodeType === /* Node.TEXT_NODE */ 3) {\n            vNextChild = vnode_newText(child, child.textContent ?? undefined);\n        }\n        else if (nodeType === /* Node.ELEMENT_NODE */ 1) {\n            vNextChild = vnode_newUnMaterializedElement(child);\n            vnode_ensureElementKeyInflated(vNextChild);\n        }\n        if (vNextChild) {\n            vNextChild.flags = (vNextChild.flags & 4095 /* VNodeFlagsIndex.mask */) | (idx << 12 /* VNodeFlagsIndex.shift */);\n            idx++;\n            vNextChild.parent = vParent;\n            vChild && (vChild.nextSibling = vNextChild);\n            vNextChild.previousSibling = vChild;\n            vChild = vNextChild;\n        }\n        if (!vFirstChild) {\n            vParent.firstChild = vFirstChild = vChild;\n        }\n        child = fastNextSibling(child);\n        skipElements();\n    }\n    vParent.lastChild = vChild || null;\n    vParent.firstChild = vFirstChild;\n    if (vData) {\n        /**\n         * If we need to materialize from DOM and we have vNodeData it means that we have some virtual\n         * props for that node.\n         */\n        let container = null;\n        processVNodeData(vData, (peek, consumeValue) => {\n            if (peek() === VNodeDataChar.ID) {\n                if (!container) {\n                    container = getDomContainer(vParent.node);\n                }\n                const id = consumeValue();\n                container.$setRawState$(parseInt(id, 10), vParent);\n                isDev && vnode_setProp(vParent, ELEMENT_ID, id);\n            }\n            else if (peek() === VNodeDataChar.BACK_REFS) {\n                if (!container) {\n                    container = getDomContainer(vParent.node);\n                }\n                setEffectBackRefFromVNodeData(vParent, consumeValue(), container);\n            }\n            else {\n                // prevent infinity loop if there are some characters outside the range\n                consumeValue();\n            }\n        });\n    }\n    return vFirstChild;\n};\nfunction setEffectBackRefFromVNodeData(vParent, value, container) {\n    if (!vParent[_EFFECT_BACK_REF]) {\n        // get data lazily\n        // this is because effects back refs can point to vnodes which are not yet materialized\n        // (are after the current vnode)\n        Object.defineProperty(vParent, _EFFECT_BACK_REF, {\n            get() {\n                const subMap = container.$getObjectById$(value);\n                vParent[_EFFECT_BACK_REF] = subMap;\n                return subMap;\n            },\n            set(value) {\n                Object.defineProperty(vParent, _EFFECT_BACK_REF, {\n                    value,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true,\n                });\n            },\n            enumerable: true,\n            configurable: true,\n        });\n    }\n    else {\n        const subMap = vParent[_EFFECT_BACK_REF];\n        mergeMaps(subMap, container.$getObjectById$(value));\n    }\n}\nconst processVNodeData = (vData, callback) => {\n    let nextToConsumeIdx = 0;\n    let ch = 0;\n    let peekCh = 0;\n    const getChar = (idx) => {\n        return idx < vData.length ? vData.charCodeAt(idx) : 0;\n    };\n    const peek = () => {\n        if (peekCh !== 0) {\n            return peekCh;\n        }\n        else {\n            return (peekCh = getChar(nextToConsumeIdx));\n        }\n    };\n    const consume = () => {\n        ch = peek();\n        peekCh = 0;\n        nextToConsumeIdx++;\n        return ch;\n    };\n    const consumeValue = () => {\n        consume();\n        const start = nextToConsumeIdx;\n        while ((peek() <= 58 /* `:` */ && peekCh !== 0) ||\n            peekCh === 92 /* `\\` backslash escape */ ||\n            peekCh === 95 /* `_` */ ||\n            (peekCh >= 65 /* `A` */ && peekCh <= 90) /* `Z` */ ||\n            (peekCh >= 97 /* `a` */ && peekCh <= 122) /* `z` */) {\n            consume();\n        }\n        return vData.substring(start, nextToConsumeIdx);\n    };\n    while (peek() !== 0) {\n        callback(peek, consumeValue, consume, getChar, nextToConsumeIdx);\n    }\n};\n/** @internal */\nexport const vnode_getAttrKeys = (container, vnode) => {\n    const type = vnode.flags;\n    if ((type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0) {\n        vnode_ensureElementInflated(container, vnode);\n        const keys = [];\n        const props = vnode.props;\n        if (props) {\n            for (const key in props) {\n                if (!key.startsWith(Q_PROPS_SEPARATOR)) {\n                    keys.push(key);\n                }\n            }\n        }\n        return keys;\n    }\n    return [];\n};\nexport const vnode_isDescendantOf = (vnode, ancestor) => {\n    let parent = vnode_getProjectionParentOrParent(vnode);\n    while (parent) {\n        if (parent === ancestor) {\n            return true;\n        }\n        parent = vnode_getProjectionParentOrParent(parent);\n    }\n    return false;\n};\nexport const vnode_getProjectionParentOrParent = (vnode) => {\n    return vnode.parent || vnode.slotParent;\n};\nexport const vnode_getNode = (vnode) => {\n    if (vnode === null || vnode_isVirtualVNode(vnode)) {\n        return null;\n    }\n    return vnode.node;\n};\n/** @internal */\nexport function vnode_toString(depth = 20, offset = '', materialize = false, siblings = false, colorize = true, container = null) {\n    if (this && !container) {\n        try {\n            container = vnode_getDOMContainer(this);\n        }\n        catch {\n            // ignore, as this is only for debugging\n        }\n    }\n    let vnode = this;\n    if (depth === 0) {\n        return '...';\n    }\n    if (vnode === null) {\n        return 'null';\n    }\n    if (vnode === undefined) {\n        return 'undefined';\n    }\n    const strings = [];\n    const NAME_COL_PREFIX = '\\x1b[34m';\n    const NAME_COL_SUFFIX = '\\x1b[0m';\n    do {\n        if (vnode_isTextVNode(vnode)) {\n            strings.push(qwikDebugToString(vnode_getText(vnode)));\n        }\n        else if (vnode_isVirtualVNode(vnode)) {\n            const idx = vnode.flags >>> 12 /* VNodeFlagsIndex.shift */;\n            const attrs = ['[' + String(idx) + ']'];\n            if (vnode.dirty) {\n                attrs.push(` dirty:${vnode.dirty}`);\n            }\n            if (container) {\n                const attrKeys = vnode_getAttrKeys(container, vnode);\n                for (let i = 0; i < attrKeys.length; i++) {\n                    const key = attrKeys[i];\n                    if (key !== DEBUG_TYPE && key !== debugStyleScopeIdPrefixAttr) {\n                        const value = vnode_getProp(vnode, key, null);\n                        attrs.push(' ' + key + '=' + qwikDebugToString(value));\n                    }\n                }\n                if (vnode.slotParent) {\n                    attrs.push(' slotParent=(C)');\n                }\n            }\n            const name = (colorize ? NAME_COL_PREFIX : '') +\n                (VirtualTypeName[vnode_getProp(vnode, DEBUG_TYPE, null) || \"V\" /* VirtualType.Virtual */] ||\n                    VirtualTypeName[\"V\" /* VirtualType.Virtual */]) +\n                (colorize ? NAME_COL_SUFFIX : '');\n            strings.push('<' + name + attrs.join('') + '>');\n            const child = vnode_getFirstChild(vnode);\n            child &&\n                strings.push('  ' + vnode_toString.call(child, depth - 1, offset + '  ', true, true, colorize));\n            strings.push('</' + name + '>');\n        }\n        else if (vnode_isElementVNode(vnode)) {\n            const tag = vnode_getElementName(vnode);\n            const attrs = [];\n            if (isCursor(vnode)) {\n                attrs.push(' cursor');\n            }\n            if (vnode.dirty) {\n                attrs.push(` dirty:${vnode.dirty}`);\n            }\n            if (vnode.dirtyChildren) {\n                attrs.push(` dirtyChildren[${vnode.dirtyChildren.length}]`);\n            }\n            const keys = container ? vnode_getAttrKeys(container, vnode) : [];\n            for (let i = 0; i < keys.length; i++) {\n                const key = keys[i];\n                const value = vnode_getProp(vnode, key, null);\n                attrs.push(' ' + key + '=' + qwikDebugToString(value));\n            }\n            const node = vnode_getNode(vnode);\n            if (node) {\n                const vnodeData = fastOwnerDocument(node).qVNodeData?.get(node);\n                if (vnodeData) {\n                    attrs.push(' q:vnodeData=' + qwikDebugToString(vnodeData));\n                }\n            }\n            const domAttrs = node.attributes;\n            for (let i = 0; i < domAttrs.length; i++) {\n                const attr = domAttrs[i];\n                if (keys.indexOf(attr.name) === -1) {\n                    attrs.push(' ' + attr.name + (attr.value ? '=' + qwikDebugToString(attr.value) : ''));\n                }\n            }\n            strings.push('<' + tag + attrs.join('') + '>');\n            if (vnode_isMaterialized(vnode) || materialize) {\n                const child = vnode_getFirstChild(vnode);\n                child &&\n                    strings.push('  ' + vnode_toString.call(child, depth - 1, offset + '  ', true, true, colorize));\n            }\n            else {\n                strings.push('  <!-- not materialized --!>');\n            }\n            strings.push('</' + tag + '>');\n        }\n        vnode = (siblings && vnode.nextSibling) || null;\n    } while (vnode);\n    return strings.join('\\n' + offset);\n}\nconst isNumber = (ch) => /* `0` */ 48 <= ch && ch <= 57; /* `9` */\nconst isLowercase = (ch) => /* `a` */ 97 <= ch && ch <= 122; /* `z` */\nfunction shouldSkipElement(element) {\n    return (\n    // Skip over elements that don't have a props separator. They are not rendered by Qwik.\n    !element.hasAttribute(Q_PROPS_SEPARATOR) ||\n        // We pretend that style element's don't exist as they can get moved out.\n        // skip over style elements, as those need to be moved to the head\n        // and are not included in the counts.\n        (element.nodeName === 'STYLE' &&\n            (element.hasAttribute(QScopedStyle) || element.hasAttribute(QStyle))));\n}\nfunction hasOnlySuspensePlaceholder(element) {\n    const segmentId = element.getAttribute(QSuspenseResultParent);\n    if (segmentId === null) {\n        return false;\n    }\n    const firstChild = fastFirstChild(element);\n    return (isElement(firstChild) &&\n        firstChild.localName === 'template' &&\n        firstChild.getAttribute(QSuspenseResolved) === segmentId &&\n        fastNextSibling(firstChild) === null);\n}\nconst stack = [];\nfunction materializeFromVNodeData(vParent, vData, element, child, segmentId) {\n    let idx = 0;\n    let vFirst = null;\n    let vLast = null;\n    let previousTextNode = null;\n    const addVNode = (node) => {\n        node.flags = (node.flags & 4095 /* VNodeFlagsIndex.mask */) | (idx << 12 /* VNodeFlagsIndex.shift */);\n        idx++;\n        vLast && (vLast.nextSibling = node);\n        node.previousSibling = vLast;\n        node.parent = vParent;\n        if (!vFirst) {\n            vParent.firstChild = vFirst = node;\n        }\n        vLast = node;\n    };\n    let textIdx = 0;\n    let combinedText = null;\n    let container = null;\n    const shouldSkipNode = (node) => {\n        const nodeIsElement = isElement(node);\n        return !nodeIsElement || (nodeIsElement && shouldSkipElement(node));\n    };\n    let components = null;\n    processVNodeData(vData, (peek, consumeValue, consume, getChar, nextToConsumeIdx) => {\n        if (isNumber(peek())) {\n            // Element counts get encoded as numbers.\n            while (shouldSkipNode(child)) {\n                child = fastNextSibling(child);\n                if (!child) {\n                    throw qError(27 /* QError.materializeVNodeDataError */, [vData, peek(), nextToConsumeIdx]);\n                }\n            }\n            combinedText = null;\n            previousTextNode = null;\n            let value = 0;\n            while (isNumber(peek())) {\n                value *= 10;\n                value += consume() - 48; /* `0` */\n            }\n            while (value--) {\n                const elementVNode = vnode_newUnMaterializedElement(child);\n                vnode_ensureElementKeyInflated(elementVNode);\n                addVNode(elementVNode);\n                child = fastNextSibling(child);\n                while (\n                // skip only elements, not text nodes\n                isElement(child) &&\n                    shouldSkipElement(child)) {\n                    child = fastNextSibling(child);\n                    if (!child && value > 0) {\n                        throw qError(27 /* QError.materializeVNodeDataError */, [vData, peek(), nextToConsumeIdx]);\n                    }\n                }\n            }\n            // collect the elements;\n        }\n        else if (peek() === VNodeDataChar.SCOPED_STYLE) {\n            vnode_setProp(vParent, QScopedStyle, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.RENDER_FN) {\n            (components ||= []).push(vParent);\n            vnode_setProp(vParent, OnRenderProp, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.ID) {\n            if (!container) {\n                container = getDomContainer(element);\n            }\n            const id = consumeValue();\n            container.$setRawState$(parseInt(id, 10), vParent);\n            isDev && vnode_setProp(vParent, ELEMENT_ID, id);\n        }\n        else if (peek() === VNodeDataChar.PROPS) {\n            vnode_setProp(vParent, ELEMENT_PROPS, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.KEY) {\n            const isEscapedValue = getChar(nextToConsumeIdx + 1) === VNodeDataChar.SEPARATOR;\n            let value;\n            if (isEscapedValue) {\n                consume();\n                value = decodeURIComponent(decodeVNodeDataString(consumeValue()));\n                consume();\n            }\n            else {\n                value = consumeValue();\n            }\n            vParent.key = value;\n        }\n        else if (peek() === VNodeDataChar.SEQ) {\n            vnode_setProp(vParent, ELEMENT_SEQ, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.SEQ_IDX) {\n            vnode_setProp(vParent, ELEMENT_SEQ_IDX, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.BACK_REFS) {\n            if (!container) {\n                container = getDomContainer(element);\n            }\n            setEffectBackRefFromVNodeData(vParent, consumeValue(), container);\n        }\n        else if (peek() === VNodeDataChar.SLOT_PARENT) {\n            if (!container) {\n                container = getDomContainer(element);\n            }\n            vParent.slotParent = vnode_locate(container.rootVNode, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.CONTEXT) {\n            vnode_setProp(vParent, QCtxAttr, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.OPEN) {\n            consume();\n            addVNode(vnode_newVirtual());\n            stack.push(vParent, vFirst, vLast, previousTextNode, idx);\n            idx = 0;\n            vParent = vLast;\n            vFirst = vLast = null;\n        }\n        else if (peek() === VNodeDataChar.SEPARATOR) {\n            // Custom attribute: |key|value\n            const keyValue = consumeValue();\n            const key = decodeVNodeDataString(keyValue);\n            const valueSeparatorIdx = nextToConsumeIdx + keyValue.length + 1;\n            const isEscapedValue = getChar(valueSeparatorIdx + 1) === VNodeDataChar.SEPARATOR;\n            let value;\n            if (isEscapedValue) {\n                consume();\n                value = decodeURI(decodeVNodeDataString(consumeValue()));\n                consume();\n            }\n            else {\n                value = decodeVNodeDataString(consumeValue());\n            }\n            vnode_setProp(vParent, key, value);\n        }\n        else if (peek() === VNodeDataChar.CLOSE) {\n            consume();\n            vParent.lastChild = vLast;\n            idx = stack.pop();\n            previousTextNode = stack.pop();\n            vLast = stack.pop();\n            vFirst = stack.pop();\n            vParent = stack.pop();\n        }\n        else if (peek() === VNodeDataChar.SLOT) {\n            const value = decodeVNodeDataString(consumeValue());\n            vnode_setProp(vParent, QSlot, value);\n        }\n        else {\n            // skip over style or non-qwik elements in front of text nodes, where text node is the first child (except the style node)\n            while (isElement(child) && shouldSkipElement(child)) {\n                child = fastNextSibling(child);\n            }\n            const textNode = child && fastNodeType(child) === /* Node.TEXT_NODE */ 3 ? child : null;\n            // must be alphanumeric\n            if (combinedText === null) {\n                combinedText = textNode ? textNode.nodeValue : null;\n                textIdx = 0;\n            }\n            let length = 0;\n            while (isLowercase(peek())) {\n                length += consume() - 97; /* `a` */\n                length *= 26;\n            }\n            length += consume() - 65; /* `A` */\n            const text = combinedText === null ? '' : combinedText.substring(textIdx, textIdx + length);\n            addVNode((previousTextNode = vnode_newSharedText(previousTextNode, textNode, text)));\n            textIdx += length;\n            // Text nodes get encoded as alphanumeric characters.\n        }\n    });\n    if (components) {\n        if (!container) {\n            container = getDomContainer(element);\n        }\n        for (let i = 0; i < components.length; i++) {\n            container.ensureProjectionResolved(components[i]);\n        }\n        components = null;\n    }\n    vParent.lastChild = vLast;\n    return vFirst;\n}\nexport const vnode_getType = (vnode) => {\n    const type = vnode.flags;\n    if (type & 1 /* VNodeFlags.Element */) {\n        return 1 /* Element */;\n    }\n    else if (type & 2 /* VNodeFlags.Virtual */) {\n        return 11 /* Virtual */;\n    }\n    else if (type & 4 /* VNodeFlags.Text */) {\n        return 3 /* Text */;\n    }\n    throw qError(26 /* QError.invalidVNodeType */, [type]);\n};\nconst isElement = (node) => node && typeof node == 'object' && fastNodeType(node) === /** Node.ELEMENT_NODE* */ 1;\n/**\n * Use this method to find the parent component for projection.\n *\n * Normally the parent component is just the first component which we encounter while traversing the\n * parents.\n *\n * However, if during traversal we encounter a projection, than we have to follow the projection,\n * and node with the projection component is further away (it is the parent's parent of the\n * projection's)\n *\n * So in general we have to go up as many parent components as there are projections nestings.\n *\n * - No projection nesting first parent component.\n * - One projection nesting, second parent component (parent's parent).\n * - Three projection nesting, third parent component (parent's parent's parent).\n * - And so on.\n *\n * @param vHost\n * @param rootVNode\n * @returns\n */\nexport const vnode_getProjectionParentComponent = (vHost) => {\n    let projectionDepth = 1;\n    while (projectionDepth--) {\n        while (vHost &&\n            (vnode_isVirtualVNode(vHost) ? vnode_getProp(vHost, OnRenderProp, null) === null : true)) {\n            const qSlotParent = vHost.slotParent;\n            const vProjectionParent = vnode_isVirtualVNode(vHost) && qSlotParent;\n            if (vProjectionParent) {\n                // We found a projection, so we need to go up one more level.\n                projectionDepth++;\n            }\n            vHost = vProjectionParent || vHost.parent;\n        }\n        if (projectionDepth > 0) {\n            vHost = vHost.parent;\n        }\n    }\n    return vHost;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvY2xpZW50L3Zub2RlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSEc7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0YsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFFTCxVQUFVLEVBSVYsZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDWCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsT0FBTyxFQUNQLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGNBQWMsR0FDZixNQUFNLHlCQUF5QixDQUFDO0FB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LElBQUksV0FBVyxDQUFDO1lBQ3JFLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsNkRBQTZEO2dCQUM3RCxlQUFlLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsS0FBSyxHQUFHLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxNQUFPLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUE0QixDQUFDO0FBQ3RDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiAgIFZOb2RlIGlzIGEgRE9NIGxpa2UgQVBJIGZvciB3YWxraW5nIHRoZSBET00gYnV0IGl0OlxuICpcbiAqICAgMS4gRW5jb2RlcyB2aXJ0dWFsIG5vZGVzIHdoaWNoIGRvbid0IGV4aXN0IGluIHRoZSBET01cbiAqICAgMi4gQ2FuIHNlcmlhbGl6ZSBhcyBwYXJ0IG9mIFNTUiBhbmQgdGhhbiBkZXNlcmlhbGl6ZSBvbiB0aGUgY2xpZW50LlxuICpcbiAqICAgIyBWaXJ0dWFsXG4gKlxuICogICBZb3UgY2FuIHRoaW5rIG9mIGEgVmlydHVhbCBub2RlIGp1c3QgbGlrZSBhbiBhZGRpdGlvbmFsIGA8ZGl2PmAgaW4gdGhhdCBpdCBncm91cHMgcmVsYXRlZCBjaGlsZFxuICogICBub2RlcyB0b2dldGhlci4gQnV0IHVubGlrZSBhIGA8ZGl2PmAgd2hpY2ggaGFzIGEgcmVhbCBET00gbm9kZSBhbmQgaGVuY2UgaW1wbGljYXRpb25zIGZvciBDU1MsXG4gKiAgIFZpcnR1YWwgbm9kZXMgaGF2ZSBubyBET00gaW1wYWN0LCB0aGV5IGFyZSBpbnZpc2libGUuXG4gKlxuICogICAjIFBvcnRhbFxuICpcbiAqICAgVHdvIFZpcnR1YWwgbm9kZXMgY2FuIGJlIGxpbmtlZCB0b2dldGhlciB0byBmb3JtIGEgUG9ydGFsLiBQb3J0YWxzIGFyZSB1c2VmdWwgZm9yIHByb2plY3RpbmdcbiAqICAgY29udGVudCBvciBqdXN0IHJlbmRlcmluZyBjb250ZW50IGluIGEgZGlmZmVyZW50IGxvY2F0aW9uIGluIHRoZSB0cmVlLCB3aGlsZSBtYWludGFpbmluZyBhXG4gKiAgIGxvZ2ljYWwgcmVsYXRpb25zaGlwLlxuICpcbiAqICAgUG9ydGFscyBoYXZlOlxuICpcbiAqICAgLSBQb3J0YWwgU291cmNlOiBBIFZpcnR1YWwgbm9kZSB3aGljaCBjYW4gcmVmZXIgdG8gb25lIG9yZSBtb3JlIERlc3RpbmF0aW9uIFBvcnRhbHMgYnkgbmFtZS5cbiAqICAgLSBEZXN0aW5hdGlvbiBQb3J0YWw6IEEgVmlydHVhbCBub2RlIHdoaWNoIGFjdHMgYXMgYSBkZXN0aW5hdGlvbiBidXQgYWxzbyBoYXMgYSBwb2ludGVyIGJhY2sgdG8gdGhlXG4gKiAgICAgICBQb3J0YWwgU291cmNlXG4gKlxuICogICAjIyBFeGFtcGxlOlxuICpcbiAqICAgR2l2ZW4gdGhpcyBjb2RlOlxuICpcbiAqICAgYGBgdHlwZXNjcmlwdFxuICogICBjb25zdCBQYXJlbnQgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgICByZXR1cm4gKFxuICogICAgICAgPENoaWxkPlxuICogICAgICAgICBQcm9qZWN0aW9uIENvbnRlbnRcbiAqICAgICAgICAgPHNwYW4gcTpzbG90PVwic2Vjb25kYXJ5XCI+U2Vjb25kYXJ5IENvbnRlbnQ8L3NwYW4+XG4gKiAgICAgICAgIDxzcGFuIHE6c2xvdD1cIm90aGVyXCI+T3RoZXIgQ29udGVudDwvc3Bhbj5cbiAqICAgICAgIDwvQ2hpbGQ+XG4gKiAgICAgfTtcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBDaGlsZCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICAgIHJldHVybiAoXG4gKiAgICAgICA8ZGl2PlxuICogICAgICAgICA8U2xvdD5EZWZhdWx0IFByaW1hcnk8L1Nsb3Q+XG4gKiAgICAgICAgIDxTbG90IG5hbWU9XCJzZWNvbmRhcnlcIj5EZWZhdWx0IFNlY29uZGFyeTwvU2xvdD5cbiAqICAgICAgIDwvZGl2PlxuICogICAgICk7XG4gKiAgIH0pO1xuICpcbiAqICAgcmVuZGVyKDxib2R5PjxtYWluPjxQYXJlbnQvPjwvbWFpbj48Ym9keT4pO1xuICogYGBgXG4gKlxuICogICBXaWxsIHJlbmRlciBsaWtlIHNvOlxuICpcbiAqICAgYGBgaHRtbFxuICogICA8Ym9keT5cbiAqICAgICA8bWFpbj5cbiAqICAgICAgIDxWaXJ0dWFsIFBhcmVudCBxOnBvcnRhbD1cIjozQTtzZWNvbmRhcnk6M0I7b3RoZXI6NUFcIiBxOmlkPVwiMkFcIj5cbiAqICAgICAgICAgPFZpcnR1YWwgQ2hpbGQ+XG4gKiAgICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICAgIDxWaXJ0dWFsIFNsb3QgcTppZD1cIjNBXCIgcTpwb3J0YWw9XCJeOjJBOzozQVwiPiBQcm9qZWN0aW9uIENvbnRlbnQgPC9WaXJ0dWFsPlxuICogICAgICAgICAgICAgPFZpcnR1YWwgU2xvdCBxOmlkPVwiM0JcIiBxOnBvcnRhbD1cIl46MkE7OjNCXCI+XG4gKiAgICAgICAgICAgICAgIDxzcGFuIHE6c2xvdD1cInNlY29uZGFyeVwiPlNlY29uZGFyeSBDb250ZW50PC9zcGFuPlxuICogICAgICAgICAgICAgPC9WaXJ0dWFsPlxuICogICAgICAgICAgIDwvZGl2PlxuICogICAgICAgICA8L1ZpcnR1YWw+XG4gKiAgICAgICA8L1ZpcnR1YWw+XG4gKiAgICAgPC9tYWluPlxuICogICAgIDxxOnRlbXBsYXRlPlxuICogICAgICAgPFZpcnR1YWwgcTpwb3J0YWw9XCJeOjJBXCIgcTppZD1cIjVBXCI+XG4gKiAgICAgICAgIDxzcGFuIHE6c2xvdD1cIm90aGVyXCI+T3RoZXIgQ29udGVudDwvc3Bhbj5cbiAqICAgICAgIDwvVmlydHVhbD5cbiAqICAgICAgIDxWaXJ0dWFsIHE6cG9ydGFsPVwiXjoyQVwiIHE6aWQ9XCIzQVwiPlxuICogICAgICAgICBEZWZhdWx0IFByaW1hcnlcbiAqICAgICAgIDwvVmlydHVhbD5cbiAqICAgICAgIDxWaXJ0dWFsIHE6cG9ydGFsPVwiXjoyQVwiIHE6aWQ9XCIzQlwiPlxuICogICAgICAgICBEZWZhdWx0IFNlY29uZGFyeVxuICogICAgICAgPC9WaXJ0dWFsPlxuICogICAgIDxxOnRlbXBsYXRlPlxuICogICA8L2JvZHk+XG4gKiBgYGBcbiAqXG4gKiAgIEV4cGxhbmF0aW9uOlxuICpcbiAqICAgLSBgcTpwb3J0YWw9XCI6M0E7c2Vjb25kYXJ5OjNCO290aGVyOjVBXCJgXG4gKlxuICogICAgICAgLSBOYW1lOiBgYDsgUmVmOiBgM0FgIC0gV2hlcmUgdGhlIGRlZmF1bHQgY29udGVudCB3ZW50LlxuICogICAgICAgLSBOYW1lOiBgc2Vjb25kYXJ5YDsgUmVmOiBgM0JgIC0gV2hlcmUgdGhlICdzZWNvbmRhcnknIGNvbnRlbnQgd2VudC5cbiAqICAgICAgIC0gTmFtZTogYG90aGVyYDsgUmVmOiBgJUFgIC0gV2hlcmUgdGhlIGBvdGhlcmAgY29udGVudCB3ZW50LiAoTm90aWNlIGluIHRoaXMgY2FzZSB0aGUgY29udGVudCBpc1xuICogICAgICAgICAgICAgICBsZWZ0IG92ZXIgYW5kIG9zIGl0IGVuZHMgdXAgZW4gdGhlIGBxOnRlbXBsYXRlc2AuIFdlIGNhbiBzaGFyZSBvbmUgJzxxOnRlbXBsYXRlPmBcbiAqICAgICAgICAgICAgICAgZm9yIGFsbCBsZWZ0IG92ZXIgY29udGVudC4pXG4gKiAgIC0gYHE6cG9ydGFsPVwiXjoyQTs6M0FcImBcbiAqXG4gKiAgICAgICAtIE5hbWU6IGBeYDsgUmVmOiBgMkFgIC0gU3BlY2lhbCBwb2ludGVyIHRvIHRoZSBwYXJlbnQgcG9ydGFsXG4gKiAgICAgICAtIE5hbWU6IGBgOyBSZWY6IGAzQWAgLSBMb2NhdGlvbiBvZiB0aGUgZGVmYXVsdCBjb250ZW50IGluIGNhc2UgdGhlcmUgaXMgbm90aGluZyBwcm9qZWN0ZWQgaGVyZS5cbiAqXG4gKiAgICMjIFJlbmRlcmluZ1xuICpcbiAqICAgRHVyaW5nIFNTUiwgdGhlIHJlbmRlcmVkIGNhbiBkZWxheSByZW5kZXJpbmcgdGhlIEpTWCBub2RlcyB1bnRpbCBjb3JyZWN0IHBvcnRhbCBjb21lcyB1cC4gVGhlIElEXG4gKiAgIHN5c3RlbSBpcyBhbHJlYWR5IGNhbiBtYWtlIGxhenkgcmVmZXJlbmNlcyB0byB0aGUgTm9kZXMuXG4gKlxuICogICBDbGllbnQgc2lkZSByZW5kZXJpbmcgZG9lcyBub3QgbmVlZCB0byBkZWFsIHdpdGggSURzIG9yIGA8cTp0ZW1wbGF0ZT5gIGFzIHVuLXJlbmRlcmVkIHZOb2RlcyBkb1xuICogICBub3QgbmVlZCB0byBiZSBzZXJpYWxpemVkIGludG8gRE9NLCBhbmQgY2FuIHJlbWFpbiBvbiBoZWFwLlxuICpcbiAqICAgIyMgQ29udGV4dFxuICpcbiAqICAgV2hlbiBsb29raW5nIHVwIGNvbnRleHQgaXQgaXMgcG9zc2libGUgdG8gZm9sbG93IHlvdSByZWFsIHJlbmRlciBwYXJlbnRzIG9yIGZvbGxvdyB0aGUgcG9ydGFscy5cbiAqICAgQWxsIGluZm9ybWF0aW9uIGlzIGVuY29kZWQgaW4gdGhlIHBvcnRhbHMuXG4gKlxuICogICAjIyBTbG90IFByb2plY3Rpb25cbiAqXG4gKiAgIFRoZSB1bHRpbWF0ZSB1c2VyIG9mIHBvcnRhbHMgaXMgU2xvdCBwcm9qZWN0aW9uLiBCdXQgdGhlIHZOb2RlIGRvIG5vdCB1bmRlcnN0YW5kIHNsb3RzLCByYXRoZXJcbiAqICAgdGhleSB1bmRlcnN0YW5kIHBvcnRhbCBwcmltaXRpdmVzIHdoaWNoIG1ha2VzIFNsb3QgaW1wbGVtZW50YXRpb24gbXVjaCBzaW1wbGVyLlxuICpcbiAqICAgTk9URTogVGhlIHBvcnRhbHMgbmVlZCB0byBoYXZlIElEcyBkdXJpbmcgc2VyaWFsaXphdGlvbiBvbmx5LiBPbmNlIHJ1bnRpbWUgdGFrZXMgb3ZlciwgdGhlcmUgaXNcbiAqICAgbm8gbmVlZCB0byBoYXZlIElEcyBvciB0byB3cml0ZSBvdmVyZmxvdyB0byB0aGUgYDxxOnRlbXBsYXRlPmBcbiAqL1xuXG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgcXdpa0RlYnVnVG9TdHJpbmcgfSBmcm9tICcuLi9kZWJ1Zyc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBhc3NlcnRFcXVhbCwgYXNzZXJ0RmFsc2UsIGFzc2VydFRydWUgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7XG4gIHR5cGUgQ29udGFpbmVyLFxuICBERUJVR19UWVBFLFxuICBRQ29udGFpbmVyVmFsdWUsXG4gIHR5cGUgUUVsZW1lbnQsXG4gIFZpcnR1YWxUeXBlLFxuICBWaXJ0dWFsVHlwZU5hbWUsXG59IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBpc1RleHQgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvZWxlbWVudCc7XG5pbXBvcnQge1xuICBkYW5nZXJvdXNseVNldElubmVySFRNTCxcbiAgZGVidWdTdHlsZVNjb3BlSWRQcmVmaXhBdHRyLFxuICBFTEVNRU5UX0lELFxuICBFTEVNRU5UX1BST1BTLFxuICBFTEVNRU5UX1NFUSxcbiAgRUxFTUVOVF9TRVFfSURYLFxuICBJVEVSQVRJT05fSVRFTV9NVUxUSSxcbiAgSVRFUkFUSU9OX0lURU1fU0lOR0xFLFxuICBPblJlbmRlclByb3AsXG4gIFFfUFJPUFNfU0VQQVJBVE9SLFxuICBRQ29udGFpbmVyQXR0cixcbiAgUUNvbnRhaW5lckF0dHJFbmQsXG4gIFFDb250YWluZXJJc2xhbmQsXG4gIFFDb250YWluZXJJc2xhbmRFbmQsXG4gIFFDdHhBdHRyLFxuICBRSWdub3JlLFxuICBRSWdub3JlRW5kLFxuICBRU2NvcGVkU3R5bGUsXG4gIFFTbG90LFxuICBRU3R5bGUsXG4gIFFTdXNwZW5zZVJlc29sdmVkLFxuICBRU3VzcGVuc2VSZXN1bHRQYXJlbnQsXG4gIFFUYXJnZXRFbGVtZW50LFxufSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBpc0h0bWxFbGVtZW50IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IFZOb2RlRGF0YUNoYXIgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUtZGF0YS10eXBlcyc7XG5pbXBvcnQge1xuICBfZ2V0UUNvbnRhaW5lckVsZW1lbnQsXG4gIGdldERvbUNvbnRhaW5lcixcbiAgZ2V0RG9tQ29udGFpbmVyRnJvbVFDb250YWluZXJFbGVtZW50LFxufSBmcm9tICcuL2RvbS1jb250YWluZXInO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGllbnRDb250YWluZXIsXG4gIHR5cGUgQ29udGFpbmVyRWxlbWVudCxcbiAgdHlwZSBRRG9jdW1lbnQsXG4gIFZOb2RlRmxhZ3MsXG4gIFZOb2RlRmxhZ3NJbmRleCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBnZXROZXdFbGVtZW50TmFtZXNwYWNlRGF0YSxcbiAgdm5vZGVfY2xvbmVFbGVtZW50V2l0aE5hbWVzcGFjZSxcbiAgdm5vZGVfZ2V0RWxlbWVudE5hbWVzcGFjZUZsYWdzLFxufSBmcm9tICcuL3Zub2RlLW5hbWVzcGFjZSc7XG5pbXBvcnQgeyBtZXJnZU1hcHMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFwcyc7XG5pbXBvcnQgeyBpc0h0bWxBdHRyaWJ1dGVBbkV2ZW50TmFtZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9ldmVudC1uYW1lcyc7XG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92bm9kZSc7XG5pbXBvcnQgeyBFbGVtZW50Vk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvZWxlbWVudC12bm9kZSc7XG5pbXBvcnQgeyBUZXh0Vk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdGV4dC12bm9kZSc7XG5pbXBvcnQgeyBWaXJ0dWFsVk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdmlydHVhbC12bm9kZSc7XG5pbXBvcnQgeyBhZGRWTm9kZU9wZXJhdGlvbiB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92bm9kZS1kaXJ0eSc7XG5pbXBvcnQge1xuICBjcmVhdGVEZWxldGVPcGVyYXRpb24sXG4gIGNyZWF0ZUluc2VydE9yTW92ZU9wZXJhdGlvbixcbiAgY3JlYXRlUmVtb3ZlQWxsQ2hpbGRyZW5PcGVyYXRpb24sXG4gIGNyZWF0ZVNldEF0dHJpYnV0ZU9wZXJhdGlvbixcbiAgY3JlYXRlU2V0VGV4dE9wZXJhdGlvbixcbiAgRGVsZXRlT3BlcmF0aW9uLFxuICBJbnNlcnRPck1vdmVPcGVyYXRpb24sXG4gIFJlbW92ZUFsbENoaWxkcmVuT3BlcmF0aW9uLFxuICBTZXRBdHRyaWJ1dGVPcGVyYXRpb24sXG4gIFNldFRleHRPcGVyYXRpb24sXG59IGZyb20gJy4uL3NoYXJlZC92bm9kZS90eXBlcy9kb20tdm5vZGUtb3BlcmF0aW9uJztcbmltcG9ydCB7IGlzQ3Vyc29yIH0gZnJvbSAnLi4vc2hhcmVkL2N1cnNvci9jdXJzb3InO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgX0VGRkVDVF9CQUNLX1JFRiB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvYmFja3JlZic7XG5pbXBvcnQgdHlwZSB7IFZOb2RlT3BlcmF0aW9uIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3R5cGVzL2RvbS12bm9kZS1vcGVyYXRpb24nO1xuaW1wb3J0IHsgX2ZsdXNoSm91cm5hbCB9IGZyb20gJy4uL3NoYXJlZC9jdXJzb3IvY3Vyc29yLWZsdXNoJztcbmltcG9ydCB7IGNyZWF0ZUZhc3RHZXR0ZXIsIGZhc3RHZXR0ZXIgfSBmcm9tICcuL3Byb3RvdHlwZS11dGlscyc7XG5pbXBvcnQgeyBkZWNvZGVWTm9kZURhdGFTdHJpbmcgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvY2hhcmFjdGVyLWVzY2FwaW5nJztcbmltcG9ydCB7IGlzUXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHsgcGFyc2VRUkwgfSBmcm9tICcuLi9zaGFyZWQvc2VyZGVzL2luZGV4JztcbmltcG9ydCB7IHJ1bkV2ZW50SGFuZGxlclFSTCB9IGZyb20gJy4vcnVuLXFybCc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgdHlwZSBWTm9kZUpvdXJuYWwgPSBBcnJheTxWTm9kZU9wZXJhdGlvbj47XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfbmV3RWxlbWVudCA9IChcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgZWxlbWVudE5hbWU6IHN0cmluZyxcbiAga2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuKTogRWxlbWVudFZOb2RlID0+IHtcbiAgaXNEZXYgJiYgYXNzZXJ0RXF1YWwoZmFzdE5vZGVUeXBlKGVsZW1lbnQpLCAxIC8qIEVMRU1FTlRfTk9ERSAqLywgJ0V4cGVjdGluZyBlbGVtZW50IG5vZGUuJyk7XG4gIGNvbnN0IHZub2RlOiBFbGVtZW50Vk5vZGUgPSBuZXcgRWxlbWVudFZOb2RlKFxuICAgIGtleSxcbiAgICBWTm9kZUZsYWdzLkVsZW1lbnQgfCBWTm9kZUZsYWdzLkluZmxhdGVkIHwgKC0xIDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCksIC8vIEZsYWdcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBlbGVtZW50LFxuICAgIGVsZW1lbnROYW1lXG4gICk7XG4gIChlbGVtZW50IGFzIFFFbGVtZW50KS52Tm9kZSA9IHZub2RlO1xuICByZXR1cm4gdm5vZGU7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfbmV3VW5NYXRlcmlhbGl6ZWRFbGVtZW50ID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50Vk5vZGUgPT4ge1xuICBpc0RldiAmJiBhc3NlcnRFcXVhbChmYXN0Tm9kZVR5cGUoZWxlbWVudCksIDEgLyogRUxFTUVOVF9OT0RFICovLCAnRXhwZWN0aW5nIGVsZW1lbnQgbm9kZS4nKTtcbiAgY29uc3Qgdm5vZGU6IEVsZW1lbnRWTm9kZSA9IG5ldyBFbGVtZW50Vk5vZGUoXG4gICAgbnVsbCxcbiAgICBWTm9kZUZsYWdzLkVsZW1lbnQgfCAoLTEgPDwgVk5vZGVGbGFnc0luZGV4LnNoaWZ0KSwgLy8gRmxhZ1xuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICBlbGVtZW50LFxuICAgIHVuZGVmaW5lZFxuICApO1xuICAoZWxlbWVudCBhcyBRRWxlbWVudCkudk5vZGUgPSB2bm9kZTtcbiAgcmV0dXJuIHZub2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX25ld1NoYXJlZFRleHQgPSAoXG4gIHByZXZpb3VzVGV4dE5vZGU6IFRleHRWTm9kZSB8IG51bGwsXG4gIHNoYXJlZFRleHROb2RlOiBUZXh0IHwgbnVsbCxcbiAgdGV4dENvbnRlbnQ6IHN0cmluZ1xuKTogVGV4dFZOb2RlID0+IHtcbiAgaXNEZXYgJiZcbiAgICBzaGFyZWRUZXh0Tm9kZSAmJlxuICAgIGFzc2VydEVxdWFsKGZhc3ROb2RlVHlwZShzaGFyZWRUZXh0Tm9kZSksIDMgLyogVEVYVF9OT0RFICovLCAnRXhwZWN0aW5nIHRleHQgbm9kZS4nKTtcbiAgY29uc3Qgdm5vZGU6IFRleHRWTm9kZSA9IG5ldyBUZXh0Vk5vZGUoXG4gICAgVk5vZGVGbGFncy5UZXh0IHwgKC0xIDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCksIC8vIEZsYWdcbiAgICBudWxsLCAvLyBQYXJlbnRcbiAgICBwcmV2aW91c1RleHROb2RlLCAvLyBQcmV2aW91cyBUZXh0Tm9kZSAodXN1YWxseSBmaXJzdCBjaGlsZClcbiAgICBudWxsLCAvLyBOZXh0IHNpYmxpbmdcbiAgICBudWxsLFxuICAgIHNoYXJlZFRleHROb2RlLFxuICAgIHRleHRDb250ZW50XG4gICk7XG4gIHJldHVybiB2bm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9uZXdUZXh0ID0gKHRleHROb2RlOiBUZXh0LCB0ZXh0Q29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGV4dFZOb2RlID0+IHtcbiAgY29uc3Qgdm5vZGU6IFRleHRWTm9kZSA9IG5ldyBUZXh0Vk5vZGUoXG4gICAgVk5vZGVGbGFncy5UZXh0IHwgVk5vZGVGbGFncy5JbmZsYXRlZCB8ICgtMSA8PCBWTm9kZUZsYWdzSW5kZXguc2hpZnQpLCAvLyBGbGFnc1xuICAgIG51bGwsIC8vIFBhcmVudFxuICAgIG51bGwsIC8vIE5vIHByZXZpb3VzIHNpYmxpbmdcbiAgICBudWxsLCAvLyBXZSBtYXkgaGF2ZSBhIG5leHQgc2libGluZy5cbiAgICBudWxsLFxuICAgIHRleHROb2RlLCAvLyBUZXh0Tm9kZVxuICAgIHRleHRDb250ZW50IC8vIFRleHQgQ29udGVudFxuICApO1xuICBpc0RldiAmJiBhc3NlcnRFcXVhbChmYXN0Tm9kZVR5cGUodGV4dE5vZGUpLCAzIC8qIFRFWFRfTk9ERSAqLywgJ0V4cGVjdGluZyB0ZXh0IG5vZGUuJyk7XG4gIGlzRGV2ICYmIGFzc2VydEZhbHNlKHZub2RlX2lzRWxlbWVudFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgVGV4dFZOb2RlLicpO1xuICBpc0RldiAmJiBhc3NlcnRUcnVlKHZub2RlX2lzVGV4dFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgVGV4dFZOb2RlLicpO1xuICBpc0RldiAmJiBhc3NlcnRGYWxzZSh2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIFRleHRWTm9kZS4nKTtcbiAgcmV0dXJuIHZub2RlO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX25ld1ZpcnR1YWwgPSAoKTogVmlydHVhbFZOb2RlID0+IHtcbiAgY29uc3Qgdm5vZGU6IFZpcnR1YWxWTm9kZSA9IG5ldyBWaXJ0dWFsVk5vZGUoXG4gICAgbnVsbCxcbiAgICBWTm9kZUZsYWdzLlZpcnR1YWwgfCAoLTEgPDwgVk5vZGVGbGFnc0luZGV4LnNoaWZ0KSwgLy8gRmxhZ3NcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbFxuICApO1xuICBpc0RldiAmJiBhc3NlcnRGYWxzZSh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIFRleHRWTm9kZS4nKTtcbiAgaXNEZXYgJiYgYXNzZXJ0RmFsc2Uodm5vZGVfaXNUZXh0Vk5vZGUodm5vZGUpLCAnSW5jb3JyZWN0IGZvcm1hdCBvZiBUZXh0Vk5vZGUuJyk7XG4gIGlzRGV2ICYmIGFzc2VydFRydWUodm5vZGVfaXNWaXJ0dWFsVk5vZGUodm5vZGUpLCAnSW5jb3JyZWN0IGZvcm1hdCBvZiBUZXh0Vk5vZGUuJyk7XG4gIHJldHVybiB2bm9kZTtcbn07XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfaXNWTm9kZSA9ICh2Tm9kZTogYW55KTogdk5vZGUgaXMgVk5vZGUgPT4ge1xuICByZXR1cm4gdk5vZGUgaW5zdGFuY2VvZiBWTm9kZTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB2bm9kZV9pc0VsZW1lbnRWTm9kZSA9ICh2Tm9kZTogVk5vZGUpOiB2Tm9kZSBpcyBFbGVtZW50Vk5vZGUgPT4ge1xuICByZXR1cm4gKHZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5FbGVtZW50KSA9PT0gVk5vZGVGbGFncy5FbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2lzRWxlbWVudE9yVGV4dFZOb2RlID0gKHZOb2RlOiBWTm9kZSk6IHZOb2RlIGlzIEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSA9PiB7XG4gIGlzRGV2ICYmIGFzc2VydERlZmluZWQodk5vZGUsICdNaXNzaW5nIHZOb2RlJyk7XG4gIGNvbnN0IGZsYWcgPSB2Tm9kZS5mbGFncztcbiAgcmV0dXJuIChmbGFnICYgVk5vZGVGbGFncy5FTEVNRU5UX09SX1RFWFRfTUFTSykgIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfaXNFbGVtZW50T3JWaXJ0dWFsVk5vZGUgPSAoXG4gIHZOb2RlOiBWTm9kZVxuKTogdk5vZGUgaXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlID0+IHtcbiAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZCh2Tm9kZSwgJ01pc3Npbmcgdk5vZGUnKTtcbiAgY29uc3QgZmxhZyA9IHZOb2RlLmZsYWdzO1xuICByZXR1cm4gKGZsYWcgJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVklSVFVBTF9NQVNLKSAhPT0gMDtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB2bm9kZV9pc01hdGVyaWFsaXplZCA9ICh2Tm9kZTogVk5vZGUpOiBib29sZWFuID0+IHtcbiAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZCh2Tm9kZSwgJ01pc3Npbmcgdk5vZGUnKTtcbiAgY29uc3QgZmxhZyA9IHZOb2RlLmZsYWdzO1xuICByZXR1cm4gKFxuICAgIChmbGFnICYgVk5vZGVGbGFncy5FbGVtZW50KSA9PT0gVk5vZGVGbGFncy5FbGVtZW50ICYmXG4gICAgKHZOb2RlIGFzIEVsZW1lbnRWTm9kZSkuZmlyc3RDaGlsZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgKHZOb2RlIGFzIEVsZW1lbnRWTm9kZSkubGFzdENoaWxkICE9PSB1bmRlZmluZWRcbiAgKTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB2bm9kZV9pc1RleHRWTm9kZSA9ICh2Tm9kZTogVk5vZGUpOiB2Tm9kZSBpcyBUZXh0Vk5vZGUgPT4ge1xuICByZXR1cm4gKHZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5UZXh0KSA9PT0gVk5vZGVGbGFncy5UZXh0O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX2lzVmlydHVhbFZOb2RlID0gKHZOb2RlOiBWTm9kZSk6IHZOb2RlIGlzIFZpcnR1YWxWTm9kZSA9PiB7XG4gIHJldHVybiAodk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLlZpcnR1YWwpID09PSBWTm9kZUZsYWdzLlZpcnR1YWw7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfaXNQcm9qZWN0aW9uID0gKHZOb2RlOiBWTm9kZSk6IHZOb2RlIGlzIFZpcnR1YWxWTm9kZSA9PiB7XG4gIGlzRGV2ICYmIGFzc2VydERlZmluZWQodk5vZGUsICdNaXNzaW5nIHZOb2RlJyk7XG4gIGNvbnN0IGZsYWcgPSB2Tm9kZS5mbGFncztcbiAgcmV0dXJuIChcbiAgICAoZmxhZyAmIFZOb2RlRmxhZ3MuVmlydHVhbCkgPT09IFZOb2RlRmxhZ3MuVmlydHVhbCAmJiB2bm9kZV9nZXRQcm9wKHZOb2RlLCBRU2xvdCwgbnVsbCkgIT09IG51bGxcbiAgKTtcbn07XG5cbmNvbnN0IGVuc3VyZVRleHRWTm9kZSA9ICh2Tm9kZTogVk5vZGUpOiBUZXh0Vk5vZGUgPT4ge1xuICBpc0RldiAmJlxuICAgIGFzc2VydFRydWUoXG4gICAgICB2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSksXG4gICAgICAnRXhwZWN0aW5nIFRleHRWTm9kZSB3YXM6ICcgKyB2bm9kZV9nZXROb2RlVHlwZU5hbWUodk5vZGUpXG4gICAgKTtcbiAgcmV0dXJuIHZOb2RlIGFzIFRleHRWTm9kZTtcbn07XG5cbmNvbnN0IGVuc3VyZUVsZW1lbnRPclZpcnR1YWxWTm9kZSA9ICh2Tm9kZTogVk5vZGUpID0+IHtcbiAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZCh2Tm9kZSwgJ01pc3Npbmcgdk5vZGUnKTtcbiAgaXNEZXYgJiZcbiAgICBhc3NlcnRUcnVlKFxuICAgICAgKHZOb2RlLmZsYWdzICYgVk5vZGVGbGFncy5FTEVNRU5UX09SX1ZJUlRVQUxfTUFTSykgIT09IDAsXG4gICAgICAnRXhwZWN0aW5nIEVsZW1lbnRWTm9kZSBvciBWaXJ0dWFsVk5vZGUgd2FzOiAnICsgdm5vZGVfZ2V0Tm9kZVR5cGVOYW1lKHZOb2RlKVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlRWxlbWVudFZOb2RlID0gKHZOb2RlOiBWTm9kZSk6IEVsZW1lbnRWTm9kZSA9PiB7XG4gIGlzRGV2ICYmXG4gICAgYXNzZXJ0VHJ1ZShcbiAgICAgIHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSxcbiAgICAgICdFeHBlY3RpbmcgRWxlbWVudFZOb2RlIHdhczogJyArIHZub2RlX2dldE5vZGVUeXBlTmFtZSh2Tm9kZSlcbiAgICApO1xuICByZXR1cm4gdk5vZGUgYXMgRWxlbWVudFZOb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldE5vZGVUeXBlTmFtZSA9ICh2Tm9kZTogVk5vZGUpOiBzdHJpbmcgPT4ge1xuICBpZiAodk5vZGUpIHtcbiAgICBjb25zdCBmbGFncyA9IHZOb2RlLmZsYWdzO1xuICAgIHN3aXRjaCAoZmxhZ3MgJiBWTm9kZUZsYWdzLlRZUEVfTUFTSykge1xuICAgICAgY2FzZSBWTm9kZUZsYWdzLkVsZW1lbnQ6XG4gICAgICAgIHJldHVybiAnRWxlbWVudCc7XG4gICAgICBjYXNlIFZOb2RlRmxhZ3MuVmlydHVhbDpcbiAgICAgICAgcmV0dXJuICdWaXJ0dWFsJztcbiAgICAgIGNhc2UgVk5vZGVGbGFncy5UZXh0OlxuICAgICAgICByZXR1cm4gJ1RleHQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJzx1bmtub3duPic7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0UHJvcCA9IDxUID0gdW5rbm93bj4oXG4gIHZOb2RlOiBWTm9kZSxcbiAga2V5OiBzdHJpbmcsXG4gIGdldE9iamVjdDogKChpZDogc3RyaW5nKSA9PiB1bmtub3duKSB8IG51bGxcbik6IFQgfCBudWxsID0+IHtcbiAgaWYgKHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSB8fCB2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2Tm9kZSkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHZOb2RlLnByb3BzPy5ba2V5XSA/PyBudWxsO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIGdldE9iamVjdCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0T2JqZWN0KHZhbHVlKSBhcyBUIHwgbnVsbDtcbiAgICAgIHZOb2RlLnByb3BzIVtrZXldID0gcmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlIGFzIFQgfCBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX3NldFByb3AgPSAodk5vZGU6IFZOb2RlLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHZhbHVlID09IG51bGwgJiYgdk5vZGUucHJvcHMpIHtcbiAgICBkZWxldGUgdk5vZGUucHJvcHNba2V5XTtcbiAgfSBlbHNlIHtcbiAgICB2Tm9kZS5wcm9wcyB8fD0ge307XG4gICAgdk5vZGUucHJvcHNba2V5XSA9IHZhbHVlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfc2V0QXR0ciA9IChcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICB2Tm9kZTogVk5vZGUsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogYW55LFxuICBzY29wZWRTdHlsZUlkUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuKSA9PiB7XG4gIGlmICh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2Tm9kZSkpIHtcbiAgICBxVGVzdCAmJlxuICAgICAgc2NvcGVkU3R5bGVJZFByZWZpeCAmJlxuICAgICAgdm5vZGVfc2V0UHJvcCh2Tm9kZSwgZGVidWdTdHlsZVNjb3BlSWRQcmVmaXhBdHRyLCBzY29wZWRTdHlsZUlkUHJlZml4KTtcbiAgICB2bm9kZV9zZXRQcm9wKHZOb2RlLCBrZXksIHZhbHVlKTtcbiAgICBhZGRWTm9kZU9wZXJhdGlvbihcbiAgICAgIGpvdXJuYWwsXG4gICAgICBjcmVhdGVTZXRBdHRyaWJ1dGVPcGVyYXRpb24oXG4gICAgICAgIHZOb2RlLm5vZGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHNjb3BlZFN0eWxlSWRQcmVmaXgsXG4gICAgICAgICh2Tm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuTlNfc3ZnKSAhPT0gMFxuICAgICAgKVxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9lbnN1cmVFbGVtZW50S2V5SW5mbGF0ZWQgPSAodm5vZGU6IEVsZW1lbnRWTm9kZSkgPT4ge1xuICBpZiAodm5vZGUua2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZSh2bm9kZS5ub2RlLCBRX1BST1BTX1NFUEFSQVRPUik7XG4gIGlmICh2YWx1ZSkge1xuICAgIHZub2RlLmtleSA9IHZhbHVlO1xuICB9XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkID0gKGNvbnRhaW5lcjogQ29udGFpbmVyLCB2bm9kZTogVk5vZGUpID0+IHtcbiAgaWYgKCh2bm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuSU5GTEFURURfVFlQRV9NQVNLKSA9PT0gVk5vZGVGbGFncy5FbGVtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudFZOb2RlID0gdm5vZGUgYXMgRWxlbWVudFZOb2RlO1xuICAgIGVsZW1lbnRWTm9kZS5mbGFncyBePSBWTm9kZUZsYWdzLkluZmxhdGVkO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50Vk5vZGUubm9kZSBhcyBRRWxlbWVudDtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgIGxldCBpc0NvbnN0ID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYXR0cmlidXRlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1tpZHhdO1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lO1xuICAgICAgLy8gV2UgbmVlZCB0byBncmFiIGFsbCBoYW5kbGVycywgZXZlbiBjb25zdCBvbmVzLCBiZWNhdXNlIGFzIHNvb24gYXMgcURpc3BhdGNoIGV4aXN0cywgcXdpa2xvYWRlciB3aWxsIHVzZSBpdFxuICAgICAgaWYgKGlzSHRtbEF0dHJpYnV0ZUFuRXZlbnROYW1lKGtleSkpIHtcbiAgICAgICAgcmVnaXN0ZXJRcmxIYW5kbGVycyhhdHRyLCBrZXksIGNvbnRhaW5lciwgZWxlbWVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ29uc3QpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZywgd2UncmUgb25seSBpbnRlcmVzdGVkIGluIHJlY292ZXJpbmcgZXZlbnQgaGFuZGxlcnMgZnJvbSB0aGUgY29uc3QgYXR0cmlidXRlcy5cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBRX1BST1BTX1NFUEFSQVRPUiB8fCAha2V5KSB7XG4gICAgICAgIC8vIFNWRyBpbiBEb21pbm8gZG9lcyBub3Qgc3VwcG9ydCAnOicgc28gaXQgYmVjb21lcyBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICAgIC8vIGFsbCBhdHRyaWJ1dGVzIGFmdGVyIHRoZSAnOicgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlLCBhbmQgc28gd2UgaWdub3JlIHRoZW0uXG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgLy8gZG9uJ3QgYXNzaWduIGVtcHR5IHN0cmluZyBhcyBhIGtleVxuICAgICAgICAgIGVsZW1lbnRWTm9kZS5rZXkgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpc0NvbnN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoUUNvbnRhaW5lckF0dHIpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBRQ29udGFpbmVyVmFsdWUuSFRNTCkge1xuICAgICAgICAgIHZub2RlX3NldFByb3AoZWxlbWVudFZOb2RlLCAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLCBlbGVtZW50LmlubmVySFRNTCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFFDb250YWluZXJWYWx1ZS5URVhUICYmICd2YWx1ZScgaW4gZWxlbWVudCkge1xuICAgICAgICAgIHZub2RlX3NldFByb3AoZWxlbWVudFZOb2RlLCAndmFsdWUnLCBlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyLnZhbHVlO1xuICAgICAgICB2bm9kZV9zZXRQcm9wKGVsZW1lbnRWTm9kZSwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHZub2RlX2dldFByb3A8dW5rbm93bj4oZWxlbWVudFZOb2RlLCBJVEVSQVRJT05fSVRFTV9TSU5HTEUsIG51bGwpICE9PSBudWxsIHx8XG4gICAgICB2bm9kZV9nZXRQcm9wPHVua25vd24+KGVsZW1lbnRWTm9kZSwgSVRFUkFUSU9OX0lURU1fTVVMVEksIG51bGwpICE9PSBudWxsXG4gICAgKSB7XG4gICAgICB2bm9kZS5mbGFncyB8PSBWTm9kZUZsYWdzLkhhc0l0ZXJhdGlvbkl0ZW1zO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgdW53cmFwRXZlbnRIYW5kbGVyUXJsID0gKFxuICBoYW5kbGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZVFSTD5cbik6IFFSTDwoLi4uYXJnczogYW55W10pID0+IHZvaWQ+ID0+IHtcbiAgaWYgKGhhbmRsZXIuJHN5bWJvbCQgPT09ICdfcnVuJykge1xuICAgIGNvbnN0IGlubmVySGFuZGxlciA9IGhhbmRsZXIuZ2V0Q2FwdHVyZWQoKT8uWzBdO1xuICAgIGlmIChpc1FybChpbm5lckhhbmRsZXIpKSB7XG4gICAgICByZXR1cm4gaW5uZXJIYW5kbGVyIGFzIFFSTDwoLi4uYXJnczogYW55W10pID0+IHZvaWQ+O1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGFuZGxlciBhcyBRUkw8KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPjtcbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUXJsSGFuZGxlcnMoYXR0cjogQXR0ciwga2V5OiBzdHJpbmcsIGNvbnRhaW5lcjogQ29udGFpbmVyLCBlbGVtZW50OiBRRWxlbWVudCkge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIudmFsdWU7XG4gIGNvbnN0IHNjb3BlZEtlYmFiTmFtZSA9IGtleS5zbGljZSgyKTtcbiAgY29uc3QgcXJscyA9IHZhbHVlLnNwbGl0KCd8Jyk7XG4gIGNvbnN0IGhhbmRsZXJzOiBFdmVudEhhbmRsZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHFybHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdW53cmFwRXZlbnRIYW5kbGVyUXJsKHBhcnNlUVJMKHFybHNbaV0sIGNvbnRhaW5lcikpO1xuICAgIC8vIFRoZXNlIFFSTHMgYXJlIG1vc3RseSBfcnVuIGFuZCBfdGFzayBhbmQgZG9uJ3QgbmVlZCB3cmFwcGluZyB3aXRoIHJldHJ5T25Qcm9taXNlXG4gICAgaGFuZGxlcnMucHVzaChydW5FdmVudEhhbmRsZXJRUkwuYmluZChudWxsLCBoYW5kbGVyKSk7XG4gIH1cbiAgKGVsZW1lbnQuX3FEaXNwYXRjaCB8fD0ge30pW3Njb3BlZEtlYmFiTmFtZV0gPSBoYW5kbGVycy5sZW5ndGggPT09IDEgPyBoYW5kbGVyc1swXSA6IGhhbmRsZXJzO1xufVxuXG4vKiogV2Fsa3MgdGhlIGRpcmVjdCBjaGlsZHJlbiBvZiBhIHBhcmVudCBub2RlIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggY2hpbGQuICovXG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfd2Fsa0RpcmVjdENoaWxkcmVuKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHZQYXJlbnQ6IFZOb2RlLFxuICBjYWxsYmFjazogKHZOb2RlOiBFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGUsIHZQYXJlbnQ6IFZOb2RlIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbik6IHZvaWQge1xuICBsZXQgdk5vZGUgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZQYXJlbnQpO1xuICB3aGlsZSAodk5vZGUpIHtcbiAgICBpZiAodm5vZGVfaXNUZXh0Vk5vZGUodk5vZGUpKSB7XG4gICAgICB2bm9kZV9lbnN1cmVUZXh0SW5mbGF0ZWQoam91cm5hbCwgdk5vZGUpO1xuICAgICAgY2FsbGJhY2sodk5vZGUsIHZQYXJlbnQpO1xuICAgIH0gZWxzZSBpZiAodm5vZGVfaXNFbGVtZW50Vk5vZGUodk5vZGUpKSB7XG4gICAgICBjYWxsYmFjayh2Tm9kZSwgdlBhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciB2aXJ0dWFsIG5vZGVzLCB3ZSBuZWVkIHRvIHdhbGsgdGhlaXIgY2hpbGRyZW5cbiAgICAgIHZub2RlX3dhbGtEaXJlY3RDaGlsZHJlbihqb3VybmFsLCB2Tm9kZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICB2Tm9kZSA9IHZOb2RlLm5leHRTaWJsaW5nIGFzIFZOb2RlIHwgbnVsbDtcbiAgfVxufVxuXG4vKiogV2Fsa3MgdGhlIFZOb2RlIHRyZWUgYW5kIG1hdGVyaWFsaXplIGl0IHVzaW5nIGB2bm9kZV9nZXRGaXJzdENoaWxkYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2bm9kZV93YWxrVk5vZGUoXG4gIHZOb2RlOiBWTm9kZSxcbiAgY2FsbGJhY2s/OiAodk5vZGU6IFZOb2RlLCB2UGFyZW50OiBWTm9kZSB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4pOiB2b2lkIHtcbiAgbGV0IHZDdXJzb3I6IFZOb2RlIHwgbnVsbCA9IHZOb2RlO1xuICAvLyBEZXB0aCBmaXJzdCB0cmF2ZXJzYWxcbiAgaWYgKHZub2RlX2lzVGV4dFZOb2RlKHZOb2RlKSkge1xuICAgIGNhbGxiYWNrPy4odk5vZGUsIG51bGwpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgdlBhcmVudDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgZG8ge1xuICAgIGlmIChjYWxsYmFjaz8uKHZDdXJzb3IsIHZQYXJlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZGaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Q3Vyc29yKTtcbiAgICBpZiAodkZpcnN0Q2hpbGQpIHtcbiAgICAgIHZDdXJzb3IgPSB2Rmlyc3RDaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBPdXQgb2YgY2hpbGRyZW5cbiAgICBpZiAodkN1cnNvciA9PT0gdk5vZGUpIHtcbiAgICAgIC8vIHdlIGFyZSB3aGVyZSB3ZSBzdGFydGVkLCB0aGlzIG1lYW5zIHRoYXQgdk5vZGUgaGFzIG5vIGNoaWxkcmVuLCBzbyB3ZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT3V0IG9mIGNoaWxkcmVuLCBnbyB0byBuZXh0IHNpYmxpbmdcbiAgICBjb25zdCB2TmV4dFNpYmxpbmcgPSB2Q3Vyc29yLm5leHRTaWJsaW5nIGFzIFZOb2RlIHwgbnVsbDtcbiAgICBpZiAodk5leHRTaWJsaW5nKSB7XG4gICAgICB2Q3Vyc29yID0gdk5leHRTaWJsaW5nO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIE91dCBvZiBzaWJsaW5ncywgZ28gdG8gcGFyZW50XG4gICAgdlBhcmVudCA9IHZDdXJzb3IucGFyZW50O1xuICAgIHdoaWxlICh2UGFyZW50KSB7XG4gICAgICBpZiAodlBhcmVudCA9PT0gdk5vZGUpIHtcbiAgICAgICAgLy8gV2UgYXJlIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgd2UgYXJlIGRvbmUuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZOZXh0UGFyZW50U2libGluZyA9IHZQYXJlbnQubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsO1xuICAgICAgaWYgKHZOZXh0UGFyZW50U2libGluZykge1xuICAgICAgICB2Q3Vyc29yID0gdk5leHRQYXJlbnRTaWJsaW5nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZQYXJlbnQgPSB2UGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgaWYgKHZQYXJlbnQgPT0gbnVsbCkge1xuICAgICAgLy8gV2UgYXJlIGRvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IHdoaWxlICh0cnVlIGFzIGJvb2xlYW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfZ2V0RE9NQ29udGFpbmVyKHZOb2RlOiBWTm9kZSk6IENsaWVudENvbnRhaW5lciB8IG51bGwge1xuICBsZXQgY3Vyc29yOiBWTm9kZSB8IG51bGwgPSB2Tm9kZTtcbiAgd2hpbGUgKGN1cnNvcikge1xuICAgIGlmICh2bm9kZV9pc0VsZW1lbnRWTm9kZShjdXJzb3IpKSB7XG4gICAgICBjb25zdCBxQ29udGFpbmVyRWxlbWVudCA9IF9nZXRRQ29udGFpbmVyRWxlbWVudChjdXJzb3Iubm9kZSk7XG4gICAgICBpZiAoIXFDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldERvbUNvbnRhaW5lckZyb21RQ29udGFpbmVyRWxlbWVudChxQ29udGFpbmVyRWxlbWVudCEpO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjdXJzb3IucGFyZW50O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHByZXZpb3VzL25leHQgc2libGluZyBidXQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgRE9NLlxuICpcbiAqIEdpdmVuOlxuICpcbiAqIGBgYFxuICogPGRpdj5cbiAqICAgPD5hPC8+XG4gKiAgIDw+XG4gKiAgICAgPD48Lz5cbiAqICAgICA8PmI8Lz5cbiAqICAgICA8PjwvPlxuICogICA8Lz5cbiAqICAgPD5jPC8+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIFRoZW46XG4gKlxuICogLSBOZXh0OiBpZiB3ZSBzdGFydCBhdCBgYWAgdGhlIG5leHQgRE9NIHNpYmxpbmcgaXMgYGJgLCB0aGFuIGBjYC5cbiAqIC0gUHJldmlvdXM6IGlmIHdlIHN0YXJ0IGF0IGBjYCB0aGUgbmV4dCBET00gc2libGluZyBpcyBgYmAsIHRoYW4gYGFgLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFN0YXJ0aW5nIG5vZGVcbiAqIEBwYXJhbSBuZXh0RGlyZWN0aW9uIC0gRGlyZWN0aW9uIHRvIHNlYXJjaCB0cnVlPW5leHQsIGZhbHNlPXByZXZpb3VzXG4gKiBAcGFyYW0gZGVzY2VuZCAtIElmIHRydWUsIHRoYW4gd2Ugd2lsbCBkZXNjZW5kIGludG8gdGhlIGNoaWxkcmVuIGZpcnN0LlxuICogQHJldHVybnNcbiAqL1xuLy8gVE9ETzogc3BsaXQgdGhpcyBmdW5jdGlvbiBpbnRvIHR3bywgb25lIGZvciBuZXh0IGFuZCBvbmUgZm9yIHByZXZpb3VzLlxuY29uc3Qgdm5vZGVfZ2V0RG9tU2libGluZyA9IChcbiAgdk5vZGU6IFZOb2RlLFxuICBuZXh0RGlyZWN0aW9uOiBib29sZWFuLFxuICBkZXNjZW5kOiBib29sZWFuXG4pOiBFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGUgfCBudWxsID0+IHtcbiAgbGV0IGN1cnNvcjogVk5vZGUgfCBudWxsID0gdk5vZGU7XG4gIC8vIGZpcnN0IG1ha2Ugc3VyZSB3ZSBoYXZlIGEgRE9NIG5vZGUgb3Igbm8gY2hpbGRyZW4uXG4gIHdoaWxlIChkZXNjZW5kICYmIGN1cnNvciAmJiB2bm9kZV9pc1ZpcnR1YWxWTm9kZShjdXJzb3IpKSB7XG4gICAgY29uc3QgY2hpbGQ6IFZOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG5leHREaXJlY3Rpb24gPyBjdXJzb3IuZmlyc3RDaGlsZCA6IGN1cnNvci5sYXN0Q2hpbGQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChjaGlsZC5mbGFncyAmIFZOb2RlRmxhZ3MuRUxFTUVOVF9PUl9URVhUX01BU0spIHtcbiAgICAgIHJldHVybiBjaGlsZCBhcyBFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGU7XG4gICAgfVxuICAgIGN1cnNvciA9IGNoaWxkO1xuICB9XG4gIHdoaWxlIChjdXJzb3IpIHtcbiAgICAvLyBMb29rIGF0IHRoZSBwcmV2aW91cy9uZXh0IHNpYmxpbmcuXG4gICAgbGV0IHNpYmxpbmc6IFZOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG5leHREaXJlY3Rpb25cbiAgICAgID8gY3Vyc29yLm5leHRTaWJsaW5nXG4gICAgICA6IGN1cnNvci5wcmV2aW91c1NpYmxpbmc7XG4gICAgaWYgKHNpYmxpbmcgJiYgc2libGluZy5mbGFncyAmIFZOb2RlRmxhZ3MuRUxFTUVOVF9PUl9URVhUX01BU0spIHtcbiAgICAgIC8vIHdlIGZvdW5kIGEgcHJldmlvdXMvbmV4dCBET00gbm9kZSwgcmV0dXJuIGl0LlxuICAgICAgcmV0dXJuIHNpYmxpbmcgYXMgRWxlbWVudFZOb2RlIHwgVGV4dFZOb2RlO1xuICAgIH0gZWxzZSBpZiAoIXNpYmxpbmcpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzaWJsaW5nIHRoYW4gd2FsayB1cCB0aGUgdHJlZSB1bnRpbCB5b3UgZmluZCBvbmUuXG4gICAgICBsZXQgdmlydHVhbDogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkID0gY3Vyc29yLnBhcmVudDtcbiAgICAgIGlmICh2aXJ0dWFsICYmICF2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2aXJ0dWFsKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChcbiAgICAgICAgdmlydHVhbCAmJlxuICAgICAgICAhKHNpYmxpbmcgPSBuZXh0RGlyZWN0aW9uID8gdmlydHVhbC5uZXh0U2libGluZyA6IHZpcnR1YWwucHJldmlvdXNTaWJsaW5nKVxuICAgICAgKSB7XG4gICAgICAgIHZpcnR1YWwgPSB2aXJ0dWFsLnBhcmVudDtcblxuICAgICAgICBpZiAodmlydHVhbCAmJiAhdm5vZGVfaXNWaXJ0dWFsVk5vZGUodmlydHVhbCkpIHtcbiAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUgaXMgbm90IHZpcnR1YWwsIHNvIHdlIGFyZSBkb25lIGhlcmUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc2libGluZykge1xuICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IGZpbmQgYSBzaWJsaW5nLCB0aGFuIHdlIGFyZSBkb25lLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh2bm9kZV9pc1RleHRWTm9kZShzaWJsaW5nKSAmJiB2aXJ0dWFsICYmIHZub2RlX2lzRWxlbWVudFZOb2RlKHZpcnR1YWwpKSB7XG4gICAgICAgIC8vIHNpYmxpbmcgdG8gdGhlIHJlYWwgZWxlbWVudCBpcyBhIHRleHQgbm9kZSwgdGhpcyBpcyBub3QgYSBzaWJsaW5nXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBdCB0aGlzIHBvaW50IGBzaWJsaW5nYCBpcyBhIG5leHQgbm9kZSB0byBsb29rIGF0LlxuICAgIC8vIE5leHQgc3RlcCBpcyB0byBkZXNjZW5kIHVudGlsIHdlIGZpbmQgYSBET00gZG9uZS5cbiAgICB3aGlsZSAoc2libGluZykge1xuICAgICAgY3Vyc29yID0gc2libGluZztcbiAgICAgIGlmIChjdXJzb3IuZmxhZ3MgJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVEVYVF9NQVNLICYmIHZub2RlX2dldE5vZGUoY3Vyc29yKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBhIG5vZGUsIGJlY2F1c2UgaXQgY291bGQgYmUgYSB0ZXh0IG5vZGUgd2hpY2ggaXNcbiAgICAgICAgLy8gemVybyBsZW5ndGggYW5kIHdoaWNoIGRvZXMgbm90IGhhdmUgYSByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgICByZXR1cm4gY3Vyc29yIGFzIEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZTtcbiAgICAgIH1cbiAgICAgIHNpYmxpbmcgPSBuZXh0RGlyZWN0aW9uXG4gICAgICAgID8gKGN1cnNvciBhcyBWaXJ0dWFsVk5vZGUpLmZpcnN0Q2hpbGRcbiAgICAgICAgOiAoY3Vyc29yIGFzIFZpcnR1YWxWTm9kZSkubGFzdENoaWxkO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgaGVyZSB3ZSBkaWQgbm90IGZpbmQgYW55dGhpbmcgYW5kIHdlIG5lZWQgdG8gZ28gdXAgdGhlIHRyZWUgYWdhaW4uXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkID0gKGpvdXJuYWw6IFZOb2RlSm91cm5hbCwgdm5vZGU6IFRleHRWTm9kZSkgPT4ge1xuICBjb25zdCB0ZXh0Vk5vZGUgPSBlbnN1cmVUZXh0Vk5vZGUodm5vZGUpO1xuICBjb25zdCBmbGFncyA9IHRleHRWTm9kZS5mbGFncztcbiAgaWYgKChmbGFncyAmIFZOb2RlRmxhZ3MuSW5mbGF0ZWQpID09PSAwKSB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHZub2RlX2dldERvbVBhcmVudCh2bm9kZSwgdHJ1ZSk7XG4gICAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZChwYXJlbnROb2RlLCAnTWlzc2luZyBwYXJlbnQgbm9kZS4nKTtcbiAgICBjb25zdCBzaGFyZWRUZXh0Tm9kZSA9IHRleHRWTm9kZS5ub2RlIGFzIFRleHQ7XG4gICAgY29uc3QgZG9jID0gZmFzdE93bmVyRG9jdW1lbnQocGFyZW50Tm9kZSEpO1xuICAgIC8vIFdhbGsgdGhlIHByZXZpb3VzIHNpYmxpbmdzIGFuZCBpbmZsYXRlIHRoZW0uXG4gICAgbGV0IHZDdXJzb3IgPSB2bm9kZV9nZXREb21TaWJsaW5nKHZub2RlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgLy8gSWYgdGV4dCBub2RlIGlzIDAgbGVuZ3RoLCB0aGFuIHRoZXJlIGlzIG5vIHRleHQgbm9kZS5cbiAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgdXNlIHRoZSBuZXh0IG5vZGUgYXMgYSByZWZlcmVuY2UsIGluIHdoaWNoXG4gICAgLy8gY2FzZSB3ZSBrbm93IHRoYXQgdGhlIG5leHQgbm9kZSBNVVNUIGJlIGVpdGhlciBOVUxMIG9yIGFuIEVsZW1lbnQuXG4gICAgY29uc3Qgbm9kZSA9IHZub2RlX2dldERvbVNpYmxpbmcodm5vZGUsIHRydWUsIHRydWUpO1xuICAgIGNvbnN0IGluc2VydEJlZm9yZU5vZGU6IEVsZW1lbnQgfCBUZXh0IHwgbnVsbCA9XG4gICAgICBzaGFyZWRUZXh0Tm9kZSB8fFxuICAgICAgKCgobm9kZSAmJiB2bm9kZV9pc0VsZW1lbnRWTm9kZShub2RlKSA/IG5vZGUubm9kZSA6IG5vZGU/Lm5vZGUpIHx8IG51bGwpIGFzXG4gICAgICAgIHwgRWxlbWVudFxuICAgICAgICB8IFRleHRcbiAgICAgICAgfCBudWxsKTtcblxuICAgIGxldCBsYXN0UHJldmlvdXNUZXh0Tm9kZSA9IGluc2VydEJlZm9yZU5vZGU7XG4gICAgd2hpbGUgKHZDdXJzb3IgJiYgdm5vZGVfaXNUZXh0Vk5vZGUodkN1cnNvcikpIHtcbiAgICAgIGlmICgodkN1cnNvci5mbGFncyAmIFZOb2RlRmxhZ3MuSW5mbGF0ZWQpID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHZDdXJzb3IudGV4dCEpO1xuICAgICAgICBhZGRWTm9kZU9wZXJhdGlvbihcbiAgICAgICAgICBqb3VybmFsLFxuICAgICAgICAgIGNyZWF0ZUluc2VydE9yTW92ZU9wZXJhdGlvbih0ZXh0Tm9kZSwgcGFyZW50Tm9kZSEsIGxhc3RQcmV2aW91c1RleHROb2RlKVxuICAgICAgICApO1xuICAgICAgICBsYXN0UHJldmlvdXNUZXh0Tm9kZSA9IHRleHROb2RlO1xuICAgICAgICB2Q3Vyc29yLm5vZGUgPSB0ZXh0Tm9kZTtcbiAgICAgICAgdkN1cnNvci5mbGFncyB8PSBWTm9kZUZsYWdzLkluZmxhdGVkO1xuICAgICAgfVxuICAgICAgdkN1cnNvciA9IHZub2RlX2dldERvbVNpYmxpbmcodkN1cnNvciwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvLyBXYWxrIHRoZSBuZXh0IHNpYmxpbmdzIGFuZCBpbmZsYXRlIHRoZW0uXG4gICAgdkN1cnNvciA9IHZub2RlO1xuICAgIHdoaWxlICh2Q3Vyc29yICYmIHZub2RlX2lzVGV4dFZOb2RlKHZDdXJzb3IpKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdm5vZGVfZ2V0RG9tU2libGluZyh2Q3Vyc29yLCB0cnVlLCB0cnVlKTtcbiAgICAgIGNvbnN0IGlzTGFzdE5vZGUgPSBuZXh0ID8gIXZub2RlX2lzVGV4dFZOb2RlKG5leHQpIDogdHJ1ZTtcbiAgICAgIGlmICgodkN1cnNvci5mbGFncyAmIFZOb2RlRmxhZ3MuSW5mbGF0ZWQpID09PSAwKSB7XG4gICAgICAgIGlmIChpc0xhc3ROb2RlICYmIHNoYXJlZFRleHROb2RlKSB7XG4gICAgICAgICAgYWRkVk5vZGVPcGVyYXRpb24oam91cm5hbCwgY3JlYXRlU2V0VGV4dE9wZXJhdGlvbihzaGFyZWRUZXh0Tm9kZSwgdkN1cnNvci50ZXh0ISkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHZDdXJzb3IudGV4dCEpO1xuICAgICAgICAgIGFkZFZOb2RlT3BlcmF0aW9uKFxuICAgICAgICAgICAgam91cm5hbCxcbiAgICAgICAgICAgIGNyZWF0ZUluc2VydE9yTW92ZU9wZXJhdGlvbih0ZXh0Tm9kZSwgcGFyZW50Tm9kZSEsIGluc2VydEJlZm9yZU5vZGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2Q3Vyc29yLm5vZGUgPSB0ZXh0Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICB2Q3Vyc29yLmZsYWdzIHw9IFZOb2RlRmxhZ3MuSW5mbGF0ZWQ7XG4gICAgICB9XG4gICAgICB2Q3Vyc29yID0gbmV4dDtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9sb2NhdGUgPSAocm9vdFZOb2RlOiBFbGVtZW50Vk5vZGUsIGlkOiBzdHJpbmcgfCBFbGVtZW50KTogVk5vZGUgPT4ge1xuICBlbnN1cmVFbGVtZW50Vk5vZGUocm9vdFZOb2RlKTtcbiAgbGV0IHZOb2RlOiBWTm9kZSA9IHJvb3RWTm9kZTtcbiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHJvb3RWTm9kZS5ub2RlIGFzIENvbnRhaW5lckVsZW1lbnQ7XG4gIGNvbnN0IHFWTm9kZVJlZnMgPSBjb250YWluZXJFbGVtZW50LnFWTm9kZVJlZnM7XG4gIGxldCBlbGVtZW50T2Zmc2V0OiBudW1iZXIgPSAtMTtcbiAgbGV0IHJlZkVsZW1lbnQ6IEVsZW1lbnQgfCBWTm9kZTtcbiAgY29uc3QgbG9jYWxJZCA9IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgPyBpZCA6ICcnO1xuICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykge1xuICAgIGlzRGV2ICYmIGFzc2VydERlZmluZWQocVZOb2RlUmVmcywgJ01pc3NpbmcgcVZOb2RlUmVmcy4nKTtcbiAgICBlbGVtZW50T2Zmc2V0ID0gcGFyc2VJbnQobG9jYWxJZCk7XG4gICAgcmVmRWxlbWVudCA9IHFWTm9kZVJlZnMhLmdldChlbGVtZW50T2Zmc2V0KSE7XG4gIH0gZWxzZSB7XG4gICAgcmVmRWxlbWVudCA9IGlkO1xuXG4gICAgY29uc3QgcUVsZW1lbnQgPSByZWZFbGVtZW50IGFzIFFFbGVtZW50O1xuICAgIGNvbnN0IGNhY2hlZFZOb2RlID0gcUVsZW1lbnQudk5vZGU7XG4gICAgaWYgKGNhY2hlZFZOb2RlKSB7XG4gICAgICByZXR1cm4gY2FjaGVkVk5vZGU7XG4gICAgfVxuICAgIGlmIChfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIHFFbGVtZW50Ll9xU2VnbWVudCkge1xuICAgICAgdk5vZGUgPSB2bm9kZV9uZXdVbk1hdGVyaWFsaXplZEVsZW1lbnQocmVmRWxlbWVudCk7XG4gICAgICB2bm9kZV9lbnN1cmVFbGVtZW50S2V5SW5mbGF0ZWQodk5vZGUgYXMgRWxlbWVudFZOb2RlKTtcbiAgICAgIHFFbGVtZW50LnZOb2RlID0gdk5vZGU7XG4gICAgICByZXR1cm4gdk5vZGU7XG4gICAgfVxuICB9XG4gIGlzRGV2ICYmXG4gICAgYXNzZXJ0RGVmaW5lZChcbiAgICAgIHJlZkVsZW1lbnQsXG4gICAgICAnTWlzc2luZyByZWZFbGVtZW50ICcgKyAodHlwZW9mIGlkID09PSAnc3RyaW5nJyA/IGBmb3IgaWQgJHtpZH1gIDogJycpXG4gICAgKTtcbiAgaWYgKCF2bm9kZV9pc1ZOb2RlKHJlZkVsZW1lbnQpKSB7XG4gICAgaXNEZXYgJiZcbiAgICAgIGFzc2VydFRydWUoXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuY29udGFpbnMocmVmRWxlbWVudCksXG4gICAgICAgIGBDb3VsZG4ndCBmaW5kIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgY29udGFpbmVyIHdoaWxlIGxvY2F0aW5nIHRoZSBWTm9kZS5gXG4gICAgICApO1xuICAgIGlmIChfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIChyZWZFbGVtZW50IGFzIFFFbGVtZW50KS5fcVNlZ21lbnQpIHtcbiAgICAgIHZOb2RlID0gKHJlZkVsZW1lbnQgYXMgUUVsZW1lbnQpLnZOb2RlIHx8IHZub2RlX25ld1VuTWF0ZXJpYWxpemVkRWxlbWVudChyZWZFbGVtZW50KTtcbiAgICAgIHZub2RlX2Vuc3VyZUVsZW1lbnRLZXlJbmZsYXRlZCh2Tm9kZSBhcyBFbGVtZW50Vk5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgdGhlIHZub2RlLlxuICAgICAgbGV0IHBhcmVudCA9IHJlZkVsZW1lbnQ7XG4gICAgICBjb25zdCBlbGVtZW50UGF0aDogRWxlbWVudFtdID0gW3JlZkVsZW1lbnRdO1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQgIT09IGNvbnRhaW5lckVsZW1lbnQgJiYgIShwYXJlbnQgYXMgUUVsZW1lbnQpLnZOb2RlKSB7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50ITtcbiAgICAgICAgZWxlbWVudFBhdGgucHVzaChwYXJlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKChwYXJlbnQgYXMgUUVsZW1lbnQpLnZOb2RlKSB7XG4gICAgICAgIHZOb2RlID0gKHBhcmVudCBhcyBRRWxlbWVudCkudk5vZGUgYXMgRWxlbWVudFZOb2RlO1xuICAgICAgfVxuICAgICAgLy8gU3RhcnQgYXQgcm9vdFZOb2RlIGFuZCBmb2xsb3cgdGhlIGBlbGVtZW50UGF0aGAgdG8gZmluZCB0aGUgdm5vZGUuXG4gICAgICBmb3IgKGxldCBpID0gZWxlbWVudFBhdGgubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdk5vZGUgPSB2bm9kZV9nZXRWTm9kZUZvckNoaWxkTm9kZSh2Tm9kZSBhcyBFbGVtZW50Vk5vZGUsIGVsZW1lbnRQYXRoW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudE9mZnNldCAhPSAtMSkge1xuICAgICAgKHJlZkVsZW1lbnQgYXMgUUVsZW1lbnQpLnZOb2RlID0gdk5vZGU7XG4gICAgICBxVk5vZGVSZWZzIS5zZXQoZWxlbWVudE9mZnNldCwgdk5vZGUgYXMgRWxlbWVudFZOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdk5vZGUgPSByZWZFbGVtZW50O1xuICB9XG4gIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gcHJvY2VzcyB2aXJ0dWFsIG5vZGUgc2VhcmNoLlxuICAgIGNvbnN0IGlkTGVuZ3RoID0gbG9jYWxJZC5sZW5ndGg7XG4gICAgbGV0IGlkeCA9IGluZGV4T2ZBbHBoYW51bWVyaWMobG9jYWxJZCwgaWRMZW5ndGgpO1xuICAgIGxldCBjaGlsZElkeCA9IDA7XG4gICAgd2hpbGUgKGlkeCA8IGlkTGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IGxvY2FsSWQuY2hhckNvZGVBdChpZHgpO1xuICAgICAgY2hpbGRJZHggKj0gMjYgLyogYS16ICovO1xuICAgICAgaWYgKGNoID49IDk3IC8qIGEgKi8pIHtcbiAgICAgICAgLy8gaXMgbG93ZXJjYXNlXG4gICAgICAgIGNoaWxkSWR4ICs9IGNoIC0gOTcgLyogYSAqLztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlzIHVwcGVyY2FzZVxuICAgICAgICBjaGlsZElkeCArPSBjaCAtIDY1IC8qIEEgKi87XG4gICAgICAgIHZOb2RlID0gdm5vZGVfZ2V0Q2hpbGRXaXRoSWR4KHZOb2RlLCBjaGlsZElkeCk7XG4gICAgICAgIGNoaWxkSWR4ID0gMDtcbiAgICAgIH1cbiAgICAgIGlkeCsrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdk5vZGU7XG59O1xuXG5jb25zdCB2bm9kZV9nZXRDaGlsZFdpdGhJZHggPSAodk5vZGU6IFZOb2RlLCBjaGlsZElkeDogbnVtYmVyKTogVk5vZGUgPT4ge1xuICBsZXQgY2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZOb2RlKTtcbiAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZChjaGlsZCwgJ01pc3NpbmcgY2hpbGQuJyk7XG4gIHdoaWxlIChjaGlsZCEuZmxhZ3MgPj4+IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCAhPT0gY2hpbGRJZHgpIHtcbiAgICBjaGlsZCA9IGNoaWxkIS5uZXh0U2libGluZyBhcyBWTm9kZSB8IG51bGw7XG4gICAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZChjaGlsZCwgJ01pc3NpbmcgY2hpbGQuJyk7XG4gIH1cbiAgcmV0dXJuIGNoaWxkITtcbn07XG5cbmNvbnN0IHZOb2RlU3RhY2s6IFZOb2RlW10gPSBbXTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRWTm9kZUZvckNoaWxkTm9kZSA9IChcbiAgdk5vZGU6IEVsZW1lbnRWTm9kZSxcbiAgY2hpbGRFbGVtZW50OiBFbGVtZW50XG4pOiBFbGVtZW50Vk5vZGUgPT4ge1xuICBlbnN1cmVFbGVtZW50Vk5vZGUodk5vZGUpO1xuICBsZXQgY2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZOb2RlKTtcbiAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZChjaGlsZCwgJ01pc3NpbmcgY2hpbGQuJyk7XG4gIHdoaWxlIChjaGlsZCAmJiAoY2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50Vk5vZGUgPyBjaGlsZC5ub2RlICE9PSBjaGlsZEVsZW1lbnQgOiB0cnVlKSkge1xuICAgIGlmICh2bm9kZV9pc1ZpcnR1YWxWTm9kZShjaGlsZCkpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBjaGlsZC5uZXh0U2libGluZyBhcyBWTm9kZSB8IG51bGw7XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZChjaGlsZCk7XG4gICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICBuZXh0ICYmIHZOb2RlU3RhY2sucHVzaChuZXh0KTtcbiAgICAgICAgY2hpbGQgPSBmaXJzdENoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBuZXh0IHx8ICh2Tm9kZVN0YWNrLmxlbmd0aCA/IHZOb2RlU3RhY2sucG9wKCkhIDogbnVsbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5leHQgPSBjaGlsZC5uZXh0U2libGluZyBhcyBWTm9kZSB8IG51bGw7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBjaGlsZCA9IG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZCA9IG5leHQgfHwgdk5vZGVTdGFjay5wb3AoKSE7XG4gICAgICB9XG4gICAgfVxuICAgIGlzRGV2ICYmIGFzc2VydERlZmluZWQoY2hpbGQsICdNaXNzaW5nIGNoaWxkLicpO1xuICB9XG4gIHdoaWxlICh2Tm9kZVN0YWNrLmxlbmd0aCkge1xuICAgIHZOb2RlU3RhY2sucG9wKCk7XG4gIH1cbiAgZW5zdXJlRWxlbWVudFZOb2RlKGNoaWxkISk7XG4gIGlzRGV2ICYmIGFzc2VydEVxdWFsKChjaGlsZCBhcyBFbGVtZW50Vk5vZGUpLm5vZGUsIGNoaWxkRWxlbWVudCwgJ0NoaWxkIG5vdCBmb3VuZC4nKTtcbiAgLy8gY29uc29sZS5sb2coJ0ZPVU5EJywgY2hpbGRbVk5vZGVQcm9wcy5ub2RlXT8ub3V0ZXJIVE1MKTtcbiAgcmV0dXJuIGNoaWxkIGFzIEVsZW1lbnRWTm9kZTtcbn07XG5cbmNvbnN0IGluZGV4T2ZBbHBoYW51bWVyaWMgPSAoaWQ6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBsZXQgaWR4ID0gaWQuY2hhckNvZGVBdCgwKSA9PT0gNDUgLyogLSAqLyA/IDEgOiAwO1xuICB3aGlsZSAoaWR4IDwgbGVuZ3RoKSB7XG4gICAgY29uc3QgY2ggPSBpZC5jaGFyQ29kZUF0KGlkeCk7XG4gICAgaWYgKGNoID49IDQ4IC8qIDAgKi8gJiYgY2ggPD0gNTcgLyogOSAqLykge1xuICAgICAgaWR4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfY3JlYXRlRXJyb3JEaXYgPSAoXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgZG9jdW1lbnQ6IERvY3VtZW50LFxuICBob3N0OiBWTm9kZSxcbiAgZXJyOiBFcnJvclxuKSA9PiB7XG4gIGNvbnN0IGVycm9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZXJyb3JlZC1ob3N0Jyk7XG4gIGlmIChlcnIgJiYgZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAoZXJyb3JEaXYgYXMgYW55KS5wcm9wcyA9IHsgZXJyb3I6IGVyciB9O1xuICB9XG4gIGVycm9yRGl2LnNldEF0dHJpYnV0ZSgncTprZXknLCAnX2Vycm9yXycpO1xuXG4gIGNvbnN0IHZFcnJvckRpdiA9IHZub2RlX25ld0VsZW1lbnQoZXJyb3JEaXYsICdlcnJvcmVkLWhvc3QnKTtcblxuICBpZiAodm5vZGVfaXNFbGVtZW50T3JUZXh0Vk5vZGUoaG9zdCkpIHtcbiAgICB2bm9kZV9pbnNlcnRCZWZvcmUoam91cm5hbCwgdkVycm9yRGl2LCBob3N0LCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBmaXJzdCBjb2xsZWN0IGFsbCB0aGUgY2hpbGRyZW4sIHdlIGNhbid0IG1vdmUgdGhlbSB3aGlsZSB3YWxraW5nIHRoZSBjaGlsZHJlblxuICAgIGNvbnN0IGNoaWxkcmVuOiBWTm9kZVtdID0gW107XG4gICAgdm5vZGVfd2Fsa0RpcmVjdENoaWxkcmVuKGpvdXJuYWwsIGhvc3QsICh2Tm9kZSkgPT4ge1xuICAgICAgY2hpbGRyZW4ucHVzaCh2Tm9kZSk7XG4gICAgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdm5vZGVfaW5zZXJ0QmVmb3JlKGpvdXJuYWwsIHZFcnJvckRpdiwgY2hpbGRyZW5baV0sIG51bGwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdkVycm9yRGl2O1xufTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCB2bm9kZV9qb3VybmFsVG9TdHJpbmcgPSAoam91cm5hbDogVk5vZGVKb3VybmFsKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGluZXMgPSBbJ0pPVVJOQUw6J107XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBsZW5ndGggPSBqb3VybmFsLmxlbmd0aDtcblxuICBmdW5jdGlvbiBzdHJpbmdpZnkoLi4uYXJnczogYW55W10pIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYXJnc1xuICAgICAgICAubWFwKChhcmcpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfSBlbHNlIGlmIChhcmcgJiYgaXNIdG1sRWxlbWVudChhcmcpKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gYXJnLm91dGVySFRNTDtcbiAgICAgICAgICAgIGNvbnN0IGhhc0NoaWxkTm9kZXMgPSAhIWFyZy5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGh0bWwuaW5kZXhPZignPicpO1xuICAgICAgICAgICAgY29uc3QgbGFzdElkeCA9IGh0bWwubGFzdEluZGV4T2YoJzwnKTtcbiAgICAgICAgICAgIHJldHVybiBpZHggPiAwICYmIGhhc0NoaWxkTm9kZXNcbiAgICAgICAgICAgICAgPyBodG1sLnN1YnN0cmluZygwLCBpZHggKyAxKSArICcuLi4nICsgaHRtbC5zdWJzdHJpbmcobGFzdElkeClcbiAgICAgICAgICAgICAgOiBodG1sO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGlzVGV4dChhcmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnLm5vZGVWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcgJylcbiAgICApO1xuICB9XG5cbiAgd2hpbGUgKGlkeCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IG9wID0gam91cm5hbFtpZHgrK107XG5cbiAgICBpZiAob3AgaW5zdGFuY2VvZiBTZXRUZXh0T3BlcmF0aW9uKSB7XG4gICAgICBzdHJpbmdpZnkoJ1NldFRleHQnKTtcbiAgICAgIHN0cmluZ2lmeSgnICAnLCBvcC50ZXh0KTtcbiAgICAgIHN0cmluZ2lmeSgnICAgLS0+Jywgb3AudGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKG9wIGluc3RhbmNlb2YgU2V0QXR0cmlidXRlT3BlcmF0aW9uKSB7XG4gICAgICBzdHJpbmdpZnkoJ1NldEF0dHJpYnV0ZScpO1xuICAgICAgc3RyaW5naWZ5KCcgICcsIG9wLmF0dHJOYW1lKTtcbiAgICAgIHN0cmluZ2lmeSgnICAga2V5Jywgb3AuYXR0ck5hbWUpO1xuICAgICAgc3RyaW5naWZ5KCcgICB2YWwnLCBvcC5hdHRyVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAob3AgaW5zdGFuY2VvZiBEZWxldGVPcGVyYXRpb24pIHtcbiAgICAgIHN0cmluZ2lmeSgnRGVsZXRlJyk7XG4gICAgICBzdHJpbmdpZnkoJyAgIC0tPicsIG9wLnRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChvcCBpbnN0YW5jZW9mIFJlbW92ZUFsbENoaWxkcmVuT3BlcmF0aW9uKSB7XG4gICAgICBzdHJpbmdpZnkoJ1JlbW92ZUFsbENoaWxkcmVuJyk7XG4gICAgICBzdHJpbmdpZnkoJyAgIC0tPicsIG9wLnRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChvcCBpbnN0YW5jZW9mIEluc2VydE9yTW92ZU9wZXJhdGlvbikge1xuICAgICAgc3RyaW5naWZ5KCdJbnNlcnRPck1vdmUnKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IG9wLnBhcmVudDtcbiAgICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IG9wLmJlZm9yZVRhcmdldDtcbiAgICAgIHN0cmluZ2lmeSgnICAnLCBwYXJlbnQpO1xuICAgICAgc3RyaW5naWZ5KCcgICAtLT4nLCBvcC50YXJnZXQpO1xuICAgICAgaWYgKGluc2VydEJlZm9yZSkge1xuICAgICAgICBzdHJpbmdpZnkoJyAgICAgICcsIGluc2VydEJlZm9yZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxpbmVzLnB1c2goJ0VORCBKT1VSTkFMJyk7XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn07XG5leHBvcnQgY29uc3Qgdm5vZGVfYXBwbHlKb3VybmFsID0gX2ZsdXNoSm91cm5hbDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCB2bm9kZV9pbnNlcnRFbGVtZW50QmVmb3JlID0gKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHBhcmVudDogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLFxuICBuZXdDaGlsZDogRWxlbWVudFZOb2RlIHwgVGV4dFZOb2RlLFxuICBpbnNlcnRCZWZvcmU6IFZOb2RlIHwgbnVsbFxuKSA9PiB7XG4gIGVuc3VyZUVsZW1lbnRPclZpcnR1YWxWTm9kZShwYXJlbnQpO1xuICBjb25zdCBwYXJlbnRJc0VsZW1lbnQgPSB2bm9kZV9pc0VsZW1lbnRWTm9kZShwYXJlbnQpO1xuICBpZiAocGFyZW50SXNFbGVtZW50KSB7XG4gICAgZW5zdXJlTWF0ZXJpYWxpemVkKHBhcmVudCk7XG4gIH1cblxuICBjb25zdCBuZXdDaGlsZEN1cnJlbnRQYXJlbnQgPSBuZXdDaGlsZC5wYXJlbnQgYXMgRWxlbWVudFZOb2RlIHwgbnVsbDtcbiAgaWYgKG5ld0NoaWxkID09PSBpbnNlcnRCZWZvcmUpIHtcbiAgICAvLyBpbnZhbGlkIGluc2VydEJlZm9yZS4gV2UgY2FuJ3QgaW5zZXJ0IGJlZm9yZSBzZWxmIHJlZmVyZW5jZVxuICAgIC8vIHByZXZlbnQgaW5maW5pdHkgbG9vcCBhbmQgcHV0dGluZyBzZWxmIHJlZmVyZW5jZSB0byBuZXh0IHNpYmxpbmdcbiAgICBpZiAobmV3Q2hpbGRDdXJyZW50UGFyZW50KSB7XG4gICAgICAvLyBlYXJseSByZXR1cm4sIGFzIHRoZSBuZXdDaGlsZCBpcyBhbHJlYWR5IGluIHRoZSB0cmVlIGFuZCB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB0aGUgbmV3Q2hpbGQgaXMgbm90IGluIHRoZSB0cmVlLCB0aGFuIHdlIGluc2VydCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICBpbnNlcnRCZWZvcmUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZub2RlX3VubGlua0Zyb21PbGRQYXJlbnQoam91cm5hbCwgbmV3Q2hpbGRDdXJyZW50UGFyZW50LCBwYXJlbnQsIG5ld0NoaWxkKTtcblxuICBjb25zdCBjaGlsZE5vZGUgPSBuZXdDaGlsZC5ub2RlO1xuICBjb25zdCBwYXJlbnRJc0RlbGV0ZWQgPSBwYXJlbnQuZmxhZ3MgJiBWTm9kZUZsYWdzLkRlbGV0ZWQ7XG5cbiAgY29uc3QgcGFyZW50Tm9kZSA9IHBhcmVudElzRWxlbWVudCA/IHBhcmVudC5ub2RlIDogdm5vZGVfZ2V0RG9tUGFyZW50KHBhcmVudCwgZmFsc2UpO1xuXG4gIGlmIChwYXJlbnROb2RlICYmICFwYXJlbnRJc0RlbGV0ZWQpIHtcbiAgICBhZGRWTm9kZU9wZXJhdGlvbihcbiAgICAgIGpvdXJuYWwsXG4gICAgICBjcmVhdGVJbnNlcnRPck1vdmVPcGVyYXRpb24oXG4gICAgICAgIGNoaWxkTm9kZSBhcyBFbGVtZW50IHwgVGV4dCxcbiAgICAgICAgcGFyZW50Tm9kZSxcbiAgICAgICAgdm5vZGVfZmluZEluc2VydEJlZm9yZShqb3VybmFsLCBwYXJlbnQsIGluc2VydEJlZm9yZSk/Lm5vZGUgPz8gbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvLyBsaW5rIG5ld0NoaWxkIGludG8gdGhlIHByZXZpb3VzL25leHQgbGlzdFxuICB2bm9kZV9jb25uZWN0U2libGluZ3MocGFyZW50LCBuZXdDaGlsZCwgaW5zZXJ0QmVmb3JlKTtcbiAgaWYgKHBhcmVudElzRGVsZXRlZCkge1xuICAgIC8vIGlmIHRoZSBwYXJlbnQgaXMgZGVsZXRlZCwgdGhlbiB0aGUgbmV3IGNoaWxkIGlzIGFsc28gZGVsZXRlZFxuICAgIG5ld0NoaWxkLmZsYWdzIHw9IFZOb2RlRmxhZ3MuRGVsZXRlZDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2luc2VydFZpcnR1YWxCZWZvcmUgPSAoXG4gIGpvdXJuYWw6IFZOb2RlSm91cm5hbCxcbiAgcGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gIG5ld0NoaWxkOiBWaXJ0dWFsVk5vZGUsXG4gIGluc2VydEJlZm9yZTogVk5vZGUgfCBudWxsXG4pID0+IHtcbiAgZW5zdXJlRWxlbWVudE9yVmlydHVhbFZOb2RlKHBhcmVudCk7XG4gIGNvbnN0IHBhcmVudElzRWxlbWVudCA9IHZub2RlX2lzRWxlbWVudFZOb2RlKHBhcmVudCk7XG4gIGlmIChwYXJlbnRJc0VsZW1lbnQpIHtcbiAgICBlbnN1cmVNYXRlcmlhbGl6ZWQocGFyZW50KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0NoaWxkQ3VycmVudFBhcmVudCA9IG5ld0NoaWxkLnBhcmVudCBhcyBFbGVtZW50Vk5vZGUgfCBudWxsO1xuICBpZiAobmV3Q2hpbGQgPT09IGluc2VydEJlZm9yZSkge1xuICAgIC8vIGludmFsaWQgaW5zZXJ0QmVmb3JlLiBXZSBjYW4ndCBpbnNlcnQgYmVmb3JlIHNlbGYgcmVmZXJlbmNlXG4gICAgLy8gcHJldmVudCBpbmZpbml0eSBsb29wIGFuZCBwdXR0aW5nIHNlbGYgcmVmZXJlbmNlIHRvIG5leHQgc2libGluZ1xuICAgIGlmIChuZXdDaGlsZEN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIC8vIGVhcmx5IHJldHVybiwgYXMgdGhlIG5ld0NoaWxkIGlzIGFscmVhZHkgaW4gdGhlIHRyZWUgYW5kIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHRoZSBuZXdDaGlsZCBpcyBub3QgaW4gdGhlIHRyZWUsIHRoYW4gd2UgaW5zZXJ0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgIGluc2VydEJlZm9yZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdm5vZGVfdW5saW5rRnJvbU9sZFBhcmVudChqb3VybmFsLCBuZXdDaGlsZEN1cnJlbnRQYXJlbnQsIHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gIGNvbnN0IHBhcmVudElzRGVsZXRlZCA9IHBhcmVudC5mbGFncyAmIFZOb2RlRmxhZ3MuRGVsZXRlZDtcbiAgY29uc3QgdGFyZ2V0RWwgPVxuICAgICFwYXJlbnRJc0VsZW1lbnQgJiYgcGFyZW50LmZsYWdzICYgVk5vZGVGbGFncy5IYXNUYXJnZXRFbGVtZW50XG4gICAgICA/IChwYXJlbnQucHJvcHM/LltRVGFyZ2V0RWxlbWVudF0gYXMgRWxlbWVudClcbiAgICAgIDogbnVsbDtcbiAgY29uc3QgZG9tUGFyZW50Vk5vZGUgPSB0YXJnZXRFbFxuICAgID8gbnVsbFxuICAgIDogcGFyZW50SXNFbGVtZW50XG4gICAgICA/IHBhcmVudFxuICAgICAgOiB2bm9kZV9nZXREb21QYXJlbnRWTm9kZShwYXJlbnQsIGZhbHNlKTtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IHRhcmdldEVsIHx8IGRvbVBhcmVudFZOb2RlPy5ub2RlO1xuICBjb25zdCBhZGp1c3RlZEluc2VydEJlZm9yZSA9IHZub2RlX2ZpbmRJbnNlcnRCZWZvcmUoam91cm5hbCwgcGFyZW50LCBpbnNlcnRCZWZvcmUpO1xuICBjb25zdCBhZGp1c3RlZEluc2VydEJlZm9yZU5vZGUgPSBhZGp1c3RlZEluc2VydEJlZm9yZT8ubm9kZSA/PyBudWxsO1xuICBjb25zdCBpc1Byb2plY3Rpb24gPSB2bm9kZV9pc1Byb2plY3Rpb24obmV3Q2hpbGQpO1xuICBpZiAoaXNQcm9qZWN0aW9uICYmIGRvbVBhcmVudFZOb2RlICYmIChkb21QYXJlbnRWTm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuTkFNRVNQQUNFX01BU0spICE9PSAwKSB7XG4gICAgY29uc3QgZG9tUGFyZW50Vk5vZGUgPSB2bm9kZV9nZXREb21QYXJlbnRWTm9kZShwYXJlbnQsIGZhbHNlKTtcbiAgICBjb25zdCBhZGp1c3RlZEluc2VydEJlZm9yZU5vZGUgPVxuICAgICAgdm5vZGVfZmluZEluc2VydEJlZm9yZShqb3VybmFsLCBwYXJlbnQsIGluc2VydEJlZm9yZSk/Lm5vZGUgPz8gbnVsbDtcbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSBwYXJlbnQgbm9kZSBhbmQgdGhlIGRvbSBjaGlsZHJlbiB3aXRoIHRoZSBjb3JyZWN0IG5hbWVzcGFjZXMgYmVmb3JlIHdlIHVubGluayB0aGVcbiAgICAgKiBwcmV2aW91cyBub2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCB3ZSB3aWxsIGVuZCB1cCB3aXRoIHNpdHVhdGlvbnMgd2hlcmUgd2UgaW5mbGF0ZSB0ZXh0XG4gICAgICogbm9kZXMgZnJvbSBzaGFyZWQgdGV4dCBub2RlIG5vdCBjb3JyZWN0bHkuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogPENvbXBvbmVudD5cbiAgICAgKiAgIDxQcm9qZWN0aW9uPmE8L1Byb2plY3Rpb24+XG4gICAgICogICA8UHJvamVjdGlvbj5iPC9Qcm9qZWN0aW9uPlxuICAgICAqIDwvQ29tcG9uZW50PlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogUHJvamVjdGlvbiBub2RlcyBhcmUgdmlydHVhbCBub2Rlcywgc28gdGhleSBkb24ndCBoYXZlIGEgZG9tIHBhcmVudC4gVGhleSB3aWxsIGJlIHdyaXR0ZW4gdG9cbiAgICAgKiB0aGUgcTp0ZW1wbGF0ZSBlbGVtZW50IGlmIG5vdCB2aXNpYmxlIGF0IHRoZSBzdGFydC4gSW5zaWRlIHRoZSBxOnRlbXBsYXRlIGVsZW1lbnQsIHRoZVxuICAgICAqIHByb2plY3Rpb24gbm9kZXMgd2lsbCBiZSBzdHJlYW1lZCBhcyBzaW5nbGUgdGV4dCBub2RlIFwiYWJcIi4gV2UgbmVlZCB0byBzcGxpdCBpdCwgYnV0IGlmIHdlXG4gICAgICogdW5saW5rIHRoZSBwcmV2aW91cyBvciBuZXh0IHNpYmxpbmcsIHdlIGRvbid0IGtub3cgdGhhdCBhZnRlciBcImFcIiBub2RlIGlzIFwiYlwiLiBTbyB3ZSBuZWVkIHRvXG4gICAgICogZmluZCBjaGlsZHJlbiBmaXJzdCAoYW5kIGluZmxhdGUgdGhlbSkuXG4gICAgICovXG4gICAgY29uc3QgeyBlbGVtZW50TmFtZXNwYWNlLCBlbGVtZW50TmFtZXNwYWNlRmxhZyB9ID0gZ2V0TmV3RWxlbWVudE5hbWVzcGFjZURhdGEoXG4gICAgICBkb21QYXJlbnRWTm9kZSxcbiAgICAgIG5ld0NoaWxkXG4gICAgKTtcbiAgICB2bm9kZV93YWxrRGlyZWN0Q2hpbGRyZW4oam91cm5hbCwgbmV3Q2hpbGQsICh2Tm9kZSkgPT4ge1xuICAgICAgaWYgKHZub2RlX2lzVGV4dFZOb2RlKHZOb2RlKSkge1xuICAgICAgICBhZGRWTm9kZU9wZXJhdGlvbihcbiAgICAgICAgICBqb3VybmFsLFxuICAgICAgICAgIGNyZWF0ZUluc2VydE9yTW92ZU9wZXJhdGlvbih2Tm9kZS5ub2RlISwgcGFyZW50Tm9kZSEsIGFkanVzdGVkSW5zZXJ0QmVmb3JlTm9kZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgodk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLk5BTUVTUEFDRV9NQVNLKSAhPT0gZWxlbWVudE5hbWVzcGFjZUZsYWcpIHtcbiAgICAgICAgICBjb25zdCBuZXdDaGlsZEVsZW1lbnQgPSB2bm9kZV9jbG9uZUVsZW1lbnRXaXRoTmFtZXNwYWNlKFxuICAgICAgICAgICAgdk5vZGUsXG4gICAgICAgICAgICBkb21QYXJlbnRWTm9kZSEsXG4gICAgICAgICAgICBlbGVtZW50TmFtZXNwYWNlLFxuICAgICAgICAgICAgZWxlbWVudE5hbWVzcGFjZUZsYWdcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG5ld0NoaWxkRWxlbWVudCkge1xuICAgICAgICAgICAgdk5vZGUubm9kZSA9IG5ld0NoaWxkRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWRkVk5vZGVPcGVyYXRpb24oXG4gICAgICAgICAgam91cm5hbCxcbiAgICAgICAgICBjcmVhdGVJbnNlcnRPck1vdmVPcGVyYXRpb24odk5vZGUubm9kZSEsIHBhcmVudE5vZGUhLCBhZGp1c3RlZEluc2VydEJlZm9yZU5vZGUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoXG4gICAgLy8gZm9yIHByb2plY3Rpb24gdGhlcmUgY2FuIGJlIG5vIHBhcmVudCBub2RlXG4gICAgcGFyZW50Tm9kZSAmJlxuICAgICFwYXJlbnRJc0RlbGV0ZWRcbiAgKSB7XG4gICAgdm5vZGVfd2Fsa0RpcmVjdENoaWxkcmVuKGpvdXJuYWwsIG5ld0NoaWxkLCAodk5vZGUpID0+IHtcbiAgICAgIGFkZFZOb2RlT3BlcmF0aW9uKFxuICAgICAgICBqb3VybmFsLFxuICAgICAgICBjcmVhdGVJbnNlcnRPck1vdmVPcGVyYXRpb24odk5vZGUubm9kZSEsIHBhcmVudE5vZGUsIGFkanVzdGVkSW5zZXJ0QmVmb3JlTm9kZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICB2bm9kZV9jb25uZWN0U2libGluZ3MocGFyZW50LCBuZXdDaGlsZCwgaW5zZXJ0QmVmb3JlKTtcbiAgaWYgKHBhcmVudElzRGVsZXRlZCkge1xuICAgIC8vIGlmIHRoZSBwYXJlbnQgaXMgZGVsZXRlZCwgdGhlbiB0aGUgbmV3IGNoaWxkIGlzIGFsc28gZGVsZXRlZFxuICAgIG5ld0NoaWxkLmZsYWdzIHw9IFZOb2RlRmxhZ3MuRGVsZXRlZDtcbiAgfVxufTtcblxuY29uc3Qgdm5vZGVfZmluZEluc2VydEJlZm9yZSA9IChcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBwYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgaW5zZXJ0QmVmb3JlOiBWTm9kZSB8IG51bGxcbikgPT4ge1xuICBsZXQgYWRqdXN0ZWRJbnNlcnRCZWZvcmU6IEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IG51bGwgPSBudWxsO1xuICBpZiAoaW5zZXJ0QmVmb3JlID09IG51bGwpIHtcbiAgICBpZiAodm5vZGVfaXNWaXJ0dWFsVk5vZGUocGFyZW50KSkge1xuICAgICAgLy8gSWYgYGluc2VydEJlZm9yZWAgaXMgbnVsbCwgdGhhbiB3ZSBuZWVkIHRvIGluc2VydCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgLy8gV2VsbCwgbm90IHF1aXRlLiBJZiB0aGUgcGFyZW50IGlzIGEgdmlydHVhbCBub2RlLCBvdXIgXCJsYXN0IG5vZGVcIiBpcyBub3QgdGhlIHNhbWVcbiAgICAgIC8vIGFzIHRoZSBET00gXCJsYXN0IG5vZGVcIi4gU28gaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gbG9vayBmb3IgdGhlIFwibmV4dCBub2RlXCIgZnJvbVxuICAgICAgLy8gb3VyIHBhcmVudC5cbiAgICAgIGFkanVzdGVkSW5zZXJ0QmVmb3JlID0gdm5vZGVfZ2V0RG9tU2libGluZyhwYXJlbnQsIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodm5vZGVfaXNWaXJ0dWFsVk5vZGUoaW5zZXJ0QmVmb3JlKSkge1xuICAgIC8vIElmIHRoZSBgaW5zZXJ0QmVmb3JlYCBpcyB2aXJ0dWFsLCB0aGFuIHdlIG5lZWQgdG8gZGVzY2VuZCBpbnRvIHRoZSB2aXJ0dWFsIGFuZCBmaW5kIGUgYWN0dWFsXG4gICAgYWRqdXN0ZWRJbnNlcnRCZWZvcmUgPSB2bm9kZV9nZXREb21TaWJsaW5nKGluc2VydEJlZm9yZSwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgYWRqdXN0ZWRJbnNlcnRCZWZvcmUgPSBpbnNlcnRCZWZvcmUgYXMgRWxlbWVudFZOb2RlIHwgVGV4dFZOb2RlO1xuICB9XG4gIGFkanVzdGVkSW5zZXJ0QmVmb3JlICYmXG4gICAgdm5vZGVfaXNUZXh0Vk5vZGUoYWRqdXN0ZWRJbnNlcnRCZWZvcmUpICYmXG4gICAgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkKGpvdXJuYWwsIGFkanVzdGVkSW5zZXJ0QmVmb3JlKTtcbiAgcmV0dXJuIGFkanVzdGVkSW5zZXJ0QmVmb3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2Nvbm5lY3RTaWJsaW5ncyA9IChcbiAgcGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gIHZOb2RlOiBWTm9kZSxcbiAgdk5leHQ6IFZOb2RlIHwgbnVsbFxuKSA9PiB7XG4gIGNvbnN0IHZQcmV2aW91cyA9IHZOZXh0ID8gdk5leHQucHJldmlvdXNTaWJsaW5nIDogKHBhcmVudC5sYXN0Q2hpbGQgYXMgVk5vZGUgfCBudWxsKTtcbiAgaWYgKHZOZXh0KSB7XG4gICAgdk5leHQucHJldmlvdXNTaWJsaW5nID0gdk5vZGU7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Lmxhc3RDaGlsZCA9IHZOb2RlO1xuICB9XG4gIGlmICh2UHJldmlvdXMpIHtcbiAgICB2UHJldmlvdXMubmV4dFNpYmxpbmcgPSB2Tm9kZTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnQuZmlyc3RDaGlsZCA9IHZOb2RlO1xuICB9XG4gIHZOb2RlLnByZXZpb3VzU2libGluZyA9IHZQcmV2aW91cztcbiAgdk5vZGUubmV4dFNpYmxpbmcgPSB2TmV4dDtcbiAgdk5vZGUucGFyZW50ID0gcGFyZW50O1xufTtcblxuY29uc3Qgdm5vZGVfdW5saW5rRnJvbU9sZFBhcmVudCA9IChcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBjdXJyZW50UGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUgfCBudWxsLFxuICBuZXdQYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgbmV3Q2hpbGQ6IFZOb2RlXG4pID0+IHtcbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHRoZSBwcmV2aW91cyBub2RlIGlzIHVubGlua2VkLlxuICAgKlxuICAgKiBXZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBmaW5kaW5nIHRoZSBhZGp1c3RlZEluc2VydEJlZm9yZS4gVGhlIHByb2JsZW0gaXMgd2hlbiB5b3UgdHJ5IHRvIHJlbmRlclxuICAgKiB0aGUgc2FtZSBwcm9qZWN0aW9uIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIG5vZGUgYnV0IHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLiBXZSByZXVzZVxuICAgKiBwcm9qZWN0aW9uIG5vZGVzLCBzbyB3aGVuIHRoaXMgaGFwcGVucywgd2UgY2FuIGVuZCB1cCB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBub2RlIGlzXG4gICAqIGluc2VydGVkIGJlZm9yZSBub2RlIGFib3ZlIGl0LlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiBgYGBcbiAgICogPD5cbiAgICogICB7cHJvcHMudG9nZ2xlICYmIDxTbG90IC8+fVxuICAgKiAgIHshcHJvcHMudG9nZ2xlICYmIChcbiAgICogICAgIDw+XG4gICAqICAgICAgIDxTbG90IC8+XG4gICAqICAgICA8Lz5cbiAgICogICApfVxuICAgKiA8Lz5cbiAgICogYGBgXG4gICAqXG4gICAqIFByb2plY3RlZCBjb250ZW50OlxuICAgKlxuICAgKiBgYGBcbiAgICogPGgxPlRlc3Q8L2gxPlxuICAgKiA8cD5UZXN0IGNvbnRlbnQ8L3A+XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB3ZSBkb24ndCB1bmxpbmsgdGhlIHByZXZpb3VzIG5vZGUsIHdlIHdpbGwgZW5kIHVwIGF0IHNvbWUgcG9pbnQgd2l0aCB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiBgYGBcbiAgICogPGgxPlRlc3Q8L2gxPlxuICAgKiA8cD5UZXN0IGNvbnRlbnQ8L3A+IC8vIDwtLSBpbnNlcnRlZCBiZWZvcmUgdGhlIGZpcnN0IGgxXG4gICAqIDxoMT5UZXN0PC9oMT4gLy8gPC0tIHRvIHJlbW92ZSwgYnV0IHN0aWxsIGluIHRoZSB0cmVlXG4gICAqIDxwPlRlc3QgY29udGVudDwvcD4gLy8gPC0tIHRvIHJlbW92ZVxuICAgKiBgYGBcbiAgICovXG4gIGlmIChcbiAgICBjdXJyZW50UGFyZW50ICYmXG4gICAgKG5ld0NoaWxkLnByZXZpb3VzU2libGluZyB8fCBuZXdDaGlsZC5uZXh0U2libGluZyB8fCBjdXJyZW50UGFyZW50ICE9PSBuZXdQYXJlbnQpXG4gICkge1xuICAgIHZub2RlX3JlbW92ZShqb3VybmFsLCBjdXJyZW50UGFyZW50LCBuZXdDaGlsZCwgZmFsc2UpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoZW4gYSBwcm9qZWN0aW9uIHZub2RlIGlzIGFib3V0IHRvIGJlIHJlcG9zaXRpb25lZCAobW92ZWQgaW4gdGhlIHZub2RlIHRyZWUpLCBpdHMgdHJhaWxpbmcgdGV4dFxuICogbm9kZSBtdXN0IGJlIGluZmxhdGVkIGJlZm9yZSB0aGUgcHJvamVjdGlvbiBpcyB1bmxpbmtlZCBmcm9tIGl0cyBjdXJyZW50IHNpYmxpbmcgY2hhaW4uXG4gKiBgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkYCByZWxpZXMgb24gYHZub2RlX2dldERvbVNpYmxpbmdgIHRvIGxvY2F0ZSBhZGphY2VudCB0ZXh0IG5vZGVzIGFuZFxuICogZGVjaWRlIHdoaWNoIG9uZSBpcyBcImxhc3RcIiAoaS5lLiB0aGUgb25lIHRoYXQgZ2V0cyB0byByZXVzZSB0aGUgc2hhcmVkIFNTUiBET00gYFRleHRgIG5vZGUpLiBPbmNlXG4gKiB0aGUgcHJvamVjdGlvbiBpcyB1bmxpbmtlZCwgaXRzIGBuZXh0U2libGluZ2AgYmVjb21lcyBgbnVsbGAsIHNvIGBnZXREb21TaWJsaW5nYCBjYW4gbm8gbG9uZ2VyXG4gKiBjcm9zcyB0aGUgYm91bmRhcnkgdG8gZmluZCBhIHRyYWlsaW5nIHNpYmxpbmcgc3VjaCBhcyBhbiBlbXB0eS1zdHJpbmcgdGV4dCBub2RlIOKAlCBjYXVzaW5nXG4gKiBgaXNMYXN0Tm9kZWAgdG8gYmUgYHRydWVgIHByZW1hdHVyZWx5IGFuZCBjb3JydXB0aW5nIHRoZSBzaGFyZWQgRE9NIHRleHQgbm9kZS4gSW5mbGF0aW5nIHRoZVxuICogdHJhaWxpbmcgdGV4dCBub2RlIHdoaWxlIHRoZSBzaWJsaW5ncyBhcmUgc3RpbGwgY29ubmVjdGVkIGdpdmVzIGl0IGl0cyBvd24gZnJlc2ggRE9NIG5vZGUgYW5kXG4gKiBhdm9pZHMgdGhlIGNvcnJ1cHRpb24uXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIDxDb21wb25lbnQ+XG4gKiAgIDxidXR0b24+XG4gKiAgICAgPElubGluZUNvbXBvbmVudD5cbiAqICAgICAgIDxzcGFuPlxuICogICAgICAgICBcIipcIlxuICogICAgICAgPC9zcGFuPlxuICogICAgIDwvSW5saW5lQ29tcG9uZW50PlxuICogICAgIDxQcm9qZWN0aW9uPiAvLyA8LS0gdGhpcyBwcm9qZWN0aW9uIHdoZW4gdW5saW5rZWQgZnJvbSB0aGUgc2libGluZ3Mgd2lsbCBjYXVzZSB0aGUgXCJ0ZXN0XCIgdGV4dCBub2RlIHRvIGJlIGNvbnNpZGVyZWQgdGhlIGxhc3Qgbm9kZSB3aXRob3V0IGluZmxhdGluZyBpdFxuICogICAgICAgXCJ0ZXN0XCIgLy8gPC0tIHRoaXMgdGV4dCBub2RlIGlzIHNoYXJpbmcgdGhlIHNhbWUgRE9NIG5vZGUgd2l0aCB0aGUgXCJcIlxuICogICAgIDwvUHJvamVjdGlvbj5cbiAqICAgICBcIlwiIDwtLSB0aGlzIHRleHQgbm9kZSBpcyBzaGFyaW5nIHRoZSBzYW1lIERPTSBub2RlIHdpdGggdGhlIFwidGVzdFwiXG4gKiAgIDwvYnV0dG9uPlxuICogPC9Db21wb25lbnQ+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX2luZmxhdGVQcm9qZWN0aW9uVHJhaWxpbmdUZXh0ID0gKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHByb2plY3Rpb246IFZpcnR1YWxWTm9kZVxuKTogdm9pZCA9PiB7XG4gIC8vIEZvbGxvdyBsYXN0Q2hpbGQgdGhyb3VnaCBhbnkgaW5uZXIgdmlydHVhbCB3cmFwcGVycyB0byByZWFjaCB0aGUgYWN0dWFsIHRyYWlsaW5nIHRleHQgbm9kZS5cbiAgbGV0IGxhc3Q6IFZOb2RlIHwgbnVsbCA9IHByb2plY3Rpb247XG4gIHdoaWxlIChsYXN0ICYmIHZub2RlX2lzVmlydHVhbFZOb2RlKGxhc3QpKSB7XG4gICAgbGFzdCA9IChsYXN0IGFzIFZpcnR1YWxWTm9kZSkubGFzdENoaWxkIGFzIFZOb2RlIHwgbnVsbDtcbiAgfVxuICBpZiAobGFzdCAmJiB2bm9kZV9pc1RleHRWTm9kZShsYXN0KSAmJiAobGFzdC5mbGFncyAmIFZOb2RlRmxhZ3MuSW5mbGF0ZWQpID09PSAwKSB7XG4gICAgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkKGpvdXJuYWwsIGxhc3QgYXMgVGV4dFZOb2RlKTtcbiAgfVxufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX2luc2VydEJlZm9yZSA9IChcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBwYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgbmV3Q2hpbGQ6IFZOb2RlLFxuICBpbnNlcnRCZWZvcmU6IFZOb2RlIHwgbnVsbFxuKSA9PiB7XG4gIGlmICh2bm9kZV9pc0VsZW1lbnRPclRleHRWTm9kZShuZXdDaGlsZCkpIHtcbiAgICB2bm9kZV9pbnNlcnRFbGVtZW50QmVmb3JlKGpvdXJuYWwsIHBhcmVudCwgbmV3Q2hpbGQsIGluc2VydEJlZm9yZSk7XG4gIH0gZWxzZSB7XG4gICAgdm5vZGVfaW5zZXJ0VmlydHVhbEJlZm9yZShqb3VybmFsLCBwYXJlbnQsIG5ld0NoaWxkIGFzIFZpcnR1YWxWTm9kZSwgaW5zZXJ0QmVmb3JlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldERvbVBhcmVudCA9ICh2bm9kZTogVk5vZGUsIGluY2x1ZGVQcm9qZWN0aW9uOiBib29sZWFuKTogRWxlbWVudCB8IG51bGwgPT4ge1xuICB3aGlsZSAodm5vZGUgJiYgIXZub2RlX2lzRWxlbWVudFZOb2RlKHZub2RlKSkge1xuICAgIGlmICh2bm9kZS5mbGFncyAmIFZOb2RlRmxhZ3MuSGFzVGFyZ2V0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHZub2RlLnByb3BzPy5bUVRhcmdldEVsZW1lbnRdIGFzIEVsZW1lbnQ7XG4gICAgfVxuICAgIHZub2RlID0gKHZub2RlLnBhcmVudCB8fCAoaW5jbHVkZVByb2plY3Rpb24gPyB2bm9kZS5zbG90UGFyZW50IDogbnVsbCkpITtcbiAgfVxuICByZXR1cm4gdm5vZGUgPyAodm5vZGUgYXMgRWxlbWVudFZOb2RlKS5ub2RlIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSA9IChcbiAgdm5vZGU6IFZOb2RlLFxuICBpbmNsdWRlUHJvamVjdGlvbjogYm9vbGVhblxuKTogRWxlbWVudFZOb2RlIHwgbnVsbCA9PiB7XG4gIHdoaWxlICh2bm9kZSAmJiAhdm5vZGVfaXNFbGVtZW50Vk5vZGUodm5vZGUpKSB7XG4gICAgdm5vZGUgPSB2bm9kZS5wYXJlbnQgfHwgKGluY2x1ZGVQcm9qZWN0aW9uID8gdm5vZGUuc2xvdFBhcmVudCA6IG51bGwpITtcbiAgfVxuICByZXR1cm4gdm5vZGU7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgdm5vZGVfcmVtb3ZlID0gKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHZQYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgdlRvUmVtb3ZlOiBWTm9kZSxcbiAgcmVtb3ZlRE9NOiBib29sZWFuXG4pID0+IHtcbiAgaXNEZXYgJiYgYXNzZXJ0RXF1YWwodlBhcmVudCwgdlRvUmVtb3ZlLnBhcmVudCwgJ1BhcmVudCBtaXNtYXRjaC4nKTtcbiAgaWYgKHZub2RlX2lzVGV4dFZOb2RlKHZUb1JlbW92ZSkpIHtcbiAgICB2bm9kZV9lbnN1cmVUZXh0SW5mbGF0ZWQoam91cm5hbCwgdlRvUmVtb3ZlKTtcbiAgfVxuXG4gIGlmIChyZW1vdmVET00pIHtcbiAgICBjb25zdCBpc0lubmVySFRNTFBhcmVudCA9IHZub2RlX2dldFByb3AodlBhcmVudCwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIG51bGwpICE9PSBudWxsO1xuICAgIGlmIChpc0lubmVySFRNTFBhcmVudCkge1xuICAgICAgLy8gaWdub3JlIGNoaWxkcmVuLCBhcyB0aGV5IGFyZSBpbnNlcnRlZCB2aWEgaW5uZXJIVE1MXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2bm9kZV9pc0VsZW1lbnRPclRleHRWTm9kZSh2VG9SZW1vdmUpKSB7XG4gICAgICBhZGRWTm9kZU9wZXJhdGlvbihqb3VybmFsLCBjcmVhdGVEZWxldGVPcGVyYXRpb24odlRvUmVtb3ZlLm5vZGUhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlX3dhbGtEaXJlY3RDaGlsZHJlbihqb3VybmFsLCB2VG9SZW1vdmUsICh2Tm9kZSkgPT4ge1xuICAgICAgICBhZGRWTm9kZU9wZXJhdGlvbihqb3VybmFsLCBjcmVhdGVEZWxldGVPcGVyYXRpb24odk5vZGUubm9kZSEpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHZQcmV2aW91cyA9IHZUb1JlbW92ZS5wcmV2aW91c1NpYmxpbmc7XG4gIGNvbnN0IHZOZXh0ID0gdlRvUmVtb3ZlLm5leHRTaWJsaW5nO1xuICBpZiAodlByZXZpb3VzKSB7XG4gICAgdlByZXZpb3VzLm5leHRTaWJsaW5nID0gdk5leHQ7XG4gIH0gZWxzZSB7XG4gICAgdlBhcmVudC5maXJzdENoaWxkID0gdk5leHQ7XG4gIH1cbiAgaWYgKHZOZXh0KSB7XG4gICAgdk5leHQucHJldmlvdXNTaWJsaW5nID0gdlByZXZpb3VzO1xuICB9IGVsc2Uge1xuICAgIHZQYXJlbnQubGFzdENoaWxkID0gdlByZXZpb3VzO1xuICB9XG4gIHZUb1JlbW92ZS5wcmV2aW91c1NpYmxpbmcgPSBudWxsO1xuICB2VG9SZW1vdmUubmV4dFNpYmxpbmcgPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX3F1ZXJ5RG9tTm9kZXMgPSAoXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHZOb2RlOiBWTm9kZSxcbiAgc2VsZWN0b3I6IHN0cmluZyxcbiAgY2I6IChlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkXG4pID0+IHtcbiAgaWYgKHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB2bm9kZV9nZXROb2RlKHZOb2RlKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgY2IoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm91bmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2IoZm91bmRbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgY2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZOb2RlKTtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIHZub2RlX3F1ZXJ5RG9tTm9kZXMoY29udGFpbmVyLCBqb3VybmFsLCBjaGlsZCwgc2VsZWN0b3IsIGNiKTtcbiAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcgYXMgVk5vZGUgfCBudWxsO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX3RydW5jYXRlID0gKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHZQYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgdkRlbGV0ZTogVk5vZGUsXG4gIHJlbW92ZURPTSA9IHRydWVcbikgPT4ge1xuICBpc0RldiAmJiBhc3NlcnREZWZpbmVkKHZEZWxldGUsICdNaXNzaW5nIHZEZWxldGUuJyk7XG4gIGNvbnN0IHBhcmVudCA9IHZub2RlX2dldERvbVBhcmVudCh2UGFyZW50LCB0cnVlKTtcbiAgaWYgKHBhcmVudCAmJiByZW1vdmVET00pIHtcbiAgICBpZiAodm5vZGVfaXNFbGVtZW50T3JUZXh0Vk5vZGUodlBhcmVudCkpIHtcbiAgICAgIGFkZFZOb2RlT3BlcmF0aW9uKGpvdXJuYWwsIGNyZWF0ZVJlbW92ZUFsbENoaWxkcmVuT3BlcmF0aW9uKHZQYXJlbnQubm9kZSEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZG9tUGFyZW50Vk5vZGUgPSB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSh2UGFyZW50LCBmYWxzZSk7XG4gICAgICBpZiAoXG4gICAgICAgIGRvbVBhcmVudFZOb2RlICYmXG4gICAgICAgIGRvbVBhcmVudFZOb2RlLmZpcnN0Q2hpbGQgPT09IHZQYXJlbnQgJiZcbiAgICAgICAgZG9tUGFyZW50Vk5vZGUubGFzdENoaWxkID09PSB2UGFyZW50XG4gICAgICApIHtcbiAgICAgICAgYWRkVk5vZGVPcGVyYXRpb24oam91cm5hbCwgY3JlYXRlUmVtb3ZlQWxsQ2hpbGRyZW5PcGVyYXRpb24ocGFyZW50KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZV93YWxrRGlyZWN0Q2hpbGRyZW4oam91cm5hbCwgdlBhcmVudCwgKHZOb2RlKSA9PiB7XG4gICAgICAgICAgYWRkVk5vZGVPcGVyYXRpb24oam91cm5hbCwgY3JlYXRlRGVsZXRlT3BlcmF0aW9uKHZOb2RlLm5vZGUhKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCB2UHJldmlvdXMgPSB2RGVsZXRlLnByZXZpb3VzU2libGluZztcbiAgaWYgKHZQcmV2aW91cykge1xuICAgIHZQcmV2aW91cy5uZXh0U2libGluZyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgdlBhcmVudC5maXJzdENoaWxkID0gbnVsbDtcbiAgfVxuICB2UGFyZW50Lmxhc3RDaGlsZCA9IHZQcmV2aW91cztcbn07XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0RWxlbWVudE5hbWUgPSAodm5vZGU6IEVsZW1lbnRWTm9kZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGVsZW1lbnRWTm9kZSA9IGVuc3VyZUVsZW1lbnRWTm9kZSh2bm9kZSk7XG4gIGxldCBlbGVtZW50TmFtZSA9IGVsZW1lbnRWTm9kZS5lbGVtZW50TmFtZTtcbiAgaWYgKGVsZW1lbnROYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudFZOb2RlLm5vZGU7XG4gICAgY29uc3Qgbm9kZU5hbWUgPSBmYXN0Tm9kZU5hbWUoZWxlbWVudCkhLnRvTG93ZXJDYXNlKCk7XG4gICAgZWxlbWVudE5hbWUgPSBlbGVtZW50Vk5vZGUuZWxlbWVudE5hbWUgPSBub2RlTmFtZTtcbiAgICBlbGVtZW50Vk5vZGUuZmxhZ3MgfD0gdm5vZGVfZ2V0RWxlbWVudE5hbWVzcGFjZUZsYWdzKGVsZW1lbnQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50TmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRUZXh0ID0gKHRleHRWTm9kZTogVGV4dFZOb2RlKTogc3RyaW5nID0+IHtcbiAgbGV0IHRleHQgPSB0ZXh0Vk5vZGUudGV4dDtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRleHQgPSB0ZXh0Vk5vZGUudGV4dCA9IHRleHRWTm9kZS5ub2RlIS5ub2RlVmFsdWUhO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX3NldFRleHQgPSAoam91cm5hbDogVk5vZGVKb3VybmFsLCB0ZXh0Vk5vZGU6IFRleHRWTm9kZSwgdGV4dDogc3RyaW5nKSA9PiB7XG4gIHZub2RlX2Vuc3VyZVRleHRJbmZsYXRlZChqb3VybmFsLCB0ZXh0Vk5vZGUpO1xuICB0ZXh0Vk5vZGUudGV4dCA9IHRleHQ7XG4gIGFkZFZOb2RlT3BlcmF0aW9uKGpvdXJuYWwsIGNyZWF0ZVNldFRleHRPcGVyYXRpb24odGV4dFZOb2RlLm5vZGUhLCB0ZXh0KSk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0Rmlyc3RDaGlsZCA9ICh2bm9kZTogVk5vZGUpOiBWTm9kZSB8IG51bGwgPT4ge1xuICBpZiAodm5vZGVfaXNUZXh0Vk5vZGUodm5vZGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbGV0IHZGaXJzdENoaWxkID0gKHZub2RlIGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSkuZmlyc3RDaGlsZDtcbiAgaWYgKFxuICAgIF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UgJiZcbiAgICB2Rmlyc3RDaGlsZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm5vZGVfaXNFbGVtZW50Vk5vZGUodm5vZGUpICYmXG4gICAgaGFzT25seVN1c3BlbnNlUGxhY2Vob2xkZXIodm5vZGUubm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZGaXJzdENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICB2Rmlyc3RDaGlsZCA9IGVuc3VyZU1hdGVyaWFsaXplZCh2bm9kZSBhcyBFbGVtZW50Vk5vZGUpO1xuICB9XG4gIHJldHVybiB2Rmlyc3RDaGlsZDtcbn07XG5cbmNvbnN0IHZub2RlX21hdGVyaWFsaXplID0gKHZOb2RlOiBFbGVtZW50Vk5vZGUpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IHZOb2RlLm5vZGU7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSBmYXN0Rmlyc3RDaGlsZChlbGVtZW50KTtcbiAgY29uc3Qgdk5vZGVEYXRhID0gKGZhc3RPd25lckRvY3VtZW50KGVsZW1lbnQpIGFzIFFEb2N1bWVudCk/LnFWTm9kZURhdGE/LmdldChlbGVtZW50KTtcblxuICBjb25zdCB2Rmlyc3RDaGlsZCA9IG1hdGVyaWFsaXplKHZOb2RlLCBlbGVtZW50LCBmaXJzdENoaWxkLCB2Tm9kZURhdGEpO1xuICByZXR1cm4gdkZpcnN0Q2hpbGQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc3BsaXRWTm9kZURhdGEgPSAodk5vZGVEYXRhOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZWxlbWVudFZOb2RlRGF0YVN0YXJ0SWR4ID0gMjtcbiAgY29uc3QgZWxlbWVudFZOb2RlRGF0YUVuZElkeCA9IHZOb2RlRGF0YS5pbmRleE9mKCd8fCcsIGVsZW1lbnRWTm9kZURhdGFTdGFydElkeCk7XG4gIGNvbnN0IGVsZW1lbnRWTm9kZURhdGEgPSB2Tm9kZURhdGEuc3Vic3RyaW5nKGVsZW1lbnRWTm9kZURhdGFTdGFydElkeCwgZWxlbWVudFZOb2RlRGF0YUVuZElkeCk7XG4gIGNvbnN0IHZpcnR1YWxWTm9kZURhdGEgPSB2Tm9kZURhdGEuc3Vic3RyaW5nKGVsZW1lbnRWTm9kZURhdGFFbmRJZHggKyAyKTtcbiAgcmV0dXJuIHsgZWxlbWVudFZOb2RlRGF0YSwgdmlydHVhbFZOb2RlRGF0YSB9O1xufTtcblxuY29uc3QgbWF0ZXJpYWxpemUgPSAoXG4gIHZOb2RlOiBFbGVtZW50Vk5vZGUsXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGZpcnN0Q2hpbGQ6IE5vZGUgfCBudWxsLFxuICB2Tm9kZURhdGE/OiBzdHJpbmdcbik6IFZOb2RlIHwgbnVsbCA9PiB7XG4gIHZub2RlX2Vuc3VyZUVsZW1lbnRLZXlJbmZsYXRlZCh2Tm9kZSk7XG4gIGNvbnN0IHNlZ21lbnRJZCA9IF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UgPyAoZWxlbWVudCBhcyBRRWxlbWVudCkuX3FTZWdtZW50IHx8IG51bGwgOiBudWxsO1xuICBpZiAodk5vZGVEYXRhKSB7XG4gICAgaWYgKFxuICAgICAgdk5vZGVEYXRhLmNoYXJDb2RlQXQoMCkgPT09IFZOb2RlRGF0YUNoYXIuU0VQQVJBVE9SICYmXG4gICAgICB2Tm9kZURhdGEuY2hhckNvZGVBdCgxKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVBBUkFUT1JcbiAgICApIHtcbiAgICAgIC8qKlxuICAgICAgICogSWYgdk5vZGVEYXRhIHN0YXJ0IHdpdGggdGhlIGBWTm9kZURhdGFDaGFyLlNFUEFSQVRPUmAgdGhlbiBpdCBtZWFucyB0aGF0IHRoZSB2Tm9kZURhdGFcbiAgICAgICAqIGNvbnRhaW5zIHNvbWUgZGF0YSBmb3IgRE9NIGVsZW1lbnQuIFdlIG5lZWQgdG8gc3BsaXQgaXQgdG8gRE9NIGVsZW1lbnQgdk5vZGVEYXRhIGFuZFxuICAgICAgICogdmlydHVhbCBlbGVtZW50IHZOb2RlRGF0YS5cbiAgICAgICAqXG4gICAgICAgKiBGb3IgZXhhbXBsZSBgfHw9NmA0fHwye0o9N2AzfHE6dHlwZXxTfWAgc2hvdWxkIHNwbGl0IGludG8gYD02YDRgYW5kYDJ7Sj03YDN8cTp0eXBlfFN9YCxcbiAgICAgICAqIHdoZXJlIGA9NmA0YCBpcyB2Tm9kZURhdGEgZm9yIHRoZSBET00gZWxlbWVudC5cbiAgICAgICAqL1xuICAgICAgY29uc3Qgc3BsaXQgPSBzcGxpdFZOb2RlRGF0YSh2Tm9kZURhdGEpO1xuICAgICAgY29uc3QgZWxlbWVudFZOb2RlRGF0YSA9IHNwbGl0LmVsZW1lbnRWTm9kZURhdGE7XG4gICAgICB2Tm9kZURhdGEgPSBzcGxpdC52aXJ0dWFsVk5vZGVEYXRhO1xuXG4gICAgICAvLyBNYXRlcmlhbGl6ZSBET00gZWxlbWVudCBmcm9tIEhUTUwuIElmIHRoZSBgdk5vZGVEYXRhYCBpcyBub3QgZW1wdHksXG4gICAgICAvLyB0aGVuIGFsc28gbWF0ZXJpYWxpemUgdmlydHVhbCBlbGVtZW50IGZyb20gdk5vZGVEYXRhXG4gICAgICBjb25zdCB2Rmlyc3RDaGlsZCA9IG1hdGVyaWFsaXplRnJvbURPTSh2Tm9kZSwgZmlyc3RDaGlsZCwgZWxlbWVudFZOb2RlRGF0YSwgc2VnbWVudElkKTtcbiAgICAgIGlmICghdk5vZGVEYXRhKSB7XG4gICAgICAgIC8vICBJZiBpdCBpcyBlbXB0eSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2FsbCB0aGUgYG1hdGVyaWFsaXplRnJvbVZOb2RlRGF0YWAuXG4gICAgICAgIHJldHVybiB2Rmlyc3RDaGlsZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTWF0ZXJpYWxpemUgdmlydHVhbCBlbGVtZW50IGZvcm0gdk5vZGVEYXRhXG4gICAgcmV0dXJuIG1hdGVyaWFsaXplRnJvbVZOb2RlRGF0YSh2Tm9kZSwgdk5vZGVEYXRhLCBlbGVtZW50LCBmaXJzdENoaWxkLCBzZWdtZW50SWQpO1xuICB9IGVsc2Uge1xuICAgIC8vIE1hdGVyaWFsaXplIERPTSBlbGVtZW50IGZyb20gSFRNTCBvbmx5XG4gICAgcmV0dXJuIG1hdGVyaWFsaXplRnJvbURPTSh2Tm9kZSwgZmlyc3RDaGlsZCwgdW5kZWZpbmVkLCBzZWdtZW50SWQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlTWF0ZXJpYWxpemVkID0gKHZub2RlOiBFbGVtZW50Vk5vZGUpOiBWTm9kZSB8IG51bGwgPT4ge1xuICBjb25zdCB2UGFyZW50ID0gZW5zdXJlRWxlbWVudFZOb2RlKHZub2RlKTtcbiAgbGV0IHZGaXJzdENoaWxkID0gdlBhcmVudC5maXJzdENoaWxkO1xuICBpZiAodkZpcnN0Q2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIG5lZWQgdG8gbWF0ZXJpYWxpemUgdGhlIHZOb2RlLlxuICAgIGNvbnN0IGVsZW1lbnQgPSB2UGFyZW50Lm5vZGU7XG5cbiAgICBpZiAodlBhcmVudC5wYXJlbnQgJiYgc2hvdWxkSWdub3JlQ2hpbGRyZW4oZWxlbWVudCkpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBjb250YWluZXIgd2l0aCBodG1sIHZhbHVlLCBtdXN0IGlnbm9yZSB0aGUgY29udGVudC5cbiAgICAgIHZGaXJzdENoaWxkID0gdlBhcmVudC5maXJzdENoaWxkID0gdlBhcmVudC5sYXN0Q2hpbGQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2Rmlyc3RDaGlsZCA9IHZub2RlX21hdGVyaWFsaXplKHZQYXJlbnQpO1xuICAgIH1cbiAgfVxuICBpc0RldiAmJiBhc3NlcnRUcnVlKHZQYXJlbnQuZmlyc3RDaGlsZCAhPT0gdW5kZWZpbmVkLCAnRGlkIG5vdCBtYXRlcmlhbGl6ZS4nKTtcbiAgaXNEZXYgJiYgYXNzZXJ0VHJ1ZSh2UGFyZW50Lmxhc3RDaGlsZCAhPT0gdW5kZWZpbmVkLCAnRGlkIG5vdCBtYXRlcmlhbGl6ZS4nKTtcbiAgcmV0dXJuIHZGaXJzdENoaWxkO1xufTtcblxubGV0IF9mYXN0SGFzQXR0cmlidXRlOiAoKHRoaXM6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGNvbnN0IHNob3VsZElnbm9yZUNoaWxkcmVuID0gKG5vZGU6IEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgaWYgKCFfZmFzdEhhc0F0dHJpYnV0ZSkge1xuICAgIF9mYXN0SGFzQXR0cmlidXRlID0gbm9kZS5oYXNBdHRyaWJ1dGU7XG4gIH1cbiAgcmV0dXJuIF9mYXN0SGFzQXR0cmlidXRlLmNhbGwobm9kZSwgUUNvbnRhaW5lckF0dHIpO1xufTtcblxubGV0IF9mYXN0R2V0QXR0cmlidXRlOiAoKHRoaXM6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKSB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGNvbnN0IGZhc3RHZXRBdHRyaWJ1dGUgPSAoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCFfZmFzdEdldEF0dHJpYnV0ZSkge1xuICAgIF9mYXN0R2V0QXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGU7XG4gIH1cbiAgcmV0dXJuIF9mYXN0R2V0QXR0cmlidXRlLmNhbGwoZWxlbWVudCwga2V5KTtcbn07XG5cbmNvbnN0IGZhc3ROb2RlVHlwZSA9IGNyZWF0ZUZhc3RHZXR0ZXI8Tm9kZSwgbnVtYmVyPignbm9kZVR5cGUnKTtcbmNvbnN0IGZhc3RJc1RleHRPckVsZW1lbnQgPSAobm9kZTogTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB0eXBlID0gZmFzdE5vZGVUeXBlKG5vZGUpO1xuICByZXR1cm4gdHlwZSA9PT0gLyogTm9kZS5URVhUX05PREUgKi8gMyB8fCB0eXBlID09PSAvKiBOb2RlLkVMRU1FTlRfTk9ERSAqLyAxO1xufTtcblxubGV0IF9mYXN0TmV4dFNpYmxpbmc6ICgodGhpczogTm9kZSkgPT4gTm9kZSB8IG51bGwpIHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3QgZmFzdE5leHRTaWJsaW5nID0gKG5vZGU6IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwgPT4ge1xuICBpZiAoIV9mYXN0TmV4dFNpYmxpbmcpIHtcbiAgICBfZmFzdE5leHRTaWJsaW5nID0gZmFzdEdldHRlcjx0eXBlb2YgX2Zhc3ROZXh0U2libGluZz4obm9kZSwgJ25leHRTaWJsaW5nJykhO1xuICB9XG4gIGlmICghX2Zhc3RGaXJzdENoaWxkKSB7XG4gICAgX2Zhc3RGaXJzdENoaWxkID0gZmFzdEdldHRlcjx0eXBlb2YgX2Zhc3RGaXJzdENoaWxkPihub2RlLCAnZmlyc3RDaGlsZCcpITtcbiAgfVxuICB3aGlsZSAobm9kZSkge1xuICAgIG5vZGUgPSBfZmFzdE5leHRTaWJsaW5nLmNhbGwobm9kZSk7XG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBmYXN0Tm9kZVR5cGUobm9kZSk7XG4gICAgICBpZiAodHlwZSA9PT0gLyogTm9kZS5URVhUX05PREUgKi8gMyB8fCB0eXBlID09PSAvKiBOb2RlLkVMRU1FTlRfTk9ERSAqLyAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAvKiBOb2RlLkNPTU1FTlRfTk9ERSAqLyA4KSB7XG4gICAgICAgIGNvbnN0IG5vZGVWYWx1ZSA9IG5vZGUubm9kZVZhbHVlO1xuICAgICAgICBpZiAobm9kZVZhbHVlPy5zdGFydHNXaXRoKFFJZ25vcmUpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5vZGVBZnRlckNvbW1lbnROb2RlKG5vZGUsIFFDb250YWluZXJJc2xhbmQsIF9mYXN0TmV4dFNpYmxpbmcsIF9mYXN0Rmlyc3RDaGlsZCk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVmFsdWU/LnN0YXJ0c1dpdGgoUUNvbnRhaW5lcklzbGFuZEVuZCkpIHtcbiAgICAgICAgICAvLyBTZWFyY2ggZm9yIGVpdGhlciB0aGUgbmV4dCBjb250YWluZXItaXNsYW5kIG9yIHRoZSBlbmQgb2YgdGhlIHE6aWdub3JlIGJsb2NrLFxuICAgICAgICAgIC8vIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gVGhpcyBoYW5kbGVzIG11bHRpcGxlIGlzbGFuZHMgd2l0aGluIGEgc2luZ2xlIHE6aWdub3JlLlxuICAgICAgICAgIHJldHVybiBnZXROb2RlQWZ0ZXJDb21tZW50Tm9kZShcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBbUUNvbnRhaW5lcklzbGFuZCwgUUlnbm9yZUVuZF0sXG4gICAgICAgICAgICBfZmFzdE5leHRTaWJsaW5nLFxuICAgICAgICAgICAgX2Zhc3RGaXJzdENoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWU/LnN0YXJ0c1dpdGgoUUNvbnRhaW5lckF0dHIpKSB7XG4gICAgICAgICAgd2hpbGUgKG5vZGUgJiYgKG5vZGUgPSBfZmFzdE5leHRTaWJsaW5nLmNhbGwobm9kZSkpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZhc3ROb2RlVHlwZShub2RlKSA9PT0gLyogTm9kZS5DT01NRU5UX05PREUgKi8gOCAmJlxuICAgICAgICAgICAgICBub2RlLm5vZGVWYWx1ZT8uc3RhcnRzV2l0aChRQ29udGFpbmVyQXR0ckVuZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5mdW5jdGlvbiBnZXROb2RlQWZ0ZXJDb21tZW50Tm9kZShcbiAgbm9kZTogTm9kZSB8IG51bGwsXG4gIGNvbW1lbnRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sXG4gIG5leHRTaWJsaW5nOiBOb25OdWxsYWJsZTx0eXBlb2YgX2Zhc3ROZXh0U2libGluZz4sXG4gIGZpcnN0Q2hpbGQ6IE5vbk51bGxhYmxlPHR5cGVvZiBfZmFzdEZpcnN0Q2hpbGQ+XG4pOiBOb2RlIHwgbnVsbCB7XG4gIGNvbnN0IGlzU2luZ2xlVmFsdWUgPSB0eXBlb2YgY29tbWVudFZhbHVlID09PSAnc3RyaW5nJztcbiAgY29uc3QgbGVuZ3RoID0gY29tbWVudFZhbHVlLmxlbmd0aDtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSBub2RlLm5vZGVWYWx1ZTtcbiAgICBsZXQgaXNNYXRjaDtcbiAgICBpZiAoaXNTaW5nbGVWYWx1ZSkge1xuICAgICAgaXNNYXRjaCA9IG5vZGVWYWx1ZT8uc3RhcnRzV2l0aChjb21tZW50VmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobm9kZVZhbHVlPy5zdGFydHNXaXRoKChjb21tZW50VmFsdWUgYXMgc3RyaW5nW10pW2ldKSkge1xuICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7XG4gICAgICBub2RlID0gbmV4dFNpYmxpbmcuY2FsbChub2RlKSB8fCBudWxsO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgbGV0IG5leHROb2RlOiBOb2RlIHwgbnVsbCA9IGZpcnN0Q2hpbGQuY2FsbChub2RlKTtcbiAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nLmNhbGwobm9kZSk7XG4gICAgfVxuICAgIC8vIEdvIHVwIHRocm91Z2ggcGFyZW50cyB1bnRpbCB3ZSBmaW5kIG9uZSB3aXRoIGEgbmV4dCBzaWJsaW5nXG4gICAgd2hpbGUgKCFuZXh0Tm9kZSkge1xuICAgICAgbmV4dE5vZGUgPSBmYXN0UGFyZW50Tm9kZShub2RlKTtcbiAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG4gICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nLmNhbGwobmV4dE5vZGUpO1xuICAgIH1cbiAgICBub2RlID0gbmV4dE5vZGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IGZhc3RQYXJlbnROb2RlID0gY3JlYXRlRmFzdEdldHRlcjxOb2RlLCBOb2RlIHwgbnVsbD4oJ3BhcmVudE5vZGUnKTtcblxubGV0IF9mYXN0Rmlyc3RDaGlsZDogKCh0aGlzOiBOb2RlKSA9PiBOb2RlIHwgbnVsbCkgfCBudWxsID0gbnVsbDtcbmNvbnN0IGZhc3RGaXJzdENoaWxkID0gKG5vZGU6IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwgPT4ge1xuICBpZiAoIV9mYXN0Rmlyc3RDaGlsZCkge1xuICAgIF9mYXN0Rmlyc3RDaGlsZCA9IGZhc3RHZXR0ZXI8dHlwZW9mIF9mYXN0Rmlyc3RDaGlsZD4obm9kZSwgJ2ZpcnN0Q2hpbGQnKSE7XG4gIH1cbiAgbm9kZSA9IG5vZGUgJiYgX2Zhc3RGaXJzdENoaWxkLmNhbGwobm9kZSk7XG4gIC8vIEhhbmRsZSBxOmlnbm9yZSBhcyBmaXJzdCBjaGlsZCAoZS5nLiBxd2lraWZ5JCBIb3N0IHdpdGggcmVhY3RpZnkkIHByb2plY3Rpb25zKS5cbiAgLy8gTmF2aWdhdGUgZGVwdGgtZmlyc3QgdG8gdGhlIGZpcnN0IHE6Y29udGFpbmVyLWlzbGFuZCBhbmQgcmV0dXJuIGl0cyBmaXJzdCBlbGVtZW50LlxuICBpZiAobm9kZSAmJiBmYXN0Tm9kZVR5cGUobm9kZSkgPT09IC8qIE5vZGUuQ09NTUVOVF9OT0RFICovIDgpIHtcbiAgICBpZiAoIV9mYXN0TmV4dFNpYmxpbmcpIHtcbiAgICAgIF9mYXN0TmV4dFNpYmxpbmcgPSBmYXN0R2V0dGVyPHR5cGVvZiBfZmFzdE5leHRTaWJsaW5nPihub2RlLCAnbmV4dFNpYmxpbmcnKSE7XG4gICAgfVxuICAgIGlmIChub2RlLm5vZGVWYWx1ZT8uc3RhcnRzV2l0aChRSWdub3JlKSkge1xuICAgICAgcmV0dXJuIGdldE5vZGVBZnRlckNvbW1lbnROb2RlKG5vZGUsIFFDb250YWluZXJJc2xhbmQsIF9mYXN0TmV4dFNpYmxpbmcsIF9mYXN0Rmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlICYmICFmYXN0SXNUZXh0T3JFbGVtZW50KG5vZGUpKSB7XG4gICAgbm9kZSA9IGZhc3ROZXh0U2libGluZyhub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCBmYXN0TmFtZXNwYWNlVVJJID0gY3JlYXRlRmFzdEdldHRlcjxFbGVtZW50LCBzdHJpbmcgfCBudWxsPignbmFtZXNwYWNlVVJJJyk7XG5cbmV4cG9ydCBjb25zdCBmYXN0Tm9kZU5hbWUgPSBjcmVhdGVGYXN0R2V0dGVyPEVsZW1lbnQsIHN0cmluZyB8IG51bGw+KCdub2RlTmFtZScpO1xuXG5jb25zdCBmYXN0T3duZXJEb2N1bWVudCA9IGNyZWF0ZUZhc3RHZXR0ZXI8Tm9kZSwgRG9jdW1lbnQ+KCdvd25lckRvY3VtZW50Jyk7XG5cbmNvbnN0IG1hdGVyaWFsaXplRnJvbURPTSA9IChcbiAgdlBhcmVudDogRWxlbWVudFZOb2RlLFxuICBmaXJzdENoaWxkOiBOb2RlIHwgbnVsbCxcbiAgdkRhdGE/OiBzdHJpbmcsXG4gIHNlZ21lbnRJZD86IHN0cmluZyB8IG51bGxcbikgPT4ge1xuICBsZXQgdkZpcnN0Q2hpbGQ6IFZOb2RlIHwgbnVsbCA9IG51bGw7XG4gIGxldCBpZHggPSAwO1xuXG4gIGNvbnN0IHNraXBFbGVtZW50cyA9ICgpID0+IHtcbiAgICB3aGlsZSAoaXNFbGVtZW50KGNoaWxkKSAmJiBzaG91bGRTa2lwRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGNoaWxkID0gZmFzdE5leHRTaWJsaW5nKGNoaWxkKTtcbiAgICB9XG4gIH07XG4gIC8vIG1hdGVyaWFsaXplIGZyb20gRE9NXG4gIGxldCBjaGlsZCA9IGZpcnN0Q2hpbGQ7XG4gIHNraXBFbGVtZW50cygpO1xuICBsZXQgdkNoaWxkOiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBjb25zdCBub2RlVHlwZSA9IGZhc3ROb2RlVHlwZShjaGlsZCk7XG4gICAgbGV0IHZOZXh0Q2hpbGQ6IFZOb2RlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKG5vZGVUeXBlID09PSAvKiBOb2RlLlRFWFRfTk9ERSAqLyAzKSB7XG4gICAgICB2TmV4dENoaWxkID0gdm5vZGVfbmV3VGV4dChjaGlsZCBhcyBUZXh0LCBjaGlsZC50ZXh0Q29udGVudCA/PyB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09IC8qIE5vZGUuRUxFTUVOVF9OT0RFICovIDEpIHtcbiAgICAgIHZOZXh0Q2hpbGQgPSB2bm9kZV9uZXdVbk1hdGVyaWFsaXplZEVsZW1lbnQoY2hpbGQgYXMgRWxlbWVudCk7XG4gICAgICB2bm9kZV9lbnN1cmVFbGVtZW50S2V5SW5mbGF0ZWQodk5leHRDaGlsZCBhcyBFbGVtZW50Vk5vZGUpO1xuICAgIH1cbiAgICBpZiAodk5leHRDaGlsZCkge1xuICAgICAgdk5leHRDaGlsZC5mbGFncyA9ICh2TmV4dENoaWxkLmZsYWdzICYgVk5vZGVGbGFnc0luZGV4Lm1hc2spIHwgKGlkeCA8PCBWTm9kZUZsYWdzSW5kZXguc2hpZnQpO1xuICAgICAgaWR4Kys7XG4gICAgICB2TmV4dENoaWxkLnBhcmVudCA9IHZQYXJlbnQ7XG4gICAgICB2Q2hpbGQgJiYgKHZDaGlsZC5uZXh0U2libGluZyA9IHZOZXh0Q2hpbGQpO1xuICAgICAgdk5leHRDaGlsZC5wcmV2aW91c1NpYmxpbmcgPSB2Q2hpbGQ7XG4gICAgICB2Q2hpbGQgPSB2TmV4dENoaWxkO1xuICAgIH1cbiAgICBpZiAoIXZGaXJzdENoaWxkKSB7XG4gICAgICB2UGFyZW50LmZpcnN0Q2hpbGQgPSB2Rmlyc3RDaGlsZCA9IHZDaGlsZDtcbiAgICB9XG4gICAgY2hpbGQgPSBmYXN0TmV4dFNpYmxpbmcoY2hpbGQpO1xuICAgIHNraXBFbGVtZW50cygpO1xuICB9XG4gIHZQYXJlbnQubGFzdENoaWxkID0gdkNoaWxkIHx8IG51bGw7XG4gIHZQYXJlbnQuZmlyc3RDaGlsZCA9IHZGaXJzdENoaWxkO1xuXG4gIGlmICh2RGF0YSkge1xuICAgIC8qKlxuICAgICAqIElmIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgZnJvbSBET00gYW5kIHdlIGhhdmUgdk5vZGVEYXRhIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBzb21lIHZpcnR1YWxcbiAgICAgKiBwcm9wcyBmb3IgdGhhdCBub2RlLlxuICAgICAqL1xuICAgIGxldCBjb250YWluZXI6IENsaWVudENvbnRhaW5lciB8IG51bGwgPSBudWxsO1xuICAgIHByb2Nlc3NWTm9kZURhdGEodkRhdGEsIChwZWVrLCBjb25zdW1lVmFsdWUpID0+IHtcbiAgICAgIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuSUQpIHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICBjb250YWluZXIgPSBnZXREb21Db250YWluZXIodlBhcmVudC5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IGNvbnN1bWVWYWx1ZSgpO1xuICAgICAgICBjb250YWluZXIuJHNldFJhd1N0YXRlJChwYXJzZUludChpZCwgMTApLCB2UGFyZW50KTtcbiAgICAgICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcCh2UGFyZW50LCBFTEVNRU5UX0lELCBpZCk7XG4gICAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5CQUNLX1JFRlMpIHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICBjb250YWluZXIgPSBnZXREb21Db250YWluZXIodlBhcmVudC5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRFZmZlY3RCYWNrUmVmRnJvbVZOb2RlRGF0YSh2UGFyZW50LCBjb25zdW1lVmFsdWUoKSwgY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHByZXZlbnQgaW5maW5pdHkgbG9vcCBpZiB0aGVyZSBhcmUgc29tZSBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIHJhbmdlXG4gICAgICAgIGNvbnN1bWVWYWx1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZGaXJzdENoaWxkO1xufTtcblxuZnVuY3Rpb24gc2V0RWZmZWN0QmFja1JlZkZyb21WTm9kZURhdGEoXG4gIHZQYXJlbnQ6IFZOb2RlLFxuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lclxuKSB7XG4gIGlmICghKHZQYXJlbnQgYXMgYW55KVtfRUZGRUNUX0JBQ0tfUkVGXSkge1xuICAgIC8vIGdldCBkYXRhIGxhemlseVxuICAgIC8vIHRoaXMgaXMgYmVjYXVzZSBlZmZlY3RzIGJhY2sgcmVmcyBjYW4gcG9pbnQgdG8gdm5vZGVzIHdoaWNoIGFyZSBub3QgeWV0IG1hdGVyaWFsaXplZFxuICAgIC8vIChhcmUgYWZ0ZXIgdGhlIGN1cnJlbnQgdm5vZGUpXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZQYXJlbnQsIF9FRkZFQ1RfQkFDS19SRUYsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3Qgc3ViTWFwID0gY29udGFpbmVyLiRnZXRPYmplY3RCeUlkJCh2YWx1ZSk7XG4gICAgICAgICh2UGFyZW50IGFzIGFueSlbX0VGRkVDVF9CQUNLX1JFRl0gPSBzdWJNYXA7XG4gICAgICAgIHJldHVybiBzdWJNYXA7XG4gICAgICB9LFxuICAgICAgc2V0KHZhbHVlOiB1bmtub3duKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2UGFyZW50LCBfRUZGRUNUX0JBQ0tfUkVGLCB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3ViTWFwID0gKHZQYXJlbnQgYXMgYW55KVtfRUZGRUNUX0JBQ0tfUkVGXTtcbiAgICBtZXJnZU1hcHMoc3ViTWFwLCBjb250YWluZXIuJGdldE9iamVjdEJ5SWQkKHZhbHVlKSk7XG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1ZOb2RlRGF0YSA9IChcbiAgdkRhdGE6IHN0cmluZyxcbiAgY2FsbGJhY2s6IChcbiAgICBwZWVrOiAoKSA9PiBudW1iZXIsXG4gICAgY29uc3VtZVZhbHVlOiAoKSA9PiBzdHJpbmcsXG4gICAgY29uc3VtZTogKCkgPT4gbnVtYmVyLFxuICAgIGdldENoYXI6IChpZHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIG5leHRUb0NvbnN1bWVJZHg6IG51bWJlclxuICApID0+IHZvaWRcbikgPT4ge1xuICBsZXQgbmV4dFRvQ29uc3VtZUlkeCA9IDA7XG4gIGxldCBjaCA9IDA7XG4gIGxldCBwZWVrQ2ggPSAwO1xuICBjb25zdCBnZXRDaGFyID0gKGlkeDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGlkeCA8IHZEYXRhLmxlbmd0aCA/IHZEYXRhLmNoYXJDb2RlQXQoaWR4KSA6IDA7XG4gIH07XG4gIGNvbnN0IHBlZWsgPSAoKSA9PiB7XG4gICAgaWYgKHBlZWtDaCAhPT0gMCkge1xuICAgICAgcmV0dXJuIHBlZWtDaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChwZWVrQ2ggPSBnZXRDaGFyKG5leHRUb0NvbnN1bWVJZHgpKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbnN1bWUgPSAoKSA9PiB7XG4gICAgY2ggPSBwZWVrKCk7XG4gICAgcGVla0NoID0gMDtcbiAgICBuZXh0VG9Db25zdW1lSWR4Kys7XG4gICAgcmV0dXJuIGNoO1xuICB9O1xuXG4gIGNvbnN0IGNvbnN1bWVWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdW1lKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXh0VG9Db25zdW1lSWR4O1xuICAgIHdoaWxlIChcbiAgICAgIChwZWVrKCkgPD0gNTggLyogYDpgICovICYmIHBlZWtDaCAhPT0gMCkgfHxcbiAgICAgIHBlZWtDaCA9PT0gOTIgLyogYFxcYCBiYWNrc2xhc2ggZXNjYXBlICovIHx8XG4gICAgICBwZWVrQ2ggPT09IDk1IC8qIGBfYCAqLyB8fFxuICAgICAgKHBlZWtDaCA+PSA2NSAvKiBgQWAgKi8gJiYgcGVla0NoIDw9IDkwKSAvKiBgWmAgKi8gfHxcbiAgICAgIChwZWVrQ2ggPj0gOTcgLyogYGFgICovICYmIHBlZWtDaCA8PSAxMjIpIC8qIGB6YCAqL1xuICAgICkge1xuICAgICAgY29uc3VtZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdkRhdGEuc3Vic3RyaW5nKHN0YXJ0LCBuZXh0VG9Db25zdW1lSWR4KTtcbiAgfTtcblxuICB3aGlsZSAocGVlaygpICE9PSAwKSB7XG4gICAgY2FsbGJhY2socGVlaywgY29uc3VtZVZhbHVlLCBjb25zdW1lLCBnZXRDaGFyLCBuZXh0VG9Db25zdW1lSWR4KTtcbiAgfVxufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX2dldEF0dHJLZXlzID0gKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgdm5vZGU6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZVxuKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCB0eXBlID0gdm5vZGUuZmxhZ3M7XG4gIGlmICgodHlwZSAmIFZOb2RlRmxhZ3MuRUxFTUVOVF9PUl9WSVJUVUFMX01BU0spICE9PSAwKSB7XG4gICAgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkKGNvbnRhaW5lciwgdm5vZGUpO1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcHJvcHMgPSB2bm9kZS5wcm9wcztcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoUV9QUk9QU19TRVBBUkFUT1IpKSB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbiAgcmV0dXJuIFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2lzRGVzY2VuZGFudE9mID0gKHZub2RlOiBWTm9kZSwgYW5jZXN0b3I6IFZOb2RlKTogYm9vbGVhbiA9PiB7XG4gIGxldCBwYXJlbnQ6IFZOb2RlIHwgbnVsbCA9IHZub2RlX2dldFByb2plY3Rpb25QYXJlbnRPclBhcmVudCh2bm9kZSk7XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50ID09PSBhbmNlc3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHBhcmVudCA9IHZub2RlX2dldFByb2plY3Rpb25QYXJlbnRPclBhcmVudChwYXJlbnQpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRQcm9qZWN0aW9uUGFyZW50T3JQYXJlbnQgPSAodm5vZGU6IFZOb2RlKTogVk5vZGUgfCBudWxsID0+IHtcbiAgcmV0dXJuIHZub2RlLnBhcmVudCB8fCB2bm9kZS5zbG90UGFyZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldE5vZGUgPSAodm5vZGU6IFZOb2RlIHwgbnVsbCk6IEVsZW1lbnQgfCBUZXh0IHwgbnVsbCA9PiB7XG4gIGlmICh2bm9kZSA9PT0gbnVsbCB8fCB2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2bm9kZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHZub2RlIGFzIEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSkubm9kZTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB2bm9kZV90b1N0cmluZyhcbiAgdGhpczogVk5vZGUgfCBudWxsLFxuICBkZXB0aDogbnVtYmVyID0gMjAsXG4gIG9mZnNldDogc3RyaW5nID0gJycsXG4gIG1hdGVyaWFsaXplOiBib29sZWFuID0gZmFsc2UsXG4gIHNpYmxpbmdzID0gZmFsc2UsXG4gIGNvbG9yaXplOiBib29sZWFuID0gdHJ1ZSxcbiAgY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsID0gbnVsbFxuKTogc3RyaW5nIHtcbiAgaWYgKHRoaXMgJiYgIWNvbnRhaW5lcikge1xuICAgIHRyeSB7XG4gICAgICBjb250YWluZXIgPSB2bm9kZV9nZXRET01Db250YWluZXIodGhpcyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUsIGFzIHRoaXMgaXMgb25seSBmb3IgZGVidWdnaW5nXG4gICAgfVxuICB9XG5cbiAgbGV0IHZub2RlID0gdGhpcztcbiAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgcmV0dXJuICcuLi4nO1xuICB9XG4gIGlmICh2bm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cbiAgaWYgKHZub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cbiAgY29uc3Qgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgTkFNRV9DT0xfUFJFRklYID0gJ1xceDFiWzM0bSc7XG4gIGNvbnN0IE5BTUVfQ09MX1NVRkZJWCA9ICdcXHgxYlswbSc7XG4gIGRvIHtcbiAgICBpZiAodm5vZGVfaXNUZXh0Vk5vZGUodm5vZGUpKSB7XG4gICAgICBzdHJpbmdzLnB1c2gocXdpa0RlYnVnVG9TdHJpbmcodm5vZGVfZ2V0VGV4dCh2bm9kZSkpKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlX2lzVmlydHVhbFZOb2RlKHZub2RlKSkge1xuICAgICAgY29uc3QgaWR4ID0gdm5vZGUuZmxhZ3MgPj4+IFZOb2RlRmxhZ3NJbmRleC5zaGlmdDtcbiAgICAgIGNvbnN0IGF0dHJzOiBzdHJpbmdbXSA9IFsnWycgKyBTdHJpbmcoaWR4KSArICddJ107XG4gICAgICBpZiAodm5vZGUuZGlydHkpIHtcbiAgICAgICAgYXR0cnMucHVzaChgIGRpcnR5OiR7dm5vZGUuZGlydHl9YCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnN0IGF0dHJLZXlzID0gdm5vZGVfZ2V0QXR0cktleXMoY29udGFpbmVyLCB2bm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cktleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBhdHRyS2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSBERUJVR19UWVBFICYmIGtleSAhPT0gZGVidWdTdHlsZVNjb3BlSWRQcmVmaXhBdHRyKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZub2RlX2dldFByb3Aodm5vZGUhLCBrZXksIG51bGwpO1xuICAgICAgICAgICAgYXR0cnMucHVzaCgnICcgKyBrZXkgKyAnPScgKyBxd2lrRGVidWdUb1N0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodm5vZGUuc2xvdFBhcmVudCkge1xuICAgICAgICAgIGF0dHJzLnB1c2goJyBzbG90UGFyZW50PShDKScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgKGNvbG9yaXplID8gTkFNRV9DT0xfUFJFRklYIDogJycpICtcbiAgICAgICAgKFZpcnR1YWxUeXBlTmFtZVt2bm9kZV9nZXRQcm9wPHN0cmluZz4odm5vZGUsIERFQlVHX1RZUEUsIG51bGwpIHx8IFZpcnR1YWxUeXBlLlZpcnR1YWxdIHx8XG4gICAgICAgICAgVmlydHVhbFR5cGVOYW1lW1ZpcnR1YWxUeXBlLlZpcnR1YWxdKSArXG4gICAgICAgIChjb2xvcml6ZSA/IE5BTUVfQ09MX1NVRkZJWCA6ICcnKTtcbiAgICAgIHN0cmluZ3MucHVzaCgnPCcgKyBuYW1lICsgYXR0cnMuam9pbignJykgKyAnPicpO1xuICAgICAgY29uc3QgY2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZub2RlKTtcbiAgICAgIGNoaWxkICYmXG4gICAgICAgIHN0cmluZ3MucHVzaChcbiAgICAgICAgICAnICAnICsgdm5vZGVfdG9TdHJpbmcuY2FsbChjaGlsZCwgZGVwdGggLSAxLCBvZmZzZXQgKyAnICAnLCB0cnVlLCB0cnVlLCBjb2xvcml6ZSlcbiAgICAgICAgKTtcbiAgICAgIHN0cmluZ3MucHVzaCgnPC8nICsgbmFtZSArICc+Jyk7XG4gICAgfSBlbHNlIGlmICh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2bm9kZSkpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHZub2RlX2dldEVsZW1lbnROYW1lKHZub2RlKTtcbiAgICAgIGNvbnN0IGF0dHJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKGlzQ3Vyc29yKHZub2RlKSkge1xuICAgICAgICBhdHRycy5wdXNoKCcgY3Vyc29yJyk7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGUuZGlydHkpIHtcbiAgICAgICAgYXR0cnMucHVzaChgIGRpcnR5OiR7dm5vZGUuZGlydHl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGUuZGlydHlDaGlsZHJlbikge1xuICAgICAgICBhdHRycy5wdXNoKGAgZGlydHlDaGlsZHJlblske3Zub2RlLmRpcnR5Q2hpbGRyZW4ubGVuZ3RofV1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXMgPSBjb250YWluZXIgPyB2bm9kZV9nZXRBdHRyS2V5cyhjb250YWluZXIsIHZub2RlKSA6IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdm5vZGVfZ2V0UHJvcCh2bm9kZSEsIGtleSwgbnVsbCk7XG4gICAgICAgIGF0dHJzLnB1c2goJyAnICsga2V5ICsgJz0nICsgcXdpa0RlYnVnVG9TdHJpbmcodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSB2bm9kZV9nZXROb2RlKHZub2RlKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHZub2RlRGF0YSA9IChmYXN0T3duZXJEb2N1bWVudChub2RlKSBhcyBRRG9jdW1lbnQpLnFWTm9kZURhdGE/LmdldChub2RlKTtcbiAgICAgICAgaWYgKHZub2RlRGF0YSkge1xuICAgICAgICAgIGF0dHJzLnB1c2goJyBxOnZub2RlRGF0YT0nICsgcXdpa0RlYnVnVG9TdHJpbmcodm5vZGVEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvbUF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21BdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhdHRyID0gZG9tQXR0cnNbaV07XG4gICAgICAgIGlmIChrZXlzLmluZGV4T2YoYXR0ci5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRycy5wdXNoKCcgJyArIGF0dHIubmFtZSArIChhdHRyLnZhbHVlID8gJz0nICsgcXdpa0RlYnVnVG9TdHJpbmcoYXR0ci52YWx1ZSkgOiAnJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdHJpbmdzLnB1c2goJzwnICsgdGFnICsgYXR0cnMuam9pbignJykgKyAnPicpO1xuICAgICAgaWYgKHZub2RlX2lzTWF0ZXJpYWxpemVkKHZub2RlKSB8fCBtYXRlcmlhbGl6ZSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHZub2RlX2dldEZpcnN0Q2hpbGQodm5vZGUpO1xuICAgICAgICBjaGlsZCAmJlxuICAgICAgICAgIHN0cmluZ3MucHVzaChcbiAgICAgICAgICAgICcgICcgKyB2bm9kZV90b1N0cmluZy5jYWxsKGNoaWxkLCBkZXB0aCAtIDEsIG9mZnNldCArICcgICcsIHRydWUsIHRydWUsIGNvbG9yaXplKVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJpbmdzLnB1c2goJyAgPCEtLSBub3QgbWF0ZXJpYWxpemVkIC0tIT4nKTtcbiAgICAgIH1cbiAgICAgIHN0cmluZ3MucHVzaCgnPC8nICsgdGFnICsgJz4nKTtcbiAgICB9XG4gICAgdm5vZGUgPSAoc2libGluZ3MgJiYgdm5vZGUubmV4dFNpYmxpbmcpIHx8IG51bGw7XG4gIH0gd2hpbGUgKHZub2RlKTtcbiAgcmV0dXJuIHN0cmluZ3Muam9pbignXFxuJyArIG9mZnNldCk7XG59XG5cbmNvbnN0IGlzTnVtYmVyID0gKGNoOiBudW1iZXIpID0+IC8qIGAwYCAqLyA0OCA8PSBjaCAmJiBjaCA8PSA1NzsgLyogYDlgICovXG5jb25zdCBpc0xvd2VyY2FzZSA9IChjaDogbnVtYmVyKSA9PiAvKiBgYWAgKi8gOTcgPD0gY2ggJiYgY2ggPD0gMTIyOyAvKiBgemAgKi9cblxuZnVuY3Rpb24gc2hvdWxkU2tpcEVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICByZXR1cm4gKFxuICAgIC8vIFNraXAgb3ZlciBlbGVtZW50cyB0aGF0IGRvbid0IGhhdmUgYSBwcm9wcyBzZXBhcmF0b3IuIFRoZXkgYXJlIG5vdCByZW5kZXJlZCBieSBRd2lrLlxuICAgICFlbGVtZW50Lmhhc0F0dHJpYnV0ZShRX1BST1BTX1NFUEFSQVRPUikgfHxcbiAgICAvLyBXZSBwcmV0ZW5kIHRoYXQgc3R5bGUgZWxlbWVudCdzIGRvbid0IGV4aXN0IGFzIHRoZXkgY2FuIGdldCBtb3ZlZCBvdXQuXG4gICAgLy8gc2tpcCBvdmVyIHN0eWxlIGVsZW1lbnRzLCBhcyB0aG9zZSBuZWVkIHRvIGJlIG1vdmVkIHRvIHRoZSBoZWFkXG4gICAgLy8gYW5kIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGNvdW50cy5cbiAgICAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NUWUxFJyAmJlxuICAgICAgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFFTY29wZWRTdHlsZSkgfHwgZWxlbWVudC5oYXNBdHRyaWJ1dGUoUVN0eWxlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc09ubHlTdXNwZW5zZVBsYWNlaG9sZGVyKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgY29uc3Qgc2VnbWVudElkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUVN1c3BlbnNlUmVzdWx0UGFyZW50KTtcbiAgaWYgKHNlZ21lbnRJZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBmaXJzdENoaWxkID0gZmFzdEZpcnN0Q2hpbGQoZWxlbWVudCk7XG4gIHJldHVybiAoXG4gICAgaXNFbGVtZW50KGZpcnN0Q2hpbGQpICYmXG4gICAgZmlyc3RDaGlsZC5sb2NhbE5hbWUgPT09ICd0ZW1wbGF0ZScgJiZcbiAgICBmaXJzdENoaWxkLmdldEF0dHJpYnV0ZShRU3VzcGVuc2VSZXNvbHZlZCkgPT09IHNlZ21lbnRJZCAmJlxuICAgIGZhc3ROZXh0U2libGluZyhmaXJzdENoaWxkKSA9PT0gbnVsbFxuICApO1xufVxuXG5jb25zdCBzdGFjazogYW55W10gPSBbXTtcbmZ1bmN0aW9uIG1hdGVyaWFsaXplRnJvbVZOb2RlRGF0YShcbiAgdlBhcmVudDogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLFxuICB2RGF0YTogc3RyaW5nLFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBjaGlsZDogTm9kZSB8IG51bGwsXG4gIHNlZ21lbnRJZDogc3RyaW5nIHwgbnVsbFxuKTogVk5vZGUge1xuICBsZXQgaWR4ID0gMDtcbiAgbGV0IHZGaXJzdDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IHZMYXN0OiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICBsZXQgcHJldmlvdXNUZXh0Tm9kZTogVGV4dFZOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgYWRkVk5vZGUgPSAobm9kZTogVk5vZGUpID0+IHtcbiAgICBub2RlLmZsYWdzID0gKG5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzSW5kZXgubWFzaykgfCAoaWR4IDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCk7XG4gICAgaWR4Kys7XG4gICAgdkxhc3QgJiYgKHZMYXN0Lm5leHRTaWJsaW5nID0gbm9kZSk7XG4gICAgbm9kZS5wcmV2aW91c1NpYmxpbmcgPSB2TGFzdDtcbiAgICBub2RlLnBhcmVudCA9IHZQYXJlbnQ7XG4gICAgaWYgKCF2Rmlyc3QpIHtcbiAgICAgIHZQYXJlbnQuZmlyc3RDaGlsZCA9IHZGaXJzdCA9IG5vZGU7XG4gICAgfVxuICAgIHZMYXN0ID0gbm9kZTtcbiAgfTtcblxuICBsZXQgdGV4dElkeCA9IDA7XG4gIGxldCBjb21iaW5lZFRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBsZXQgY29udGFpbmVyOiBDbGllbnRDb250YWluZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBzaG91bGRTa2lwTm9kZSA9IChub2RlOiBOb2RlIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IG5vZGVJc0VsZW1lbnQgPSBpc0VsZW1lbnQobm9kZSk7XG4gICAgcmV0dXJuICFub2RlSXNFbGVtZW50IHx8IChub2RlSXNFbGVtZW50ICYmIHNob3VsZFNraXBFbGVtZW50KG5vZGUpKTtcbiAgfTtcblxuICBsZXQgY29tcG9uZW50czogVmlydHVhbFZOb2RlW10gfCBudWxsID0gbnVsbDtcblxuICBwcm9jZXNzVk5vZGVEYXRhKHZEYXRhLCAocGVlaywgY29uc3VtZVZhbHVlLCBjb25zdW1lLCBnZXRDaGFyLCBuZXh0VG9Db25zdW1lSWR4KSA9PiB7XG4gICAgaWYgKGlzTnVtYmVyKHBlZWsoKSkpIHtcbiAgICAgIC8vIEVsZW1lbnQgY291bnRzIGdldCBlbmNvZGVkIGFzIG51bWJlcnMuXG4gICAgICB3aGlsZSAoc2hvdWxkU2tpcE5vZGUoY2hpbGQpKSB7XG4gICAgICAgIGNoaWxkID0gZmFzdE5leHRTaWJsaW5nKGNoaWxkKTtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IubWF0ZXJpYWxpemVWTm9kZURhdGFFcnJvciwgW3ZEYXRhLCBwZWVrKCksIG5leHRUb0NvbnN1bWVJZHhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tYmluZWRUZXh0ID0gbnVsbDtcbiAgICAgIHByZXZpb3VzVGV4dE5vZGUgPSBudWxsO1xuICAgICAgbGV0IHZhbHVlID0gMDtcbiAgICAgIHdoaWxlIChpc051bWJlcihwZWVrKCkpKSB7XG4gICAgICAgIHZhbHVlICo9IDEwO1xuICAgICAgICB2YWx1ZSArPSBjb25zdW1lKCkgLSA0ODsgLyogYDBgICovXG4gICAgICB9XG4gICAgICB3aGlsZSAodmFsdWUtLSkge1xuICAgICAgICBjb25zdCBlbGVtZW50Vk5vZGUgPSB2bm9kZV9uZXdVbk1hdGVyaWFsaXplZEVsZW1lbnQoY2hpbGQgYXMgRWxlbWVudCk7XG4gICAgICAgIHZub2RlX2Vuc3VyZUVsZW1lbnRLZXlJbmZsYXRlZChlbGVtZW50Vk5vZGUpO1xuICAgICAgICBhZGRWTm9kZShlbGVtZW50Vk5vZGUpO1xuICAgICAgICBjaGlsZCA9IGZhc3ROZXh0U2libGluZyhjaGlsZCk7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAvLyBza2lwIG9ubHkgZWxlbWVudHMsIG5vdCB0ZXh0IG5vZGVzXG4gICAgICAgICAgaXNFbGVtZW50KGNoaWxkKSAmJlxuICAgICAgICAgIHNob3VsZFNraXBFbGVtZW50KGNoaWxkKVxuICAgICAgICApIHtcbiAgICAgICAgICBjaGlsZCA9IGZhc3ROZXh0U2libGluZyhjaGlsZCk7XG4gICAgICAgICAgaWYgKCFjaGlsZCAmJiB2YWx1ZSA+IDApIHtcbiAgICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IubWF0ZXJpYWxpemVWTm9kZURhdGFFcnJvciwgW3ZEYXRhLCBwZWVrKCksIG5leHRUb0NvbnN1bWVJZHhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbGxlY3QgdGhlIGVsZW1lbnRzO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLlNDT1BFRF9TVFlMRSkge1xuICAgICAgdm5vZGVfc2V0UHJvcCh2UGFyZW50LCBRU2NvcGVkU3R5bGUsIGNvbnN1bWVWYWx1ZSgpKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5SRU5ERVJfRk4pIHtcbiAgICAgIChjb21wb25lbnRzIHx8PSBbXSkucHVzaCh2UGFyZW50IGFzIFZpcnR1YWxWTm9kZSk7XG4gICAgICB2bm9kZV9zZXRQcm9wKHZQYXJlbnQsIE9uUmVuZGVyUHJvcCwgY29uc3VtZVZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLklEKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICBjb250YWluZXIgPSBnZXREb21Db250YWluZXIoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZCA9IGNvbnN1bWVWYWx1ZSgpO1xuICAgICAgY29udGFpbmVyLiRzZXRSYXdTdGF0ZSQocGFyc2VJbnQoaWQsIDEwKSwgdlBhcmVudCk7XG4gICAgICBpc0RldiAmJiB2bm9kZV9zZXRQcm9wKHZQYXJlbnQsIEVMRU1FTlRfSUQsIGlkKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5QUk9QUykge1xuICAgICAgdm5vZGVfc2V0UHJvcCh2UGFyZW50LCBFTEVNRU5UX1BST1BTLCBjb25zdW1lVmFsdWUoKSk7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuS0VZKSB7XG4gICAgICBjb25zdCBpc0VzY2FwZWRWYWx1ZSA9IGdldENoYXIobmV4dFRvQ29uc3VtZUlkeCArIDEpID09PSBWTm9kZURhdGFDaGFyLlNFUEFSQVRPUjtcbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmIChpc0VzY2FwZWRWYWx1ZSkge1xuICAgICAgICBjb25zdW1lKCk7XG4gICAgICAgIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGRlY29kZVZOb2RlRGF0YVN0cmluZyhjb25zdW1lVmFsdWUoKSkpO1xuICAgICAgICBjb25zdW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGNvbnN1bWVWYWx1ZSgpO1xuICAgICAgfVxuICAgICAgdlBhcmVudC5rZXkgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVEpIHtcbiAgICAgIHZub2RlX3NldFByb3AodlBhcmVudCwgRUxFTUVOVF9TRVEsIGNvbnN1bWVWYWx1ZSgpKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVFfSURYKSB7XG4gICAgICB2bm9kZV9zZXRQcm9wKHZQYXJlbnQsIEVMRU1FTlRfU0VRX0lEWCwgY29uc3VtZVZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLkJBQ0tfUkVGUykge1xuICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyID0gZ2V0RG9tQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgc2V0RWZmZWN0QmFja1JlZkZyb21WTm9kZURhdGEodlBhcmVudCwgY29uc3VtZVZhbHVlKCksIGNvbnRhaW5lcik7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuU0xPVF9QQVJFTlQpIHtcbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHZQYXJlbnQuc2xvdFBhcmVudCA9IHZub2RlX2xvY2F0ZShjb250YWluZXIhLnJvb3RWTm9kZSwgY29uc3VtZVZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLkNPTlRFWFQpIHtcbiAgICAgIHZub2RlX3NldFByb3AodlBhcmVudCwgUUN0eEF0dHIsIGNvbnN1bWVWYWx1ZSgpKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5PUEVOKSB7XG4gICAgICBjb25zdW1lKCk7XG4gICAgICBhZGRWTm9kZSh2bm9kZV9uZXdWaXJ0dWFsKCkpO1xuICAgICAgc3RhY2sucHVzaCh2UGFyZW50LCB2Rmlyc3QsIHZMYXN0LCBwcmV2aW91c1RleHROb2RlLCBpZHgpO1xuICAgICAgaWR4ID0gMDtcbiAgICAgIHZQYXJlbnQgPSB2TGFzdCBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGU7XG4gICAgICB2Rmlyc3QgPSB2TGFzdCA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuU0VQQVJBVE9SKSB7XG4gICAgICAvLyBDdXN0b20gYXR0cmlidXRlOiB8a2V5fHZhbHVlXG4gICAgICBjb25zdCBrZXlWYWx1ZSA9IGNvbnN1bWVWYWx1ZSgpO1xuICAgICAgY29uc3Qga2V5ID0gZGVjb2RlVk5vZGVEYXRhU3RyaW5nKGtleVZhbHVlKTtcbiAgICAgIGNvbnN0IHZhbHVlU2VwYXJhdG9ySWR4ID0gbmV4dFRvQ29uc3VtZUlkeCArIGtleVZhbHVlLmxlbmd0aCArIDE7XG4gICAgICBjb25zdCBpc0VzY2FwZWRWYWx1ZSA9IGdldENoYXIodmFsdWVTZXBhcmF0b3JJZHggKyAxKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVBBUkFUT1I7XG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBpZiAoaXNFc2NhcGVkVmFsdWUpIHtcbiAgICAgICAgY29uc3VtZSgpO1xuICAgICAgICB2YWx1ZSA9IGRlY29kZVVSSShkZWNvZGVWTm9kZURhdGFTdHJpbmcoY29uc3VtZVZhbHVlKCkpKTtcbiAgICAgICAgY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBkZWNvZGVWTm9kZURhdGFTdHJpbmcoY29uc3VtZVZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgdm5vZGVfc2V0UHJvcCh2UGFyZW50LCBrZXksIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5DTE9TRSkge1xuICAgICAgY29uc3VtZSgpO1xuICAgICAgdlBhcmVudC5sYXN0Q2hpbGQgPSB2TGFzdDtcbiAgICAgIGlkeCA9IHN0YWNrLnBvcCgpO1xuICAgICAgcHJldmlvdXNUZXh0Tm9kZSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdkxhc3QgPSBzdGFjay5wb3AoKTtcbiAgICAgIHZGaXJzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgdlBhcmVudCA9IHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLlNMT1QpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2RlVk5vZGVEYXRhU3RyaW5nKGNvbnN1bWVWYWx1ZSgpKTtcbiAgICAgIHZub2RlX3NldFByb3AodlBhcmVudCwgUVNsb3QsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2tpcCBvdmVyIHN0eWxlIG9yIG5vbi1xd2lrIGVsZW1lbnRzIGluIGZyb250IG9mIHRleHQgbm9kZXMsIHdoZXJlIHRleHQgbm9kZSBpcyB0aGUgZmlyc3QgY2hpbGQgKGV4Y2VwdCB0aGUgc3R5bGUgbm9kZSlcbiAgICAgIHdoaWxlIChpc0VsZW1lbnQoY2hpbGQpICYmIHNob3VsZFNraXBFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICBjaGlsZCA9IGZhc3ROZXh0U2libGluZyhjaGlsZCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9XG4gICAgICAgIGNoaWxkICYmIGZhc3ROb2RlVHlwZShjaGlsZCkgPT09IC8qIE5vZGUuVEVYVF9OT0RFICovIDMgPyAoY2hpbGQgYXMgVGV4dCkgOiBudWxsO1xuICAgICAgLy8gbXVzdCBiZSBhbHBoYW51bWVyaWNcbiAgICAgIGlmIChjb21iaW5lZFRleHQgPT09IG51bGwpIHtcbiAgICAgICAgY29tYmluZWRUZXh0ID0gdGV4dE5vZGUgPyB0ZXh0Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuICAgICAgICB0ZXh0SWR4ID0gMDtcbiAgICAgIH1cbiAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgd2hpbGUgKGlzTG93ZXJjYXNlKHBlZWsoKSkpIHtcbiAgICAgICAgbGVuZ3RoICs9IGNvbnN1bWUoKSAtIDk3OyAvKiBgYWAgKi9cbiAgICAgICAgbGVuZ3RoICo9IDI2O1xuICAgICAgfVxuICAgICAgbGVuZ3RoICs9IGNvbnN1bWUoKSAtIDY1OyAvKiBgQWAgKi9cbiAgICAgIGNvbnN0IHRleHQgPSBjb21iaW5lZFRleHQgPT09IG51bGwgPyAnJyA6IGNvbWJpbmVkVGV4dC5zdWJzdHJpbmcodGV4dElkeCwgdGV4dElkeCArIGxlbmd0aCk7XG5cbiAgICAgIGFkZFZOb2RlKFxuICAgICAgICAocHJldmlvdXNUZXh0Tm9kZSA9IHZub2RlX25ld1NoYXJlZFRleHQocHJldmlvdXNUZXh0Tm9kZSwgdGV4dE5vZGUgYXMgVGV4dCB8IG51bGwsIHRleHQpKVxuICAgICAgKTtcbiAgICAgIHRleHRJZHggKz0gbGVuZ3RoO1xuICAgICAgLy8gVGV4dCBub2RlcyBnZXQgZW5jb2RlZCBhcyBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAgICB9XG4gIH0pO1xuICBpZiAoY29tcG9uZW50cykge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBnZXREb21Db250YWluZXIoZWxlbWVudCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGNvbXBvbmVudHMgYXMgVmlydHVhbFZOb2RlW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb250YWluZXIuZW5zdXJlUHJvamVjdGlvblJlc29sdmVkKGNvbXBvbmVudHNbaV0pO1xuICAgIH1cbiAgICBjb21wb25lbnRzID0gbnVsbDtcbiAgfVxuICB2UGFyZW50Lmxhc3RDaGlsZCA9IHZMYXN0O1xuICByZXR1cm4gdkZpcnN0ITtcbn1cblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldFR5cGUgPSAodm5vZGU6IFZOb2RlKTogMSB8IDMgfCAxMSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB2bm9kZS5mbGFncztcbiAgaWYgKHR5cGUgJiBWTm9kZUZsYWdzLkVsZW1lbnQpIHtcbiAgICByZXR1cm4gMSAvKiBFbGVtZW50ICovO1xuICB9IGVsc2UgaWYgKHR5cGUgJiBWTm9kZUZsYWdzLlZpcnR1YWwpIHtcbiAgICByZXR1cm4gMTEgLyogVmlydHVhbCAqLztcbiAgfSBlbHNlIGlmICh0eXBlICYgVk5vZGVGbGFncy5UZXh0KSB7XG4gICAgcmV0dXJuIDMgLyogVGV4dCAqLztcbiAgfVxuICB0aHJvdyBxRXJyb3IoUUVycm9yLmludmFsaWRWTm9kZVR5cGUsIFt0eXBlXSk7XG59O1xuXG5jb25zdCBpc0VsZW1lbnQgPSAobm9kZTogYW55KTogbm9kZSBpcyBFbGVtZW50ID0+XG4gIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT0gJ29iamVjdCcgJiYgZmFzdE5vZGVUeXBlKG5vZGUpID09PSAvKiogTm9kZS5FTEVNRU5UX05PREUqICovIDE7XG5cbi8qKlxuICogVXNlIHRoaXMgbWV0aG9kIHRvIGZpbmQgdGhlIHBhcmVudCBjb21wb25lbnQgZm9yIHByb2plY3Rpb24uXG4gKlxuICogTm9ybWFsbHkgdGhlIHBhcmVudCBjb21wb25lbnQgaXMganVzdCB0aGUgZmlyc3QgY29tcG9uZW50IHdoaWNoIHdlIGVuY291bnRlciB3aGlsZSB0cmF2ZXJzaW5nIHRoZVxuICogcGFyZW50cy5cbiAqXG4gKiBIb3dldmVyLCBpZiBkdXJpbmcgdHJhdmVyc2FsIHdlIGVuY291bnRlciBhIHByb2plY3Rpb24sIHRoYW4gd2UgaGF2ZSB0byBmb2xsb3cgdGhlIHByb2plY3Rpb24sXG4gKiBhbmQgbm9kZSB3aXRoIHRoZSBwcm9qZWN0aW9uIGNvbXBvbmVudCBpcyBmdXJ0aGVyIGF3YXkgKGl0IGlzIHRoZSBwYXJlbnQncyBwYXJlbnQgb2YgdGhlXG4gKiBwcm9qZWN0aW9uJ3MpXG4gKlxuICogU28gaW4gZ2VuZXJhbCB3ZSBoYXZlIHRvIGdvIHVwIGFzIG1hbnkgcGFyZW50IGNvbXBvbmVudHMgYXMgdGhlcmUgYXJlIHByb2plY3Rpb25zIG5lc3RpbmdzLlxuICpcbiAqIC0gTm8gcHJvamVjdGlvbiBuZXN0aW5nIGZpcnN0IHBhcmVudCBjb21wb25lbnQuXG4gKiAtIE9uZSBwcm9qZWN0aW9uIG5lc3RpbmcsIHNlY29uZCBwYXJlbnQgY29tcG9uZW50IChwYXJlbnQncyBwYXJlbnQpLlxuICogLSBUaHJlZSBwcm9qZWN0aW9uIG5lc3RpbmcsIHRoaXJkIHBhcmVudCBjb21wb25lbnQgKHBhcmVudCdzIHBhcmVudCdzIHBhcmVudCkuXG4gKiAtIEFuZCBzbyBvbi5cbiAqXG4gKiBAcGFyYW0gdkhvc3RcbiAqIEBwYXJhbSByb290Vk5vZGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRQcm9qZWN0aW9uUGFyZW50Q29tcG9uZW50ID0gKHZIb3N0OiBWTm9kZSk6IFZpcnR1YWxWTm9kZSB8IG51bGwgPT4ge1xuICBsZXQgcHJvamVjdGlvbkRlcHRoID0gMTtcbiAgd2hpbGUgKHByb2plY3Rpb25EZXB0aC0tKSB7XG4gICAgd2hpbGUgKFxuICAgICAgdkhvc3QgJiZcbiAgICAgICh2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2SG9zdCkgPyB2bm9kZV9nZXRQcm9wKHZIb3N0LCBPblJlbmRlclByb3AsIG51bGwpID09PSBudWxsIDogdHJ1ZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHFTbG90UGFyZW50ID0gdkhvc3Quc2xvdFBhcmVudDtcbiAgICAgIGNvbnN0IHZQcm9qZWN0aW9uUGFyZW50ID0gdm5vZGVfaXNWaXJ0dWFsVk5vZGUodkhvc3QpICYmIHFTbG90UGFyZW50O1xuICAgICAgaWYgKHZQcm9qZWN0aW9uUGFyZW50KSB7XG4gICAgICAgIC8vIFdlIGZvdW5kIGEgcHJvamVjdGlvbiwgc28gd2UgbmVlZCB0byBnbyB1cCBvbmUgbW9yZSBsZXZlbC5cbiAgICAgICAgcHJvamVjdGlvbkRlcHRoKys7XG4gICAgICB9XG4gICAgICB2SG9zdCA9IHZQcm9qZWN0aW9uUGFyZW50IHx8IHZIb3N0LnBhcmVudCE7XG4gICAgfVxuICAgIGlmIChwcm9qZWN0aW9uRGVwdGggPiAwKSB7XG4gICAgICB2SG9zdCA9IHZIb3N0LnBhcmVudCE7XG4gICAgfVxuICB9XG4gIHJldHVybiB2SG9zdCBhcyBWaXJ0dWFsVk5vZGUgfCBudWxsO1xufTtcbiJdfQ==","import { ensureMaterialized, vnode_isElementVNode, vnode_isVNode } from '../client/vnode-utils';\nimport { SignalImpl } from './impl/signal-impl';\nimport { WrappedSignalImpl } from './impl/wrapped-signal-impl';\nimport { getStoreHandler } from './impl/store';\nimport { AsyncSignalImpl } from './impl/async-signal-impl';\nimport { _PROPS_HANDLER } from '../shared/utils/constants';\nimport { _EFFECT_BACK_REF } from './backref';\nimport { isPropsProxy } from '../shared/jsx/props-proxy';\nexport function clearAllEffects(container, consumer) {\n    if (vnode_isVNode(consumer) && vnode_isElementVNode(consumer)) {\n        ensureMaterialized(consumer);\n    }\n    const effects = consumer[_EFFECT_BACK_REF];\n    if (!effects) {\n        return;\n    }\n    for (const [, effect] of effects) {\n        clearEffectSubscription(container, effect);\n    }\n    effects.clear();\n}\nexport function clearEffectSubscription(container, effect) {\n    const backRefs = effect.backRef;\n    if (!backRefs) {\n        return;\n    }\n    for (const producer of backRefs) {\n        // Check AsyncSignalImpl before SignalImpl since it extends SignalImpl\n        if (producer instanceof AsyncSignalImpl) {\n            clearAsyncSignal(producer, effect);\n        }\n        else if (producer instanceof SignalImpl) {\n            clearSignal(container, producer, effect);\n        }\n        else if (isPropsProxy(producer)) {\n            const propsHandler = producer[_PROPS_HANDLER];\n            clearStoreOrProps(propsHandler, effect);\n        }\n        else if (container.$storeProxyMap$.has(producer)) {\n            const target = container.$storeProxyMap$.get(producer);\n            const storeHandler = getStoreHandler(target);\n            clearStoreOrProps(storeHandler, effect);\n        }\n    }\n    backRefs.clear();\n}\nfunction clearSignal(container, producer, effect) {\n    const effects = producer.$effects$;\n    if (effects && effects.has(effect)) {\n        effects.delete(effect);\n    }\n    if (producer instanceof WrappedSignalImpl && !effects?.size) {\n        // Only clear if there are no more subscribers\n        producer.$hostElement$ = undefined;\n        clearAllEffects(container, producer);\n    }\n}\nfunction clearAsyncSignal(producer, effect) {\n    const effects = producer.$effects$;\n    if (effects && effects.has(effect)) {\n        effects.delete(effect);\n    }\n    const pendingEffects = producer.$loadingEffects$;\n    if (pendingEffects && pendingEffects.has(effect)) {\n        pendingEffects.delete(effect);\n    }\n    const errorEffects = producer.$errorEffects$;\n    if (errorEffects && errorEffects.has(effect)) {\n        errorEffects.delete(effect);\n    }\n    producer.$scheduleEagerCleanup$();\n}\nfunction clearStoreOrProps(producer, effect) {\n    const effects = producer?.$effects$;\n    if (effects) {\n        for (const [prop, propEffects] of effects.entries()) {\n            if (propEffects.has(effect)) {\n                propEffects.delete(effect);\n                if (propEffects.size === 0) {\n                    effects.delete(prop);\n                }\n            }\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9yZWFjdGl2ZS1wcmltaXRpdmVzL2NsZWFudXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBVyxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUEwQixNQUFNLDJCQUEyQixDQUFDO0FBRWpGLE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBb0IsRUFBRSxRQUFrQjtJQUN0RSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzlELGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBSSxRQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxD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UyxDQUFDO0lBQ3BDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEQsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNCLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbnN1cmVNYXRlcmlhbGl6ZWQsIHZub2RlX2lzRWxlbWVudFZOb2RlLCB2bm9kZV9pc1ZOb2RlIH0gZnJvbSAnLi4vY2xpZW50L3Zub2RlLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFNpZ25hbEltcGwgfSBmcm9tICcuL2ltcGwvc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgV3JhcHBlZFNpZ25hbEltcGwgfSBmcm9tICcuL2ltcGwvd3JhcHBlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBTdG9yZUhhbmRsZXIsIGdldFN0b3JlSGFuZGxlciB9IGZyb20gJy4vaW1wbC9zdG9yZSc7XG5pbXBvcnQgeyBBc3luY1NpZ25hbEltcGwgfSBmcm9tICcuL2ltcGwvYXN5bmMtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgX1BST1BTX0hBTkRMRVIgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IEJhY2tSZWYsIF9FRkZFQ1RfQkFDS19SRUYgfSBmcm9tICcuL2JhY2tyZWYnO1xuaW1wb3J0IHsgdHlwZSBDb25zdW1lciwgdHlwZSBFZmZlY3RTdWJzY3JpcHRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzUHJvcHNQcm94eSwgdHlwZSBQcm9wc1Byb3h5SGFuZGxlciB9IGZyb20gJy4uL3NoYXJlZC9qc3gvcHJvcHMtcHJveHknO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBbGxFZmZlY3RzKGNvbnRhaW5lcjogQ29udGFpbmVyLCBjb25zdW1lcjogQ29uc3VtZXIpOiB2b2lkIHtcbiAgaWYgKHZub2RlX2lzVk5vZGUoY29uc3VtZXIpICYmIHZub2RlX2lzRWxlbWVudFZOb2RlKGNvbnN1bWVyKSkge1xuICAgIGVuc3VyZU1hdGVyaWFsaXplZChjb25zdW1lcik7XG4gIH1cbiAgY29uc3QgZWZmZWN0cyA9IChjb25zdW1lciBhcyBCYWNrUmVmKVtfRUZGRUNUX0JBQ0tfUkVGXTtcbiAgaWYgKCFlZmZlY3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBbLCBlZmZlY3RdIG9mIGVmZmVjdHMpIHtcbiAgICBjbGVhckVmZmVjdFN1YnNjcmlwdGlvbihjb250YWluZXIsIGVmZmVjdCk7XG4gIH1cbiAgZWZmZWN0cy5jbGVhcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFZmZlY3RTdWJzY3JpcHRpb24oY29udGFpbmVyOiBDb250YWluZXIsIGVmZmVjdDogRWZmZWN0U3Vic2NyaXB0aW9uKSB7XG4gIGNvbnN0IGJhY2tSZWZzID0gZWZmZWN0LmJhY2tSZWY7XG4gIGlmICghYmFja1JlZnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBwcm9kdWNlciBvZiBiYWNrUmVmcykge1xuICAgIC8vIENoZWNrIEFzeW5jU2lnbmFsSW1wbCBiZWZvcmUgU2lnbmFsSW1wbCBzaW5jZSBpdCBleHRlbmRzIFNpZ25hbEltcGxcbiAgICBpZiAocHJvZHVjZXIgaW5zdGFuY2VvZiBBc3luY1NpZ25hbEltcGwpIHtcbiAgICAgIGNsZWFyQXN5bmNTaWduYWwocHJvZHVjZXIsIGVmZmVjdCk7XG4gICAgfSBlbHNlIGlmIChwcm9kdWNlciBpbnN0YW5jZW9mIFNpZ25hbEltcGwpIHtcbiAgICAgIGNsZWFyU2lnbmFsKGNvbnRhaW5lciwgcHJvZHVjZXIsIGVmZmVjdCk7XG4gICAgfSBlbHNlIGlmIChpc1Byb3BzUHJveHkocHJvZHVjZXIpKSB7XG4gICAgICBjb25zdCBwcm9wc0hhbmRsZXIgPSBwcm9kdWNlcltfUFJPUFNfSEFORExFUl07XG4gICAgICBjbGVhclN0b3JlT3JQcm9wcyhwcm9wc0hhbmRsZXIsIGVmZmVjdCk7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXIuJHN0b3JlUHJveHlNYXAkLmhhcyhwcm9kdWNlcikpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lci4kc3RvcmVQcm94eU1hcCQuZ2V0KHByb2R1Y2VyKSE7XG4gICAgICBjb25zdCBzdG9yZUhhbmRsZXIgPSBnZXRTdG9yZUhhbmRsZXIodGFyZ2V0KSE7XG4gICAgICBjbGVhclN0b3JlT3JQcm9wcyhzdG9yZUhhbmRsZXIsIGVmZmVjdCk7XG4gICAgfVxuICB9XG4gIGJhY2tSZWZzLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2lnbmFsKGNvbnRhaW5lcjogQ29udGFpbmVyLCBwcm9kdWNlcjogU2lnbmFsSW1wbCwgZWZmZWN0OiBFZmZlY3RTdWJzY3JpcHRpb24pIHtcbiAgY29uc3QgZWZmZWN0cyA9IHByb2R1Y2VyLiRlZmZlY3RzJDtcbiAgaWYgKGVmZmVjdHMgJiYgZWZmZWN0cy5oYXMoZWZmZWN0KSkge1xuICAgIGVmZmVjdHMuZGVsZXRlKGVmZmVjdCk7XG4gIH1cblxuICBpZiAocHJvZHVjZXIgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsSW1wbCAmJiAhZWZmZWN0cz8uc2l6ZSkge1xuICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlcmUgYXJlIG5vIG1vcmUgc3Vic2NyaWJlcnNcbiAgICBwcm9kdWNlci4kaG9zdEVsZW1lbnQkID0gdW5kZWZpbmVkO1xuICAgIGNsZWFyQWxsRWZmZWN0cyhjb250YWluZXIsIHByb2R1Y2VyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhckFzeW5jU2lnbmFsKHByb2R1Y2VyOiBBc3luY1NpZ25hbEltcGw8dW5rbm93bj4sIGVmZmVjdDogRWZmZWN0U3Vic2NyaXB0aW9uKSB7XG4gIGNvbnN0IGVmZmVjdHMgPSBwcm9kdWNlci4kZWZmZWN0cyQ7XG4gIGlmIChlZmZlY3RzICYmIGVmZmVjdHMuaGFzKGVmZmVjdCkpIHtcbiAgICBlZmZlY3RzLmRlbGV0ZShlZmZlY3QpO1xuICB9XG4gIGNvbnN0IHBlbmRpbmdFZmZlY3RzID0gcHJvZHVjZXIuJGxvYWRpbmdFZmZlY3RzJDtcbiAgaWYgKHBlbmRpbmdFZmZlY3RzICYmIHBlbmRpbmdFZmZlY3RzLmhhcyhlZmZlY3QpKSB7XG4gICAgcGVuZGluZ0VmZmVjdHMuZGVsZXRlKGVmZmVjdCk7XG4gIH1cbiAgY29uc3QgZXJyb3JFZmZlY3RzID0gcHJvZHVjZXIuJGVycm9yRWZmZWN0cyQ7XG4gIGlmIChlcnJvckVmZmVjdHMgJiYgZXJyb3JFZmZlY3RzLmhhcyhlZmZlY3QpKSB7XG4gICAgZXJyb3JFZmZlY3RzLmRlbGV0ZShlZmZlY3QpO1xuICB9XG4gIHByb2R1Y2VyLiRzY2hlZHVsZUVhZ2VyQ2xlYW51cCQoKTtcbn1cblxuZnVuY3Rpb24gY2xlYXJTdG9yZU9yUHJvcHMocHJvZHVjZXI6IFN0b3JlSGFuZGxlciB8IFByb3BzUHJveHlIYW5kbGVyLCBlZmZlY3Q6IEVmZmVjdFN1YnNjcmlwdGlvbikge1xuICBjb25zdCBlZmZlY3RzID0gcHJvZHVjZXI/LiRlZmZlY3RzJDtcbiAgaWYgKGVmZmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wLCBwcm9wRWZmZWN0c10gb2YgZWZmZWN0cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChwcm9wRWZmZWN0cy5oYXMoZWZmZWN0KSkge1xuICAgICAgICBwcm9wRWZmZWN0cy5kZWxldGUoZWZmZWN0KTtcbiAgICAgICAgaWYgKHByb3BFZmZlY3RzLnNpemUgPT09IDApIHtcbiAgICAgICAgICBlZmZlY3RzLmRlbGV0ZShwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { getDomContainer } from '../client/dom-container';\nimport { BackRef } from '../reactive-primitives/backref';\nimport { clearAllEffects } from '../reactive-primitives/cleanup';\nimport { _captures, deserializeCaptures, setCaptures, } from '../shared/qrl/qrl-class';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { TaskEvent } from '../shared/utils/markers';\nimport { isPromise, maybeThen, safeCall } from '../shared/utils/promises';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { newInvokeContext } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { cleanupAsyncDestroyable } from './utils/destroyable';\nimport { cleanupFn, trackFn } from './utils/tracker';\n/** @internal */\nexport const useTaskQrl = (qrl, opts) => {\n    const { val, set, iCtx, i } = useSequentialScope();\n    if (val) {\n        return;\n    }\n    assertQrl(qrl);\n    set(1);\n    const taskFlags = \n    // enabled by default\n    opts?.deferUpdates === false ? 0 : 8 /* TaskFlags.RENDER_BLOCKING */;\n    const task = new Task(4 /* TaskFlags.DIRTY */ | 2 /* TaskFlags.TASK */ | taskFlags, i, iCtx.$hostElement$, qrl, undefined, null);\n    // In V2 we add the task to the sequential scope. We need to do this\n    // in order to be able to retrieve it later when the parent element is\n    // deleted and we need to be able to release the task subscriptions.\n    set(task);\n    const container = iCtx.$container$;\n    const { $waitOn$: waitOn } = iCtx;\n    const result = maybeThen(waitOn, () => runTask(task, container, iCtx.$hostElement$));\n    if (isPromise(result)) {\n        iCtx.$waitOn$ = result;\n    }\n};\nexport const runTask = (task, container, host) => {\n    const pendingTask = task.$taskPromise$;\n    if (pendingTask) {\n        return pendingTask;\n    }\n    task.$flags$ &= ~4 /* TaskFlags.DIRTY */;\n    const handleError = (reason) => container.handleError(reason, host);\n    let taskPromise = null;\n    const result = maybeThen(cleanupAsyncDestroyable(task, handleError), () => {\n        const iCtx = newInvokeContext(container.$locale$, host, TaskEvent);\n        iCtx.$container$ = container;\n        const taskFn = task.$qrl$.getFn(iCtx, () => clearAllEffects(container, task));\n        const track = trackFn(task, container);\n        const [cleanup] = cleanupFn(task, handleError);\n        const taskApi = { track, cleanup };\n        return safeCall(() => taskFn(taskApi), cleanup, (err) => {\n            // If a Promise is thrown, that means we need to re-run the task.\n            if (isPromise(err)) {\n                return err.then(() => {\n                    if (task.$taskPromise$ === taskPromise) {\n                        task.$taskPromise$ = null;\n                    }\n                    return runTask(task, container, host);\n                });\n            }\n            else {\n                handleError(err);\n            }\n        });\n    });\n    if (isPromise(result)) {\n        taskPromise = result.finally(() => {\n            if (task.$taskPromise$ === taskPromise) {\n                task.$taskPromise$ = null;\n            }\n        });\n        task.$taskPromise$ = taskPromise;\n        return taskPromise;\n    }\n    return result;\n};\nexport class Task extends BackRef {\n    $flags$;\n    $index$;\n    $el$;\n    $qrl$;\n    $state$;\n    $destroy$;\n    $destroyPromise$;\n    $taskPromise$ = null;\n    constructor($flags$, $index$, $el$, $qrl$, $state$, $destroy$) {\n        super();\n        this.$flags$ = $flags$;\n        this.$index$ = $index$;\n        this.$el$ = $el$;\n        this.$qrl$ = $qrl$;\n        this.$state$ = $state$;\n        this.$destroy$ = $destroy$;\n    }\n}\n/** @internal */\nexport const isTask = (value) => {\n    return value instanceof Task;\n};\n/**\n * Used internally as a qwikloader event handler to schedule a task. The `this` context is the\n * captures part of the QRL, provided by qwikloader.\n *\n * @internal\n */\nexport function scheduleTask(_event, element) {\n    const container = getDomContainer(element);\n    if (typeof this === 'string') {\n        setCaptures(deserializeCaptures(container, this));\n    }\n    const task = _captures[0];\n    task.$flags$ |= 4 /* TaskFlags.DIRTY */;\n    markVNodeDirty(container, task.$el$, 1 /* ChoreBits.TASKS */);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXRhc2suanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS10YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLFdBQVcsR0FFWixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBZ0lyRCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBZ0IsRUFBRSxJQUFrQixFQUFRLEVBQUU7SUFDdkUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFZLENBQUM7SUFDN0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLE9BQU87SUFDVCxDQUFD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QVksSUFBSSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBZSxNQUFhLEVBQUUsT0FBZ0I7SUFDeEUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxTQUFVLENBQUMsQ0FBQyxDQUFTLENBQUM7SUFDbkMsSUFBSSxDQUFDLE9BQU8sMkJBQW1CLENBQUM7SUFDaEMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSwwQkFBa0IsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgQmFja1JlZiB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvYmFja3JlZic7XG5pbXBvcnQgeyBjbGVhckFsbEVmZmVjdHMgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2NsZWFudXAnO1xuaW1wb3J0IHsgdHlwZSBTaWduYWwgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHtcbiAgX2NhcHR1cmVzLFxuICBkZXNlcmlhbGl6ZUNhcHR1cmVzLFxuICBzZXRDYXB0dXJlcyxcbiAgdHlwZSBRUkxJbnRlcm5hbCxcbn0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgdHlwZSBDb250YWluZXIsIHR5cGUgSG9zdEVsZW1lbnQgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgVGFza0V2ZW50IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgaXNQcm9taXNlLCBtYXliZVRoZW4sIHNhZmVDYWxsIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IHR5cGUgVmFsdWVPclByb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgQ2hvcmVCaXRzIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL2VudW1zL2Nob3JlLWJpdHMuZW51bSc7XG5pbXBvcnQgeyBtYXJrVk5vZGVEaXJ0eSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92bm9kZS1kaXJ0eSc7XG5pbXBvcnQgeyBuZXdJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5pbXBvcnQgeyB1c2VTZXF1ZW50aWFsU2NvcGUgfSBmcm9tICcuL3VzZS1zZXF1ZW50aWFsLXNjb3BlJztcbmltcG9ydCB7IGNsZWFudXBBc3luY0Rlc3Ryb3lhYmxlIH0gZnJvbSAnLi91dGlscy9kZXN0cm95YWJsZSc7XG5pbXBvcnQgeyBjbGVhbnVwRm4sIHRyYWNrRm4gfSBmcm9tICcuL3V0aWxzL3RyYWNrZXInO1xuXG5leHBvcnQgY29uc3QgZW51bSBUYXNrRmxhZ3Mge1xuICBWSVNJQkxFX1RBU0sgPSAxIDw8IDAsXG4gIFRBU0sgPSAxIDw8IDEsXG4gIERJUlRZID0gMSA8PCAyLFxuICBSRU5ERVJfQkxPQ0tJTkcgPSAxIDw8IDMsXG4gIE5FRURTX0NMRUFOVVAgPSAxIDw8IDQsXG4gIEVWRU5UU19SRUdJU1RFUkVEID0gMSA8PCA1LFxufVxuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCNUcmFja2VyXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI1RyYWNrZXIgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFVzZWQgdG8gc2lnbmFsIHRvIFF3aWsgd2hpY2ggc3RhdGUgc2hvdWxkIGJlIHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gKlxuICogVGhlIGBUcmFja2VyYCBpcyBwYXNzZWQgaW50byB0aGUgYHRhc2tGbmAgb2YgYHVzZVRhc2tgLiBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHdyYXAgc3RhdGVcbiAqIG9iamVjdHMgaW4gYSByZWFkIHByb3h5IHdoaWNoIHNpZ25hbHMgdG8gUXdpayB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSB3YXRjaGVkIGZvciBjaGFuZ2VzLiBBXG4gKiBjaGFuZ2UgdG8gYW55IG9mIHRoZSBwcm9wZXJ0aWVzIGNhdXNlcyB0aGUgYHRhc2tGbmAgdG8gcmVydW4uXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgYG9ic2AgcGFzc2VkIGludG8gdGhlIGB0YXNrRm5gIGlzIHVzZWQgdG8gbWFyayBgc3RhdGUuY291bnRgIGFzIGEgcHJvcGVydHkgb2YgaW50ZXJlc3QuIEFueVxuICogY2hhbmdlcyB0byB0aGUgYHN0YXRlLmNvdW50YCBwcm9wZXJ0eSB3aWxsIGNhdXNlIHRoZSBgdGFza0ZuYCB0byByZXJ1bi5cbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKHsgY291bnQ6IDAsIGRvdWJsZUNvdW50OiAwIH0pO1xuICogICBjb25zdCBzaWduYWwgPSB1c2VTaWduYWwoMCk7XG4gKiAgIHVzZVRhc2skKCh7IHRyYWNrIH0pID0+IHtcbiAqICAgICAvLyBBbnkgc2lnbmFscyBvciBzdG9yZXMgYWNjZXNzZWQgaW5zaWRlIHRoZSB0YXNrIHdpbGwgYmUgdHJhY2tlZFxuICogICAgIGNvbnN0IGNvdW50ID0gdHJhY2soKCkgPT4gc3RvcmUuY291bnQpO1xuICogICAgIC8vIEZvciBzdG9yZXMgeW91IGNhbiBhbHNvIHBhc3MgdGhlIHN0b3JlIGFuZCBzcGVjaWZ5IHRoZSBwcm9wZXJ0eVxuICogICAgIHRyYWNrKHN0b3JlLCAnY291bnQnKTtcbiAqICAgICAvLyBZb3UgY2FuIGFsc28gcGFzcyBhIHNpZ25hbCB0byB0cmFjaygpIGRpcmVjdGx5XG4gKiAgICAgY29uc3Qgc2lnbmFsQ291bnQgPSB0cmFjayhzaWduYWwpO1xuICogICAgIHN0b3JlLmRvdWJsZUNvdW50ID0gY291bnQgKyBzaWduYWxDb3VudDtcbiAqICAgfSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxzcGFuPlxuICogICAgICAgICB7c3RvcmUuY291bnR9IC8ge3N0b3JlLmRvdWJsZUNvdW50fVxuICogICAgICAgPC9zcGFuPlxuICogICAgICAgPGJ1dHRvblxuICogICAgICAgICBvbkNsaWNrJD17KCkgPT4ge1xuICogICAgICAgICAgIHN0b3JlLmNvdW50Kys7XG4gKiAgICAgICAgICAgc2lnbmFsLnZhbHVlKys7XG4gKiAgICAgICAgIH19XG4gKiAgICAgICA+XG4gKiAgICAgICAgICtcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGB1c2VUYXNrYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXIge1xuICAvKipcbiAgICogSW5jbHVkZSB0aGUgZXhwcmVzc2lvbiB1c2luZyBzdG9yZXMgLyBzaWduYWxzIHRvIHRyYWNrOlxuICAgKlxuICAgKiBgYGB0c3hcbiAgICogdHJhY2soKCkgPT4gc3RvcmUuY291bnQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogVGhlIGB0cmFjaygpYCBmdW5jdGlvbiBhbHNvIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzY29wZWQgZXhwcmVzc2lvbjpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGNvbnN0IGNvdW50ID0gdHJhY2soKCkgPT4gc3RvcmUuY291bnQpO1xuICAgKiBgYGBcbiAgICovXG4gIDxUPihmbjogKCkgPT4gVCk6IFQ7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdHJhY2sgdGhlIHdob2xlIG9iamVjdC4gSWYgYW55IHByb3BlcnR5IG9mIHRoZSBwYXNzZWQgc3RvcmUgY2hhbmdlcywgdGhlIHRhc2sgd2lsbCBiZVxuICAgKiBzY2hlZHVsZWQgdG8gcnVuLiBBbHNvIGFjY2VwdHMgc2lnbmFscy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBjaGFuZ2UgdHJhY2tpbmcgaXMgbm90IGRlZXAuIElmIHlvdSB3YW50IHRvIHRyYWNrIGNoYW5nZXMgdG8gbmVzdGVkIHByb3BlcnRpZXMsXG4gICAqIHlvdSBuZWVkIHRvIHVzZSBgdHJhY2tgIG9uIGVhY2ggb2YgdGhlbS5cbiAgICpcbiAgICogYGBgdHN4XG4gICAqIHRyYWNrKHN0b3JlKTsgLy8gcmV0dXJucyBzdG9yZVxuICAgKiB0cmFjayhzaWduYWwpOyAvLyByZXR1cm5zIHNpZ25hbC52YWx1ZVxuICAgKiBgYGBcbiAgICovXG4gIDxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQpOiBUIGV4dGVuZHMgU2lnbmFsPGluZmVyIFU+ID8gVSA6IFQ7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdHJhY2sgdG8gdHJhY2sgYSBzcGVjaWZpYyBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgY2hhbmdlIHRyYWNraW5nIGlzIG5vdCBkZWVwLiBJZiB5b3Ugd2FudCB0byB0cmFjayBjaGFuZ2VzIHRvIG5lc3RlZCBwcm9wZXJ0aWVzLFxuICAgKiB5b3UgbmVlZCB0byB1c2UgYHRyYWNrYCBvbiBlYWNoIG9mIHRoZW0uXG4gICAqXG4gICAqIGBgYHRzeFxuICAgKiB0cmFjayhzdG9yZSwgJ3Byb3BBJyk7IC8vIHJldHVybnMgc3RvcmUucHJvcEFcbiAgICogYGBgXG4gICAqL1xuICA8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIGtleW9mIFQ+KG9iajogVCwgcHJvcDogUCk6IFRbUF07XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tDdHgge1xuICB0cmFjazogVHJhY2tlcjtcbiAgY2xlYW51cDogKGNhbGxiYWNrOiAoKSA9PiBWYWx1ZU9yUHJvbWlzZTx2b2lkPikgPT4gdm9pZDtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFRhc2tGbiA9IChjdHg6IFRhc2tDdHgpID0+IFZhbHVlT3JQcm9taXNlPHZvaWQgfCAoKCkgPT4gVmFsdWVPclByb21pc2U8dm9pZD4pPjtcblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yQmFzZTxUID0gdW5rbm93biwgQiA9IHVua25vd24+IGV4dGVuZHMgQmFja1JlZiB7XG4gICRmbGFncyQ6IG51bWJlcjtcbiAgJGluZGV4JDogbnVtYmVyO1xuICAkZWwkOiBIb3N0RWxlbWVudDtcbiAgJHFybCQ6IFFSTEludGVybmFsPFQ+O1xuICAkc3RhdGUkOiBCIHwgdW5kZWZpbmVkO1xuICAkZGVzdHJveSQ6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tPcHRpb25zIHtcbiAgLyoqIEJsb2NrIHRoZSByZW5kZXJpbmcgb2YgdGhlIGNvbXBvbmVudCB1bnRpbCB0aGUgdGFzayBjb21wbGV0ZXMuIERlZmF1bHQgaXMgYHRydWVgICovXG4gIGRlZmVyVXBkYXRlcz86IGJvb2xlYW47XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB1c2VUYXNrUXJsID0gKHFybDogUVJMPFRhc2tGbj4sIG9wdHM/OiBUYXNrT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4LCBpIH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8MSB8IFRhc2s+KCk7XG4gIGlmICh2YWwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXNzZXJ0UXJsKHFybCk7XG4gIHNldCgxKTtcblxuICBjb25zdCB0YXNrRmxhZ3MgPVxuICAgIC8vIGVuYWJsZWQgYnkgZGVmYXVsdFxuICAgIG9wdHM/LmRlZmVyVXBkYXRlcyA9PT0gZmFsc2UgPyAwIDogVGFza0ZsYWdzLlJFTkRFUl9CTE9DS0lORztcblxuICBjb25zdCB0YXNrID0gbmV3IFRhc2soXG4gICAgVGFza0ZsYWdzLkRJUlRZIHwgVGFza0ZsYWdzLlRBU0sgfCB0YXNrRmxhZ3MsXG4gICAgaSxcbiAgICBpQ3R4LiRob3N0RWxlbWVudCQsXG4gICAgcXJsLFxuICAgIHVuZGVmaW5lZCxcbiAgICBudWxsXG4gICk7XG4gIC8vIEluIFYyIHdlIGFkZCB0aGUgdGFzayB0byB0aGUgc2VxdWVudGlhbCBzY29wZS4gV2UgbmVlZCB0byBkbyB0aGlzXG4gIC8vIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmV0cmlldmUgaXQgbGF0ZXIgd2hlbiB0aGUgcGFyZW50IGVsZW1lbnQgaXNcbiAgLy8gZGVsZXRlZCBhbmQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlbGVhc2UgdGhlIHRhc2sgc3Vic2NyaXB0aW9ucy5cbiAgc2V0KHRhc2spO1xuICBjb25zdCBjb250YWluZXIgPSBpQ3R4LiRjb250YWluZXIkO1xuICBjb25zdCB7ICR3YWl0T24kOiB3YWl0T24gfSA9IGlDdHg7XG4gIGNvbnN0IHJlc3VsdCA9IG1heWJlVGhlbih3YWl0T24sICgpID0+IHJ1blRhc2sodGFzaywgY29udGFpbmVyLCBpQ3R4LiRob3N0RWxlbWVudCQpKTtcbiAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgaUN0eC4kd2FpdE9uJCA9IHJlc3VsdDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJ1blRhc2sgPSAoXG4gIHRhc2s6IFRhc2ssXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICBob3N0OiBIb3N0RWxlbWVudFxuKTogVmFsdWVPclByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBwZW5kaW5nVGFzayA9IHRhc2suJHRhc2tQcm9taXNlJDtcbiAgaWYgKHBlbmRpbmdUYXNrKSB7XG4gICAgcmV0dXJuIHBlbmRpbmdUYXNrO1xuICB9XG5cbiAgdGFzay4kZmxhZ3MkICY9IH5UYXNrRmxhZ3MuRElSVFk7XG4gIGNvbnN0IGhhbmRsZUVycm9yID0gKHJlYXNvbjogdW5rbm93bikgPT4gY29udGFpbmVyLmhhbmRsZUVycm9yKHJlYXNvbiwgaG9zdCk7XG5cbiAgbGV0IHRhc2tQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJlc3VsdCA9IG1heWJlVGhlbihjbGVhbnVwQXN5bmNEZXN0cm95YWJsZSh0YXNrLCBoYW5kbGVFcnJvciksICgpID0+IHtcbiAgICBjb25zdCBpQ3R4ID0gbmV3SW52b2tlQ29udGV4dChjb250YWluZXIuJGxvY2FsZSQsIGhvc3QsIFRhc2tFdmVudCk7XG4gICAgaUN0eC4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgICBjb25zdCB0YXNrRm4gPSB0YXNrLiRxcmwkLmdldEZuKGlDdHgsICgpID0+IGNsZWFyQWxsRWZmZWN0cyhjb250YWluZXIsIHRhc2spKSBhcyBUYXNrRm47XG5cbiAgICBjb25zdCB0cmFjayA9IHRyYWNrRm4odGFzaywgY29udGFpbmVyKTtcbiAgICBjb25zdCBbY2xlYW51cF0gPSBjbGVhbnVwRm4odGFzaywgaGFuZGxlRXJyb3IpO1xuXG4gICAgY29uc3QgdGFza0FwaTogVGFza0N0eCA9IHsgdHJhY2ssIGNsZWFudXAgfTtcbiAgICByZXR1cm4gc2FmZUNhbGwoXG4gICAgICAoKSA9PiB0YXNrRm4odGFza0FwaSksXG4gICAgICBjbGVhbnVwLFxuICAgICAgKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyBJZiBhIFByb21pc2UgaXMgdGhyb3duLCB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gcmUtcnVuIHRoZSB0YXNrLlxuICAgICAgICBpZiAoaXNQcm9taXNlKGVycikpIHtcbiAgICAgICAgICByZXR1cm4gZXJyLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRhc2suJHRhc2tQcm9taXNlJCA9PT0gdGFza1Byb21pc2UpIHtcbiAgICAgICAgICAgICAgdGFzay4kdGFza1Byb21pc2UkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydW5UYXNrKHRhc2ssIGNvbnRhaW5lciwgaG9zdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgIHRhc2tQcm9taXNlID0gcmVzdWx0LmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHRhc2suJHRhc2tQcm9taXNlJCA9PT0gdGFza1Byb21pc2UpIHtcbiAgICAgICAgdGFzay4kdGFza1Byb21pc2UkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0YXNrLiR0YXNrUHJvbWlzZSQgPSB0YXNrUHJvbWlzZTtcbiAgICByZXR1cm4gdGFza1Byb21pc2U7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNsYXNzIFRhc2s8VCA9IHVua25vd24sIEIgPSBUPlxuICBleHRlbmRzIEJhY2tSZWZcbiAgaW1wbGVtZW50cyBEZXNjcmlwdG9yQmFzZTx1bmtub3duLCBTaWduYWw8Qj4+XG57XG4gICRkZXN0cm95UHJvbWlzZSQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICR0YXNrUHJvbWlzZSQ6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgJGZsYWdzJDogbnVtYmVyLFxuICAgIHB1YmxpYyAkaW5kZXgkOiBudW1iZXIsXG4gICAgcHVibGljICRlbCQ6IEhvc3RFbGVtZW50LFxuICAgIHB1YmxpYyAkcXJsJDogUVJMSW50ZXJuYWw8VD4sXG4gICAgcHVibGljICRzdGF0ZSQ6IFNpZ25hbDxCPiB8IHVuZGVmaW5lZCxcbiAgICBwdWJsaWMgJGRlc3Ryb3kkOiAoKCkgPT4gdm9pZCkgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBpc1Rhc2sgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFRhc2sgPT4ge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUYXNrO1xufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgYXMgYSBxd2lrbG9hZGVyIGV2ZW50IGhhbmRsZXIgdG8gc2NoZWR1bGUgYSB0YXNrLiBUaGUgYHRoaXNgIGNvbnRleHQgaXMgdGhlXG4gKiBjYXB0dXJlcyBwYXJ0IG9mIHRoZSBRUkwsIHByb3ZpZGVkIGJ5IHF3aWtsb2FkZXIuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZVRhc2sodGhpczogc3RyaW5nLCBfZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBFbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihlbGVtZW50KTtcbiAgaWYgKHR5cGVvZiB0aGlzID09PSAnc3RyaW5nJykge1xuICAgIHNldENhcHR1cmVzKGRlc2VyaWFsaXplQ2FwdHVyZXMoY29udGFpbmVyLCB0aGlzKSk7XG4gIH1cbiAgY29uc3QgdGFzayA9IF9jYXB0dXJlcyFbMF0gYXMgVGFzaztcbiAgdGFzay4kZmxhZ3MkIHw9IFRhc2tGbGFncy5ESVJUWTtcbiAgbWFya1ZOb2RlRGlydHkoY29udGFpbmVyLCB0YXNrLiRlbCQsIENob3JlQml0cy5UQVNLUyk7XG59XG4iXX0=","import { qwikDebugToString } from '../debug';\nimport { qTest } from '../shared/utils/qdev';\nimport { assertDefined } from '../shared/error/assert';\nimport { isServerPlatform } from '../shared/platform/platform';\nimport { isOutOfOrderSegmentContainer } from '../shared/utils/container';\nimport { OnRenderProp } from '../shared/utils/markers';\nimport { SerializerSymbol } from '../shared/serdes/verify';\nimport { isObject } from '../shared/utils/types';\nimport { isTask } from '../use/use-task';\nimport { ComputedSignalImpl } from './impl/computed-signal-impl';\nimport { SignalImpl } from './impl/signal-impl';\nimport { SubscriptionData } from './subscription-data';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { setNodeDiffPayload, setNodePropData } from '../shared/cursor/chore-execution';\nimport { NODE_PROPS_DATA_KEY } from '../shared/cursor/cursor-props';\nimport { isBrowser, isDev } from '@qwik.dev/core/build';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('SIGNAL', ...args.map(qwikDebugToString));\nexport const throwIfQRLNotResolved = (qrl) => {\n    const resolved = qrl.resolved;\n    if (!resolved) {\n        // When we are creating a signal using a use method, we need to ensure\n        // that the computation can be lazy and therefore we need to unsure\n        // that the QRL is resolved.\n        // When we re-create the signal from serialization (we don't create the signal\n        // using useMethod) it is OK to not resolve it until the graph is marked as dirty.\n        throw qrl.resolve();\n    }\n};\n/** @public */\nexport const isSignal = (value) => {\n    return value instanceof SignalImpl;\n};\nexport const ensureContainsSubscription = (array, effectSubscription) => {\n    array.add(effectSubscription);\n};\n/** Ensure the item is in back refs set */\nexport const ensureContainsBackRef = (array, value) => {\n    (array.backRef ||= new Set()).add(value);\n};\nexport const addQrlToSerializationCtx = (effectSubscriber, container) => {\n    if (container?.serializationCtx) {\n        const effect = effectSubscriber.consumer;\n        const property = effectSubscriber.property;\n        let qrl = null;\n        if (isTask(effect)) {\n            qrl = effect.$qrl$;\n        }\n        else if (effect instanceof ComputedSignalImpl) {\n            qrl = effect.$computeQrl$;\n        }\n        else if (property === \":\" /* EffectProperty.COMPONENT */) {\n            qrl = container.getHostProp(effect, OnRenderProp);\n        }\n        if (qrl) {\n            container.serializationCtx.$eventQrls$.add(qrl);\n        }\n    }\n};\nexport const getEffectSerializationContainer = (renderContainer, ownerContainer) => {\n    if (renderContainer &&\n        (!ownerContainer ||\n            renderContainer === ownerContainer ||\n            isOutOfOrderSegmentContainer(renderContainer))) {\n        return renderContainer;\n    }\n    return ownerContainer;\n};\nexport const scheduleEffects = (container, signal, effects) => {\n    const isRunningOnBrowser = qTest ? !isServerPlatform() : isBrowser;\n    if (effects) {\n        const scheduleEffect = (effectSubscription) => {\n            const consumer = effectSubscription.consumer;\n            const property = effectSubscription.property;\n            isDev && assertDefined(container, 'Container must be defined.');\n            if (isTask(consumer)) {\n                consumer.$flags$ |= 4 /* TaskFlags.DIRTY */;\n                markVNodeDirty(container, consumer.$el$, 1 /* ChoreBits.TASKS */);\n            }\n            else if (consumer instanceof SignalImpl) {\n                consumer.invalidate();\n            }\n            else if (property === \":\" /* EffectProperty.COMPONENT */) {\n                markVNodeDirty(container, consumer, 4 /* ChoreBits.COMPONENT */);\n            }\n            else if (property === \".\" /* EffectProperty.VNODE */) {\n                if (isRunningOnBrowser) {\n                    setNodeDiffPayload(consumer, signal);\n                    markVNodeDirty(container, consumer, 2 /* ChoreBits.NODE_DIFF */);\n                }\n            }\n            else {\n                const effectData = effectSubscription.data;\n                if (effectData instanceof SubscriptionData) {\n                    const data = effectData.data;\n                    const payload = {\n                        isConst: data.$isConst$,\n                        scopedStyleIdPrefix: data.$scopedStyleIdPrefix$,\n                        value: signal,\n                    };\n                    if (isRunningOnBrowser) {\n                        setNodePropData(consumer, property, payload);\n                    }\n                    else {\n                        const node = consumer;\n                        let data = node.getProp(NODE_PROPS_DATA_KEY);\n                        if (!data) {\n                            data = new Map();\n                            node.setProp(NODE_PROPS_DATA_KEY, data);\n                        }\n                        data.set(property, payload);\n                    }\n                    markVNodeDirty(container, consumer, 16 /* ChoreBits.NODE_PROPS */);\n                }\n            }\n        };\n        const effectsSnapshot = Array.from(effects);\n        for (let i = 0; i < effectsSnapshot.length; i++) {\n            scheduleEffect(effectsSnapshot[i]);\n        }\n    }\n    DEBUG && log('done scheduling');\n};\n/** @internal */\nexport const isSerializerObj = (obj) => {\n    return isObject(obj) && typeof obj[SerializerSymbol] === 'function';\n};\nexport const getComputedSignalFlags = (serializationStrategy) => {\n    let flags = 1 /* SignalFlags.INVALID */;\n    switch (serializationStrategy) {\n        // TODO: implement this in the future\n        // case 'auto':\n        //   flags |= ComputedSignalFlags.SERIALIZATION_STRATEGY_AUTO;\n        //   break;\n        case 'never':\n            flags |= 8 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_NEVER */;\n            break;\n        case 'always':\n            flags |= 16 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_ALWAYS */;\n            break;\n    }\n    return flags;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpELE9BQU8sRUFBYSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBU3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7QUFFcEIsc0NB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LEdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUMvRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxxQkFBNEMsRUFDSixFQUFFO0lBQzFDLElBQUksS0FBSyw4QkFBc0IsQ0FBQztJQUNoQyxRQUFRLHFCQUFxQixFQUFFLENBQUM7UUFDOUIscUNBQXFDO1FBQ3JDLGVBQWU7UUFDZiw4REFBOEQ7UUFDOUQsV0FBVztRQUNYLEtBQUssT0FBTztZQUNWLEtBQUssaUVBQXlELENBQUM7WUFDL0QsTUFBTTtRQUNSLEtBQUssUUFBUTtZQUNYLEtBQUssbUVBQTBELENBQUM7WUFDaEUsTUFBTTtJQUNWLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHF3aWtEZWJ1Z1RvU3RyaW5nIH0gZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgcVRlc3QgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBpc1NlcnZlclBsYXRmb3JtIH0gZnJvbSAnLi4vc2hhcmVkL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBTZXJpYWxpemF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNPdXRPZk9yZGVyU2VnbWVudENvbnRhaW5lciB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9jb250YWluZXInO1xuaW1wb3J0IHsgT25SZW5kZXJQcm9wIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgU2VyaWFsaXplclN5bWJvbCB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvdmVyaWZ5JztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgSVNzck5vZGUsIFNTUkNvbnRhaW5lciB9IGZyb20gJy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHsgVGFza0ZsYWdzLCBpc1Rhc2sgfSBmcm9tICcuLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHsgQ29tcHV0ZWRTaWduYWxJbXBsIH0gZnJvbSAnLi9pbXBsL2NvbXB1dGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IFNpZ25hbEltcGwgfSBmcm9tICcuL2ltcGwvc2lnbmFsLWltcGwnO1xuaW1wb3J0IHR5cGUgeyBXcmFwcGVkU2lnbmFsSW1wbCB9IGZyb20gJy4vaW1wbC93cmFwcGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi9zaWduYWwucHVibGljJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkRhdGEsIHR5cGUgTm9kZVByb3AgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB7XG4gIFNlcmlhbGl6YXRpb25TaWduYWxGbGFncyxcbiAgRWZmZWN0UHJvcGVydHksXG4gIFNpZ25hbEZsYWdzLFxuICB0eXBlIEN1c3RvbVNlcmlhbGl6YWJsZSxcbiAgdHlwZSBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIHR5cGUgU3RvcmVUYXJnZXQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFya1ZOb2RlRGlydHkgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdm5vZGUtZGlydHknO1xuaW1wb3J0IHsgQ2hvcmVCaXRzIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL2VudW1zL2Nob3JlLWJpdHMuZW51bSc7XG5pbXBvcnQgeyBzZXROb2RlRGlmZlBheWxvYWQsIHNldE5vZGVQcm9wRGF0YSB9IGZyb20gJy4uL3NoYXJlZC9jdXJzb3IvY2hvcmUtZXhlY3V0aW9uJztcbmltcG9ydCB0eXBlIHsgVk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdm5vZGUnO1xuaW1wb3J0IHsgTk9ERV9QUk9QU19EQVRBX0tFWSB9IGZyb20gJy4uL3NoYXJlZC9jdXJzb3IvY3Vyc29yLXByb3BzJztcbmltcG9ydCB7IGlzQnJvd3NlciwgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5cbmNvbnN0IERFQlVHID0gZmFsc2U7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5jb25zdCBsb2cgPSAoLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKCdTSUdOQUwnLCAuLi5hcmdzLm1hcChxd2lrRGVidWdUb1N0cmluZykpO1xuXG5leHBvcnQgY29uc3QgdGhyb3dJZlFSTE5vdFJlc29sdmVkID0gKHFybDogUVJMKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcXJsLnJlc29sdmVkO1xuICBpZiAoIXJlc29sdmVkKSB7XG4gICAgLy8gV2hlbiB3ZSBhcmUgY3JlYXRpbmcgYSBzaWduYWwgdXNpbmcgYSB1c2UgbWV0aG9kLCB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgdGhlIGNvbXB1dGF0aW9uIGNhbiBiZSBsYXp5IGFuZCB0aGVyZWZvcmUgd2UgbmVlZCB0byB1bnN1cmVcbiAgICAvLyB0aGF0IHRoZSBRUkwgaXMgcmVzb2x2ZWQuXG4gICAgLy8gV2hlbiB3ZSByZS1jcmVhdGUgdGhlIHNpZ25hbCBmcm9tIHNlcmlhbGl6YXRpb24gKHdlIGRvbid0IGNyZWF0ZSB0aGUgc2lnbmFsXG4gICAgLy8gdXNpbmcgdXNlTWV0aG9kKSBpdCBpcyBPSyB0byBub3QgcmVzb2x2ZSBpdCB1bnRpbCB0aGUgZ3JhcGggaXMgbWFya2VkIGFzIGRpcnR5LlxuICAgIHRocm93IHFybC5yZXNvbHZlKCk7XG4gIH1cbn07XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgaXNTaWduYWwgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFNpZ25hbDx1bmtub3duPiA9PiB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNpZ25hbEltcGw7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlQ29udGFpbnNTdWJzY3JpcHRpb24gPSAoXG4gIGFycmF5OiBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPixcbiAgZWZmZWN0U3Vic2NyaXB0aW9uOiBFZmZlY3RTdWJzY3JpcHRpb25cbikgPT4ge1xuICBhcnJheS5hZGQoZWZmZWN0U3Vic2NyaXB0aW9uKTtcbn07XG5cbi8qKiBFbnN1cmUgdGhlIGl0ZW0gaXMgaW4gYmFjayByZWZzIHNldCAqL1xuZXhwb3J0IGNvbnN0IGVuc3VyZUNvbnRhaW5zQmFja1JlZiA9IChhcnJheTogRWZmZWN0U3Vic2NyaXB0aW9uLCB2YWx1ZTogYW55KSA9PiB7XG4gIChhcnJheS5iYWNrUmVmIHx8PSBuZXcgU2V0KCkpLmFkZCh2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUXJsVG9TZXJpYWxpemF0aW9uQ3R4ID0gKFxuICBlZmZlY3RTdWJzY3JpYmVyOiBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyIHwgbnVsbFxuKSA9PiB7XG4gIGlmICgoY29udGFpbmVyIGFzIFNTUkNvbnRhaW5lciB8IG51bGwpPy5zZXJpYWxpemF0aW9uQ3R4KSB7XG4gICAgY29uc3QgZWZmZWN0ID0gZWZmZWN0U3Vic2NyaWJlci5jb25zdW1lcjtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGVmZmVjdFN1YnNjcmliZXIucHJvcGVydHk7XG4gICAgbGV0IHFybDogUVJMIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGlzVGFzayhlZmZlY3QpKSB7XG4gICAgICBxcmwgPSBlZmZlY3QuJHFybCQ7XG4gICAgfSBlbHNlIGlmIChlZmZlY3QgaW5zdGFuY2VvZiBDb21wdXRlZFNpZ25hbEltcGwpIHtcbiAgICAgIHFybCA9IGVmZmVjdC4kY29tcHV0ZVFybCQ7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gRWZmZWN0UHJvcGVydHkuQ09NUE9ORU5UKSB7XG4gICAgICBxcmwgPSBjb250YWluZXIhLmdldEhvc3RQcm9wPFFSTD4oZWZmZWN0IGFzIFZOb2RlLCBPblJlbmRlclByb3ApO1xuICAgIH1cbiAgICBpZiAocXJsKSB7XG4gICAgICAoY29udGFpbmVyIGFzIFNTUkNvbnRhaW5lcikuc2VyaWFsaXphdGlvbkN0eC4kZXZlbnRRcmxzJC5hZGQocXJsKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFZmZlY3RTZXJpYWxpemF0aW9uQ29udGFpbmVyID0gKFxuICByZW5kZXJDb250YWluZXI6IENvbnRhaW5lciB8IHVuZGVmaW5lZCxcbiAgb3duZXJDb250YWluZXI6IENvbnRhaW5lciB8IG51bGxcbik6IENvbnRhaW5lciB8IG51bGwgPT4ge1xuICBpZiAoXG4gICAgcmVuZGVyQ29udGFpbmVyICYmXG4gICAgKCFvd25lckNvbnRhaW5lciB8fFxuICAgICAgcmVuZGVyQ29udGFpbmVyID09PSBvd25lckNvbnRhaW5lciB8fFxuICAgICAgaXNPdXRPZk9yZGVyU2VnbWVudENvbnRhaW5lcihyZW5kZXJDb250YWluZXIpKVxuICApIHtcbiAgICByZXR1cm4gcmVuZGVyQ29udGFpbmVyO1xuICB9XG4gIHJldHVybiBvd25lckNvbnRhaW5lcjtcbn07XG5cbmV4cG9ydCBjb25zdCBzY2hlZHVsZUVmZmVjdHMgPSAoXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyIHwgbnVsbCxcbiAgc2lnbmFsOiBTaWduYWxJbXBsIHwgU3RvcmVUYXJnZXQsXG4gIGVmZmVjdHM6IFNldDxFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgY29uc3QgaXNSdW5uaW5nT25Ccm93c2VyID0gcVRlc3QgPyAhaXNTZXJ2ZXJQbGF0Zm9ybSgpIDogaXNCcm93c2VyO1xuICBpZiAoZWZmZWN0cykge1xuICAgIGNvbnN0IHNjaGVkdWxlRWZmZWN0ID0gKGVmZmVjdFN1YnNjcmlwdGlvbjogRWZmZWN0U3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb25zdW1lciA9IGVmZmVjdFN1YnNjcmlwdGlvbi5jb25zdW1lcjtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZWZmZWN0U3Vic2NyaXB0aW9uLnByb3BlcnR5O1xuICAgICAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZChjb250YWluZXIsICdDb250YWluZXIgbXVzdCBiZSBkZWZpbmVkLicpO1xuICAgICAgaWYgKGlzVGFzayhjb25zdW1lcikpIHtcbiAgICAgICAgY29uc3VtZXIuJGZsYWdzJCB8PSBUYXNrRmxhZ3MuRElSVFk7XG4gICAgICAgIG1hcmtWTm9kZURpcnR5KGNvbnRhaW5lciEsIGNvbnN1bWVyLiRlbCQsIENob3JlQml0cy5UQVNLUyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnN1bWVyIGluc3RhbmNlb2YgU2lnbmFsSW1wbCkge1xuICAgICAgICAoY29uc3VtZXIgYXMgQ29tcHV0ZWRTaWduYWxJbXBsPHVua25vd24+IHwgV3JhcHBlZFNpZ25hbEltcGw8dW5rbm93bj4pLmludmFsaWRhdGUoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09IEVmZmVjdFByb3BlcnR5LkNPTVBPTkVOVCkge1xuICAgICAgICBtYXJrVk5vZGVEaXJ0eShjb250YWluZXIhLCBjb25zdW1lciwgQ2hvcmVCaXRzLkNPTVBPTkVOVCk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSBFZmZlY3RQcm9wZXJ0eS5WTk9ERSkge1xuICAgICAgICBpZiAoaXNSdW5uaW5nT25Ccm93c2VyKSB7XG4gICAgICAgICAgc2V0Tm9kZURpZmZQYXlsb2FkKGNvbnN1bWVyIGFzIFZOb2RlLCBzaWduYWwgYXMgU2lnbmFsKTtcbiAgICAgICAgICBtYXJrVk5vZGVEaXJ0eShjb250YWluZXIhLCBjb25zdW1lciwgQ2hvcmVCaXRzLk5PREVfRElGRik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdERhdGEgPSBlZmZlY3RTdWJzY3JpcHRpb24uZGF0YTtcbiAgICAgICAgaWYgKGVmZmVjdERhdGEgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb25EYXRhKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVmZmVjdERhdGEuZGF0YTtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkOiBOb2RlUHJvcCA9IHtcbiAgICAgICAgICAgIGlzQ29uc3Q6IGRhdGEuJGlzQ29uc3QkLFxuICAgICAgICAgICAgc2NvcGVkU3R5bGVJZFByZWZpeDogZGF0YS4kc2NvcGVkU3R5bGVJZFByZWZpeCQsXG4gICAgICAgICAgICB2YWx1ZTogc2lnbmFsIGFzIFNpZ25hbEltcGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoaXNSdW5uaW5nT25Ccm93c2VyKSB7XG4gICAgICAgICAgICBzZXROb2RlUHJvcERhdGEoY29uc3VtZXIgYXMgVk5vZGUsIHByb3BlcnR5LCBwYXlsb2FkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnN1bWVyIGFzIElTc3JOb2RlO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBub2RlLmdldFByb3AoTk9ERV9QUk9QU19EQVRBX0tFWSkgYXMgTWFwPHN0cmluZywgTm9kZVByb3A+IHwgbnVsbDtcbiAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICBkYXRhID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICBub2RlLnNldFByb3AoTk9ERV9QUk9QU19EQVRBX0tFWSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLnNldChwcm9wZXJ0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcmtWTm9kZURpcnR5KGNvbnRhaW5lciEsIGNvbnN1bWVyLCBDaG9yZUJpdHMuTk9ERV9QUk9QUyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWZmZWN0c1NuYXBzaG90ID0gQXJyYXkuZnJvbShlZmZlY3RzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVmZmVjdHNTbmFwc2hvdC5sZW5ndGg7IGkrKykge1xuICAgICAgc2NoZWR1bGVFZmZlY3QoZWZmZWN0c1NuYXBzaG90W2ldKTtcbiAgICB9XG4gIH1cblxuICBERUJVRyAmJiBsb2coJ2RvbmUgc2NoZWR1bGluZycpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGlzU2VyaWFsaXplck9iaiA9IDxUIGV4dGVuZHMgeyBbU2VyaWFsaXplclN5bWJvbF06IChvYmo6IGFueSkgPT4gYW55IH0sIFM+KFxuICBvYmo6IHVua25vd25cbik6IG9iaiBpcyBDdXN0b21TZXJpYWxpemFibGU8VCwgUz4gPT4ge1xuICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiB0eXBlb2YgKG9iaiBhcyBhbnkpW1NlcmlhbGl6ZXJTeW1ib2xdID09PSAnZnVuY3Rpb24nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbXB1dGVkU2lnbmFsRmxhZ3MgPSAoXG4gIHNlcmlhbGl6YXRpb25TdHJhdGVneTogU2VyaWFsaXphdGlvblN0cmF0ZWd5XG4pOiBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MgfCBTaWduYWxGbGFncyA9PiB7XG4gIGxldCBmbGFncyA9IFNpZ25hbEZsYWdzLklOVkFMSUQ7XG4gIHN3aXRjaCAoc2VyaWFsaXphdGlvblN0cmF0ZWd5KSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgaW4gdGhlIGZ1dHVyZVxuICAgIC8vIGNhc2UgJ2F1dG8nOlxuICAgIC8vICAgZmxhZ3MgfD0gQ29tcHV0ZWRTaWduYWxGbGFncy5TRVJJQUxJWkFUSU9OX1NUUkFURUdZX0FVVE87XG4gICAgLy8gICBicmVhaztcbiAgICBjYXNlICduZXZlcic6XG4gICAgICBmbGFncyB8PSBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MuU0VSSUFMSVpBVElPTl9TVFJBVEVHWV9ORVZFUjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICBmbGFncyB8PSBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MuU0VSSUFMSVpBVElPTl9TVFJBVEVHWV9BTFdBWVM7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZmxhZ3M7XG59O1xuIl19","import { isSignal } from './reactive-primitives/utils';\n// ^ keep this first to avoid circular dependency breaking class extend\nimport { vnode_getProp, vnode_isVNode } from './client/vnode-utils';\nimport { ComputedSignalImpl } from './reactive-primitives/impl/computed-signal-impl';\nimport { isStore } from './reactive-primitives/impl/store';\nimport { WrappedSignalImpl } from './reactive-primitives/impl/wrapped-signal-impl';\nimport { isJSXNode } from './shared/jsx/jsx-node';\nimport { isQrl } from './shared/qrl/qrl-utils';\nimport { DEBUG_TYPE } from './shared/types';\nimport { isTask } from './use/use-task';\nimport { SERIALIZABLE_STATE } from './shared/component.public';\nconst stringifyPath = [];\nexport function qwikDebugToString(value) {\n    try {\n        if (value === null) {\n            return 'null';\n        }\n        else if (value === undefined) {\n            return 'undefined';\n        }\n        else if (typeof value === 'string') {\n            return '\"' + value + '\"';\n        }\n        else if (typeof value === 'number' || typeof value === 'boolean') {\n            return String(value);\n        }\n        else if (isTask(value)) {\n            return `Task(${qwikDebugToString(value.$qrl$)})`;\n        }\n        else if (isQrl(value)) {\n            return `Qrl(${value.$symbol$})`;\n        }\n        else if (typeof value === 'object' || typeof value === 'function') {\n            if (stringifyPath.includes(value)) {\n                return '*';\n            }\n            if (stringifyPath.length > 10) {\n                // debugger;\n            }\n            try {\n                stringifyPath.push(value);\n                if (Array.isArray(value)) {\n                    if (vnode_isVNode(value)) {\n                        return '(' + (vnode_getProp(value, DEBUG_TYPE, null) || 'vnode') + ')';\n                    }\n                    else {\n                        return value.map(qwikDebugToString);\n                    }\n                }\n                else if (isSignal(value)) {\n                    if (value instanceof WrappedSignalImpl) {\n                        return 'WrappedSignal';\n                    }\n                    else if (value instanceof ComputedSignalImpl) {\n                        return 'ComputedSignal';\n                    }\n                    else {\n                        return 'Signal';\n                    }\n                }\n                else if (isStore(value)) {\n                    return 'Store';\n                }\n                else if (isJSXNode(value)) {\n                    return jsxToString(value);\n                }\n                else if (vnode_isVNode(value)) {\n                    return '(' + (vnode_getProp(value, DEBUG_TYPE, null) || 'vnode') + ')';\n                }\n            }\n            finally {\n                stringifyPath.pop();\n            }\n        }\n    }\n    catch (e) {\n        console.error('ERROR in qwikDebugToString', e);\n        return '*error*';\n    }\n    return value;\n}\nexport const pad = (text, prefix) => {\n    return String(text)\n        .split('\\n')\n        .map((line, idx) => (idx ? prefix : '') + line)\n        .join('\\n');\n};\nexport const jsxToString = (value) => {\n    if (isJSXNode(value)) {\n        if (typeof value.type === 'function') {\n            const componentMeta = value.type[SERIALIZABLE_STATE];\n            if (componentMeta) {\n                const [componentQRL] = componentMeta;\n                return 'Component(' + componentQRL.$symbol$ + ')';\n            }\n            return 'Function(' + value.type.name + ')';\n        }\n        let str = '<' + value.type;\n        if (value.props) {\n            const propsEntries = Object.entries(value.props);\n            for (let i = 0; i < propsEntries.length; i++) {\n                const [key, val] = propsEntries[i];\n                str += ' ' + key + '=' + qwikDebugToString(val);\n            }\n            const children = value.children;\n            if (children != null) {\n                str += '>';\n                if (Array.isArray(children)) {\n                    for (let i = 0; i < children.length; i++) {\n                        const child = children[i];\n                        str += jsxToString(child);\n                    }\n                }\n                else {\n                    str += jsxToString(children);\n                }\n                str += '</' + value.type + '>';\n            }\n            else {\n                str += '/>';\n            }\n        }\n        return str;\n    }\n    else {\n        return String(value);\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELHVFQUF1RTtBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsTUFBTSxhQUFhLEdBQVUsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQzFDLElBQUksQ0FBQztRQUNILElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FB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RCxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxJQUFJLEdBQUcsQ0FBQztnQkFDWCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDekMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsSUFBSSxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTaWduYWwgfSBmcm9tICcuL3JlYWN0aXZlLXByaW1pdGl2ZXMvdXRpbHMnO1xuLy8gXiBrZWVwIHRoaXMgZmlyc3QgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBicmVha2luZyBjbGFzcyBleHRlbmRcbmltcG9ydCB7IHZub2RlX2dldFByb3AsIHZub2RlX2lzVk5vZGUgfSBmcm9tICcuL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyBDb21wdXRlZFNpZ25hbEltcGwgfSBmcm9tICcuL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9jb21wdXRlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBpc1N0b3JlIH0gZnJvbSAnLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc3RvcmUnO1xuaW1wb3J0IHsgV3JhcHBlZFNpZ25hbEltcGwgfSBmcm9tICcuL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC93cmFwcGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IGlzSlNYTm9kZSB9IGZyb20gJy4vc2hhcmVkL2pzeC9qc3gtbm9kZSc7XG5pbXBvcnQgeyBpc1FybCB9IGZyb20gJy4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHsgREVCVUdfVFlQRSB9IGZyb20gJy4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzVGFzayB9IGZyb20gJy4vdXNlL3VzZS10YXNrJztcbmltcG9ydCB7IFNFUklBTElaQUJMRV9TVEFURSB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudC5wdWJsaWMnO1xuXG5jb25zdCBzdHJpbmdpZnlQYXRoOiBhbnlbXSA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIHF3aWtEZWJ1Z1RvU3RyaW5nKHZhbHVlOiBhbnkpOiBhbnkge1xuICB0cnkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChpc1Rhc2sodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYFRhc2soJHtxd2lrRGVidWdUb1N0cmluZyh2YWx1ZS4kcXJsJCl9KWA7XG4gICAgfSBlbHNlIGlmIChpc1FybCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgUXJsKCR7dmFsdWUuJHN5bWJvbCR9KWA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHN0cmluZ2lmeVBhdGguaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAnKic7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaW5naWZ5UGF0aC5sZW5ndGggPiAxMCkge1xuICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHN0cmluZ2lmeVBhdGgucHVzaCh2YWx1ZSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICh2bm9kZV9pc1ZOb2RlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuICcoJyArICh2bm9kZV9nZXRQcm9wKHZhbHVlLCBERUJVR19UWVBFLCBudWxsKSB8fCAndm5vZGUnKSArICcpJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChxd2lrRGVidWdUb1N0cmluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWxJbXBsKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1dyYXBwZWRTaWduYWwnO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb21wdXRlZFNpZ25hbEltcGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnQ29tcHV0ZWRTaWduYWwnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ1NpZ25hbCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzU3RvcmUodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuICdTdG9yZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNKU1hOb2RlKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBqc3hUb1N0cmluZyh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodm5vZGVfaXNWTm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gJygnICsgKHZub2RlX2dldFByb3AodmFsdWUsIERFQlVHX1RZUEUsIG51bGwpIHx8ICd2bm9kZScpICsgJyknO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzdHJpbmdpZnlQYXRoLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SIGluIHF3aWtEZWJ1Z1RvU3RyaW5nJywgZSk7XG4gICAgcmV0dXJuICcqZXJyb3IqJztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBjb25zdCBwYWQgPSAodGV4dDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykgPT4ge1xuICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUsIGlkeCkgPT4gKGlkeCA/IHByZWZpeCA6ICcnKSArIGxpbmUpXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGpzeFRvU3RyaW5nID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICBpZiAoaXNKU1hOb2RlKHZhbHVlKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY29tcG9uZW50TWV0YSA9ICh2YWx1ZS50eXBlIGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXTtcbiAgICAgIGlmIChjb21wb25lbnRNZXRhKSB7XG4gICAgICAgIGNvbnN0IFtjb21wb25lbnRRUkxdID0gY29tcG9uZW50TWV0YTtcbiAgICAgICAgcmV0dXJuICdDb21wb25lbnQoJyArIGNvbXBvbmVudFFSTC4kc3ltYm9sJCArICcpJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAnRnVuY3Rpb24oJyArIHZhbHVlLnR5cGUubmFtZSArICcpJztcbiAgICB9XG4gICAgbGV0IHN0ciA9ICc8JyArIHZhbHVlLnR5cGU7XG4gICAgaWYgKHZhbHVlLnByb3BzKSB7XG4gICAgICBjb25zdCBwcm9wc0VudHJpZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZS5wcm9wcyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzRW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBba2V5LCB2YWxdID0gcHJvcHNFbnRyaWVzW2ldO1xuICAgICAgICBzdHIgKz0gJyAnICsga2V5ICsgJz0nICsgcXdpa0RlYnVnVG9TdHJpbmcodmFsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdmFsdWUuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgICBzdHIgKz0gJz4nO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgc3RyICs9IGpzeFRvU3RyaW5nKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyICs9IGpzeFRvU3RyaW5nKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gJzwvJyArIHZhbHVlLnR5cGUgKyAnPic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgKz0gJy8+JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufTtcbiJdfQ==","import { pad, qwikDebugToString } from '../../debug';\nimport { qTest } from '../../shared/utils/qdev';\nimport { assertTrue } from '../../shared/error/assert';\nimport { tryGetInvokeContext } from '../../use/use-core';\nimport { isObject, isSerializableObject } from '../../shared/utils/types';\nimport { isSameContainer } from '../../shared/utils/container';\nimport { addQrlToSerializationCtx, ensureContainsBackRef, ensureContainsSubscription, getEffectSerializationContainer, scheduleEffects, } from '../utils';\nimport { STORE_ALL_PROPS, STORE_HANDLER, STORE_TARGET, } from '../types';\nimport { isDev, isServer } from '@qwik.dev/core/build';\nimport { isServerPlatform } from '../../shared/platform/platform';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('STORE', ...args.map(qwikDebugToString));\nexport const getStoreHandler = (value) => {\n    return value[STORE_HANDLER];\n};\nexport const getStoreTarget = (value) => {\n    return value?.[STORE_TARGET] || null;\n};\n/**\n * Force a store to recompute and schedule effects.\n *\n * @public\n */\nexport const forceStoreEffects = (value, prop) => {\n    const handler = getStoreHandler(value);\n    if (handler) {\n        handler.force(prop);\n    }\n};\n/**\n * @returns True if the store has effects for the given prop\n * @internal\n */\nexport const _hasStoreEffects = (value, prop) => {\n    const handler = getStoreHandler(value);\n    if (handler) {\n        return (handler.$effects$?.get(prop)?.size ?? 0) > 0;\n    }\n    return false;\n};\n/**\n * Get the original object that was wrapped by the store. Useful if you want to clone a store\n * (structuredClone, IndexedDB,...)\n *\n * @public\n */\nexport const unwrapStore = (value) => {\n    return getStoreTarget(value) || value;\n};\n/** @internal */\nexport const isStore = (value) => {\n    return STORE_TARGET in value;\n};\nexport function createStore(container, obj, flags) {\n    return new Proxy(obj, new StoreHandler(flags, container || null));\n}\nexport const getOrCreateStore = (obj, flags, container) => {\n    if (isSerializableObject(obj) && container) {\n        let store = container.$storeProxyMap$.get(obj);\n        if (!store) {\n            store = createStore(container, obj, flags);\n            container.$storeProxyMap$.set(obj, store);\n        }\n        return store;\n    }\n    return obj;\n};\nexport class StoreHandler {\n    $flags$;\n    $container$;\n    $effects$ = undefined;\n    constructor($flags$, $container$) {\n        this.$flags$ = $flags$;\n        this.$container$ = $container$;\n    }\n    toString() {\n        return '[Store]';\n    }\n    force(prop) {\n        const target = getStoreTarget(this);\n        scheduleEffects(this.$container$, this, getEffects(target, prop, this.$effects$));\n    }\n    get(target, prop) {\n        // TODO(perf): handle better `slice` calls\n        if (typeof prop === 'symbol') {\n            if (prop === STORE_TARGET) {\n                return target;\n            }\n            if (prop === STORE_HANDLER) {\n                return this;\n            }\n            return target[prop];\n        }\n        const ctx = tryGetInvokeContext();\n        const value = target[prop];\n        if (ctx) {\n            if (this.$container$ === null) {\n                if (!ctx.$container$) {\n                    return value;\n                }\n                // Grab the container now we have access to it\n                this.$container$ = ctx.$container$;\n            }\n            else {\n                isDev &&\n                    assertTrue(!ctx.$container$ || isSameContainer(ctx.$container$, this.$container$), 'Do not use signals across containers');\n            }\n            const effectSubscriber = ctx.$effectSubscriber$;\n            if (effectSubscriber) {\n                addStoreEffect(target, Array.isArray(target) ? STORE_ALL_PROPS : prop, this, effectSubscriber, ctx.$container$);\n            }\n        }\n        if (prop === 'toString' && value === Object.prototype.toString) {\n            return this.toString;\n        }\n        const flags = this.$flags$;\n        if (flags & 1 /* StoreFlags.RECURSIVE */ &&\n            isObject(value) &&\n            !Object.isFrozen(value) &&\n            !isStore(value) &&\n            !Object.isFrozen(target)) {\n            return getOrCreateStore(value, this.$flags$, this.$container$);\n        }\n        return value;\n    }\n    /** In the case of oldValue and value are the same, the effects are not triggered. */\n    set(target, prop, value) {\n        if (typeof prop === 'symbol') {\n            target[prop] = value;\n            return true;\n        }\n        const newValue = this.$flags$ & 1 /* StoreFlags.RECURSIVE */ ? unwrapStore(value) : value;\n        if (prop in target) {\n            const oldValue = target[prop];\n            if (newValue !== oldValue) {\n                DEBUG && log('Store.set', oldValue, '->', newValue, pad('\\n' + this.toString(), '  '));\n                setNewValueAndTriggerEffects(prop, newValue, target, this);\n            }\n        }\n        else {\n            DEBUG && log('Store.set', 'create property', newValue, pad('\\n' + this.toString(), '  '));\n            setNewValueAndTriggerEffects(prop, newValue, target, this);\n        }\n        return true;\n    }\n    deleteProperty(target, prop) {\n        if (typeof prop != 'string' || !delete target[prop]) {\n            return false;\n        }\n        if (!Array.isArray(target)) {\n            // If the target is an array, we don't need to trigger effects.\n            // Changing the length property will trigger effects.\n            scheduleEffects(this.$container$, this, getEffects(target, prop, this.$effects$));\n        }\n        return true;\n    }\n    has(target, prop) {\n        if (prop === STORE_TARGET) {\n            return true;\n        }\n        if (typeof prop === 'string') {\n            const ctx = tryGetInvokeContext();\n            if (ctx) {\n                const effectSubscriber = ctx.$effectSubscriber$;\n                if (effectSubscriber) {\n                    addStoreEffect(target, Array.isArray(target) ? STORE_ALL_PROPS : prop, this, effectSubscriber, ctx.$container$);\n                }\n            }\n        }\n        return Object.prototype.hasOwnProperty.call(target, prop);\n    }\n    ownKeys(target) {\n        const ctx = tryGetInvokeContext();\n        const effectSubscriber = ctx?.$effectSubscriber$;\n        if (effectSubscriber) {\n            addStoreEffect(target, STORE_ALL_PROPS, this, effectSubscriber, ctx.$container$);\n        }\n        return Reflect.ownKeys(target);\n    }\n    getOwnPropertyDescriptor(target, prop) {\n        const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n        if (Array.isArray(target) || typeof prop === 'symbol') {\n            return descriptor;\n        }\n        if (descriptor && !descriptor.configurable) {\n            return descriptor;\n        }\n        return {\n            enumerable: true,\n            configurable: true,\n        };\n    }\n}\nexport function addStoreEffect(target, prop, store, effectSubscription, renderContainer) {\n    const effectsMap = (store.$effects$ ||= new Map());\n    let effects = effectsMap.get(prop);\n    if (!effects) {\n        effects = new Set();\n        effectsMap.set(prop, effects);\n    }\n    // Let's make sure that we have a reference to this effect.\n    // Adding reference is essentially adding a subscription, so if the signal\n    // changes we know who to notify.\n    const isOnServer = qTest ? isServerPlatform() : isServer;\n    const shouldRecordExternalRootEffect = __EXPERIMENTAL__.suspense && store instanceof StoreHandler && isOnServer;\n    ensureContainsSubscription(effects, effectSubscription);\n    // But when effect is scheduled in needs to be able to know which signals\n    // to unsubscribe from. So we need to store the reference from the effect back\n    // to this signal.\n    ensureContainsBackRef(effectSubscription, target);\n    if (isOnServer) {\n        const serializationContainer = getEffectSerializationContainer(renderContainer, store.$container$);\n        if (shouldRecordExternalRootEffect) {\n            serializationContainer?.$recordExternalRootEffect$?.(target, effectSubscription, prop, effectsMap);\n        }\n        // TODO is this needed with the preloader?\n        addQrlToSerializationCtx(effectSubscription, serializationContainer);\n    }\n    DEBUG &&\n        log('sub', pad('\\n' +\n            [...(store.$effects$?.entries() || [])]\n                .map(([key, value]) => `${String(key)}: ${String(value)}`)\n                .join(','), '  '));\n}\nfunction setNewValueAndTriggerEffects(prop, value, target, currentStore) {\n    target[prop] = value;\n    const effects = getEffects(target, prop, currentStore.$effects$);\n    if (effects) {\n        scheduleEffects(currentStore.$container$, currentStore, effects);\n    }\n}\nfunction getEffects(target, prop, storeEffects) {\n    let effectsToTrigger;\n    if (storeEffects) {\n        if (Array.isArray(target)) {\n            for (const effects of storeEffects.values()) {\n                effectsToTrigger ||= new Set();\n                for (const effect of effects) {\n                    effectsToTrigger.add(effect);\n                }\n            }\n        }\n        else {\n            effectsToTrigger = storeEffects.get(prop);\n        }\n    }\n    const storeArrayValue = storeEffects?.get(STORE_ALL_PROPS);\n    if (storeArrayValue) {\n        effectsToTrigger ||= new Set();\n        for (const effect of storeArrayValue) {\n            effectsToTrigger.add(effect);\n        }\n    }\n    return effectsToTrigger;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQiwrQkFBK0IsRUFDL0IsZUFBZSxHQUNoQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEdBSWIsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7QUFFcEIsc0NBQXNDO0FBQ3RDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBa0IsRUFBdUIsRUFB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QUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLE1BQVMsRUFDVCxJQUFxQixFQUNyQixZQUF1RTtJQUV2RSxJQUFJLGdCQUFxRCxDQUFDO0lBRTFELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsZ0JBQWdCLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDN0IsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLFlBQVksRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixnQkFBZ0IsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQy9CLEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxFQUFFLENBQUM7WUFDckMsZ0JBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFkLCBxd2lrRGVidWdUb1N0cmluZyB9IGZyb20gJy4uLy4uL2RlYnVnJztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgdHJ5R2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTZXJpYWxpemFibGVPYmplY3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNTYW1lQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzL2NvbnRhaW5lcic7XG5pbXBvcnQge1xuICBhZGRRcmxUb1NlcmlhbGl6YXRpb25DdHgsXG4gIGVuc3VyZUNvbnRhaW5zQmFja1JlZixcbiAgZW5zdXJlQ29udGFpbnNTdWJzY3JpcHRpb24sXG4gIGdldEVmZmVjdFNlcmlhbGl6YXRpb25Db250YWluZXIsXG4gIHNjaGVkdWxlRWZmZWN0cyxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgU1RPUkVfQUxMX1BST1BTLFxuICBTVE9SRV9IQU5ETEVSLFxuICBTVE9SRV9UQVJHRVQsXG4gIFN0b3JlRmxhZ3MsXG4gIHR5cGUgRWZmZWN0U3Vic2NyaXB0aW9uLFxuICB0eXBlIFN0b3JlVGFyZ2V0LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFByb3BzUHJveHksIFByb3BzUHJveHlIYW5kbGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2pzeC9wcm9wcy1wcm94eSc7XG5pbXBvcnQgeyBpc0RldiwgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBpc1NlcnZlclBsYXRmb3JtIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB0eXBlIHsgU1NSU2VnbWVudENvbnRhaW5lciB9IGZyb20gJy4uLy4uL3Nzci9zc3ItdHlwZXMnO1xuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuY29uc3QgbG9nID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZygnU1RPUkUnLCAuLi5hcmdzLm1hcChxd2lrRGVidWdUb1N0cmluZykpO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcmVIYW5kbGVyID0gKHZhbHVlOiBTdG9yZVRhcmdldCk6IFN0b3JlSGFuZGxlciB8IG51bGwgPT4ge1xuICByZXR1cm4gdmFsdWVbU1RPUkVfSEFORExFUl0gYXMgU3RvcmVIYW5kbGVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9yZVRhcmdldCA9IDxUIGV4dGVuZHMgU3RvcmVUYXJnZXQ+KHZhbHVlOiBUKTogVCB8IG51bGwgPT4ge1xuICByZXR1cm4gdmFsdWU/LltTVE9SRV9UQVJHRVRdIHx8IG51bGw7XG59O1xuXG4vKipcbiAqIEZvcmNlIGEgc3RvcmUgdG8gcmVjb21wdXRlIGFuZCBzY2hlZHVsZSBlZmZlY3RzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcmNlU3RvcmVFZmZlY3RzID0gKHZhbHVlOiBTdG9yZVRhcmdldCwgcHJvcDoga2V5b2YgU3RvcmVUYXJnZXQpOiB2b2lkID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IGdldFN0b3JlSGFuZGxlcih2YWx1ZSk7XG4gIGlmIChoYW5kbGVyKSB7XG4gICAgaGFuZGxlci5mb3JjZShwcm9wKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdG9yZSBoYXMgZWZmZWN0cyBmb3IgdGhlIGdpdmVuIHByb3BcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgX2hhc1N0b3JlRWZmZWN0cyA9ICh2YWx1ZTogU3RvcmVUYXJnZXQsIHByb3A6IGtleW9mIFN0b3JlVGFyZ2V0KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBnZXRTdG9yZUhhbmRsZXIodmFsdWUpO1xuICBpZiAoaGFuZGxlcikge1xuICAgIHJldHVybiAoaGFuZGxlci4kZWZmZWN0cyQ/LmdldChwcm9wKT8uc2l6ZSA/PyAwKSA+IDA7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIG9yaWdpbmFsIG9iamVjdCB0aGF0IHdhcyB3cmFwcGVkIGJ5IHRoZSBzdG9yZS4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGNsb25lIGEgc3RvcmVcbiAqIChzdHJ1Y3R1cmVkQ2xvbmUsIEluZGV4ZWREQiwuLi4pXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdW53cmFwU3RvcmUgPSA8VD4odmFsdWU6IFQpOiBUID0+IHtcbiAgcmV0dXJuIGdldFN0b3JlVGFyZ2V0PGFueT4odmFsdWUpIHx8IHZhbHVlO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGlzU3RvcmUgPSAodmFsdWU6IG9iamVjdCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gU1RPUkVfVEFSR0VUIGluIHZhbHVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBjb250YWluZXI6IENvbnRhaW5lciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9iajogVCxcbiAgZmxhZ3M6IFN0b3JlRmxhZ3Ncbik6IFQge1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwgbmV3IFN0b3JlSGFuZGxlcihmbGFncywgY29udGFpbmVyIHx8IG51bGwpKSBhcyBUO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T3JDcmVhdGVTdG9yZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiBULFxuICBmbGFnczogU3RvcmVGbGFncyxcbiAgY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsXG4pOiBUID0+IHtcbiAgaWYgKGlzU2VyaWFsaXphYmxlT2JqZWN0KG9iaikgJiYgY29udGFpbmVyKSB7XG4gICAgbGV0IHN0b3JlOiBUIHwgdW5kZWZpbmVkID0gY29udGFpbmVyLiRzdG9yZVByb3h5TWFwJC5nZXQob2JqKTtcbiAgICBpZiAoIXN0b3JlKSB7XG4gICAgICBzdG9yZSA9IGNyZWF0ZVN0b3JlKGNvbnRhaW5lciwgb2JqLCBmbGFncyk7XG4gICAgICBjb250YWluZXIuJHN0b3JlUHJveHlNYXAkLnNldChvYmosIHN0b3JlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgY2xhc3MgU3RvcmVIYW5kbGVyIGltcGxlbWVudHMgUHJveHlIYW5kbGVyPFN0b3JlVGFyZ2V0PiB7XG4gICRlZmZlY3RzJDogdW5kZWZpbmVkIHwgTWFwPHN0cmluZyB8IHN5bWJvbCwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyAkZmxhZ3MkOiBTdG9yZUZsYWdzLFxuICAgIHB1YmxpYyAkY29udGFpbmVyJDogQ29udGFpbmVyIHwgbnVsbFxuICApIHt9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1tTdG9yZV0nO1xuICB9XG5cbiAgZm9yY2UocHJvcDoga2V5b2YgU3RvcmVUYXJnZXQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRTdG9yZVRhcmdldCh0aGlzKSE7XG4gICAgc2NoZWR1bGVFZmZlY3RzKHRoaXMuJGNvbnRhaW5lciQsIHRoaXMsIGdldEVmZmVjdHModGFyZ2V0LCBwcm9wLCB0aGlzLiRlZmZlY3RzJCkpO1xuICB9XG5cbiAgZ2V0KHRhcmdldDogU3RvcmVUYXJnZXQsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIC8vIFRPRE8ocGVyZik6IGhhbmRsZSBiZXR0ZXIgYHNsaWNlYCBjYWxsc1xuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIGlmIChwcm9wID09PSBTVE9SRV9UQVJHRVQpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSBTVE9SRV9IQU5ETEVSKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICB9XG4gICAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuICAgIGlmIChjdHgpIHtcbiAgICAgIGlmICh0aGlzLiRjb250YWluZXIkID09PSBudWxsKSB7XG4gICAgICAgIGlmICghY3R4LiRjb250YWluZXIkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdyYWIgdGhlIGNvbnRhaW5lciBub3cgd2UgaGF2ZSBhY2Nlc3MgdG8gaXRcbiAgICAgICAgdGhpcy4kY29udGFpbmVyJCA9IGN0eC4kY29udGFpbmVyJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzRGV2ICYmXG4gICAgICAgICAgYXNzZXJ0VHJ1ZShcbiAgICAgICAgICAgICFjdHguJGNvbnRhaW5lciQgfHwgaXNTYW1lQ29udGFpbmVyKGN0eC4kY29udGFpbmVyJCwgdGhpcy4kY29udGFpbmVyJCksXG4gICAgICAgICAgICAnRG8gbm90IHVzZSBzaWduYWxzIGFjcm9zcyBjb250YWluZXJzJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBlZmZlY3RTdWJzY3JpYmVyID0gY3R4LiRlZmZlY3RTdWJzY3JpYmVyJDtcbiAgICAgIGlmIChlZmZlY3RTdWJzY3JpYmVyKSB7XG4gICAgICAgIGFkZFN0b3JlRWZmZWN0KFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KHRhcmdldCkgPyBTVE9SRV9BTExfUFJPUFMgOiBwcm9wLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgZWZmZWN0U3Vic2NyaWJlcixcbiAgICAgICAgICBjdHguJGNvbnRhaW5lciRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcCA9PT0gJ3RvU3RyaW5nJyAmJiB2YWx1ZSA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3MgPSB0aGlzLiRmbGFncyQ7XG4gICAgaWYgKFxuICAgICAgZmxhZ3MgJiBTdG9yZUZsYWdzLlJFQ1VSU0lWRSAmJlxuICAgICAgaXNPYmplY3QodmFsdWUpICYmXG4gICAgICAhT2JqZWN0LmlzRnJvemVuKHZhbHVlKSAmJlxuICAgICAgIWlzU3RvcmUodmFsdWUpICYmXG4gICAgICAhT2JqZWN0LmlzRnJvemVuKHRhcmdldClcbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRPckNyZWF0ZVN0b3JlKHZhbHVlLCB0aGlzLiRmbGFncyQsIHRoaXMuJGNvbnRhaW5lciQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKiogSW4gdGhlIGNhc2Ugb2Ygb2xkVmFsdWUgYW5kIHZhbHVlIGFyZSB0aGUgc2FtZSwgdGhlIGVmZmVjdHMgYXJlIG5vdCB0cmlnZ2VyZWQuICovXG4gIHNldCh0YXJnZXQ6IFN0b3JlVGFyZ2V0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XG4gICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuJGZsYWdzJCAmIFN0b3JlRmxhZ3MuUkVDVVJTSVZFID8gdW53cmFwU3RvcmUodmFsdWUpIDogdmFsdWU7XG4gICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRhcmdldFtwcm9wXTtcblxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICBERUJVRyAmJiBsb2coJ1N0b3JlLnNldCcsIG9sZFZhbHVlLCAnLT4nLCBuZXdWYWx1ZSwgcGFkKCdcXG4nICsgdGhpcy50b1N0cmluZygpLCAnICAnKSk7XG4gICAgICAgIHNldE5ld1ZhbHVlQW5kVHJpZ2dlckVmZmVjdHMocHJvcCwgbmV3VmFsdWUsIHRhcmdldCwgdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIERFQlVHICYmIGxvZygnU3RvcmUuc2V0JywgJ2NyZWF0ZSBwcm9wZXJ0eScsIG5ld1ZhbHVlLCBwYWQoJ1xcbicgKyB0aGlzLnRvU3RyaW5nKCksICcgICcpKTtcbiAgICAgIHNldE5ld1ZhbHVlQW5kVHJpZ2dlckVmZmVjdHMocHJvcCwgbmV3VmFsdWUsIHRhcmdldCwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0OiBTdG9yZVRhcmdldCwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBwcm9wICE9ICdzdHJpbmcnIHx8ICFkZWxldGUgdGFyZ2V0W3Byb3BdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIGFuIGFycmF5LCB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgZWZmZWN0cy5cbiAgICAgIC8vIENoYW5naW5nIHRoZSBsZW5ndGggcHJvcGVydHkgd2lsbCB0cmlnZ2VyIGVmZmVjdHMuXG4gICAgICBzY2hlZHVsZUVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgZ2V0RWZmZWN0cyh0YXJnZXQsIHByb3AsIHRoaXMuJGVmZmVjdHMkKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFzKHRhcmdldDogU3RvcmVUYXJnZXQsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGlmIChwcm9wID09PSBTVE9SRV9UQVJHRVQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdFN1YnNjcmliZXIgPSBjdHguJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgICAgICBpZiAoZWZmZWN0U3Vic2NyaWJlcikge1xuICAgICAgICAgIGFkZFN0b3JlRWZmZWN0KFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXQpID8gU1RPUkVfQUxMX1BST1BTIDogcHJvcCxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBlZmZlY3RTdWJzY3JpYmVyLFxuICAgICAgICAgICAgY3R4LiRjb250YWluZXIkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcCk7XG4gIH1cblxuICBvd25LZXlzKHRhcmdldDogU3RvcmVUYXJnZXQpOiBBcnJheUxpa2U8c3RyaW5nIHwgc3ltYm9sPiB7XG4gICAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICAgIGNvbnN0IGVmZmVjdFN1YnNjcmliZXIgPSBjdHg/LiRlZmZlY3RTdWJzY3JpYmVyJDtcbiAgICBpZiAoZWZmZWN0U3Vic2NyaWJlcikge1xuICAgICAgYWRkU3RvcmVFZmZlY3QodGFyZ2V0LCBTVE9SRV9BTExfUFJPUFMsIHRoaXMsIGVmZmVjdFN1YnNjcmliZXIsIGN0eC4kY29udGFpbmVyJCk7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcbiAgfVxuXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB0YXJnZXQ6IFN0b3JlVGFyZ2V0LFxuICAgIHByb3A6IHN0cmluZyB8IHN5bWJvbFxuICApOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgfHwgdHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU3RvcmVFZmZlY3QoXG4gIHRhcmdldDogU3RvcmVUYXJnZXQgfCBQcm9wc1Byb3h5LFxuICBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsXG4gIHN0b3JlOiBTdG9yZUhhbmRsZXIgfCBQcm9wc1Byb3h5SGFuZGxlcixcbiAgZWZmZWN0U3Vic2NyaXB0aW9uOiBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIHJlbmRlckNvbnRhaW5lcj86IENvbnRhaW5lclxuKSB7XG4gIGNvbnN0IGVmZmVjdHNNYXAgPSAoc3RvcmUuJGVmZmVjdHMkIHx8PSBuZXcgTWFwKCkpO1xuICBsZXQgZWZmZWN0cyA9IGVmZmVjdHNNYXAuZ2V0KHByb3ApO1xuICBpZiAoIWVmZmVjdHMpIHtcbiAgICBlZmZlY3RzID0gbmV3IFNldCgpO1xuICAgIGVmZmVjdHNNYXAuc2V0KHByb3AsIGVmZmVjdHMpO1xuICB9XG4gIC8vIExldCdzIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gdGhpcyBlZmZlY3QuXG4gIC8vIEFkZGluZyByZWZlcmVuY2UgaXMgZXNzZW50aWFsbHkgYWRkaW5nIGEgc3Vic2NyaXB0aW9uLCBzbyBpZiB0aGUgc2lnbmFsXG4gIC8vIGNoYW5nZXMgd2Uga25vdyB3aG8gdG8gbm90aWZ5LlxuICBjb25zdCBpc09uU2VydmVyID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcjtcbiAgY29uc3Qgc2hvdWxkUmVjb3JkRXh0ZXJuYWxSb290RWZmZWN0ID1cbiAgICBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIHN0b3JlIGluc3RhbmNlb2YgU3RvcmVIYW5kbGVyICYmIGlzT25TZXJ2ZXI7XG4gIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uKGVmZmVjdHMsIGVmZmVjdFN1YnNjcmlwdGlvbik7XG4gIC8vIEJ1dCB3aGVuIGVmZmVjdCBpcyBzY2hlZHVsZWQgaW4gbmVlZHMgdG8gYmUgYWJsZSB0byBrbm93IHdoaWNoIHNpZ25hbHNcbiAgLy8gdG8gdW5zdWJzY3JpYmUgZnJvbS4gU28gd2UgbmVlZCB0byBzdG9yZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGVmZmVjdCBiYWNrXG4gIC8vIHRvIHRoaXMgc2lnbmFsLlxuICBlbnN1cmVDb250YWluc0JhY2tSZWYoZWZmZWN0U3Vic2NyaXB0aW9uLCB0YXJnZXQpO1xuICBpZiAoaXNPblNlcnZlcikge1xuICAgIGNvbnN0IHNlcmlhbGl6YXRpb25Db250YWluZXIgPSBnZXRFZmZlY3RTZXJpYWxpemF0aW9uQ29udGFpbmVyKFxuICAgICAgcmVuZGVyQ29udGFpbmVyLFxuICAgICAgc3RvcmUuJGNvbnRhaW5lciRcbiAgICApO1xuICAgIGlmIChzaG91bGRSZWNvcmRFeHRlcm5hbFJvb3RFZmZlY3QpIHtcbiAgICAgIChzZXJpYWxpemF0aW9uQ29udGFpbmVyIGFzIFNTUlNlZ21lbnRDb250YWluZXIgfCBudWxsKT8uJHJlY29yZEV4dGVybmFsUm9vdEVmZmVjdCQ/LihcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBlZmZlY3RTdWJzY3JpcHRpb24sXG4gICAgICAgIHByb3AsXG4gICAgICAgIGVmZmVjdHNNYXBcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIFRPRE8gaXMgdGhpcyBuZWVkZWQgd2l0aCB0aGUgcHJlbG9hZGVyP1xuICAgIGFkZFFybFRvU2VyaWFsaXphdGlvbkN0eChlZmZlY3RTdWJzY3JpcHRpb24sIHNlcmlhbGl6YXRpb25Db250YWluZXIpO1xuICB9XG5cbiAgREVCVUcgJiZcbiAgICBsb2coXG4gICAgICAnc3ViJyxcbiAgICAgIHBhZChcbiAgICAgICAgJ1xcbicgK1xuICAgICAgICAgIFsuLi4oc3RvcmUuJGVmZmVjdHMkPy5lbnRyaWVzKCkgfHwgW10pXVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtTdHJpbmcoa2V5KX06ICR7U3RyaW5nKHZhbHVlKX1gKVxuICAgICAgICAgICAgLmpvaW4oJywnKSxcbiAgICAgICAgJyAgJ1xuICAgICAgKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHNldE5ld1ZhbHVlQW5kVHJpZ2dlckVmZmVjdHM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIGFueT4+KFxuICBwcm9wOiBrZXlvZiBULFxuICB2YWx1ZTogYW55LFxuICB0YXJnZXQ6IFQsXG4gIGN1cnJlbnRTdG9yZTogU3RvcmVIYW5kbGVyXG4pOiB2b2lkIHtcbiAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gIGNvbnN0IGVmZmVjdHMgPSBnZXRFZmZlY3RzKHRhcmdldCwgcHJvcCBhcyBzdHJpbmcgfCBzeW1ib2wsIGN1cnJlbnRTdG9yZS4kZWZmZWN0cyQpO1xuICBpZiAoZWZmZWN0cykge1xuICAgIHNjaGVkdWxlRWZmZWN0cyhjdXJyZW50U3RvcmUuJGNvbnRhaW5lciQsIGN1cnJlbnRTdG9yZSwgZWZmZWN0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWZmZWN0czxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgYW55Pj4oXG4gIHRhcmdldDogVCxcbiAgcHJvcDogc3RyaW5nIHwgc3ltYm9sLFxuICBzdG9yZUVmZmVjdHM6IE1hcDxzdHJpbmcgfCBzeW1ib2wsIFNldDxFZmZlY3RTdWJzY3JpcHRpb24+PiB8IHVuZGVmaW5lZFxuKSB7XG4gIGxldCBlZmZlY3RzVG9UcmlnZ2VyOiBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPiB8IHVuZGVmaW5lZDtcblxuICBpZiAoc3RvcmVFZmZlY3RzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgZm9yIChjb25zdCBlZmZlY3RzIG9mIHN0b3JlRWZmZWN0cy52YWx1ZXMoKSkge1xuICAgICAgICBlZmZlY3RzVG9UcmlnZ2VyIHx8PSBuZXcgU2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZWZmZWN0IG9mIGVmZmVjdHMpIHtcbiAgICAgICAgICBlZmZlY3RzVG9UcmlnZ2VyLmFkZChlZmZlY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVmZmVjdHNUb1RyaWdnZXIgPSBzdG9yZUVmZmVjdHMuZ2V0KHByb3ApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3JlQXJyYXlWYWx1ZSA9IHN0b3JlRWZmZWN0cz8uZ2V0KFNUT1JFX0FMTF9QUk9QUyk7XG4gIGlmIChzdG9yZUFycmF5VmFsdWUpIHtcbiAgICBlZmZlY3RzVG9UcmlnZ2VyIHx8PSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBlZmZlY3Qgb2Ygc3RvcmVBcnJheVZhbHVlKSB7XG4gICAgICBlZmZlY3RzVG9UcmlnZ2VyIS5hZGQoZWZmZWN0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVmZmVjdHNUb1RyaWdnZXI7XG59XG4iXX0=","import { NEEDS_COMPUTATION, STORE_ALL_PROPS } from '../../reactive-primitives/types';\nimport { _UNINITIALIZED } from '../utils/constants';\nimport { EMPTY_ARRAY, EMPTY_OBJ } from '../utils/flyweight';\n// Keep last\nimport { Slot } from '../jsx/slot.public';\nimport { Fragment } from '../jsx/jsx-runtime';\n/** Used to represent an undefined value that must be serialized */\nexport const explicitUndefined = Symbol('undefined');\n// Used for allocate, make sure they are in sync with Constants\nexport const _constants = [\n    undefined,\n    null,\n    true,\n    false,\n    '',\n    EMPTY_ARRAY,\n    EMPTY_OBJ,\n    NEEDS_COMPUTATION,\n    STORE_ALL_PROPS,\n    _UNINITIALIZED,\n    Slot,\n    Fragment,\n    NaN,\n    Infinity,\n    -Infinity,\n    Number.MAX_SAFE_INTEGER,\n    Number.MAX_SAFE_INTEGER - 1,\n    Number.MIN_SAFE_INTEGER,\n];\n// Used for dumpState, make sure they are in sync with Constants\nexport const _constantNames = [\n    'undefined',\n    'null',\n    'true',\n    'false',\n    \"''\",\n    'EMPTY_ARRAY',\n    'EMPTY_OBJ',\n    'NEEDS_COMPUTATION',\n    'STORE_ALL_PROPS',\n    '_UNINITIALIZED',\n    'Slot',\n    'Fragment',\n    'NaN',\n    'Infinity',\n    '-Infinity',\n    'MAX_SAFE_INTEGER',\n    'MAX_SAFE_INTEGER-1',\n    'MIN_SAFE_INTEGER',\n];\n// Used for dumpState, make sure they are in sync with TypeIds\nexport const _typeIdNames = [\n    'Plain',\n    'RootRef',\n    'ForwardRef',\n    'Constant',\n    'Array',\n    'Object',\n    'URL',\n    'Date',\n    'Regex',\n    'QRL',\n    'VNode',\n    'RefVNode',\n    'BigInt',\n    'URLSearchParams',\n    'ForwardRefs',\n    'TemporalDuration',\n    'TemporalInstant',\n    'TemporalPlainDate',\n    'TemporalPlainDateTime',\n    'TemporalPlainMonthDay',\n    'TemporalPlainTime',\n    'TemporalPlainYearMonth',\n    'TemporalZonedDateTime',\n    'Error',\n    'Promise',\n    'Set',\n    'Map',\n    'Uint8Array',\n    'Task',\n    'Component',\n    'Signal',\n    'WrappedSignal',\n    'ComputedSignal',\n    'AsyncSignal',\n    'SerializerSignal',\n    'Store',\n    'FormData',\n    'JSXNode',\n    'PropsProxy',\n    'SubscriptionData',\n    'EffectSubscription',\n    'SubscriptionPatch',\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zZXJkZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RCxZQUFZO0FBQ1osT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBd0JyRCwrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLFNBQVM7SUFDVCxJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxFQUFFO0lBQ0YsV0FBVztJQUNYLFNBQVM7SUFDVCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGNBQWM7SUFDZCxJQUFJO0lBQ0osUUFBUTtJQUNSLEdBQUc7SUFDSCxRQUFRO0lBQ1IsQ0FBQyxRQUFRO0lBQ1QsTUFBTSxDQUFDLGdCQUFnQjtJQUN2QixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQztJQUMzQixNQUFNLENBQUMsZ0JBQWdCO0NBQ2YsQ0FBQztBQUVYLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsV0FBVztJQUNYLE1BQU07SUFDTixNQUFNO0lBQ04sT0FBTztJQUNQLElBQUk7SUFDSixhQUFhO0lBQ2IsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLE1BQU07SUFDTixVQUFVO0lBQ1YsS0FBSztJQUNMLFVBQVU7SUFDVixXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixrQkFBa0I7Q0FDVixDQUFDO0FBa0RYLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsT0FBTztJQUNQLFNBQVM7SUFDVCxZQUFZO0lBQ1osVUFBVTtJQUNWLE9BQU87SUFDUCxRQUFRO0lBQ1IsS0FBSztJQUNMLE1BQU07SUFDTixPQUFPO0lBQ1AsS0FBSztJQUNMLE9BQU87SUFDUCxVQUFVO0lBQ1YsUUFBUTtJQUNSLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixPQUFPO0lBQ1AsU0FBUztJQUNULEtBQUs7SUFDTCxLQUFLO0lBQ0wsWUFBWTtJQUNaLE1BQU07SUFDTixXQUFXO0lBQ1gsUUFBUTtJQUNSLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQixPQUFPO0lBQ1AsVUFBVTtJQUNWLFNBQVM7SUFDVCxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixtQkFBbUI7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5FRURTX0NPTVBVVEFUSU9OLCBTVE9SRV9BTExfUFJPUFMgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IF9VTklOSVRJQUxJWkVEIH0gZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IEVNUFRZX0FSUkFZLCBFTVBUWV9PQkogfSBmcm9tICcuLi91dGlscy9mbHl3ZWlnaHQnO1xuLy8gS2VlcCBsYXN0XG5pbXBvcnQgeyBTbG90IH0gZnJvbSAnLi4vanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vanN4L2pzeC1ydW50aW1lJztcblxuLyoqIFVzZWQgdG8gcmVwcmVzZW50IGFuIHVuZGVmaW5lZCB2YWx1ZSB0aGF0IG11c3QgYmUgc2VyaWFsaXplZCAqL1xuZXhwb3J0IGNvbnN0IGV4cGxpY2l0VW5kZWZpbmVkID0gU3ltYm9sKCd1bmRlZmluZWQnKTtcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29uc3RhbnRzIHtcbiAgVW5kZWZpbmVkLFxuICBOdWxsLFxuICBUcnVlLFxuICBGYWxzZSxcbiAgRW1wdHlTdHJpbmcsXG4gIEVNUFRZX0FSUkFZLFxuICBFTVBUWV9PQkosXG4gIE5FRURTX0NPTVBVVEFUSU9OLFxuICBTVE9SRV9BTExfUFJPUFMsXG4gIFVOSU5JVElBTElaRUQsXG4gIFNsb3QsXG4gIEZyYWdtZW50LFxuICBOYU4sXG4gIFBvc2l0aXZlSW5maW5pdHksXG4gIE5lZ2F0aXZlSW5maW5pdHksXG4gIE1heFNhZmVJbnQsXG4gIC8vIHVzZWQgZm9yIGNsb3NlIGZyYWdtZW50XG4gIEFsbW9zdE1heFNhZmVJbnQsXG4gIE1pblNhZmVJbnQsXG59XG5cbi8vIFVzZWQgZm9yIGFsbG9jYXRlLCBtYWtlIHN1cmUgdGhleSBhcmUgaW4gc3luYyB3aXRoIENvbnN0YW50c1xuZXhwb3J0IGNvbnN0IF9jb25zdGFudHMgPSBbXG4gIHVuZGVmaW5lZCxcbiAgbnVsbCxcbiAgdHJ1ZSxcbiAgZmFsc2UsXG4gICcnLFxuICBFTVBUWV9BUlJBWSxcbiAgRU1QVFlfT0JKLFxuICBORUVEU19DT01QVVRBVElPTixcbiAgU1RPUkVfQUxMX1BST1BTLFxuICBfVU5JTklUSUFMSVpFRCxcbiAgU2xvdCxcbiAgRnJhZ21lbnQsXG4gIE5hTixcbiAgSW5maW5pdHksXG4gIC1JbmZpbml0eSxcbiAgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIC0gMSxcbiAgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG5dIGFzIGNvbnN0O1xuXG4vLyBVc2VkIGZvciBkdW1wU3RhdGUsIG1ha2Ugc3VyZSB0aGV5IGFyZSBpbiBzeW5jIHdpdGggQ29uc3RhbnRzXG5leHBvcnQgY29uc3QgX2NvbnN0YW50TmFtZXMgPSBbXG4gICd1bmRlZmluZWQnLFxuICAnbnVsbCcsXG4gICd0cnVlJyxcbiAgJ2ZhbHNlJyxcbiAgXCInJ1wiLFxuICAnRU1QVFlfQVJSQVknLFxuICAnRU1QVFlfT0JKJyxcbiAgJ05FRURTX0NPTVBVVEFUSU9OJyxcbiAgJ1NUT1JFX0FMTF9QUk9QUycsXG4gICdfVU5JTklUSUFMSVpFRCcsXG4gICdTbG90JyxcbiAgJ0ZyYWdtZW50JyxcbiAgJ05hTicsXG4gICdJbmZpbml0eScsXG4gICctSW5maW5pdHknLFxuICAnTUFYX1NBRkVfSU5URUdFUicsXG4gICdNQVhfU0FGRV9JTlRFR0VSLTEnLFxuICAnTUlOX1NBRkVfSU5URUdFUicsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgZW51bSBUeXBlSWRzIHtcbiAgUGxhaW4sXG4gIFJvb3RSZWYsXG4gIEZvcndhcmRSZWYsXG4gIC8qKiBVbmRlZmluZWQsIG51bGwsIHRydWUsIGZhbHNlLCBOYU4sICtJbmYsIC1JbmYsIFNsb3QsIEZyYWdtZW50ICovXG4gIENvbnN0YW50LFxuICBBcnJheSxcbiAgT2JqZWN0LFxuICBVUkwsXG4gIERhdGUsXG4gIFJlZ2V4LFxuICBRUkwsXG4gIC8vLyBeIHNpbmdsZS1kaWdpdCB0eXBlcyBeXG4gIFZOb2RlLFxuICBSZWZWTm9kZSxcbiAgQmlnSW50LFxuICBVUkxTZWFyY2hQYXJhbXMsXG4gIEZvcndhcmRSZWZzLFxuICBUZW1wb3JhbER1cmF0aW9uLFxuICBUZW1wb3JhbEluc3RhbnQsXG4gIFRlbXBvcmFsUGxhaW5EYXRlLFxuICBUZW1wb3JhbFBsYWluRGF0ZVRpbWUsXG4gIFRlbXBvcmFsUGxhaW5Nb250aERheSxcbiAgVGVtcG9yYWxQbGFpblRpbWUsXG4gIFRlbXBvcmFsUGxhaW5ZZWFyTW9udGgsXG4gIFRlbXBvcmFsWm9uZWREYXRlVGltZSxcbiAgLy8vIEFsbCB0eXBlcyBiZWxvdyB3aWxsIGJlIGluZmxhdGUoKWRcbiAgRXJyb3IsXG4gIFByb21pc2UsXG4gIFNldCxcbiAgTWFwLFxuICBVaW50OEFycmF5LFxuICBUYXNrLFxuICBDb21wb25lbnQsXG4gIFNpZ25hbCxcbiAgV3JhcHBlZFNpZ25hbCxcbiAgQ29tcHV0ZWRTaWduYWwsXG4gIEFzeW5jU2lnbmFsLFxuICBTZXJpYWxpemVyU2lnbmFsLFxuICBTdG9yZSxcbiAgRm9ybURhdGEsXG4gIEpTWE5vZGUsXG4gIFByb3BzUHJveHksXG4gIFN1YnNjcmlwdGlvbkRhdGEsXG4gIEVmZmVjdFN1YnNjcmlwdGlvbixcbiAgU3Vic2NyaXB0aW9uUGF0Y2gsXG59XG5cbi8vIFVzZWQgZm9yIGR1bXBTdGF0ZSwgbWFrZSBzdXJlIHRoZXkgYXJlIGluIHN5bmMgd2l0aCBUeXBlSWRzXG5leHBvcnQgY29uc3QgX3R5cGVJZE5hbWVzID0gW1xuICAnUGxhaW4nLFxuICAnUm9vdFJlZicsXG4gICdGb3J3YXJkUmVmJyxcbiAgJ0NvbnN0YW50JyxcbiAgJ0FycmF5JyxcbiAgJ09iamVjdCcsXG4gICdVUkwnLFxuICAnRGF0ZScsXG4gICdSZWdleCcsXG4gICdRUkwnLFxuICAnVk5vZGUnLFxuICAnUmVmVk5vZGUnLFxuICAnQmlnSW50JyxcbiAgJ1VSTFNlYXJjaFBhcmFtcycsXG4gICdGb3J3YXJkUmVmcycsXG4gICdUZW1wb3JhbER1cmF0aW9uJyxcbiAgJ1RlbXBvcmFsSW5zdGFudCcsXG4gICdUZW1wb3JhbFBsYWluRGF0ZScsXG4gICdUZW1wb3JhbFBsYWluRGF0ZVRpbWUnLFxuICAnVGVtcG9yYWxQbGFpbk1vbnRoRGF5JyxcbiAgJ1RlbXBvcmFsUGxhaW5UaW1lJyxcbiAgJ1RlbXBvcmFsUGxhaW5ZZWFyTW9udGgnLFxuICAnVGVtcG9yYWxab25lZERhdGVUaW1lJyxcbiAgJ0Vycm9yJyxcbiAgJ1Byb21pc2UnLFxuICAnU2V0JyxcbiAgJ01hcCcsXG4gICdVaW50OEFycmF5JyxcbiAgJ1Rhc2snLFxuICAnQ29tcG9uZW50JyxcbiAgJ1NpZ25hbCcsXG4gICdXcmFwcGVkU2lnbmFsJyxcbiAgJ0NvbXB1dGVkU2lnbmFsJyxcbiAgJ0FzeW5jU2lnbmFsJyxcbiAgJ1NlcmlhbGl6ZXJTaWduYWwnLFxuICAnU3RvcmUnLFxuICAnRm9ybURhdGEnLFxuICAnSlNYTm9kZScsXG4gICdQcm9wc1Byb3h5JyxcbiAgJ1N1YnNjcmlwdGlvbkRhdGEnLFxuICAnRWZmZWN0U3Vic2NyaXB0aW9uJyxcbiAgJ1N1YnNjcmlwdGlvblBhdGNoJyxcbl07XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { qError } from '../error/error';\nimport { getPlatform } from '../platform/platform';\nimport { createQRL } from '../qrl/qrl-class';\nimport { isSyncQrl } from '../qrl/qrl-utils';\nimport { assertDefined } from '../error/assert';\nexport function qrlToString(serializationContext, qrl, raw) {\n    let symbol = qrl.$symbol$;\n    let chunk = qrl.$chunk$;\n    const platform = getPlatform();\n    if (platform) {\n        const result = isDev\n            ? platform.chunkForSymbol(symbol, chunk, qrl.dev?.file)\n            : platform.chunkForSymbol(symbol, chunk);\n        if (result) {\n            chunk = result[1];\n            symbol = result[0];\n        }\n    }\n    const isSync = isSyncQrl(qrl);\n    if (!isSync) {\n        // If we have a symbol we need to resolve the chunk.\n        if (!chunk) {\n            chunk = serializationContext.$symbolToChunkResolver$(qrl.$hash$);\n        }\n        // in Dev mode we need to keep track of the symbols\n        if (isDev) {\n            const backChannel = (globalThis.__qrl_back_channel__ ||=\n                new Map());\n            // During tests the resolved value is always available\n            const lazy = qrl.$lazy$;\n            backChannel.set(lazy.$symbol$, lazy.$ref$);\n            if (!chunk) {\n                chunk = QRL_RUNTIME_CHUNK;\n            }\n        }\n        if (!chunk) {\n            throw qError(14 /* QError.qrlMissingChunk */, [qrl.$symbol$]);\n        }\n        if (chunk.startsWith('./')) {\n            chunk = chunk.slice(2);\n        }\n    }\n    else {\n        const fn = qrl.resolved;\n        chunk = '';\n        // TODO test that provided stringified fn is used\n        symbol = String(serializationContext.$addSyncFn$(null, 0, fn));\n    }\n    const captures = qrl.getCaptured();\n    let captureIds = null;\n    if (captures && captures.length > 0) {\n        // We refer by id so every capture needs to be a root\n        captureIds = captures.map((ref) => `${serializationContext.$addRoot$(ref)}`).join(' ');\n    }\n    if (raw) {\n        return [chunk, symbol, captureIds];\n    }\n    let qrlStringInline = `${chunk}#${symbol}`;\n    if (captureIds) {\n        qrlStringInline += `#${captureIds}`;\n    }\n    return qrlStringInline;\n}\n/** @internal */\nexport function qrlToChunks(serializationContext, qrl) {\n    const [chunk, symbol, captures] = qrlToString(serializationContext, qrl, true);\n    const prefix = `${chunk}#${symbol}`;\n    if (!captures) {\n        return prefix;\n    }\n    const chunks = [prefix, '#'];\n    const captureIds = captures.split(' ');\n    for (let i = 0; i < captureIds.length; i++) {\n        if (i > 0) {\n            chunks.push(' ');\n        }\n        chunks.push(Number(captureIds[i]));\n    }\n    return chunks;\n}\nexport function createQRLWithBackChannel(chunk, symbol, captures, container) {\n    let qrlImporter = null;\n    if (isDev && chunk === QRL_RUNTIME_CHUNK) {\n        const backChannel = globalThis.__qrl_back_channel__;\n        isDev && assertDefined(backChannel, 'Missing QRL_RUNTIME_CHUNK');\n        const fn = backChannel.get(symbol);\n        if (fn) {\n            qrlImporter = () => Promise.resolve({ [symbol]: fn });\n        }\n    }\n    return createQRL(chunk, symbol, null, qrlImporter, captures, container);\n}\n/** Parses \"chunk#hash#...rootRef\" */\nexport function parseQRL(qrl, container) {\n    const [chunk, symbol, captures] = qrl.split('#');\n    return createQRLWithBackChannel(chunk, symbol, captures || null, container);\n}\nexport const QRL_RUNTIME_CHUNK = 'mock-chunk';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLXRvLXN0cmluZy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2VyZGVzL3FybC10by1zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxNQUFNLEVBQVUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBMEMsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBZWhELE1BQU0sVUFBVSxXQUFXLENBQ3pCLG9CQUEwQyxFQUMxQyxHQUFrQyxFQUNsQyxHQUFVO0lBRVYsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUMxQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBRXhCLE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQy9CLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixNQUFNLE1BQU0sR0FBRyxLQUFLO1lBQ2xCLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDdkQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNI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LEVBQUUsU0FBcUI7SUFDekQsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxPQUFPLHdCQUF3QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyB0eXBlIFNlcmlhbGl6YXRpb25Db250ZXh0IH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgcUVycm9yLCBRRXJyb3IgfSBmcm9tICcuLi9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBnZXRQbGF0Zm9ybSB9IGZyb20gJy4uL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB7IGNyZWF0ZVFSTCwgdHlwZSBRUkxJbnRlcm5hbCwgdHlwZSBTeW5jUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGlzU3luY1FybCB9IGZyb20gJy4uL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gJy4uL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU1NSV3JpdGVDaHVuayB9IGZyb20gJy4uLy4uL3Nzci9zc3ItdHlwZXMnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gcXJsVG9TdHJpbmcoXG4gIHNlcmlhbGl6YXRpb25Db250ZXh0OiBTZXJpYWxpemF0aW9uQ29udGV4dCxcbiAgcXJsOiBRUkxJbnRlcm5hbCB8IFN5bmNRUkxJbnRlcm5hbFxuKTogc3RyaW5nO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHFybFRvU3RyaW5nKFxuICBzZXJpYWxpemF0aW9uQ29udGV4dDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIHFybDogUVJMSW50ZXJuYWwgfCBTeW5jUVJMSW50ZXJuYWwsXG4gIHJhdzogdHJ1ZVxuKTogW3N0cmluZywgc3RyaW5nLCBzdHJpbmcgfCBudWxsXTtcbmV4cG9ydCBmdW5jdGlvbiBxcmxUb1N0cmluZyhcbiAgc2VyaWFsaXphdGlvbkNvbnRleHQ6IFNlcmlhbGl6YXRpb25Db250ZXh0LFxuICBxcmw6IFFSTEludGVybmFsIHwgU3luY1FSTEludGVybmFsLFxuICByYXc/OiB0cnVlXG4pOiBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZyB8IG51bGxdIHtcbiAgbGV0IHN5bWJvbCA9IHFybC4kc3ltYm9sJDtcbiAgbGV0IGNodW5rID0gcXJsLiRjaHVuayQ7XG5cbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBpZiAocGxhdGZvcm0pIHtcbiAgICBjb25zdCByZXN1bHQgPSBpc0RldlxuICAgICAgPyBwbGF0Zm9ybS5jaHVua0ZvclN5bWJvbChzeW1ib2wsIGNodW5rLCBxcmwuZGV2Py5maWxlKVxuICAgICAgOiBwbGF0Zm9ybS5jaHVua0ZvclN5bWJvbChzeW1ib2wsIGNodW5rKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBjaHVuayA9IHJlc3VsdFsxXTtcbiAgICAgIHN5bWJvbCA9IHJlc3VsdFswXTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc1N5bmMgPSBpc1N5bmNRcmwocXJsKTtcbiAgaWYgKCFpc1N5bmMpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgc3ltYm9sIHdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgY2h1bmsuXG4gICAgaWYgKCFjaHVuaykge1xuICAgICAgY2h1bmsgPSBzZXJpYWxpemF0aW9uQ29udGV4dC4kc3ltYm9sVG9DaHVua1Jlc29sdmVyJChxcmwuJGhhc2gkKTtcbiAgICB9XG4gICAgLy8gaW4gRGV2IG1vZGUgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBzeW1ib2xzXG4gICAgaWYgKGlzRGV2KSB7XG4gICAgICBjb25zdCBiYWNrQ2hhbm5lbDogTWFwPHN0cmluZywgdW5rbm93bj4gPSAoKGdsb2JhbFRoaXMgYXMgYW55KS5fX3FybF9iYWNrX2NoYW5uZWxfXyB8fD1cbiAgICAgICAgbmV3IE1hcCgpKTtcbiAgICAgIC8vIER1cmluZyB0ZXN0cyB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgbGF6eSA9IHFybC4kbGF6eSQ7XG4gICAgICBiYWNrQ2hhbm5lbC5zZXQobGF6eS4kc3ltYm9sJCwgbGF6eS4kcmVmJCk7XG4gICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgIGNodW5rID0gUVJMX1JVTlRJTUVfQ0hVTks7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2h1bmspIHtcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3IucXJsTWlzc2luZ0NodW5rLCBbcXJsLiRzeW1ib2wkXSk7XG4gICAgfVxuICAgIGlmIChjaHVuay5zdGFydHNXaXRoKCcuLycpKSB7XG4gICAgICBjaHVuayA9IGNodW5rLnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmbiA9IHFybC5yZXNvbHZlZCBhcyBGdW5jdGlvbjtcbiAgICBjaHVuayA9ICcnO1xuICAgIC8vIFRPRE8gdGVzdCB0aGF0IHByb3ZpZGVkIHN0cmluZ2lmaWVkIGZuIGlzIHVzZWRcbiAgICBzeW1ib2wgPSBTdHJpbmcoc2VyaWFsaXphdGlvbkNvbnRleHQuJGFkZFN5bmNGbiQobnVsbCwgMCwgZm4pKTtcbiAgfVxuXG4gIGNvbnN0IGNhcHR1cmVzID0gcXJsLmdldENhcHR1cmVkKCk7XG5cbiAgbGV0IGNhcHR1cmVJZHM6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoY2FwdHVyZXMgJiYgY2FwdHVyZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFdlIHJlZmVyIGJ5IGlkIHNvIGV2ZXJ5IGNhcHR1cmUgbmVlZHMgdG8gYmUgYSByb290XG4gICAgY2FwdHVyZUlkcyA9IGNhcHR1cmVzLm1hcCgocmVmKSA9PiBgJHtzZXJpYWxpemF0aW9uQ29udGV4dC4kYWRkUm9vdCQocmVmKX1gKS5qb2luKCcgJyk7XG4gIH1cbiAgaWYgKHJhdykge1xuICAgIHJldHVybiBbY2h1bmssIHN5bWJvbCwgY2FwdHVyZUlkc107XG4gIH1cbiAgbGV0IHFybFN0cmluZ0lubGluZSA9IGAke2NodW5rfSMke3N5bWJvbH1gO1xuICBpZiAoY2FwdHVyZUlkcykge1xuICAgIHFybFN0cmluZ0lubGluZSArPSBgIyR7Y2FwdHVyZUlkc31gO1xuICB9XG4gIHJldHVybiBxcmxTdHJpbmdJbmxpbmU7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBxcmxUb0NodW5rcyhcbiAgc2VyaWFsaXphdGlvbkNvbnRleHQ6IFNlcmlhbGl6YXRpb25Db250ZXh0LFxuICBxcmw6IFFSTEludGVybmFsIHwgU3luY1FSTEludGVybmFsXG4pOiBzdHJpbmcgfCBTU1JXcml0ZUNodW5rW10ge1xuICBjb25zdCBbY2h1bmssIHN5bWJvbCwgY2FwdHVyZXNdID0gcXJsVG9TdHJpbmcoc2VyaWFsaXphdGlvbkNvbnRleHQsIHFybCwgdHJ1ZSk7XG4gIGNvbnN0IHByZWZpeCA9IGAke2NodW5rfSMke3N5bWJvbH1gO1xuICBpZiAoIWNhcHR1cmVzKSB7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuICBjb25zdCBjaHVua3M6IFNTUldyaXRlQ2h1bmtbXSA9IFtwcmVmaXgsICcjJ107XG4gIGNvbnN0IGNhcHR1cmVJZHMgPSBjYXB0dXJlcy5zcGxpdCgnICcpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNhcHR1cmVJZHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIGNodW5rcy5wdXNoKCcgJyk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKE51bWJlcihjYXB0dXJlSWRzW2ldKSk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVFSTFdpdGhCYWNrQ2hhbm5lbChcbiAgY2h1bms6IHN0cmluZyxcbiAgc3ltYm9sOiBzdHJpbmcsXG4gIGNhcHR1cmVzOiBzdHJpbmcgfCB1bmtub3duW10gfCBudWxsLFxuICBjb250YWluZXI/OiBDb250YWluZXJcbik6IFFSTEludGVybmFsPGFueT4ge1xuICBsZXQgcXJsSW1wb3J0ZXIgPSBudWxsO1xuICBpZiAoaXNEZXYgJiYgY2h1bmsgPT09IFFSTF9SVU5USU1FX0NIVU5LKSB7XG4gICAgY29uc3QgYmFja0NoYW5uZWw6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uPiA9IChnbG9iYWxUaGlzIGFzIGFueSkuX19xcmxfYmFja19jaGFubmVsX187XG4gICAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZChiYWNrQ2hhbm5lbCwgJ01pc3NpbmcgUVJMX1JVTlRJTUVfQ0hVTksnKTtcbiAgICBjb25zdCBmbiA9IGJhY2tDaGFubmVsLmdldChzeW1ib2wpO1xuICAgIGlmIChmbikge1xuICAgICAgcXJsSW1wb3J0ZXIgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoeyBbc3ltYm9sXTogZm4gfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVRUkwoY2h1bmssIHN5bWJvbCwgbnVsbCwgcXJsSW1wb3J0ZXIsIGNhcHR1cmVzLCBjb250YWluZXIpO1xufVxuXG4vKiogUGFyc2VzIFwiY2h1bmsjaGFzaCMuLi5yb290UmVmXCIgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVFSTChxcmw6IHN0cmluZywgY29udGFpbmVyPzogQ29udGFpbmVyKTogUVJMSW50ZXJuYWw8YW55PiB7XG4gIGNvbnN0IFtjaHVuaywgc3ltYm9sLCBjYXB0dXJlc10gPSBxcmwuc3BsaXQoJyMnKTtcbiAgcmV0dXJuIGNyZWF0ZVFSTFdpdGhCYWNrQ2hhbm5lbChjaHVuaywgc3ltYm9sLCBjYXB0dXJlcyB8fCBudWxsLCBjb250YWluZXIpO1xufVxuXG5leHBvcnQgY29uc3QgUVJMX1JVTlRJTUVfQ0hVTksgPSAnbW9jay1jaHVuayc7XG4iXX0=","/** @internal */\nexport class SubscriptionPatch {\n    rootId;\n    subscriptions;\n    constructor(rootId = 0, subscriptions = new Set()) {\n        this.rootId = rootId;\n        this.subscriptions = subscriptions;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXBhdGNoLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zZXJkZXMvc3Vic2NyaXB0aW9uLXBhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGdCQUFnQjtBQUNoQixNQUFNLE9BQU8saUJBQWlCO0lBRW5CO0lBQ0E7SUFGVCxZQUNTLFNBQWlCLENBQUMsRUFDbEIsZ0JBRTZDLElBQUksR0FBRyxFQUFFO1FBSHRELFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsa0JBQWEsR0FBYixhQUFhLENBRXlDO0lBQzVELENBQUM7Q0FDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRWZmZWN0U3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25QYXRjaCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByb290SWQ6IG51bWJlciA9IDAsXG4gICAgcHVibGljIHN1YnNjcmlwdGlvbnM6XG4gICAgICB8IFNldDxFZmZlY3RTdWJzY3JpcHRpb24+XG4gICAgICB8IE1hcDxzdHJpbmcgfCBzeW1ib2wsIFNldDxFZmZlY3RTdWJzY3JpcHRpb24+PiA9IG5ldyBTZXQoKVxuICApIHt9XG59XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { vnode_isVNode } from '../../client/vnode-utils';\nimport { AsyncSignalImpl } from '../../reactive-primitives/impl/async-signal-impl';\nimport { ComputedSignalImpl } from '../../reactive-primitives/impl/computed-signal-impl';\nimport { SerializerSignalImpl } from '../../reactive-primitives/impl/serializer-signal-impl';\nimport { SignalImpl } from '../../reactive-primitives/impl/signal-impl';\nimport { getStoreHandler, getStoreTarget, isStore } from '../../reactive-primitives/impl/store';\nimport { WrappedSignalImpl } from '../../reactive-primitives/impl/wrapped-signal-impl';\nimport { SubscriptionData } from '../../reactive-primitives/subscription-data';\nimport { EffectSubscription, NEEDS_COMPUTATION, STORE_ALL_PROPS, } from '../../reactive-primitives/types';\nimport { isSerializerObj } from '../../reactive-primitives/utils';\nimport { Task } from '../../use/use-task';\nimport { isQwikComponent, SERIALIZABLE_STATE } from '../component.public';\nimport { qError } from '../error/error';\nimport { isJSXNode } from '../jsx/jsx-node';\nimport { Fragment } from '../jsx/jsx-runtime';\nimport { isPropsProxy } from '../jsx/props-proxy';\nimport { Slot } from '../jsx/slot.public';\nimport { isQrl } from '../qrl/qrl-utils';\nimport { BRACKET_CLOSE, BRACKET_OPEN, CLOSE_TAG, COMMA, ESCAPED_CLOSE_TAG, QUOTE, } from '../ssr-const';\nimport { _OWNER, _PROPS_HANDLER, _UNINITIALIZED } from '../utils/constants';\nimport { EMPTY_ARRAY, EMPTY_OBJ } from '../utils/flyweight';\nimport { ELEMENT_ID, ELEMENT_PROPS } from '../utils/markers';\nimport { isObjectEmpty } from '../utils/objects';\nimport { isPromise, maybeThen } from '../utils/promises';\nimport { explicitUndefined } from './constants';\nimport { qrlToString } from './qrl-to-string';\nimport { SerializationBackRef, } from './serialization-context';\nimport { SubscriptionPatch } from './subscription-patch';\nimport { fastSkipSerialize, SerializerSymbol } from './verify';\n/**\n * Format:\n *\n * - This encodes the $roots$ array.\n * - The output is a string of comma separated JSON values.\n * - Even values are always numbers, specifying the type of the next value.\n * - Odd values are numbers, strings (JSON stringified with `</` escaping) or arrays (same format).\n * - Therefore root indexes need to be doubled to get the actual index.\n */\nexport class Serializer {\n    $serializationContext$;\n    $rootIdx$ = 0;\n    $forwardRefs$ = [];\n    $forwardRefsId$ = 0;\n    $promises$ = new Set();\n    $s11nWeakRefs$ = new Map();\n    $parent$;\n    $qrlMap$ = new Map();\n    $streamedRootLimit$ = 0;\n    $writer$;\n    /** We need to determine this at runtime because polyfills may not be loaded a module load time */\n    $hasTemporal$ = typeof Temporal !== 'undefined';\n    constructor($serializationContext$) {\n        this.$serializationContext$ = $serializationContext$;\n        this.$writer$ = $serializationContext$.$writer$;\n    }\n    async serialize() {\n        const previousStreamedRootLimit = this.$streamedRootLimit$;\n        this.$streamedRootLimit$ = 0;\n        try {\n            await this.outputRoots();\n        }\n        finally {\n            this.$streamedRootLimit$ = previousStreamedRootLimit;\n        }\n    }\n    async serializePatch(rootStart, rootIds, extraRootId, streamedRootLimit = rootStart) {\n        const previousStreamedRootLimit = this.$streamedRootLimit$;\n        this.$streamedRootLimit$ = streamedRootLimit;\n        this.$writer$.write(BRACKET_OPEN);\n        this.$serializationContext$.$serializedForwardRefCount$ = 0;\n        try {\n            this.$writer$.write(String(rootStart));\n            this.$writer$.write(COMMA);\n            this.$writer$.write(BRACKET_OPEN);\n            await this.outputSelectedRoots(rootIds);\n            this.$writer$.write(BRACKET_CLOSE);\n            const forwardRefs = this.getForwardRefsPayload();\n            this.$serializationContext$.$serializedForwardRefCount$ = forwardRefs?.length ?? 0;\n            if (forwardRefs || extraRootId !== undefined) {\n                this.$writer$.write(COMMA);\n                if (forwardRefs) {\n                    this.outputForwardRefsArray(forwardRefs);\n                }\n                else {\n                    this.$writer$.write('0');\n                }\n            }\n            if (extraRootId !== undefined) {\n                this.$writer$.write(COMMA);\n                if (typeof extraRootId === 'number') {\n                    this.writeRootRef(extraRootId);\n                }\n                else if (typeof extraRootId === 'string') {\n                    this.outputString(extraRootId);\n                }\n                else {\n                    this.$writer$.write(QUOTE);\n                    this.writeRootRefPath(extraRootId);\n                    this.$writer$.write(QUOTE);\n                }\n            }\n        }\n        finally {\n            this.$streamedRootLimit$ = previousStreamedRootLimit;\n        }\n        this.$writer$.write(BRACKET_CLOSE);\n    }\n    $setWriter$(writer) {\n        this.$writer$ = writer;\n    }\n    /** Helper to output an array */\n    outputArray(value, keepUndefined, writeFn) {\n        this.$writer$.write(BRACKET_OPEN);\n        let separator = false;\n        let length;\n        if (keepUndefined) {\n            length = value.length;\n        }\n        else {\n            length = value.length - 1;\n            while (length >= 0 && value[length] === undefined) {\n                length--;\n            }\n            length++;\n        }\n        for (let i = 0; i < length; i++) {\n            if (separator) {\n                this.$writer$.write(COMMA);\n            }\n            else {\n                separator = true;\n            }\n            writeFn(value[i], i);\n        }\n        this.$writer$.write(BRACKET_CLOSE);\n    }\n    /** Whether a string needs JSON escaping (quote, backslash, or control chars). */\n    stringNeedsJsonEscape$(str) {\n        for (let i = 0; i < str.length; i++) {\n            const c = str.charCodeAt(i);\n            if (c < 32 || c === 34 || c === 92) {\n                return true;\n            }\n        }\n        return false;\n    }\n    maybeNumericObjectKey$(key) {\n        if (key.length === 0 || key.length >= 8) {\n            return key;\n        }\n        let i = 0;\n        if (key.charCodeAt(0) === 45) {\n            if (key.length === 1) {\n                return key;\n            }\n            i = 1;\n        }\n        const first = key.charCodeAt(i);\n        if (first < 49 || first > 57) {\n            return key;\n        }\n        for (i++; i < key.length; i++) {\n            const c = key.charCodeAt(i);\n            if (c < 48 || c > 57) {\n                return key;\n            }\n        }\n        return Number(key);\n    }\n    outputString(value) {\n        const s = this.stringNeedsJsonEscape$(value) ? JSON.stringify(value) : QUOTE + value + QUOTE;\n        let angleBracketIdx = -1;\n        let lastIdx = 0;\n        while ((angleBracketIdx = s.indexOf(CLOSE_TAG, lastIdx)) !== -1) {\n            this.$writer$.write(s.slice(lastIdx, angleBracketIdx));\n            this.$writer$.write(ESCAPED_CLOSE_TAG);\n            lastIdx = angleBracketIdx + 2;\n        }\n        this.$writer$.write(lastIdx === 0 ? s : s.slice(lastIdx));\n    }\n    writeRootRef(id) {\n        this.$writer$.writeRootRef(id);\n    }\n    writeRootRefPath(path) {\n        this.$writer$.writeRootRefPath(path);\n    }\n    outputStringChunks(chunks) {\n        this.$writer$.write(QUOTE);\n        for (let i = 0; i < chunks.length; i++) {\n            const chunk = chunks[i];\n            if (typeof chunk === 'string') {\n                this.$writer$.write(chunk);\n            }\n            else if (typeof chunk === 'number') {\n                this.writeRootRef(chunk);\n            }\n            else {\n                this.writeRootRefPath(chunk.path);\n            }\n        }\n        this.$writer$.write(QUOTE);\n    }\n    /** Output a type,value pair. If the value is an array, it calls writeValue on each item. */\n    output(type, value, keepUndefined) {\n        if (type === 1 /* TypeIds.RootRef */) {\n            this.$writer$.write(type + COMMA);\n            if (typeof value === 'number') {\n                this.writeRootRef(value);\n            }\n            else if (typeof value === 'string') {\n                this.outputString(value);\n            }\n            else {\n                this.$writer$.write(QUOTE);\n                this.writeRootRefPath(value);\n                this.$writer$.write(QUOTE);\n            }\n        }\n        else if (type === 9 /* TypeIds.QRL */ && Array.isArray(value)) {\n            this.$writer$.write(type + COMMA);\n            this.outputStringChunks(value);\n        }\n        else if (typeof value === 'number') {\n            this.$writer$.write(type + COMMA + value);\n        }\n        else if (typeof value === 'string') {\n            this.$writer$.write(type + COMMA);\n            this.outputString(value);\n        }\n        else {\n            this.$writer$.write(type + COMMA);\n            this.outputArray(value, !!keepUndefined, (valueItem, idx) => {\n                this.writeValue(valueItem, idx);\n            });\n        }\n    }\n    getSeenRefOrOutput(value, index, keepWeak) {\n        let seen = this.$serializationContext$.getSeenRef(value);\n        const forwardRefIdx = !keepWeak && this.$s11nWeakRefs$.get(value);\n        if (!seen) {\n            if (keepWeak) {\n                // we're testing a weakref, so don't mark it as seen yet\n                return true;\n            }\n            // Maybe it's a weakref and that should count as seen\n            if (typeof forwardRefIdx === 'number') {\n                // Yes, no longer a weakref\n                seen = this.$serializationContext$.$addRoot$(value, true);\n            }\n            else {\n                return this.$serializationContext$.$markSeen$(value, this.$parent$, index);\n            }\n        }\n        else if (seen.$parent$ && this.isSeenInStreamedRoot(seen)) {\n            seen = this.$serializationContext$.$addDuplicateRoot$(value);\n        }\n        // Now that we saw it a second time, make sure it's a root\n        if (seen.$parent$) {\n            // Note, this means it was output before so we always need a backref\n            // Special case: we're a root so instead of adding a backref, we replace ourself\n            if (!this.$parent$) {\n                this.$serializationContext$.$promoteToRoot$(seen, value, index);\n                value = this.$serializationContext$.$roots$[index];\n            }\n            else {\n                this.$serializationContext$.$promoteToRoot$(seen, value);\n            }\n        }\n        // Check if there was a weakref to us\n        if (typeof forwardRefIdx === 'number') {\n            this.$forwardRefs$[forwardRefIdx] = seen.$index$;\n            this.$s11nWeakRefs$.delete(value);\n        }\n        // Now we know it's a root and we should output a RootRef\n        const rootIdx = value instanceof SerializationBackRef ? value.$path$ : seen.$index$;\n        // But make sure we do output ourselves\n        if (!this.$parent$ && rootIdx === index) {\n            return seen;\n        }\n        this.output(1 /* TypeIds.RootRef */, rootIdx);\n    }\n    isSeenInStreamedRoot(ref) {\n        while (ref.$parent$) {\n            ref = ref.$parent$;\n        }\n        return ref.$index$ < this.$streamedRootLimit$;\n    }\n    // First check for scalars, then do objects with seen checks\n    // Make sure to only get the SeenRef once, it's expensive\n    writeValue(value, index) {\n        if (fastSkipSerialize(value)) {\n            this.output(3 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n        }\n        else {\n            switch (typeof value) {\n                case 'undefined':\n                    this.output(3 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n                    break;\n                case 'boolean':\n                    this.output(3 /* TypeIds.Constant */, value ? 2 /* Constants.True */ : 3 /* Constants.False */);\n                    break;\n                case 'number':\n                    if (Number.isNaN(value)) {\n                        this.output(3 /* TypeIds.Constant */, 12 /* Constants.NaN */);\n                    }\n                    else if (!Number.isFinite(value)) {\n                        this.output(3 /* TypeIds.Constant */, value < 0 ? 14 /* Constants.NegativeInfinity */ : 13 /* Constants.PositiveInfinity */);\n                    }\n                    else if (value === Number.MAX_SAFE_INTEGER) {\n                        this.output(3 /* TypeIds.Constant */, 15 /* Constants.MaxSafeInt */);\n                    }\n                    else if (value === Number.MAX_SAFE_INTEGER - 1) {\n                        this.output(3 /* TypeIds.Constant */, 16 /* Constants.AlmostMaxSafeInt */);\n                    }\n                    else if (value === Number.MIN_SAFE_INTEGER) {\n                        this.output(3 /* TypeIds.Constant */, 17 /* Constants.MinSafeInt */);\n                    }\n                    else {\n                        this.output(0 /* TypeIds.Plain */, value);\n                    }\n                    break;\n                case 'string':\n                    if (value.length === 0) {\n                        this.output(3 /* TypeIds.Constant */, 4 /* Constants.EmptyString */);\n                    }\n                    else {\n                        // If the string is short, we output directly\n                        // Very short strings add overhead to tracking\n                        if (value.length < 4 || this.getSeenRefOrOutput(value, index)) {\n                            this.output(0 /* TypeIds.Plain */, value);\n                        }\n                    }\n                    break;\n                case 'bigint':\n                    if ((value < 10000 && value > -1000) || this.getSeenRefOrOutput(value, index)) {\n                        this.output(12 /* TypeIds.BigInt */, value.toString());\n                    }\n                    break;\n                case 'symbol':\n                    if (value === NEEDS_COMPUTATION) {\n                        this.output(3 /* TypeIds.Constant */, 7 /* Constants.NEEDS_COMPUTATION */);\n                    }\n                    else if (value === STORE_ALL_PROPS) {\n                        this.output(3 /* TypeIds.Constant */, 8 /* Constants.STORE_ALL_PROPS */);\n                    }\n                    else if (value === _UNINITIALIZED) {\n                        this.output(3 /* TypeIds.Constant */, 9 /* Constants.UNINITIALIZED */);\n                    }\n                    else if (value === explicitUndefined) {\n                        this.output(3 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n                    }\n                    break;\n                case 'function':\n                    if (value === Slot) {\n                        this.output(3 /* TypeIds.Constant */, 10 /* Constants.Slot */);\n                    }\n                    else if (value === Fragment) {\n                        this.output(3 /* TypeIds.Constant */, 11 /* Constants.Fragment */);\n                    }\n                    else if (isQrl(value)) {\n                        if (this.getSeenRefOrOutput(value, index)) {\n                            const [chunk, symbol, captures] = qrlToString(this.$serializationContext$, value, true);\n                            let data;\n                            if (chunk !== '') {\n                                // not a sync QRL, replace all parts with string references\n                                data = [\n                                    this.$serializationContext$.$addRoot$(chunk),\n                                    '#',\n                                    this.$serializationContext$.$addRoot$(symbol),\n                                ];\n                                if (captures) {\n                                    const captureIds = captures.split(' ');\n                                    data.push('#');\n                                    for (let i = 0; i < captureIds.length; i++) {\n                                        if (i > 0) {\n                                            data.push(' ');\n                                        }\n                                        data.push(Number(captureIds[i]));\n                                    }\n                                }\n                                // Since we map QRLs to strings, we need to keep track of this secondary mapping\n                                const qrlKey = data.join('');\n                                const existing = this.$qrlMap$.get(qrlKey);\n                                if (existing) {\n                                    // We encountered the same QRL again, make it a root\n                                    const ref = this.$serializationContext$.$addRoot$(existing);\n                                    this.output(1 /* TypeIds.RootRef */, ref);\n                                    return;\n                                }\n                                else {\n                                    this.$qrlMap$.set(qrlKey, value);\n                                }\n                            }\n                            else {\n                                // sync QRL\n                                data = Number(symbol);\n                            }\n                            this.output(9 /* TypeIds.QRL */, data);\n                        }\n                    }\n                    else if (isQwikComponent(value)) {\n                        const [qrl] = value[SERIALIZABLE_STATE];\n                        this.$serializationContext$.$renderSymbols$.add(qrl.$symbol$);\n                        this.output(29 /* TypeIds.Component */, [qrl]);\n                    }\n                    else {\n                        throw qError(34 /* QError.serializeErrorCannotSerializeFunction */, [value.toString()]);\n                    }\n                    break;\n                case 'object':\n                    if (value === EMPTY_ARRAY) {\n                        this.output(3 /* TypeIds.Constant */, 5 /* Constants.EMPTY_ARRAY */);\n                    }\n                    else if (value === EMPTY_OBJ) {\n                        this.output(3 /* TypeIds.Constant */, 6 /* Constants.EMPTY_OBJ */);\n                    }\n                    else if (value === null) {\n                        this.output(3 /* TypeIds.Constant */, 1 /* Constants.Null */);\n                    }\n                    else if (value instanceof SerializationBackRef) {\n                        this.output(1 /* TypeIds.RootRef */, value.$path$);\n                    }\n                    else {\n                        const newSeenRef = this.getSeenRefOrOutput(value, index);\n                        if (newSeenRef) {\n                            const oldParent = this.$parent$;\n                            this.$parent$ = newSeenRef;\n                            // separate function for readability\n                            this.writeObjectValue(value);\n                            this.$parent$ = oldParent;\n                        }\n                    }\n                    break;\n                default:\n                    throw qError(20 /* QError.serializeErrorUnknownType */, [typeof value]);\n            }\n        }\n    }\n    writeObjectValue(value) {\n        if (isPropsProxy(value)) {\n            const owner = value[_OWNER];\n            this.output(38 /* TypeIds.PropsProxy */, [\n                _serializationWeakRef(owner),\n                owner.varProps,\n                owner.constProps,\n                value[_PROPS_HANDLER].$effects$,\n            ]);\n        }\n        else if (value instanceof SubscriptionData) {\n            // TODO make everything optional or use two types\n            this.output(39 /* TypeIds.SubscriptionData */, [\n                value.data.$scopedStyleIdPrefix$,\n                value.data.$isConst$,\n            ]);\n        }\n        else if (value instanceof EffectSubscription) {\n            // TODO no data if [null, true]\n            this.output(40 /* TypeIds.EffectSubscription */, [value.consumer, value.property, value.data]);\n        }\n        else if (value instanceof SubscriptionPatch) {\n            this.output(41 /* TypeIds.SubscriptionPatch */, [value.rootId, value.subscriptions]);\n        }\n        else if (isStore(value)) {\n            const storeHandler = getStoreHandler(value);\n            const storeTarget = getStoreTarget(value);\n            const flags = storeHandler.$flags$;\n            const effects = storeHandler.$effects$;\n            // We need to retain the nested stores too, they won't be found from the target\n            const innerStores = [];\n            for (const prop in storeTarget) {\n                const propValue = storeTarget[prop];\n                const innerStore = this.$serializationContext$.$storeProxyMap$.get(propValue);\n                if (innerStore) {\n                    innerStores.push(innerStore);\n                }\n            }\n            const out = [storeTarget, flags, effects, ...innerStores];\n            while (out[out.length - 1] === undefined) {\n                out.pop();\n            }\n            this.output(35 /* TypeIds.Store */, out);\n        }\n        else if (isSerializerObj(value)) {\n            const result = value[SerializerSymbol](value);\n            if (isPromise(result)) {\n                const forwardRef = this.resolvePromise(result, (resolved, resolvedValue) => {\n                    return new PromiseResult(34 /* TypeIds.SerializerSignal */, resolved, resolvedValue, undefined, undefined);\n                });\n                this.output(2 /* TypeIds.ForwardRef */, forwardRef);\n            }\n            else {\n                // We replace ourselves with this value\n                const index = this.$parent$.$index$;\n                this.$parent$ = this.$parent$.$parent$;\n                this.writeValue(result, index);\n            }\n        }\n        else if (isObjectLiteral(value)) {\n            if (Array.isArray(value)) {\n                this.output(4 /* TypeIds.Array */, value);\n            }\n            else {\n                const out = [];\n                for (const key in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, key)) {\n                        const subVal = value[key];\n                        if (!fastSkipSerialize(subVal)) {\n                            out.push(this.maybeNumericObjectKey$(key), subVal);\n                        }\n                    }\n                }\n                this.output(5 /* TypeIds.Object */, out.length ? out : 0);\n            }\n        }\n        else if (this.$serializationContext$.$isDomRef$(value)) {\n            this.$serializationContext$.$markSsrNodeForSerialization$(value.$ssrNode$, 16 /* VNodeDataFlag.SERIALIZE */);\n            this.output(11 /* TypeIds.RefVNode */, value.$ssrNode$.id);\n        }\n        else if (value instanceof SignalImpl) {\n            if (value instanceof SerializerSignalImpl) {\n                const maybeValue = getCustomSerializerPromise(value, value.$untrackedValue$);\n                if (isPromise(maybeValue)) {\n                    const forwardRefId = this.resolvePromise(maybeValue, (resolved, resolvedValue) => {\n                        return new PromiseResult(34 /* TypeIds.SerializerSignal */, resolved, resolvedValue, value.$effects$, value.$computeQrl$);\n                    });\n                    this.output(2 /* TypeIds.ForwardRef */, forwardRefId);\n                }\n                else {\n                    this.output(34 /* TypeIds.SerializerSignal */, [value.$computeQrl$, value.$effects$, maybeValue]);\n                }\n                return;\n            }\n            if (value instanceof WrappedSignalImpl) {\n                this.output(31 /* TypeIds.WrappedSignal */, [\n                    ...serializeWrappingFn(this.$serializationContext$, value),\n                    value.$flags$,\n                    value.$hostElement$,\n                    ...(value.$effects$ || []),\n                ]);\n            }\n            else if (value instanceof ComputedSignalImpl) {\n                let v = value.$untrackedValue$;\n                const shouldAlwaysSerialize = value.$flags$ & 16 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_ALWAYS */;\n                const shouldNeverSerialize = value.$flags$ & 8 /* SerializationSignalFlags.SERIALIZATION_STRATEGY_NEVER */;\n                const isInvalid = value.$flags$ & 1 /* SignalFlags.INVALID */;\n                const isSkippable = fastSkipSerialize(value.$untrackedValue$);\n                const isAsync = value instanceof AsyncSignalImpl;\n                const expires = isAsync && value.$expires$ !== 0 ? value.$expires$ : undefined;\n                const concurrency = isAsync && value.$concurrency$ !== 1 ? value.$concurrency$ : undefined;\n                const timeout = isAsync && value.$timeoutMs$ !== 0 ? value.$timeoutMs$ : undefined;\n                // Send the flags but remove the serialization bits and default to 0 when undefined\n                const asyncFlags = (isAsync && value.$flags$ & ~24 /* SerializationSignalFlags.SERIALIZATION_ALL_STRATEGIES */) ||\n                    undefined;\n                if (isInvalid || isSkippable) {\n                    v = NEEDS_COMPUTATION;\n                }\n                else if (shouldAlwaysSerialize) {\n                    v = value.$untrackedValue$;\n                }\n                else if (shouldNeverSerialize) {\n                    v = NEEDS_COMPUTATION;\n                }\n                const out = [value.$computeQrl$, value.$effects$];\n                if (isAsync) {\n                    // After SSR, the signal is never loading, so no need to send it\n                    out.push(value.$loadingEffects$, value.$errorEffects$, value.$untrackedError$);\n                    out.push(asyncFlags || undefined);\n                }\n                if (v !== NEEDS_COMPUTATION ||\n                    expires !== undefined ||\n                    concurrency !== undefined ||\n                    timeout !== undefined) {\n                    /**\n                     * If value is undefined, we need to keep it in the output. If we don't do that, later\n                     * during resuming, the value will be set to symbol(invalid) with flag invalid, and thats\n                     * is incorrect.\n                     */\n                    out.push(v === undefined ? explicitUndefined : v);\n                }\n                if (isAsync) {\n                    out.push(expires);\n                    out.push(concurrency);\n                    out.push(timeout);\n                }\n                this.output(isAsync ? 33 /* TypeIds.AsyncSignal */ : 32 /* TypeIds.ComputedSignal */, out);\n            }\n            else {\n                const v = value.$untrackedValue$;\n                const out = [v === undefined ? explicitUndefined : v];\n                if (value.$effects$) {\n                    out.push(...value.$effects$);\n                }\n                this.output(30 /* TypeIds.Signal */, out);\n            }\n        }\n        else if (value instanceof URL) {\n            this.output(6 /* TypeIds.URL */, value.href);\n        }\n        else if (value instanceof Date) {\n            this.output(7 /* TypeIds.Date */, Number.isNaN(value.valueOf()) ? '' : value.valueOf());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.Duration) {\n            this.output(15 /* TypeIds.TemporalDuration */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.Instant) {\n            this.output(16 /* TypeIds.TemporalInstant */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.PlainDate) {\n            this.output(17 /* TypeIds.TemporalPlainDate */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.PlainDateTime) {\n            this.output(18 /* TypeIds.TemporalPlainDateTime */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.PlainMonthDay) {\n            this.output(19 /* TypeIds.TemporalPlainMonthDay */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.PlainTime) {\n            this.output(20 /* TypeIds.TemporalPlainTime */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.PlainYearMonth) {\n            this.output(21 /* TypeIds.TemporalPlainYearMonth */, value.toJSON());\n        }\n        else if (this.$hasTemporal$ && value instanceof Temporal.ZonedDateTime) {\n            this.output(22 /* TypeIds.TemporalZonedDateTime */, value.toJSON());\n        }\n        else if (value instanceof RegExp) {\n            this.output(8 /* TypeIds.Regex */, value.toString());\n        }\n        else if (value instanceof Error) {\n            const out = [value.message];\n            // flatten gives us the right output\n            out.push(...Object.entries(value).flat());\n            /// In production we don't want to leak the stack trace.\n            if (isDev) {\n                out.push('stack', value.stack);\n            }\n            this.output(23 /* TypeIds.Error */, out);\n        }\n        else if (this.$serializationContext$.$isSsrNode$(value)) {\n            const rootIndex = this.$serializationContext$.$addRoot$(value);\n            this.$serializationContext$.$setProp$(value, ELEMENT_ID, rootIndex);\n            // we need to output before the vnode overwrites its values\n            this.output(10 /* TypeIds.VNode */, value.id);\n            const vNodeData = value.vnodeData;\n            if (vNodeData) {\n                discoverValuesForVNodeData(vNodeData, (vNodeDataValue) => {\n                    this.$serializationContext$.$addRoot$(vNodeDataValue);\n                });\n                this.$serializationContext$.$markSsrNodeForSerialization$(value, 16 /* VNodeDataFlag.SERIALIZE */);\n            }\n            if (value.children) {\n                // Mark child vnode data for serialization (structure only, no value discovery needed)\n                const childrenLength = value.children.length;\n                for (let i = 0; i < childrenLength; i++) {\n                    const child = value.children[i];\n                    this.$serializationContext$.$markSsrNodeForSerialization$(child, 16 /* VNodeDataFlag.SERIALIZE */);\n                }\n            }\n        }\n        else if (typeof FormData !== 'undefined' && value instanceof FormData) {\n            // FormData is generally used only once so don't bother with references\n            const array = [];\n            for (const [k, v] of value.entries()) {\n                if (typeof v === 'string') {\n                    array.push(k, v);\n                }\n            }\n            this.output(36 /* TypeIds.FormData */, array);\n        }\n        else if (value instanceof URLSearchParams) {\n            this.output(13 /* TypeIds.URLSearchParams */, value.toString());\n        }\n        else if (value instanceof Set) {\n            this.output(25 /* TypeIds.Set */, [...value.values()]);\n        }\n        else if (value instanceof Map) {\n            const combined = [];\n            for (const [k, v] of value.entries()) {\n                combined.push(k, v);\n            }\n            this.output(26 /* TypeIds.Map */, combined);\n        }\n        else if (isJSXNode(value)) {\n            const out = [\n                value.type,\n                value.key,\n                value.varProps,\n                value.constProps,\n                value.children,\n                value.toSort || undefined,\n            ];\n            while (out[out.length - 1] === undefined) {\n                out.pop();\n            }\n            this.output(37 /* TypeIds.JSXNode */, out);\n        }\n        else if (value instanceof Task) {\n            const out = [value.$qrl$, value.$flags$, value.$index$, value.$el$, value.$state$];\n            while (out[out.length - 1] === undefined) {\n                out.pop();\n            }\n            this.output(28 /* TypeIds.Task */, out);\n        }\n        else if (isPromise(value)) {\n            const forwardRefId = this.resolvePromise(value, (resolved, resolvedValue) => {\n                return new PromiseResult(24 /* TypeIds.Promise */, resolved, resolvedValue);\n            });\n            this.output(2 /* TypeIds.ForwardRef */, forwardRefId);\n        }\n        else if (value instanceof PromiseResult) {\n            if (value.$type$ === 34 /* TypeIds.SerializerSignal */) {\n                if (value.$qrl$) {\n                    this.output(34 /* TypeIds.SerializerSignal */, [value.$qrl$, value.$effects$, value.$value$]);\n                }\n                else if (value.$resolved$) {\n                    // We replace ourselves with this value\n                    const index = this.$parent$.$index$;\n                    this.$parent$ = this.$parent$.$parent$;\n                    this.writeValue(value.$value$, index);\n                }\n                else {\n                    console.error(value.$value$);\n                    throw qError(33 /* QError.serializerSymbolRejectedPromise */);\n                }\n            }\n            else {\n                this.output(24 /* TypeIds.Promise */, [value.$resolved$, value.$value$]);\n            }\n        }\n        else if (value instanceof Uint8Array) {\n            let buf = '';\n            const length = value.length;\n            for (let i = 0; i < length; i++) {\n                buf += String.fromCharCode(value[i]);\n            }\n            const out = btoa(buf).replace(/=+$/, '');\n            this.output(27 /* TypeIds.Uint8Array */, out);\n        }\n        else if (value instanceof SerializationWeakRef) {\n            const obj = value.$obj$;\n            // This will return a fake SeenRef if it's not been seen before\n            if (this.getSeenRefOrOutput(obj, this.$parent$.$index$, true)) {\n                let forwardRefId = this.$s11nWeakRefs$.get(obj);\n                if (forwardRefId === undefined) {\n                    forwardRefId = this.$forwardRefsId$++;\n                    this.$s11nWeakRefs$.set(obj, forwardRefId);\n                    this.$forwardRefs$[forwardRefId] = -1;\n                }\n                this.output(2 /* TypeIds.ForwardRef */, this.getForwardRefId(forwardRefId));\n            }\n        }\n        else if (vnode_isVNode(value)) {\n            this.output(3 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n        }\n        else {\n            throw qError(20 /* QError.serializeErrorUnknownType */, [typeof value]);\n        }\n    }\n    resolvePromise(promise, classCreator) {\n        const forwardRefId = this.$forwardRefsId$++;\n        promise\n            .then((resolvedValue) => {\n            this.$promises$.delete(promise);\n            this.$forwardRefs$[forwardRefId] = this.$serializationContext$.$addRoot$(classCreator(true, resolvedValue));\n        })\n            .catch((err) => {\n            this.$promises$.delete(promise);\n            this.$forwardRefs$[forwardRefId] = this.$serializationContext$.$addRoot$(classCreator(false, err));\n        });\n        this.$promises$.add(promise);\n        return this.getForwardRefId(forwardRefId);\n    }\n    getForwardRefId(localId) {\n        return this.$serializationContext$.$forwardRefOffset$ + localId;\n    }\n    async outputPendingRoots() {\n        let rootsWritten = 0;\n        const { $roots$ } = this.$serializationContext$;\n        while (this.$rootIdx$ < $roots$.length || this.$promises$.size) {\n            let separator = rootsWritten > 0;\n            for (; this.$rootIdx$ < $roots$.length; this.$rootIdx$++) {\n                if (separator) {\n                    this.$writer$.write(COMMA);\n                }\n                else {\n                    separator = true;\n                }\n                this.writeValue($roots$[this.$rootIdx$], this.$rootIdx$);\n                rootsWritten++;\n            }\n            if (this.$promises$.size) {\n                try {\n                    await Promise.race(this.$promises$);\n                }\n                catch {\n                    // ignore rejections, they will be serialized as rejected promises\n                }\n            }\n        }\n        return rootsWritten;\n    }\n    async outputSelectedRoots(rootIds) {\n        let separator = false;\n        let i = 0;\n        while (i < rootIds.length || this.$promises$.size) {\n            if (i < rootIds.length) {\n                if (separator) {\n                    this.$writer$.write(COMMA);\n                }\n                else {\n                    separator = true;\n                }\n                const rootId = rootIds[i++];\n                this.writeValue(this.$serializationContext$.$roots$[rootId], rootId);\n                continue;\n            }\n            try {\n                await Promise.race(this.$promises$);\n            }\n            catch {\n                // ignore rejections, they will be serialized as rejected promises\n            }\n        }\n    }\n    getForwardRefsPayload() {\n        let lastIdx = this.$forwardRefs$.length - 1;\n        while (lastIdx >= 0 && this.$forwardRefs$[lastIdx] === -1) {\n            lastIdx--;\n        }\n        if (lastIdx < 0) {\n            return null;\n        }\n        return lastIdx === this.$forwardRefs$.length - 1\n            ? this.$forwardRefs$\n            : this.$forwardRefs$.slice(0, lastIdx + 1);\n    }\n    outputForwardRefsArray(forwardRefs) {\n        this.outputArray(forwardRefs, true, (value) => {\n            if (typeof value === 'string') {\n                this.outputString(value);\n            }\n            else if (Array.isArray(value)) {\n                this.$writer$.write(QUOTE);\n                this.writeRootRefPath(value);\n                this.$writer$.write(QUOTE);\n            }\n            else {\n                this.writeRootRef(value);\n            }\n        });\n    }\n    async outputRoots() {\n        this.$writer$.write(BRACKET_OPEN);\n        const rootsWritten = await this.outputPendingRoots();\n        const forwardRefs = this.getForwardRefsPayload();\n        this.$serializationContext$.$rootStateRootCount$ = this.$serializationContext$.$roots$.length;\n        this.$serializationContext$.$hasRootStateForwardRefs$ = !!forwardRefs;\n        const forwardRefCount = forwardRefs?.length ?? 0;\n        if (forwardRefs) {\n            if (rootsWritten > 0) {\n                this.$writer$.write(COMMA);\n            }\n            this.$writer$.write(14 /* TypeIds.ForwardRefs */ + COMMA);\n            this.outputForwardRefsArray(forwardRefs);\n        }\n        this.$writer$.write(BRACKET_CLOSE);\n        this.$serializationContext$.$serializedRootCount$ =\n            this.$serializationContext$.$roots$.length +\n                (this.$serializationContext$.$hasRootStateForwardRefs$ ? 1 : 0);\n        this.$serializationContext$.$serializedForwardRefCount$ = forwardRefCount;\n    }\n}\nexport class PromiseResult {\n    $type$;\n    $resolved$;\n    $value$;\n    $effects$;\n    $qrl$;\n    constructor($type$, $resolved$, $value$, $effects$ = undefined, $qrl$ = undefined) {\n        this.$type$ = $type$;\n        this.$resolved$ = $resolved$;\n        this.$value$ = $value$;\n        this.$effects$ = $effects$;\n        this.$qrl$ = $qrl$;\n    }\n}\nfunction getCustomSerializerPromise(signal, value) {\n    if (value === NEEDS_COMPUTATION) {\n        return value;\n    }\n    return maybeThen((signal.$computeQrl$.resolved || signal.$computeQrl$.resolve()), (arg) => {\n        let data;\n        if (typeof arg === 'function') {\n            arg = arg();\n        }\n        if (arg.serialize) {\n            data = arg.serialize(value);\n        }\n        else if (typeof value === 'object' && SerializerSymbol in value) {\n            data = value[SerializerSymbol](value);\n        }\n        if (data === undefined) {\n            data = NEEDS_COMPUTATION;\n        }\n        return data;\n    });\n}\nconst discoverValuesForVNodeData = (vnodeData, callback) => {\n    const length = vnodeData.length;\n    for (let i = 0; i < length; i++) {\n        const value = vnodeData[i];\n        if (isSsrAttrs(value)) {\n            for (const key in value) {\n                const attrValue = value[key];\n                if (attrValue == null ||\n                    typeof attrValue === 'string' ||\n                    (typeof attrValue === 'number' && key === ELEMENT_ID) ||\n                    (key === ELEMENT_PROPS && isObjectEmpty(attrValue))) {\n                    continue;\n                }\n                callback(attrValue);\n            }\n        }\n    }\n};\nconst isSsrAttrs = (value) => typeof value === 'object' && value !== null && !isObjectEmpty(value);\n/**\n * When serializing the object we need check if it is URL, RegExp, Map, Set, etc. This is time\n * consuming. So if we could know that this is a basic object literal we could skip the check, and\n * only run the checks for objects which are not object literals.\n *\n * So this function is here for performance to short circuit many checks later.\n *\n * @param obj\n */\nfunction isObjectLiteral(obj) {\n    // We are an object literal if:\n    // - we are a direct instance of object OR\n    // - we are an array\n    // In all other cases it is a subclass which requires more checks.\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype == null || prototype === Object.prototype || prototype === Array.prototype;\n}\nfunction serializeWrappingFn(serializationContext, value) {\n    // if value is an object then we need to wrap this in ()\n    if (value.$funcStr$ && value.$funcStr$[0] === '{') {\n        value.$funcStr$ = `(${value.$funcStr$})`;\n    }\n    const syncFnId = serializationContext.$addSyncFn$(value.$funcStr$, value.$args$.length, value.$func$);\n    return [syncFnId, value.$args$];\n}\nclass SerializationWeakRef {\n    $obj$;\n    constructor($obj$) {\n        this.$obj$ = $obj$;\n    }\n}\n/** @internal */\nexport const _serializationWeakRef = (obj) => new SerializationWeakRef(obj);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zZXJkZXMvc2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUdqQixlQUFlLEdBRWhCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFjLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQs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LFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDOUYsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQzFCLG9CQUEwQyxFQUMxQyxLQUE2QjtJQUU3Qix3REFBd0Q7SUFDeEQsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbEQsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUMvQyxLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUNuQixLQUFLLENBQUMsTUFBTSxDQUNiLENBQUM7SUFDRixPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQVUsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxvQkFBb0I7SUFDTDtJQUFuQixZQUFtQixLQUFjO1FBQWQsVUFBSyxHQUFMLEtBQUssQ0FBUztJQUFHLENBQUM7Q0FDdEM7QUFFRCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IFZOb2RlRGF0YUZsYWcgfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBWTm9kZURhdGEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvdm5vZGUtZGF0YSc7XG5pbXBvcnQgeyB2bm9kZV9pc1ZOb2RlIH0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLXV0aWxzJztcbmltcG9ydCB7IEFzeW5jU2lnbmFsSW1wbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9hc3luYy1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBDb21wdXRlZFNpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvY29tcHV0ZWQtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgU2VyaWFsaXplclNpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc2VyaWFsaXplci1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBTaWduYWxJbXBsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3NpZ25hbC1pbXBsJztcbmltcG9ydCB7IGdldFN0b3JlSGFuZGxlciwgZ2V0U3RvcmVUYXJnZXQsIGlzU3RvcmUgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc3RvcmUnO1xuaW1wb3J0IHsgV3JhcHBlZFNpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvd3JhcHBlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25EYXRhIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zdWJzY3JpcHRpb24tZGF0YSc7XG5pbXBvcnQge1xuICBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIE5FRURTX0NPTVBVVEFUSU9OLFxuICBTZXJpYWxpemF0aW9uU2lnbmFsRmxhZ3MsXG4gIFNpZ25hbEZsYWdzLFxuICBTVE9SRV9BTExfUFJPUFMsXG4gIHR5cGUgU2VyaWFsaXplckFyZyxcbn0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBpc1NlcmlhbGl6ZXJPYmogfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3V0aWxzJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHR5cGUgeyBTU1JJbnRlcm5hbFN0cmVhbVdyaXRlciwgU1NSV3JpdGVDaHVuayB9IGZyb20gJy4uLy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHsgaXNRd2lrQ29tcG9uZW50LCBTRVJJQUxJWkFCTEVfU1RBVEUgfSBmcm9tICcuLi9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IHFFcnJvciwgUUVycm9yIH0gZnJvbSAnLi4vZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgaXNKU1hOb2RlIH0gZnJvbSAnLi4vanN4L2pzeC1ub2RlJztcbmltcG9ydCB7IEZyYWdtZW50LCB0eXBlIFByb3BzIH0gZnJvbSAnLi4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGlzUHJvcHNQcm94eSB9IGZyb20gJy4uL2pzeC9wcm9wcy1wcm94eSc7XG5pbXBvcnQgeyBTbG90IH0gZnJvbSAnLi4vanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB0eXBlIHsgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGlzUXJsIH0gZnJvbSAnLi4vcXJsL3FybC11dGlscyc7XG5pbXBvcnQge1xuICBCUkFDS0VUX0NMT1NFLFxuICBCUkFDS0VUX09QRU4sXG4gIENMT1NFX1RBRyxcbiAgQ09NTUEsXG4gIEVTQ0FQRURfQ0xPU0VfVEFHLFxuICBRVU9URSxcbn0gZnJvbSAnLi4vc3NyLWNvbnN0JztcbmltcG9ydCB7IF9PV05FUiwgX1BST1BTX0hBTkRMRVIsIF9VTklOSVRJQUxJWkVEIH0gZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IEVNUFRZX0FSUkFZLCBFTVBUWV9PQkogfSBmcm9tICcuLi91dGlscy9mbHl3ZWlnaHQnO1xuaW1wb3J0IHsgRUxFTUVOVF9JRCwgRUxFTUVOVF9QUk9QUyB9IGZyb20gJy4uL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgaXNPYmplY3RFbXB0eSB9IGZyb20gJy4uL3V0aWxzL29iamVjdHMnO1xuaW1wb3J0IHsgaXNQcm9taXNlLCBtYXliZVRoZW4gfSBmcm9tICcuLi91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb25zdGFudHMsIGV4cGxpY2l0VW5kZWZpbmVkLCBUeXBlSWRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcXJsVG9TdHJpbmcgfSBmcm9tICcuL3FybC10by1zdHJpbmcnO1xuaW1wb3J0IHtcbiAgU2VyaWFsaXphdGlvbkJhY2tSZWYsXG4gIHR5cGUgU2VlblJlZixcbiAgdHlwZSBTZXJpYWxpemF0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uUGF0Y2ggfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1wYXRjaCc7XG5pbXBvcnQgeyBmYXN0U2tpcFNlcmlhbGl6ZSwgU2VyaWFsaXplclN5bWJvbCB9IGZyb20gJy4vdmVyaWZ5JztcblxuLyoqXG4gKiBGb3JtYXQ6XG4gKlxuICogLSBUaGlzIGVuY29kZXMgdGhlICRyb290cyQgYXJyYXkuXG4gKiAtIFRoZSBvdXRwdXQgaXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIEpTT04gdmFsdWVzLlxuICogLSBFdmVuIHZhbHVlcyBhcmUgYWx3YXlzIG51bWJlcnMsIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgdGhlIG5leHQgdmFsdWUuXG4gKiAtIE9kZCB2YWx1ZXMgYXJlIG51bWJlcnMsIHN0cmluZ3MgKEpTT04gc3RyaW5naWZpZWQgd2l0aCBgPC9gIGVzY2FwaW5nKSBvciBhcnJheXMgKHNhbWUgZm9ybWF0KS5cbiAqIC0gVGhlcmVmb3JlIHJvb3QgaW5kZXhlcyBuZWVkIHRvIGJlIGRvdWJsZWQgdG8gZ2V0IHRoZSBhY3R1YWwgaW5kZXguXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemVyIHtcbiAgcHJpdmF0ZSAkcm9vdElkeCQgPSAwO1xuICBwcml2YXRlICRmb3J3YXJkUmVmcyQ6IEFycmF5PG51bWJlciB8IHN0cmluZyB8IG51bWJlcltdPiA9IFtdO1xuICBwcml2YXRlICRmb3J3YXJkUmVmc0lkJCA9IDA7XG4gIHByaXZhdGUgJHByb21pc2VzJDogU2V0PFByb21pc2U8dW5rbm93bj4+ID0gbmV3IFNldCgpO1xuICBwcml2YXRlICRzMTFuV2Vha1JlZnMkID0gbmV3IE1hcDx1bmtub3duLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgJHBhcmVudCQ6IFNlZW5SZWYgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgJHFybE1hcCQgPSBuZXcgTWFwPHN0cmluZywgUVJMSW50ZXJuYWw+KCk7XG4gIHByaXZhdGUgJHN0cmVhbWVkUm9vdExpbWl0JCA9IDA7XG4gIHByaXZhdGUgJHdyaXRlciQ6IFNTUkludGVybmFsU3RyZWFtV3JpdGVyO1xuICAvKiogV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhpcyBhdCBydW50aW1lIGJlY2F1c2UgcG9seWZpbGxzIG1heSBub3QgYmUgbG9hZGVkIGEgbW9kdWxlIGxvYWQgdGltZSAqL1xuICBwcml2YXRlICRoYXNUZW1wb3JhbCQgPSB0eXBlb2YgVGVtcG9yYWwgIT09ICd1bmRlZmluZWQnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyAkc2VyaWFsaXphdGlvbkNvbnRleHQkOiBTZXJpYWxpemF0aW9uQ29udGV4dCkge1xuICAgIHRoaXMuJHdyaXRlciQgPSAkc2VyaWFsaXphdGlvbkNvbnRleHQkLiR3cml0ZXIkO1xuICB9XG5cbiAgYXN5bmMgc2VyaWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZXZpb3VzU3RyZWFtZWRSb290TGltaXQgPSB0aGlzLiRzdHJlYW1lZFJvb3RMaW1pdCQ7XG4gICAgdGhpcy4kc3RyZWFtZWRSb290TGltaXQkID0gMDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vdXRwdXRSb290cygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLiRzdHJlYW1lZFJvb3RMaW1pdCQgPSBwcmV2aW91c1N0cmVhbWVkUm9vdExpbWl0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlcmlhbGl6ZVBhdGNoKFxuICAgIHJvb3RTdGFydDogbnVtYmVyLFxuICAgIHJvb3RJZHM6IG51bWJlcltdLFxuICAgIGV4dHJhUm9vdElkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVtYmVyW10sXG4gICAgc3RyZWFtZWRSb290TGltaXQgPSByb290U3RhcnRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJldmlvdXNTdHJlYW1lZFJvb3RMaW1pdCA9IHRoaXMuJHN0cmVhbWVkUm9vdExpbWl0JDtcbiAgICB0aGlzLiRzdHJlYW1lZFJvb3RMaW1pdCQgPSBzdHJlYW1lZFJvb3RMaW1pdDtcbiAgICB0aGlzLiR3cml0ZXIkLndyaXRlKEJSQUNLRVRfT1BFTik7XG4gICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRzZXJpYWxpemVkRm9yd2FyZFJlZkNvdW50JCA9IDA7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoU3RyaW5nKHJvb3RTdGFydCkpO1xuICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShDT01NQSk7XG4gICAgICB0aGlzLiR3cml0ZXIkLndyaXRlKEJSQUNLRVRfT1BFTik7XG4gICAgICBhd2FpdCB0aGlzLm91dHB1dFNlbGVjdGVkUm9vdHMocm9vdElkcyk7XG4gICAgICB0aGlzLiR3cml0ZXIkLndyaXRlKEJSQUNLRVRfQ0xPU0UpO1xuICAgICAgY29uc3QgZm9yd2FyZFJlZnMgPSB0aGlzLmdldEZvcndhcmRSZWZzUGF5bG9hZCgpO1xuICAgICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRzZXJpYWxpemVkRm9yd2FyZFJlZkNvdW50JCA9IGZvcndhcmRSZWZzPy5sZW5ndGggPz8gMDtcbiAgICAgIGlmIChmb3J3YXJkUmVmcyB8fCBleHRyYVJvb3RJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoQ09NTUEpO1xuICAgICAgICBpZiAoZm9yd2FyZFJlZnMpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEZvcndhcmRSZWZzQXJyYXkoZm9yd2FyZFJlZnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoJzAnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dHJhUm9vdElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShDT01NQSk7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmFSb290SWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy53cml0ZVJvb3RSZWYoZXh0cmFSb290SWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHRyYVJvb3RJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dFN0cmluZyhleHRyYVJvb3RJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShRVU9URSk7XG4gICAgICAgICAgdGhpcy53cml0ZVJvb3RSZWZQYXRoKGV4dHJhUm9vdElkKTtcbiAgICAgICAgICB0aGlzLiR3cml0ZXIkLndyaXRlKFFVT1RFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLiRzdHJlYW1lZFJvb3RMaW1pdCQgPSBwcmV2aW91c1N0cmVhbWVkUm9vdExpbWl0O1xuICAgIH1cbiAgICB0aGlzLiR3cml0ZXIkLndyaXRlKEJSQUNLRVRfQ0xPU0UpO1xuICB9XG5cbiAgJHNldFdyaXRlciQod3JpdGVyOiBTU1JJbnRlcm5hbFN0cmVhbVdyaXRlcik6IHZvaWQge1xuICAgIHRoaXMuJHdyaXRlciQgPSB3cml0ZXI7XG4gIH1cblxuICAvKiogSGVscGVyIHRvIG91dHB1dCBhbiBhcnJheSAqL1xuICBwcml2YXRlIG91dHB1dEFycmF5KFxuICAgIHZhbHVlOiB1bmtub3duW10sXG4gICAga2VlcFVuZGVmaW5lZDogYm9vbGVhbixcbiAgICB3cml0ZUZuOiAodmFsdWU6IHVua25vd24sIGlkeDogbnVtYmVyKSA9PiB2b2lkXG4gICkge1xuICAgIHRoaXMuJHdyaXRlciQud3JpdGUoQlJBQ0tFVF9PUEVOKTtcbiAgICBsZXQgc2VwYXJhdG9yID0gZmFsc2U7XG4gICAgbGV0IGxlbmd0aDtcbiAgICBpZiAoa2VlcFVuZGVmaW5lZCkge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGxlbmd0aCA+PSAwICYmIHZhbHVlW2xlbmd0aF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZW5ndGgtLTtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCsrO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoQ09NTUEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHdyaXRlRm4odmFsdWVbaV0sIGkpO1xuICAgIH1cbiAgICB0aGlzLiR3cml0ZXIkLndyaXRlKEJSQUNLRVRfQ0xPU0UpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYSBzdHJpbmcgbmVlZHMgSlNPTiBlc2NhcGluZyAocXVvdGUsIGJhY2tzbGFzaCwgb3IgY29udHJvbCBjaGFycykuICovXG4gIHByaXZhdGUgc3RyaW5nTmVlZHNKc29uRXNjYXBlJChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoYyA8IDMyIHx8IGMgPT09IDM0IHx8IGMgPT09IDkyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG1heWJlTnVtZXJpY09iamVjdEtleSQoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIGlmIChrZXkubGVuZ3RoID09PSAwIHx8IGtleS5sZW5ndGggPj0gOCkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICBsZXQgaSA9IDA7XG4gICAgaWYgKGtleS5jaGFyQ29kZUF0KDApID09PSA0NSkge1xuICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICAgIGkgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0ID0ga2V5LmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGZpcnN0IDwgNDkgfHwgZmlyc3QgPiA1Nykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICBmb3IgKGkrKzsgaSA8IGtleS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IGtleS5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGMgPCA0OCB8fCBjID4gNTcpIHtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGtleSk7XG4gIH1cblxuICBwcml2YXRlIG91dHB1dFN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RyaW5nTmVlZHNKc29uRXNjYXBlJCh2YWx1ZSkgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiBRVU9URSArIHZhbHVlICsgUVVPVEU7XG4gICAgbGV0IGFuZ2xlQnJhY2tldElkeDogbnVtYmVyID0gLTE7XG4gICAgbGV0IGxhc3RJZHggPSAwO1xuICAgIHdoaWxlICgoYW5nbGVCcmFja2V0SWR4ID0gcy5pbmRleE9mKENMT1NFX1RBRywgbGFzdElkeCkpICE9PSAtMSkge1xuICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShzLnNsaWNlKGxhc3RJZHgsIGFuZ2xlQnJhY2tldElkeCkpO1xuICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShFU0NBUEVEX0NMT1NFX1RBRyk7XG4gICAgICBsYXN0SWR4ID0gYW5nbGVCcmFja2V0SWR4ICsgMjtcbiAgICB9XG4gICAgdGhpcy4kd3JpdGVyJC53cml0ZShsYXN0SWR4ID09PSAwID8gcyA6IHMuc2xpY2UobGFzdElkeCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVJvb3RSZWYoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuJHdyaXRlciQud3JpdGVSb290UmVmKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVSb290UmVmUGF0aChwYXRoOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuJHdyaXRlciQud3JpdGVSb290UmVmUGF0aChwYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3V0cHV0U3RyaW5nQ2h1bmtzKGNodW5rczogU1NSV3JpdGVDaHVua1tdKTogdm9pZCB7XG4gICAgdGhpcy4kd3JpdGVyJC53cml0ZShRVU9URSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShjaHVuayk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy53cml0ZVJvb3RSZWYoY2h1bmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53cml0ZVJvb3RSZWZQYXRoKGNodW5rLnBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiR3cml0ZXIkLndyaXRlKFFVT1RFKTtcbiAgfVxuXG4gIC8qKiBPdXRwdXQgYSB0eXBlLHZhbHVlIHBhaXIuIElmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSwgaXQgY2FsbHMgd3JpdGVWYWx1ZSBvbiBlYWNoIGl0ZW0uICovXG4gIHByaXZhdGUgb3V0cHV0KHR5cGU6IG51bWJlciwgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGFueVtdLCBrZWVwVW5kZWZpbmVkPzogYm9vbGVhbikge1xuICAgIGlmICh0eXBlID09PSBUeXBlSWRzLlJvb3RSZWYpIHtcbiAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUodHlwZSArIENPTU1BKTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRoaXMud3JpdGVSb290UmVmKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLm91dHB1dFN0cmluZyh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiR3cml0ZXIkLndyaXRlKFFVT1RFKTtcbiAgICAgICAgdGhpcy53cml0ZVJvb3RSZWZQYXRoKHZhbHVlIGFzIG51bWJlcltdKTtcbiAgICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShRVU9URSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUeXBlSWRzLlFSTCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZSh0eXBlICsgQ09NTUEpO1xuICAgICAgdGhpcy5vdXRwdXRTdHJpbmdDaHVua3ModmFsdWUgYXMgU1NSV3JpdGVDaHVua1tdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUodHlwZSArIENPTU1BICsgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZSh0eXBlICsgQ09NTUEpO1xuICAgICAgdGhpcy5vdXRwdXRTdHJpbmcodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiR3cml0ZXIkLndyaXRlKHR5cGUgKyBDT01NQSk7XG4gICAgICB0aGlzLm91dHB1dEFycmF5KHZhbHVlLCAhIWtlZXBVbmRlZmluZWQsICh2YWx1ZUl0ZW0sIGlkeCkgPT4ge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWVJdGVtLCBpZHgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWVuUmVmT3JPdXRwdXQoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBrZWVwV2Vhaz86IGJvb2xlYW5cbiAgKTogU2VlblJlZiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNlZW4gPSB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuZ2V0U2VlblJlZih2YWx1ZSk7XG5cbiAgICBjb25zdCBmb3J3YXJkUmVmSWR4ID0gIWtlZXBXZWFrICYmIHRoaXMuJHMxMW5XZWFrUmVmcyQuZ2V0KHZhbHVlKTtcblxuICAgIGlmICghc2Vlbikge1xuICAgICAgaWYgKGtlZXBXZWFrKSB7XG4gICAgICAgIC8vIHdlJ3JlIHRlc3RpbmcgYSB3ZWFrcmVmLCBzbyBkb24ndCBtYXJrIGl0IGFzIHNlZW4geWV0XG4gICAgICAgIHJldHVybiB0cnVlIGFzIHVua25vd24gYXMgU2VlblJlZjtcbiAgICAgIH1cbiAgICAgIC8vIE1heWJlIGl0J3MgYSB3ZWFrcmVmIGFuZCB0aGF0IHNob3VsZCBjb3VudCBhcyBzZWVuXG4gICAgICBpZiAodHlwZW9mIGZvcndhcmRSZWZJZHggPT09ICdudW1iZXInKSB7XG4gICAgICAgIC8vIFllcywgbm8gbG9uZ2VyIGEgd2Vha3JlZlxuICAgICAgICBzZWVuID0gdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRhZGRSb290JCh2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRtYXJrU2VlbiQodmFsdWUsIHRoaXMuJHBhcmVudCQsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNlZW4uJHBhcmVudCQgJiYgdGhpcy5pc1NlZW5JblN0cmVhbWVkUm9vdChzZWVuKSkge1xuICAgICAgc2VlbiA9IHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kYWRkRHVwbGljYXRlUm9vdCQodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIE5vdyB0aGF0IHdlIHNhdyBpdCBhIHNlY29uZCB0aW1lLCBtYWtlIHN1cmUgaXQncyBhIHJvb3RcbiAgICBpZiAoc2Vlbi4kcGFyZW50JCkge1xuICAgICAgLy8gTm90ZSwgdGhpcyBtZWFucyBpdCB3YXMgb3V0cHV0IGJlZm9yZSBzbyB3ZSBhbHdheXMgbmVlZCBhIGJhY2tyZWZcbiAgICAgIC8vIFNwZWNpYWwgY2FzZTogd2UncmUgYSByb290IHNvIGluc3RlYWQgb2YgYWRkaW5nIGEgYmFja3JlZiwgd2UgcmVwbGFjZSBvdXJzZWxmXG4gICAgICBpZiAoIXRoaXMuJHBhcmVudCQpIHtcbiAgICAgICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRwcm9tb3RlVG9Sb290JChzZWVuLCB2YWx1ZSwgaW5kZXgpO1xuICAgICAgICB2YWx1ZSA9IHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kcm9vdHMkW2luZGV4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kcHJvbW90ZVRvUm9vdCQoc2VlbiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHdlYWtyZWYgdG8gdXNcbiAgICBpZiAodHlwZW9mIGZvcndhcmRSZWZJZHggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLiRmb3J3YXJkUmVmcyRbZm9yd2FyZFJlZklkeF0gPSBzZWVuLiRpbmRleCQ7XG4gICAgICB0aGlzLiRzMTFuV2Vha1JlZnMkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgaXQncyBhIHJvb3QgYW5kIHdlIHNob3VsZCBvdXRwdXQgYSBSb290UmVmXG4gICAgY29uc3Qgcm9vdElkeCA9IHZhbHVlIGluc3RhbmNlb2YgU2VyaWFsaXphdGlvbkJhY2tSZWYgPyB2YWx1ZS4kcGF0aCQgOiBzZWVuLiRpbmRleCQ7XG5cbiAgICAvLyBCdXQgbWFrZSBzdXJlIHdlIGRvIG91dHB1dCBvdXJzZWx2ZXNcbiAgICBpZiAoIXRoaXMuJHBhcmVudCQgJiYgcm9vdElkeCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVybiBzZWVuO1xuICAgIH1cbiAgICB0aGlzLm91dHB1dChUeXBlSWRzLlJvb3RSZWYsIHJvb3RJZHgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlZW5JblN0cmVhbWVkUm9vdChyZWY6IFNlZW5SZWYpOiBib29sZWFuIHtcbiAgICB3aGlsZSAocmVmLiRwYXJlbnQkKSB7XG4gICAgICByZWYgPSByZWYuJHBhcmVudCQ7XG4gICAgfVxuICAgIHJldHVybiByZWYuJGluZGV4JCA8IHRoaXMuJHN0cmVhbWVkUm9vdExpbWl0JDtcbiAgfVxuXG4gIC8vIEZpcnN0IGNoZWNrIGZvciBzY2FsYXJzLCB0aGVuIGRvIG9iamVjdHMgd2l0aCBzZWVuIGNoZWNrc1xuICAvLyBNYWtlIHN1cmUgdG8gb25seSBnZXQgdGhlIFNlZW5SZWYgb25jZSwgaXQncyBleHBlbnNpdmVcbiAgcHJpdmF0ZSB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGZhc3RTa2lwU2VyaWFsaXplKHZhbHVlKSkge1xuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLlVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLlVuZGVmaW5lZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIHZhbHVlID8gQ29uc3RhbnRzLlRydWUgOiBDb25zdGFudHMuRmFsc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuTmFOKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChcbiAgICAgICAgICAgICAgVHlwZUlkcy5Db25zdGFudCxcbiAgICAgICAgICAgICAgdmFsdWUgPCAwID8gQ29uc3RhbnRzLk5lZ2F0aXZlSW5maW5pdHkgOiBDb25zdGFudHMuUG9zaXRpdmVJbmZpbml0eVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLk1heFNhZmVJbnQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLkFsbW9zdE1heFNhZmVJbnQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuTWluU2FmZUludCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuUGxhaW4sIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLkVtcHR5U3RyaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBzaG9ydCwgd2Ugb3V0cHV0IGRpcmVjdGx5XG4gICAgICAgICAgICAvLyBWZXJ5IHNob3J0IHN0cmluZ3MgYWRkIG92ZXJoZWFkIHRvIHRyYWNraW5nXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDwgNCB8fCB0aGlzLmdldFNlZW5SZWZPck91dHB1dCh2YWx1ZSwgaW5kZXgpKSB7XG4gICAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuUGxhaW4sIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgICAgaWYgKCh2YWx1ZSA8IDEwMDAwICYmIHZhbHVlID4gLTEwMDApIHx8IHRoaXMuZ2V0U2VlblJlZk9yT3V0cHV0KHZhbHVlLCBpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuQmlnSW50LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBORUVEU19DT01QVVRBVElPTikge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLk5FRURTX0NPTVBVVEFUSU9OKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTVE9SRV9BTExfUFJPUFMpIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5TVE9SRV9BTExfUFJPUFMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IF9VTklOSVRJQUxJWkVEKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuVU5JTklUSUFMSVpFRCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwbGljaXRVbmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5VbmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gU2xvdCkge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLlNsb3QpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IEZyYWdtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuRnJhZ21lbnQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRcmwodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRTZWVuUmVmT3JPdXRwdXQodmFsdWUsIGluZGV4KSkge1xuICAgICAgICAgICAgICBjb25zdCBbY2h1bmssIHN5bWJvbCwgY2FwdHVyZXNdID0gcXJsVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IGRhdGE6IHN0cmluZyB8IG51bWJlciB8IFNTUldyaXRlQ2h1bmtbXTtcbiAgICAgICAgICAgICAgaWYgKGNodW5rICE9PSAnJykge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIHN5bmMgUVJMLCByZXBsYWNlIGFsbCBwYXJ0cyB3aXRoIHN0cmluZyByZWZlcmVuY2VzXG4gICAgICAgICAgICAgICAgZGF0YSA9IFtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kYWRkUm9vdCQoY2h1bmspLFxuICAgICAgICAgICAgICAgICAgJyMnLFxuICAgICAgICAgICAgICAgICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRhZGRSb290JChzeW1ib2wpLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlSWRzID0gY2FwdHVyZXMuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICAgIGRhdGEucHVzaCgnIycpO1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYXB0dXJlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaCgnICcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChOdW1iZXIoY2FwdHVyZUlkc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBtYXAgUVJMcyB0byBzdHJpbmdzLCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBzZWNvbmRhcnkgbWFwcGluZ1xuICAgICAgICAgICAgICAgIGNvbnN0IHFybEtleSA9IGRhdGEuam9pbignJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLiRxcmxNYXAkLmdldChxcmxLZXkpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgdGhlIHNhbWUgUVJMIGFnYWluLCBtYWtlIGl0IGEgcm9vdFxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRhZGRSb290JChleGlzdGluZyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlJvb3RSZWYsIHJlZik7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJHFybE1hcCQuc2V0KHFybEtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzeW5jIFFSTFxuICAgICAgICAgICAgICAgIGRhdGEgPSBOdW1iZXIoc3ltYm9sKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuUVJMLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUXdpa0NvbXBvbmVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtxcmxdOiBbUVJMSW50ZXJuYWxdID0gKHZhbHVlIGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXTtcbiAgICAgICAgICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kcmVuZGVyU3ltYm9scyQuYWRkKHFybC4kc3ltYm9sJCk7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbXBvbmVudCwgW3FybF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnNlcmlhbGl6ZUVycm9yQ2Fubm90U2VyaWFsaXplRnVuY3Rpb24sIFt2YWx1ZS50b1N0cmluZygpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gRU1QVFlfQVJSQVkpIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5FTVBUWV9BUlJBWSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gRU1QVFlfT0JKKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuRU1QVFlfT0JKKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuTnVsbCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNlcmlhbGl6YXRpb25CYWNrUmVmKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlJvb3RSZWYsIHZhbHVlLiRwYXRoJCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlZW5SZWYgPSB0aGlzLmdldFNlZW5SZWZPck91dHB1dCh2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKG5ld1NlZW5SZWYpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2xkUGFyZW50ID0gdGhpcy4kcGFyZW50JDtcbiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50JCA9IG5ld1NlZW5SZWY7XG4gICAgICAgICAgICAgIC8vIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciByZWFkYWJpbGl0eVxuICAgICAgICAgICAgICB0aGlzLndyaXRlT2JqZWN0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICB0aGlzLiRwYXJlbnQkID0gb2xkUGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnNlcmlhbGl6ZUVycm9yVW5rbm93blR5cGUsIFt0eXBlb2YgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdyaXRlT2JqZWN0VmFsdWUodmFsdWU6IHt9KSB7XG4gICAgaWYgKGlzUHJvcHNQcm94eSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG93bmVyID0gdmFsdWVbX09XTkVSXTtcbiAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuUHJvcHNQcm94eSwgW1xuICAgICAgICBfc2VyaWFsaXphdGlvbldlYWtSZWYob3duZXIpLFxuICAgICAgICBvd25lci52YXJQcm9wcyxcbiAgICAgICAgb3duZXIuY29uc3RQcm9wcyxcbiAgICAgICAgdmFsdWVbX1BST1BTX0hBTkRMRVJdLiRlZmZlY3RzJCxcbiAgICAgIF0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb25EYXRhKSB7XG4gICAgICAvLyBUT0RPIG1ha2UgZXZlcnl0aGluZyBvcHRpb25hbCBvciB1c2UgdHdvIHR5cGVzXG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlN1YnNjcmlwdGlvbkRhdGEsIFtcbiAgICAgICAgdmFsdWUuZGF0YS4kc2NvcGVkU3R5bGVJZFByZWZpeCQsXG4gICAgICAgIHZhbHVlLmRhdGEuJGlzQ29uc3QkLFxuICAgICAgXSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVmZmVjdFN1YnNjcmlwdGlvbikge1xuICAgICAgLy8gVE9ETyBubyBkYXRhIGlmIFtudWxsLCB0cnVlXVxuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5FZmZlY3RTdWJzY3JpcHRpb24sIFt2YWx1ZS5jb25zdW1lciwgdmFsdWUucHJvcGVydHksIHZhbHVlLmRhdGFdKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uUGF0Y2gpIHtcbiAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuU3Vic2NyaXB0aW9uUGF0Y2gsIFt2YWx1ZS5yb290SWQsIHZhbHVlLnN1YnNjcmlwdGlvbnNdKTtcbiAgICB9IGVsc2UgaWYgKGlzU3RvcmUodmFsdWUpKSB7XG4gICAgICBjb25zdCBzdG9yZUhhbmRsZXIgPSBnZXRTdG9yZUhhbmRsZXIodmFsdWUpITtcbiAgICAgIGNvbnN0IHN0b3JlVGFyZ2V0ID0gZ2V0U3RvcmVUYXJnZXQodmFsdWUpO1xuICAgICAgY29uc3QgZmxhZ3MgPSBzdG9yZUhhbmRsZXIuJGZsYWdzJDtcbiAgICAgIGNvbnN0IGVmZmVjdHMgPSBzdG9yZUhhbmRsZXIuJGVmZmVjdHMkO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIHJldGFpbiB0aGUgbmVzdGVkIHN0b3JlcyB0b28sIHRoZXkgd29uJ3QgYmUgZm91bmQgZnJvbSB0aGUgdGFyZ2V0XG4gICAgICBjb25zdCBpbm5lclN0b3JlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHN0b3JlVGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHByb3BWYWx1ZSA9IChzdG9yZVRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgICAgICBjb25zdCBpbm5lclN0b3JlID0gdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRzdG9yZVByb3h5TWFwJC5nZXQocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGlubmVyU3RvcmUpIHtcbiAgICAgICAgICBpbm5lclN0b3Jlcy5wdXNoKGlubmVyU3RvcmUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dCA9IFtzdG9yZVRhcmdldCwgZmxhZ3MsIGVmZmVjdHMsIC4uLmlubmVyU3RvcmVzXTtcbiAgICAgIHdoaWxlIChvdXRbb3V0Lmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0LnBvcCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5TdG9yZSwgb3V0KTtcbiAgICB9IGVsc2UgaWYgKGlzU2VyaWFsaXplck9iaih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlW1NlcmlhbGl6ZXJTeW1ib2xdKHZhbHVlKTtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICBjb25zdCBmb3J3YXJkUmVmID0gdGhpcy5yZXNvbHZlUHJvbWlzZShyZXN1bHQsIChyZXNvbHZlZCwgcmVzb2x2ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZVJlc3VsdChcbiAgICAgICAgICAgIFR5cGVJZHMuU2VyaWFsaXplclNpZ25hbCxcbiAgICAgICAgICAgIHJlc29sdmVkLFxuICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkZvcndhcmRSZWYsIGZvcndhcmRSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgcmVwbGFjZSBvdXJzZWx2ZXMgd2l0aCB0aGlzIHZhbHVlXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4kcGFyZW50JCEuJGluZGV4JDtcbiAgICAgICAgdGhpcy4kcGFyZW50JCA9IHRoaXMuJHBhcmVudCQhLiRwYXJlbnQkITtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHJlc3VsdCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RMaXRlcmFsKHZhbHVlKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuQXJyYXksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG91dDogYW55W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJWYWwgPSAodmFsdWUgYXMgYW55KVtrZXldO1xuICAgICAgICAgICAgaWYgKCFmYXN0U2tpcFNlcmlhbGl6ZShzdWJWYWwpKSB7XG4gICAgICAgICAgICAgIG91dC5wdXNoKHRoaXMubWF5YmVOdW1lcmljT2JqZWN0S2V5JChrZXkpLCBzdWJWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLk9iamVjdCwgb3V0Lmxlbmd0aCA/IG91dCA6IDApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRpc0RvbVJlZiQodmFsdWUpKSB7XG4gICAgICB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJG1hcmtTc3JOb2RlRm9yU2VyaWFsaXphdGlvbiQoXG4gICAgICAgIHZhbHVlLiRzc3JOb2RlJCxcbiAgICAgICAgVk5vZGVEYXRhRmxhZy5TRVJJQUxJWkVcbiAgICAgICk7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlJlZlZOb2RlLCB2YWx1ZS4kc3NyTm9kZSQuaWQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTaWduYWxJbXBsKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXJpYWxpemVyU2lnbmFsSW1wbCkge1xuICAgICAgICBjb25zdCBtYXliZVZhbHVlID0gZ2V0Q3VzdG9tU2VyaWFsaXplclByb21pc2UodmFsdWUsIHZhbHVlLiR1bnRyYWNrZWRWYWx1ZSQpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKG1heWJlVmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgZm9yd2FyZFJlZklkID0gdGhpcy5yZXNvbHZlUHJvbWlzZShtYXliZVZhbHVlLCAocmVzb2x2ZWQsIHJlc29sdmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZVJlc3VsdChcbiAgICAgICAgICAgICAgVHlwZUlkcy5TZXJpYWxpemVyU2lnbmFsLFxuICAgICAgICAgICAgICByZXNvbHZlZCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgdmFsdWUuJGVmZmVjdHMkLFxuICAgICAgICAgICAgICB2YWx1ZS4kY29tcHV0ZVFybCRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Gb3J3YXJkUmVmLCBmb3J3YXJkUmVmSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuU2VyaWFsaXplclNpZ25hbCwgW3ZhbHVlLiRjb21wdXRlUXJsJCwgdmFsdWUuJGVmZmVjdHMkLCBtYXliZVZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsSW1wbCkge1xuICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLldyYXBwZWRTaWduYWwsIFtcbiAgICAgICAgICAuLi5zZXJpYWxpemVXcmFwcGluZ0ZuKHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JCwgdmFsdWUpLFxuICAgICAgICAgIHZhbHVlLiRmbGFncyQsXG4gICAgICAgICAgdmFsdWUuJGhvc3RFbGVtZW50JCxcbiAgICAgICAgICAuLi4odmFsdWUuJGVmZmVjdHMkIHx8IFtdKSxcbiAgICAgICAgXSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29tcHV0ZWRTaWduYWxJbXBsKSB7XG4gICAgICAgIGxldCB2ID0gdmFsdWUuJHVudHJhY2tlZFZhbHVlJDtcbiAgICAgICAgY29uc3Qgc2hvdWxkQWx3YXlzU2VyaWFsaXplID1cbiAgICAgICAgICB2YWx1ZS4kZmxhZ3MkICYgU2VyaWFsaXphdGlvblNpZ25hbEZsYWdzLlNFUklBTElaQVRJT05fU1RSQVRFR1lfQUxXQVlTO1xuICAgICAgICBjb25zdCBzaG91bGROZXZlclNlcmlhbGl6ZSA9XG4gICAgICAgICAgdmFsdWUuJGZsYWdzJCAmIFNlcmlhbGl6YXRpb25TaWduYWxGbGFncy5TRVJJQUxJWkFUSU9OX1NUUkFURUdZX05FVkVSO1xuICAgICAgICBjb25zdCBpc0ludmFsaWQgPSB2YWx1ZS4kZmxhZ3MkICYgU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICAgICAgY29uc3QgaXNTa2lwcGFibGUgPSBmYXN0U2tpcFNlcmlhbGl6ZSh2YWx1ZS4kdW50cmFja2VkVmFsdWUkKTtcbiAgICAgICAgY29uc3QgaXNBc3luYyA9IHZhbHVlIGluc3RhbmNlb2YgQXN5bmNTaWduYWxJbXBsO1xuICAgICAgICBjb25zdCBleHBpcmVzID0gaXNBc3luYyAmJiB2YWx1ZS4kZXhwaXJlcyQgIT09IDAgPyB2YWx1ZS4kZXhwaXJlcyQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNvbmN1cnJlbmN5ID0gaXNBc3luYyAmJiB2YWx1ZS4kY29uY3VycmVuY3kkICE9PSAxID8gdmFsdWUuJGNvbmN1cnJlbmN5JCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IGlzQXN5bmMgJiYgdmFsdWUuJHRpbWVvdXRNcyQgIT09IDAgPyB2YWx1ZS4kdGltZW91dE1zJCA6IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBTZW5kIHRoZSBmbGFncyBidXQgcmVtb3ZlIHRoZSBzZXJpYWxpemF0aW9uIGJpdHMgYW5kIGRlZmF1bHQgdG8gMCB3aGVuIHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBhc3luY0ZsYWdzID1cbiAgICAgICAgICAoaXNBc3luYyAmJiB2YWx1ZS4kZmxhZ3MkICYgflNlcmlhbGl6YXRpb25TaWduYWxGbGFncy5TRVJJQUxJWkFUSU9OX0FMTF9TVFJBVEVHSUVTKSB8fFxuICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoaXNJbnZhbGlkIHx8IGlzU2tpcHBhYmxlKSB7XG4gICAgICAgICAgdiA9IE5FRURTX0NPTVBVVEFUSU9OO1xuICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEFsd2F5c1NlcmlhbGl6ZSkge1xuICAgICAgICAgIHYgPSB2YWx1ZS4kdW50cmFja2VkVmFsdWUkO1xuICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE5ldmVyU2VyaWFsaXplKSB7XG4gICAgICAgICAgdiA9IE5FRURTX0NPTVBVVEFUSU9OO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0OiB1bmtub3duW10gPSBbdmFsdWUuJGNvbXB1dGVRcmwkLCB2YWx1ZS4kZWZmZWN0cyRdO1xuICAgICAgICBpZiAoaXNBc3luYykge1xuICAgICAgICAgIC8vIEFmdGVyIFNTUiwgdGhlIHNpZ25hbCBpcyBuZXZlciBsb2FkaW5nLCBzbyBubyBuZWVkIHRvIHNlbmQgaXRcbiAgICAgICAgICBvdXQucHVzaCh2YWx1ZS4kbG9hZGluZ0VmZmVjdHMkLCB2YWx1ZS4kZXJyb3JFZmZlY3RzJCwgdmFsdWUuJHVudHJhY2tlZEVycm9yJCk7XG4gICAgICAgICAgb3V0LnB1c2goYXN5bmNGbGFncyB8fCB1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHYgIT09IE5FRURTX0NPTVBVVEFUSU9OIHx8XG4gICAgICAgICAgZXhwaXJlcyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgY29uY3VycmVuY3kgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIHRpbWVvdXQgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBJZiB2YWx1ZSBpcyB1bmRlZmluZWQsIHdlIG5lZWQgdG8ga2VlcCBpdCBpbiB0aGUgb3V0cHV0LiBJZiB3ZSBkb24ndCBkbyB0aGF0LCBsYXRlclxuICAgICAgICAgICAqIGR1cmluZyByZXN1bWluZywgdGhlIHZhbHVlIHdpbGwgYmUgc2V0IHRvIHN5bWJvbChpbnZhbGlkKSB3aXRoIGZsYWcgaW52YWxpZCwgYW5kIHRoYXRzXG4gICAgICAgICAgICogaXMgaW5jb3JyZWN0LlxuICAgICAgICAgICAqL1xuICAgICAgICAgIG91dC5wdXNoKHYgPT09IHVuZGVmaW5lZCA/IGV4cGxpY2l0VW5kZWZpbmVkIDogdik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICBvdXQucHVzaChleHBpcmVzKTtcbiAgICAgICAgICBvdXQucHVzaChjb25jdXJyZW5jeSk7XG4gICAgICAgICAgb3V0LnB1c2godGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRwdXQoaXNBc3luYyA/IFR5cGVJZHMuQXN5bmNTaWduYWwgOiBUeXBlSWRzLkNvbXB1dGVkU2lnbmFsLCBvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdiA9IHZhbHVlLiR1bnRyYWNrZWRWYWx1ZSQ7XG4gICAgICAgIGNvbnN0IG91dCA9IFt2ID09PSB1bmRlZmluZWQgPyBleHBsaWNpdFVuZGVmaW5lZCA6IHZdO1xuICAgICAgICBpZiAodmFsdWUuJGVmZmVjdHMkKSB7XG4gICAgICAgICAgb3V0LnB1c2goLi4udmFsdWUuJGVmZmVjdHMkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlNpZ25hbCwgb3V0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlVSTCwgdmFsdWUuaHJlZik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuRGF0ZSwgTnVtYmVyLmlzTmFOKHZhbHVlLnZhbHVlT2YoKSkgPyAnJyA6IHZhbHVlLnZhbHVlT2YoKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiRoYXNUZW1wb3JhbCQgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZW1wb3JhbC5EdXJhdGlvbikge1xuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5UZW1wb3JhbER1cmF0aW9uLCB2YWx1ZS50b0pTT04oKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiRoYXNUZW1wb3JhbCQgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZW1wb3JhbC5JbnN0YW50KSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlRlbXBvcmFsSW5zdGFudCwgdmFsdWUudG9KU09OKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kaGFzVGVtcG9yYWwkICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuUGxhaW5EYXRlKSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlRlbXBvcmFsUGxhaW5EYXRlLCB2YWx1ZS50b0pTT04oKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiRoYXNUZW1wb3JhbCQgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lKSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlRlbXBvcmFsUGxhaW5EYXRlVGltZSwgdmFsdWUudG9KU09OKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kaGFzVGVtcG9yYWwkICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuUGxhaW5Nb250aERheSkge1xuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5UZW1wb3JhbFBsYWluTW9udGhEYXksIHZhbHVlLnRvSlNPTigpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuJGhhc1RlbXBvcmFsJCAmJiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBvcmFsLlBsYWluVGltZSkge1xuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5UZW1wb3JhbFBsYWluVGltZSwgdmFsdWUudG9KU09OKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kaGFzVGVtcG9yYWwkICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGgpIHtcbiAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuVGVtcG9yYWxQbGFpblllYXJNb250aCwgdmFsdWUudG9KU09OKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kaGFzVGVtcG9yYWwkICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuWm9uZWREYXRlVGltZSkge1xuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5UZW1wb3JhbFpvbmVkRGF0ZVRpbWUsIHZhbHVlLnRvSlNPTigpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlJlZ2V4LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IG91dDogYW55W10gPSBbdmFsdWUubWVzc2FnZV07XG4gICAgICAvLyBmbGF0dGVuIGdpdmVzIHVzIHRoZSByaWdodCBvdXRwdXRcbiAgICAgIG91dC5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHZhbHVlKS5mbGF0KCkpO1xuICAgICAgLy8vIEluIHByb2R1Y3Rpb24gd2UgZG9uJ3Qgd2FudCB0byBsZWFrIHRoZSBzdGFjayB0cmFjZS5cbiAgICAgIGlmIChpc0Rldikge1xuICAgICAgICBvdXQucHVzaCgnc3RhY2snLCB2YWx1ZS5zdGFjayk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkVycm9yLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRpc1Nzck5vZGUkKHZhbHVlKSkge1xuICAgICAgY29uc3Qgcm9vdEluZGV4ID0gdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRhZGRSb290JCh2YWx1ZSk7XG4gICAgICB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJHNldFByb3AkKHZhbHVlLCBFTEVNRU5UX0lELCByb290SW5kZXgpO1xuICAgICAgLy8gd2UgbmVlZCB0byBvdXRwdXQgYmVmb3JlIHRoZSB2bm9kZSBvdmVyd3JpdGVzIGl0cyB2YWx1ZXNcbiAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuVk5vZGUsIHZhbHVlLmlkKTtcbiAgICAgIGNvbnN0IHZOb2RlRGF0YSA9IHZhbHVlLnZub2RlRGF0YTtcbiAgICAgIGlmICh2Tm9kZURhdGEpIHtcbiAgICAgICAgZGlzY292ZXJWYWx1ZXNGb3JWTm9kZURhdGEodk5vZGVEYXRhLCAodk5vZGVEYXRhVmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJGFkZFJvb3QkKHZOb2RlRGF0YVZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kbWFya1Nzck5vZGVGb3JTZXJpYWxpemF0aW9uJCh2YWx1ZSwgVk5vZGVEYXRhRmxhZy5TRVJJQUxJWkUpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLmNoaWxkcmVuKSB7XG4gICAgICAgIC8vIE1hcmsgY2hpbGQgdm5vZGUgZGF0YSBmb3Igc2VyaWFsaXphdGlvbiAoc3RydWN0dXJlIG9ubHksIG5vIHZhbHVlIGRpc2NvdmVyeSBuZWVkZWQpXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuTGVuZ3RoID0gdmFsdWUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IHZhbHVlLmNoaWxkcmVuW2ldO1xuICAgICAgICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kbWFya1Nzck5vZGVGb3JTZXJpYWxpemF0aW9uJChjaGlsZCwgVk5vZGVEYXRhRmxhZy5TRVJJQUxJWkUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgIC8vIEZvcm1EYXRhIGlzIGdlbmVyYWxseSB1c2VkIG9ubHkgb25jZSBzbyBkb24ndCBib3RoZXIgd2l0aCByZWZlcmVuY2VzXG4gICAgICBjb25zdCBhcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChrLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Gb3JtRGF0YSwgYXJyYXkpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgIHRoaXMub3V0cHV0KFR5cGVJZHMuVVJMU2VhcmNoUGFyYW1zLCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlNldCwgWy4uLnZhbHVlLnZhbHVlcygpXSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgY29uc3QgY29tYmluZWQgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICBjb21iaW5lZC5wdXNoKGssIHYpO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5NYXAsIGNvbWJpbmVkKTtcbiAgICB9IGVsc2UgaWYgKGlzSlNYTm9kZSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG91dCA9IFtcbiAgICAgICAgdmFsdWUudHlwZSxcbiAgICAgICAgdmFsdWUua2V5LFxuICAgICAgICB2YWx1ZS52YXJQcm9wcyxcbiAgICAgICAgdmFsdWUuY29uc3RQcm9wcyxcbiAgICAgICAgdmFsdWUuY2hpbGRyZW4sXG4gICAgICAgIHZhbHVlLnRvU29ydCB8fCB1bmRlZmluZWQsXG4gICAgICBdO1xuICAgICAgd2hpbGUgKG91dFtvdXQubGVuZ3RoIC0gMV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvdXQucG9wKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkpTWE5vZGUsIG91dCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRhc2spIHtcbiAgICAgIGNvbnN0IG91dDogdW5rbm93bltdID0gW3ZhbHVlLiRxcmwkLCB2YWx1ZS4kZmxhZ3MkLCB2YWx1ZS4kaW5kZXgkLCB2YWx1ZS4kZWwkLCB2YWx1ZS4kc3RhdGUkXTtcbiAgICAgIHdoaWxlIChvdXRbb3V0Lmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0LnBvcCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5UYXNrLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHZhbHVlKSkge1xuICAgICAgY29uc3QgZm9yd2FyZFJlZklkID0gdGhpcy5yZXNvbHZlUHJvbWlzZSh2YWx1ZSwgKHJlc29sdmVkLCByZXNvbHZlZFZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZVJlc3VsdChUeXBlSWRzLlByb21pc2UsIHJlc29sdmVkLCByZXNvbHZlZFZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Gb3J3YXJkUmVmLCBmb3J3YXJkUmVmSWQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlUmVzdWx0KSB7XG4gICAgICBpZiAodmFsdWUuJHR5cGUkID09PSBUeXBlSWRzLlNlcmlhbGl6ZXJTaWduYWwpIHtcbiAgICAgICAgaWYgKHZhbHVlLiRxcmwkKSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5TZXJpYWxpemVyU2lnbmFsLCBbdmFsdWUuJHFybCQsIHZhbHVlLiRlZmZlY3RzJCwgdmFsdWUuJHZhbHVlJF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLiRyZXNvbHZlZCQpIHtcbiAgICAgICAgICAvLyBXZSByZXBsYWNlIG91cnNlbHZlcyB3aXRoIHRoaXMgdmFsdWVcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuJHBhcmVudCQhLiRpbmRleCQ7XG4gICAgICAgICAgdGhpcy4kcGFyZW50JCA9IHRoaXMuJHBhcmVudCQhLiRwYXJlbnQkITtcbiAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUuJHZhbHVlJCwgaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IodmFsdWUuJHZhbHVlJCk7XG4gICAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVyU3ltYm9sUmVqZWN0ZWRQcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Qcm9taXNlLCBbdmFsdWUuJHJlc29sdmVkJCwgdmFsdWUuJHZhbHVlJF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBsZXQgYnVmID0gJyc7XG4gICAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ1ZiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlW2ldKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG91dCA9IGJ0b2EoYnVmKS5yZXBsYWNlKC89KyQvLCAnJyk7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLlVpbnQ4QXJyYXksIG91dCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNlcmlhbGl6YXRpb25XZWFrUmVmKSB7XG4gICAgICBjb25zdCBvYmogPSB2YWx1ZS4kb2JqJDtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gYSBmYWtlIFNlZW5SZWYgaWYgaXQncyBub3QgYmVlbiBzZWVuIGJlZm9yZVxuICAgICAgaWYgKHRoaXMuZ2V0U2VlblJlZk9yT3V0cHV0KG9iaiwgdGhpcy4kcGFyZW50JCEuJGluZGV4JCwgdHJ1ZSkpIHtcbiAgICAgICAgbGV0IGZvcndhcmRSZWZJZCA9IHRoaXMuJHMxMW5XZWFrUmVmcyQuZ2V0KG9iaik7XG4gICAgICAgIGlmIChmb3J3YXJkUmVmSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvcndhcmRSZWZJZCA9IHRoaXMuJGZvcndhcmRSZWZzSWQkKys7XG4gICAgICAgICAgdGhpcy4kczExbldlYWtSZWZzJC5zZXQob2JqLCBmb3J3YXJkUmVmSWQpO1xuICAgICAgICAgIHRoaXMuJGZvcndhcmRSZWZzJFtmb3J3YXJkUmVmSWRdID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRwdXQoVHlwZUlkcy5Gb3J3YXJkUmVmLCB0aGlzLmdldEZvcndhcmRSZWZJZChmb3J3YXJkUmVmSWQpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlX2lzVk5vZGUodmFsdWUpKSB7XG4gICAgICB0aGlzLm91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuVW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVFcnJvclVua25vd25UeXBlLCBbdHlwZW9mIHZhbHVlXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUHJvbWlzZShcbiAgICBwcm9taXNlOiBQcm9taXNlPHVua25vd24+LFxuICAgIGNsYXNzQ3JlYXRvcjogKGRpZFJlc29sdmU6IGJvb2xlYW4sIHJlc29sdmVkVmFsdWU6IHVua25vd24pID0+IFByb21pc2VSZXN1bHRcbiAgKSB7XG4gICAgY29uc3QgZm9yd2FyZFJlZklkID0gdGhpcy4kZm9yd2FyZFJlZnNJZCQrKztcbiAgICBwcm9taXNlXG4gICAgICAudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLiRwcm9taXNlcyQuZGVsZXRlKHByb21pc2UpO1xuICAgICAgICB0aGlzLiRmb3J3YXJkUmVmcyRbZm9yd2FyZFJlZklkXSA9IHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kYWRkUm9vdCQoXG4gICAgICAgICAgY2xhc3NDcmVhdG9yKHRydWUsIHJlc29sdmVkVmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy4kcHJvbWlzZXMkLmRlbGV0ZShwcm9taXNlKTtcbiAgICAgICAgdGhpcy4kZm9yd2FyZFJlZnMkW2ZvcndhcmRSZWZJZF0gPSB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJGFkZFJvb3QkKFxuICAgICAgICAgIGNsYXNzQ3JlYXRvcihmYWxzZSwgZXJyKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiRwcm9taXNlcyQuYWRkKHByb21pc2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9yd2FyZFJlZklkKGZvcndhcmRSZWZJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcndhcmRSZWZJZChsb2NhbElkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJGZvcndhcmRSZWZPZmZzZXQkICsgbG9jYWxJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb3V0cHV0UGVuZGluZ1Jvb3RzKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IHJvb3RzV3JpdHRlbiA9IDA7XG4gICAgY29uc3QgeyAkcm9vdHMkIH0gPSB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQ7XG4gICAgd2hpbGUgKHRoaXMuJHJvb3RJZHgkIDwgJHJvb3RzJC5sZW5ndGggfHwgdGhpcy4kcHJvbWlzZXMkLnNpemUpIHtcbiAgICAgIGxldCBzZXBhcmF0b3IgPSByb290c1dyaXR0ZW4gPiAwO1xuICAgICAgZm9yICg7IHRoaXMuJHJvb3RJZHgkIDwgJHJvb3RzJC5sZW5ndGg7IHRoaXMuJHJvb3RJZHgkKyspIHtcbiAgICAgICAgaWYgKHNlcGFyYXRvcikge1xuICAgICAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoQ09NTUEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcGFyYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKCRyb290cyRbdGhpcy4kcm9vdElkeCRdLCB0aGlzLiRyb290SWR4JCk7XG4gICAgICAgIHJvb3RzV3JpdHRlbisrO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4kcHJvbWlzZXMkLnNpemUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UodGhpcy4kcHJvbWlzZXMkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gaWdub3JlIHJlamVjdGlvbnMsIHRoZXkgd2lsbCBiZSBzZXJpYWxpemVkIGFzIHJlamVjdGVkIHByb21pc2VzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvb3RzV3JpdHRlbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb3V0cHV0U2VsZWN0ZWRSb290cyhyb290SWRzOiBudW1iZXJbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBzZXBhcmF0b3IgPSBmYWxzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCByb290SWRzLmxlbmd0aCB8fCB0aGlzLiRwcm9taXNlcyQuc2l6ZSkge1xuICAgICAgaWYgKGkgPCByb290SWRzLmxlbmd0aCkge1xuICAgICAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShDT01NQSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290SWQgPSByb290SWRzW2krK107XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJHJvb3RzJFtyb290SWRdLCByb290SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKHRoaXMuJHByb21pc2VzJCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIHJlamVjdGlvbnMsIHRoZXkgd2lsbCBiZSBzZXJpYWxpemVkIGFzIHJlamVjdGVkIHByb21pc2VzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3J3YXJkUmVmc1BheWxvYWQoKTogQXJyYXk8bnVtYmVyIHwgc3RyaW5nIHwgbnVtYmVyW10+IHwgbnVsbCB7XG4gICAgbGV0IGxhc3RJZHggPSB0aGlzLiRmb3J3YXJkUmVmcyQubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAobGFzdElkeCA+PSAwICYmIHRoaXMuJGZvcndhcmRSZWZzJFtsYXN0SWR4XSA9PT0gLTEpIHtcbiAgICAgIGxhc3RJZHgtLTtcbiAgICB9XG4gICAgaWYgKGxhc3RJZHggPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3RJZHggPT09IHRoaXMuJGZvcndhcmRSZWZzJC5sZW5ndGggLSAxXG4gICAgICA/IHRoaXMuJGZvcndhcmRSZWZzJFxuICAgICAgOiB0aGlzLiRmb3J3YXJkUmVmcyQuc2xpY2UoMCwgbGFzdElkeCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRGb3J3YXJkUmVmc0FycmF5KGZvcndhcmRSZWZzOiBBcnJheTxudW1iZXIgfCBzdHJpbmcgfCBudW1iZXJbXT4pOiB2b2lkIHtcbiAgICB0aGlzLm91dHB1dEFycmF5KGZvcndhcmRSZWZzLCB0cnVlLCAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMub3V0cHV0U3RyaW5nKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy4kd3JpdGVyJC53cml0ZShRVU9URSk7XG4gICAgICAgIHRoaXMud3JpdGVSb290UmVmUGF0aCh2YWx1ZSBhcyBudW1iZXJbXSk7XG4gICAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoUVVPVEUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53cml0ZVJvb3RSZWYodmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb3V0cHV0Um9vdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy4kd3JpdGVyJC53cml0ZShCUkFDS0VUX09QRU4pO1xuICAgIGNvbnN0IHJvb3RzV3JpdHRlbiA9IGF3YWl0IHRoaXMub3V0cHV0UGVuZGluZ1Jvb3RzKCk7XG5cbiAgICBjb25zdCBmb3J3YXJkUmVmcyA9IHRoaXMuZ2V0Rm9yd2FyZFJlZnNQYXlsb2FkKCk7XG4gICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRyb290U3RhdGVSb290Q291bnQkID0gdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRyb290cyQubGVuZ3RoO1xuICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kaGFzUm9vdFN0YXRlRm9yd2FyZFJlZnMkID0gISFmb3J3YXJkUmVmcztcbiAgICBjb25zdCBmb3J3YXJkUmVmQ291bnQgPSBmb3J3YXJkUmVmcz8ubGVuZ3RoID8/IDA7XG4gICAgaWYgKGZvcndhcmRSZWZzKSB7XG4gICAgICBpZiAocm9vdHNXcml0dGVuID4gMCkge1xuICAgICAgICB0aGlzLiR3cml0ZXIkLndyaXRlKENPTU1BKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJHdyaXRlciQud3JpdGUoVHlwZUlkcy5Gb3J3YXJkUmVmcyArIENPTU1BKTtcbiAgICAgIHRoaXMub3V0cHV0Rm9yd2FyZFJlZnNBcnJheShmb3J3YXJkUmVmcyk7XG4gICAgfVxuXG4gICAgdGhpcy4kd3JpdGVyJC53cml0ZShCUkFDS0VUX0NMT1NFKTtcbiAgICB0aGlzLiRzZXJpYWxpemF0aW9uQ29udGV4dCQuJHNlcmlhbGl6ZWRSb290Q291bnQkID1cbiAgICAgIHRoaXMuJHNlcmlhbGl6YXRpb25Db250ZXh0JC4kcm9vdHMkLmxlbmd0aCArXG4gICAgICAodGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRoYXNSb290U3RhdGVGb3J3YXJkUmVmcyQgPyAxIDogMCk7XG4gICAgdGhpcy4kc2VyaWFsaXphdGlvbkNvbnRleHQkLiRzZXJpYWxpemVkRm9yd2FyZFJlZkNvdW50JCA9IGZvcndhcmRSZWZDb3VudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvbWlzZVJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyAkdHlwZSQ6IG51bWJlcixcbiAgICBwdWJsaWMgJHJlc29sdmVkJDogYm9vbGVhbixcbiAgICBwdWJsaWMgJHZhbHVlJDogdW5rbm93bixcbiAgICBwdWJsaWMgJGVmZmVjdHMkOlxuICAgICAgfCBNYXA8c3RyaW5nIHwgc3ltYm9sLCBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPj5cbiAgICAgIHwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj5cbiAgICAgIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHB1YmxpYyAkcXJsJDogUVJMSW50ZXJuYWwgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKSB7fVxufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tU2VyaWFsaXplclByb21pc2U8VCwgUz4oc2lnbmFsOiBTZXJpYWxpemVyU2lnbmFsSW1wbDxULCBTPiwgdmFsdWU6IGFueSkge1xuICBpZiAodmFsdWUgPT09IE5FRURTX0NPTVBVVEFUSU9OKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBtYXliZVRoZW4oXG4gICAgKHNpZ25hbC4kY29tcHV0ZVFybCQucmVzb2x2ZWQgfHwgc2lnbmFsLiRjb21wdXRlUXJsJC5yZXNvbHZlKCkpIGFzIGFueSBhcyBTZXJpYWxpemVyQXJnPFxuICAgICAgdW5rbm93bixcbiAgICAgIHVua25vd25cbiAgICA+LFxuICAgIChhcmcpID0+IHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXJnID0gYXJnKCk7XG4gICAgICB9XG4gICAgICBpZiAoYXJnLnNlcmlhbGl6ZSkge1xuICAgICAgICBkYXRhID0gKGFyZyBhcyBhbnkpLnNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgU2VyaWFsaXplclN5bWJvbCBpbiB2YWx1ZSkge1xuICAgICAgICBkYXRhID0gKHZhbHVlIGFzIGFueSlbU2VyaWFsaXplclN5bWJvbF0odmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRhID0gTkVFRFNfQ09NUFVUQVRJT047XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICk7XG59XG5cbmNvbnN0IGRpc2NvdmVyVmFsdWVzRm9yVk5vZGVEYXRhID0gKHZub2RlRGF0YTogVk5vZGVEYXRhLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHZub2RlRGF0YS5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZSA9IHZub2RlRGF0YVtpXTtcbiAgICBpZiAoaXNTc3JBdHRycyh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhdHRyVmFsdWUgPT0gbnVsbCB8fFxuICAgICAgICAgIHR5cGVvZiBhdHRyVmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgKHR5cGVvZiBhdHRyVmFsdWUgPT09ICdudW1iZXInICYmIGtleSA9PT0gRUxFTUVOVF9JRCkgfHxcbiAgICAgICAgICAoa2V5ID09PSBFTEVNRU5UX1BST1BTICYmIGlzT2JqZWN0RW1wdHkoYXR0clZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soYXR0clZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGlzU3NyQXR0cnMgPSAodmFsdWU6IG51bWJlciB8IFByb3BzKTogdmFsdWUgaXMgUHJvcHMgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhaXNPYmplY3RFbXB0eSh2YWx1ZSk7XG5cbi8qKlxuICogV2hlbiBzZXJpYWxpemluZyB0aGUgb2JqZWN0IHdlIG5lZWQgY2hlY2sgaWYgaXQgaXMgVVJMLCBSZWdFeHAsIE1hcCwgU2V0LCBldGMuIFRoaXMgaXMgdGltZVxuICogY29uc3VtaW5nLiBTbyBpZiB3ZSBjb3VsZCBrbm93IHRoYXQgdGhpcyBpcyBhIGJhc2ljIG9iamVjdCBsaXRlcmFsIHdlIGNvdWxkIHNraXAgdGhlIGNoZWNrLCBhbmRcbiAqIG9ubHkgcnVuIHRoZSBjaGVja3MgZm9yIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBvYmplY3QgbGl0ZXJhbHMuXG4gKlxuICogU28gdGhpcyBmdW5jdGlvbiBpcyBoZXJlIGZvciBwZXJmb3JtYW5jZSB0byBzaG9ydCBjaXJjdWl0IG1hbnkgY2hlY2tzIGxhdGVyLlxuICpcbiAqIEBwYXJhbSBvYmpcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaXRlcmFsKG9iajogdW5rbm93bik6IG9iaiBpcyBvYmplY3Qge1xuICAvLyBXZSBhcmUgYW4gb2JqZWN0IGxpdGVyYWwgaWY6XG4gIC8vIC0gd2UgYXJlIGEgZGlyZWN0IGluc3RhbmNlIG9mIG9iamVjdCBPUlxuICAvLyAtIHdlIGFyZSBhbiBhcnJheVxuICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMgaXQgaXMgYSBzdWJjbGFzcyB3aGljaCByZXF1aXJlcyBtb3JlIGNoZWNrcy5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIHJldHVybiBwcm90b3R5cGUgPT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG90eXBlID09PSBBcnJheS5wcm90b3R5cGU7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVdyYXBwaW5nRm4oXG4gIHNlcmlhbGl6YXRpb25Db250ZXh0OiBTZXJpYWxpemF0aW9uQ29udGV4dCxcbiAgdmFsdWU6IFdyYXBwZWRTaWduYWxJbXBsPGFueT5cbikge1xuICAvLyBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhlbiB3ZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiAoKVxuICBpZiAodmFsdWUuJGZ1bmNTdHIkICYmIHZhbHVlLiRmdW5jU3RyJFswXSA9PT0gJ3snKSB7XG4gICAgdmFsdWUuJGZ1bmNTdHIkID0gYCgke3ZhbHVlLiRmdW5jU3RyJH0pYDtcbiAgfVxuICBjb25zdCBzeW5jRm5JZCA9IHNlcmlhbGl6YXRpb25Db250ZXh0LiRhZGRTeW5jRm4kKFxuICAgIHZhbHVlLiRmdW5jU3RyJCxcbiAgICB2YWx1ZS4kYXJncyQubGVuZ3RoLFxuICAgIHZhbHVlLiRmdW5jJFxuICApO1xuICByZXR1cm4gW3N5bmNGbklkLCB2YWx1ZS4kYXJncyRdIGFzIGNvbnN0O1xufVxuXG5jbGFzcyBTZXJpYWxpemF0aW9uV2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyAkb2JqJDogdW5rbm93bikge31cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9zZXJpYWxpemF0aW9uV2Vha1JlZiA9IChvYmo6IHVua25vd24pID0+IG5ldyBTZXJpYWxpemF0aW9uV2Vha1JlZihvYmopO1xuIl19","import { createStringStreamWriter } from '../../ssr/stream-writer';\nimport { Serializer } from './serialize';\nexport let isDomRef = (obj) => false;\n/**\n * A back reference to a previously serialized object. Before deserialization, all backrefs are\n * swapped with their original locations.\n */\nexport class SerializationBackRef {\n    $path$;\n    constructor(\n    /** The path from root to the original object */\n    $path$) {\n        this.$path$ = $path$;\n    }\n}\nclass SerializationContextImpl {\n    NodeConstructor;\n    DomRefConstructor;\n    $symbolToChunkResolver$;\n    $setProp$;\n    $storeProxyMap$;\n    $writer$;\n    $seenObjsMap$ = new Map();\n    $syncFnMap$ = new Map();\n    $syncFnOffset$ = 0;\n    $syncFns$ = [];\n    $roots$ = [];\n    $rootObjs$ = [];\n    $onAddRoot$;\n    $forwardRefOffset$ = 0;\n    $serializedRootCount$ = 0;\n    $serializedForwardRefCount$ = 0;\n    $rootStateRootCount$ = 0;\n    $hasRootStateForwardRefs$ = false;\n    $eagerResume$ = new Set();\n    $eventQrls$ = new Set();\n    $eventNames$ = new Set();\n    $renderSymbols$ = new Set();\n    $serializer$;\n    $markSsrNodeForSerialization$ = (node, flags) => {\n        node.vnodeData[0] |= flags;\n    };\n    constructor(\n    /**\n     * Node constructor, for instanceof checks.\n     *\n     * A node constructor can be null. For example on the client we can't serialize DOM nodes as\n     * server will not know what to do with them.\n     */\n    NodeConstructor, \n    /** DomRef constructor, for instanceof checks. */\n    DomRefConstructor, $symbolToChunkResolver$, $setProp$, $storeProxyMap$, $writer$) {\n        this.NodeConstructor = NodeConstructor;\n        this.DomRefConstructor = DomRefConstructor;\n        this.$symbolToChunkResolver$ = $symbolToChunkResolver$;\n        this.$setProp$ = $setProp$;\n        this.$storeProxyMap$ = $storeProxyMap$;\n        this.$writer$ = $writer$;\n        this.$serializer$ = new Serializer(this);\n    }\n    async $serialize$() {\n        await this.$serializer$.serialize();\n    }\n    async $serializePatch$(rootStart, rootIds, extraRootId, streamedRootLimit) {\n        await this.$serializer$.serializePatch(rootStart, rootIds, extraRootId, streamedRootLimit);\n    }\n    $setWriter$(writer) {\n        this.$writer$ = writer;\n        this.$serializer$.$setWriter$(writer);\n    }\n    getSeenRef(obj) {\n        return this.$seenObjsMap$.get(obj);\n    }\n    $markSeen$(obj, parent, index) {\n        const ref = { $index$: index, $parent$: parent };\n        this.$seenObjsMap$.set(obj, ref);\n        return ref;\n    }\n    /**\n     * Returns a path representing the path from roots through all parents to the object. Format: [3,\n     * 2, 0] where each number is the index within its parent, from root to leaf.\n     */\n    $getObjectPath$(ref) {\n        // Traverse up through parent references to build a path\n        const path = [];\n        while (ref.$parent$) {\n            path.unshift(ref.$index$);\n            ref = ref.$parent$;\n        }\n        // Now we are at root, but it could be a backref\n        path.unshift(ref.$index$);\n        return path;\n    }\n    $promoteToRoot$(ref, obj, index) {\n        const path = this.$getObjectPath$(ref);\n        const isNewRoot = index === undefined;\n        if (index === undefined) {\n            index = this.$roots$.length;\n        }\n        this.$roots$[index] = new SerializationBackRef(path);\n        if (isNewRoot) {\n            this.$rootObjs$[index] = obj;\n        }\n        ref.$parent$ = null;\n        ref.$index$ = index;\n        if (isNewRoot) {\n            this.$onAddRoot$?.(index, this.$roots$[index], obj);\n        }\n    }\n    $addRoot$(obj, returnRef = false) {\n        let seen = this.$seenObjsMap$.get(obj);\n        let index;\n        if (!seen) {\n            index = this.$roots$.length;\n            seen = {\n                $index$: index,\n                // TODO benchmark with and without $parent$\n                // $parent$: undefined\n            };\n            this.$seenObjsMap$.set(obj, seen);\n            this.$roots$.push(obj);\n            this.$rootObjs$.push(obj);\n            this.$onAddRoot$?.(index, obj, obj);\n        }\n        else {\n            if (seen.$parent$) {\n                this.$promoteToRoot$(seen, obj);\n            }\n            index = seen.$index$;\n        }\n        return returnRef ? seen : index;\n    }\n    $addDuplicateRoot$(obj) {\n        const index = this.$roots$.length;\n        const ref = { $index$: index };\n        this.$seenObjsMap$.set(obj, ref);\n        this.$roots$.push(obj);\n        this.$rootObjs$.push(obj);\n        this.$onAddRoot$?.(index, obj, obj);\n        return ref;\n    }\n    $commitRoot$(root, obj) {\n        const index = this.$roots$.length;\n        const ref = { $index$: index };\n        this.$seenObjsMap$.set(obj, ref);\n        this.$roots$.push(root);\n        this.$rootObjs$.push(obj);\n        return index;\n    }\n    $isSsrNode$(obj) {\n        return this.NodeConstructor ? obj instanceof this.NodeConstructor : false;\n    }\n    $isDomRef$(obj) {\n        return this.DomRefConstructor ? obj instanceof this.DomRefConstructor : false;\n    }\n    $hasRootId$(obj) {\n        const id = this.$seenObjsMap$.get(obj);\n        return id && (id.$parent$ ? undefined : id.$index$);\n    }\n    $addSyncFn$(funcStr, argCount, fn) {\n        const isFullFn = funcStr == null;\n        if (isFullFn) {\n            funcStr = fn.serialized || fn.toString();\n        }\n        let id = this.$syncFnMap$.get(funcStr);\n        if (id === undefined) {\n            id = this.$syncFnOffset$ + this.$syncFns$.length;\n            this.$syncFnMap$.set(funcStr, id);\n            if (isFullFn) {\n                this.$syncFns$.push(funcStr);\n            }\n            else {\n                let code = '(';\n                for (let i = 0; i < argCount; i++) {\n                    code += (i == 0 ? 'p' : ',p') + i;\n                }\n                this.$syncFns$.push((code += ')=>' + funcStr));\n            }\n        }\n        return id;\n    }\n    $setSyncFnOffset$(offset, existingFns) {\n        this.$syncFnOffset$ = offset;\n        if (existingFns) {\n            this.$syncFnMap$.clear();\n            for (let i = 0; i < existingFns.length; i++) {\n                this.$syncFnMap$.set(existingFns[i], i);\n            }\n        }\n    }\n}\nexport const createSerializationContext = (\n/**\n * Node constructor, for instanceof checks.\n *\n * A node constructor can be null. For example on the client we can't serialize DOM nodes as\n * server will not know what to do with them.\n */\nNodeConstructor, \n/** DomRef constructor, for instanceof checks. */\nDomRefConstructor, symbolToChunkResolver, setProp, storeProxyMap, writer) => {\n    if (!writer) {\n        const buffer = [];\n        writer = Object.assign(createStringStreamWriter((text) => {\n            buffer.push(text);\n        }), {\n            toString: () => buffer.join(''),\n        });\n    }\n    isDomRef = (DomRefConstructor ? (obj) => obj instanceof DomRefConstructor : (() => false));\n    return new SerializationContextImpl(NodeConstructor, DomRefConstructor, symbolToChunkResolver, setProp, storeProxyMap, writer);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zZXJkZXMvc2VyaWFsaXphdGlvbi1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSW5FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFZekMsTUFBTSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsR0FBWSxFQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDO0FBRTdEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFHdEI7SUFGVDtJQUNFLGdEQUFnRDtJQUN6QyxNQUFnQjtRQUFoQixXQUFNLEdBQU4sTUFBTSxDQUFVO0lBQ3RCLENBQUM7Q0FDTDtBQTZFRCxNQUFNLHdCQUF3QjtJQTZCbkI7SUFJQTtJQUdBO0lBQ0E7SUFDQTtJQUNBO0lBdENELGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUM1QyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDeEMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNwQixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sR0FBYyxFQUFFLENBQUM7SUFDeEIsVUFBVSxHQUFjLEVBQUUsQ0FBQztJQUMzQixXQUFXLENBQWtFO0lBQzdFLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUN2QixxQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFDMUIsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztJQUN6Qix5QkFBeUIsR0FBRyxLQUFLLENBQUM7SUFDbEMsYUFBYSxHQUFpQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3hDLFdBQVcsR0FBYSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLFlBQVksR0FB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TSxDQUNwQix3QkFBd0IsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEVBQ0Y7WUFDRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDaEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsR0FBRyxDQUNULGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBUyxDQUNwRCxDQUFDO0lBRXJDLE9BQU8sSUFBSSx3QkFBd0IsQ0FDakMsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLGFBQWEsRUFDYixNQUFNLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSVNzck5vZGUsIFNTUkludGVybmFsU3RyZWFtV3JpdGVyLCBTeW1ib2xUb0NodW5rUmVzb2x2ZXIgfSBmcm9tICcuLi8uLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVN0cmluZ1N0cmVhbVdyaXRlciB9IGZyb20gJy4uLy4uL3Nzci9zdHJlYW0td3JpdGVyJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBPYmpUb1Byb3h5TWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZSc7XG5cbnR5cGUgRG9tUmVmID0ge1xuICAkc3NyTm9kZSQ6IElTc3JOb2RlO1xufTtcblxuLyoqIFN0b3JlcyB0aGUgbG9jYXRpb24gb2YgYW4gb2JqZWN0LiBJZiBubyBwYXJlbnQsIGl0J3MgYSByb290LiAqL1xuZXhwb3J0IHR5cGUgU2VlblJlZiA9IHtcbiAgJGluZGV4JDogbnVtYmVyO1xuICAkcGFyZW50JD86IFNlZW5SZWYgfCBudWxsO1xufTtcblxuZXhwb3J0IGxldCBpc0RvbVJlZiA9IChvYmo6IHVua25vd24pOiBvYmogaXMgRG9tUmVmID0+IGZhbHNlO1xuXG4vKipcbiAqIEEgYmFjayByZWZlcmVuY2UgdG8gYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgb2JqZWN0LiBCZWZvcmUgZGVzZXJpYWxpemF0aW9uLCBhbGwgYmFja3JlZnMgYXJlXG4gKiBzd2FwcGVkIHdpdGggdGhlaXIgb3JpZ2luYWwgbG9jYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgU2VyaWFsaXphdGlvbkJhY2tSZWYge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKiogVGhlIHBhdGggZnJvbSByb290IHRvIHRoZSBvcmlnaW5hbCBvYmplY3QgKi9cbiAgICBwdWJsaWMgJHBhdGgkOiBudW1iZXJbXVxuICApIHt9XG59XG5cbmludGVyZmFjZSBBZGRSb290Rm4ge1xuICAob2JqOiB1bmtub3duLCByZXR1cm5SZWY/OiBuZXZlcik6IG51bWJlcjtcbiAgKG9iajogdW5rbm93biwgcmV0dXJuUmVmOiB0cnVlKTogU2VlblJlZjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXphdGlvbkNvbnRleHQge1xuICAkc2VyaWFsaXplJDogKCkgPT4gVmFsdWVPclByb21pc2U8dm9pZD47XG4gICRzZXJpYWxpemVQYXRjaCQ6IChcbiAgICByb290U3RhcnQ6IG51bWJlcixcbiAgICByb290SWRzOiBudW1iZXJbXSxcbiAgICBleHRyYVJvb3RJZD86IG51bWJlciB8IHN0cmluZyB8IG51bWJlcltdLFxuICAgIHN0cmVhbWVkUm9vdExpbWl0PzogbnVtYmVyXG4gICkgPT4gVmFsdWVPclByb21pc2U8dm9pZD47XG5cbiAgJHN5bWJvbFRvQ2h1bmtSZXNvbHZlciQ6IFN5bWJvbFRvQ2h1bmtSZXNvbHZlcjtcblxuICAvKipcbiAgICogTWFwIGZyb20gb2JqZWN0IHRvIHBhcmVudCBhbmQgaW5kZXggcmVmZXJlbmNlLlxuICAgKlxuICAgKiBJZiBvYmplY3QgaXMgZm91bmQgaW4gYG9iak1hcGAgd2lsbCByZXR1cm4gdGhlIHBhcmVudCByZWZlcmVuY2UgYW5kIGluZGV4IHBhdGguXG4gICAqXG4gICAqIGBvYmpNYXBgIHJldHVybjpcbiAgICpcbiAgICogLSBgeyBwYXJlbnQsIGluZGV4IH1gIC0gVGhlIHBhcmVudCBvYmplY3QgYW5kIHRoZSBpbmRleCB3aXRoaW4gdGhhdCBwYXJlbnQuXG4gICAqIC0gYHVuZGVmaW5lZGAgLSBPYmplY3QgaGFzIG5vdCBiZWVuIHNlZW4geWV0LlxuICAgKi9cbiAgZ2V0U2VlblJlZjogKG9iajogdW5rbm93bikgPT4gU2VlblJlZiB8IHVuZGVmaW5lZDtcblxuICAvKiogUmV0dXJucyB0aGUgcm9vdCBpbmRleCBvZiB0aGUgb2JqZWN0LCBpZiBpdCBpcyBhIHJvb3QuIE90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZC4gKi9cbiAgJGhhc1Jvb3RJZCQ6IChvYmo6IHVua25vd24pID0+IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUm9vdCBvYmplY3RzIHdoaWNoIG5lZWQgdG8gYmUgc2VyaWFsaXplZC5cbiAgICpcbiAgICogUm9vdHMgYXJlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBvYmplY3QgZ3JhcGguIFR5cGljYWxseSB0aGUgcm9vdHMgYXJlIGhlbGQgYnkgdGhlIGxpc3RlbmVycy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJvb3Qgb2JqZWN0LlxuICAgKi9cbiAgJGFkZFJvb3QkOiBBZGRSb290Rm47XG4gICRhZGREdXBsaWNhdGVSb290JDogKG9iajogdW5rbm93bikgPT4gU2VlblJlZjtcbiAgJGNvbW1pdFJvb3QkOiAocm9vdDogdW5rbm93biwgb2JqOiB1bmtub3duKSA9PiBudW1iZXI7XG5cbiAgLyoqIE1hcmsgYW4gb2JqZWN0IGFzIHNlZW4gZHVyaW5nIHNlcmlhbGl6YXRpb24uIFRoaXMgaXMgdXNlZCB0byBoYW5kbGUgYmFja3JlZmVyZW5jZXMgYW5kIGN5Y2xlcyAqL1xuICAkbWFya1NlZW4kOiAob2JqOiB1bmtub3duLCBwYXJlbnQ6IFNlZW5SZWYgfCB1bmRlZmluZWQsIGluZGV4OiBudW1iZXIpID0+IFNlZW5SZWY7XG5cbiAgJHJvb3RzJDogdW5rbm93bltdO1xuICAkcm9vdE9ianMkOiB1bmtub3duW107XG4gICRvbkFkZFJvb3QkPzogKGlkOiBudW1iZXIsIHJvb3Q6IHVua25vd24sIG9iajogdW5rbm93bikgPT4gdm9pZDtcbiAgJGZvcndhcmRSZWZPZmZzZXQkOiBudW1iZXI7XG4gICRzZXJpYWxpemVkUm9vdENvdW50JDogbnVtYmVyO1xuICAkc2VyaWFsaXplZEZvcndhcmRSZWZDb3VudCQ6IG51bWJlcjtcbiAgJHJvb3RTdGF0ZVJvb3RDb3VudCQ6IG51bWJlcjtcbiAgJGhhc1Jvb3RTdGF0ZUZvcndhcmRSZWZzJDogYm9vbGVhbjtcblxuICAkcHJvbW90ZVRvUm9vdCQ6IChyZWY6IFNlZW5SZWYsIG9iajogdW5rbm93biwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgJGFkZFN5bmNGbiQoJGZ1bmNTdHIkOiBzdHJpbmcgfCBudWxsLCBhcmdzQ291bnQ6IG51bWJlciwgZm46IEZ1bmN0aW9uKTogbnVtYmVyO1xuICAkc2V0U3luY0ZuT2Zmc2V0JChvZmZzZXQ6IG51bWJlciwgZXhpc3RpbmdGbnM/OiBzdHJpbmdbXSk6IHZvaWQ7XG5cbiAgJGlzU3NyTm9kZSQ6IChvYmo6IHVua25vd24pID0+IG9iaiBpcyBJU3NyTm9kZTtcbiAgJGlzRG9tUmVmJDogKG9iajogdW5rbm93bikgPT4gb2JqIGlzIERvbVJlZjtcbiAgJG1hcmtTc3JOb2RlRm9yU2VyaWFsaXphdGlvbiQ6IChub2RlOiBJU3NyTm9kZSwgZmxhZ3M6IG51bWJlcikgPT4gdm9pZDtcblxuICAkd3JpdGVyJDogU1NSSW50ZXJuYWxTdHJlYW1Xcml0ZXI7XG4gICRzZXRXcml0ZXIkKHdyaXRlcjogU1NSSW50ZXJuYWxTdHJlYW1Xcml0ZXIpOiB2b2lkO1xuICAkc3luY0ZucyQ6IHN0cmluZ1tdO1xuXG4gICRldmVudFFybHMkOiBTZXQ8UVJMPjtcbiAgJGV2ZW50TmFtZXMkOiBTZXQ8c3RyaW5nPjtcbiAgJHJlbmRlclN5bWJvbHMkOiBTZXQ8c3RyaW5nPjtcbiAgJHN0b3JlUHJveHlNYXAkOiBPYmpUb1Byb3h5TWFwO1xuICAkZWFnZXJSZXN1bWUkOiBTZXQ8dW5rbm93bj47XG5cbiAgJHNldFByb3AkOiAob2JqOiBhbnksIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn1cblxuY2xhc3MgU2VyaWFsaXphdGlvbkNvbnRleHRJbXBsIGltcGxlbWVudHMgU2VyaWFsaXphdGlvbkNvbnRleHQge1xuICBwcml2YXRlICRzZWVuT2Jqc01hcCQgPSBuZXcgTWFwPHVua25vd24sIFNlZW5SZWY+KCk7XG4gIHByaXZhdGUgJHN5bmNGbk1hcCQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlICRzeW5jRm5PZmZzZXQkID0gMDtcbiAgcHVibGljICRzeW5jRm5zJDogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljICRyb290cyQ6IHVua25vd25bXSA9IFtdO1xuICBwdWJsaWMgJHJvb3RPYmpzJDogdW5rbm93bltdID0gW107XG4gIHB1YmxpYyAkb25BZGRSb290JDogKChpZDogbnVtYmVyLCByb290OiB1bmtub3duLCBvYmo6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgJGZvcndhcmRSZWZPZmZzZXQkID0gMDtcbiAgcHVibGljICRzZXJpYWxpemVkUm9vdENvdW50JCA9IDA7XG4gIHB1YmxpYyAkc2VyaWFsaXplZEZvcndhcmRSZWZDb3VudCQgPSAwO1xuICBwdWJsaWMgJHJvb3RTdGF0ZVJvb3RDb3VudCQgPSAwO1xuICBwdWJsaWMgJGhhc1Jvb3RTdGF0ZUZvcndhcmRSZWZzJCA9IGZhbHNlO1xuICBwdWJsaWMgJGVhZ2VyUmVzdW1lJDogU2V0PHVua25vd24+ID0gbmV3IFNldCgpO1xuICBwdWJsaWMgJGV2ZW50UXJscyQ6IFNldDxRUkw+ID0gbmV3IFNldCgpO1xuICBwdWJsaWMgJGV2ZW50TmFtZXMkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgcHVibGljICRyZW5kZXJTeW1ib2xzJDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHByaXZhdGUgJHNlcmlhbGl6ZXIkOiBTZXJpYWxpemVyO1xuICBwdWJsaWMgJG1hcmtTc3JOb2RlRm9yU2VyaWFsaXphdGlvbiQgPSAobm9kZTogSVNzck5vZGUsIGZsYWdzOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBub2RlLnZub2RlRGF0YVswXSB8PSBmbGFncztcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBOb2RlIGNvbnN0cnVjdG9yLCBmb3IgaW5zdGFuY2VvZiBjaGVja3MuXG4gICAgICpcbiAgICAgKiBBIG5vZGUgY29uc3RydWN0b3IgY2FuIGJlIG51bGwuIEZvciBleGFtcGxlIG9uIHRoZSBjbGllbnQgd2UgY2FuJ3Qgc2VyaWFsaXplIERPTSBub2RlcyBhc1xuICAgICAqIHNlcnZlciB3aWxsIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBOb2RlQ29uc3RydWN0b3I6IHtcbiAgICAgIG5ldyAoLi4ucmVzdDogYW55W10pOiB7IF9fYnJhbmRfXzogJ1Nzck5vZGUnIH07XG4gICAgfSB8IG51bGwsXG4gICAgLyoqIERvbVJlZiBjb25zdHJ1Y3RvciwgZm9yIGluc3RhbmNlb2YgY2hlY2tzLiAqL1xuICAgIHB1YmxpYyBEb21SZWZDb25zdHJ1Y3Rvcjoge1xuICAgICAgbmV3ICguLi5yZXN0OiBhbnlbXSk6IHsgX19icmFuZF9fOiAnRG9tUmVmJyB9O1xuICAgIH0gfCBudWxsLFxuICAgIHB1YmxpYyAkc3ltYm9sVG9DaHVua1Jlc29sdmVyJDogU3ltYm9sVG9DaHVua1Jlc29sdmVyLFxuICAgIHB1YmxpYyAkc2V0UHJvcCQ6IChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkLFxuICAgIHB1YmxpYyAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXAsXG4gICAgcHVibGljICR3cml0ZXIkOiBTU1JJbnRlcm5hbFN0cmVhbVdyaXRlclxuICApIHtcbiAgICB0aGlzLiRzZXJpYWxpemVyJCA9IG5ldyBTZXJpYWxpemVyKHRoaXMpO1xuICB9XG5cbiAgYXN5bmMgJHNlcmlhbGl6ZSQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy4kc2VyaWFsaXplciQuc2VyaWFsaXplKCk7XG4gIH1cblxuICBhc3luYyAkc2VyaWFsaXplUGF0Y2gkKFxuICAgIHJvb3RTdGFydDogbnVtYmVyLFxuICAgIHJvb3RJZHM6IG51bWJlcltdLFxuICAgIGV4dHJhUm9vdElkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVtYmVyW10sXG4gICAgc3RyZWFtZWRSb290TGltaXQ/OiBudW1iZXJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy4kc2VyaWFsaXplciQuc2VyaWFsaXplUGF0Y2gocm9vdFN0YXJ0LCByb290SWRzLCBleHRyYVJvb3RJZCwgc3RyZWFtZWRSb290TGltaXQpO1xuICB9XG5cbiAgJHNldFdyaXRlciQod3JpdGVyOiBTU1JJbnRlcm5hbFN0cmVhbVdyaXRlcik6IHZvaWQge1xuICAgIHRoaXMuJHdyaXRlciQgPSB3cml0ZXI7XG4gICAgdGhpcy4kc2VyaWFsaXplciQuJHNldFdyaXRlciQod3JpdGVyKTtcbiAgfVxuXG4gIGdldFNlZW5SZWYob2JqOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuJHNlZW5PYmpzTWFwJC5nZXQob2JqKTtcbiAgfVxuXG4gICRtYXJrU2VlbiQob2JqOiB1bmtub3duLCBwYXJlbnQ6IFNlZW5SZWYgfCB1bmRlZmluZWQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCByZWYgPSB7ICRpbmRleCQ6IGluZGV4LCAkcGFyZW50JDogcGFyZW50IH07XG4gICAgdGhpcy4kc2Vlbk9ianNNYXAkLnNldChvYmosIHJlZik7XG4gICAgcmV0dXJuIHJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcGF0aCByZXByZXNlbnRpbmcgdGhlIHBhdGggZnJvbSByb290cyB0aHJvdWdoIGFsbCBwYXJlbnRzIHRvIHRoZSBvYmplY3QuIEZvcm1hdDogWzMsXG4gICAqIDIsIDBdIHdoZXJlIGVhY2ggbnVtYmVyIGlzIHRoZSBpbmRleCB3aXRoaW4gaXRzIHBhcmVudCwgZnJvbSByb290IHRvIGxlYWYuXG4gICAqL1xuICAkZ2V0T2JqZWN0UGF0aCQocmVmOiBTZWVuUmVmKSB7XG4gICAgLy8gVHJhdmVyc2UgdXAgdGhyb3VnaCBwYXJlbnQgcmVmZXJlbmNlcyB0byBidWlsZCBhIHBhdGhcbiAgICBjb25zdCBwYXRoID0gW107XG4gICAgd2hpbGUgKHJlZi4kcGFyZW50JCkge1xuICAgICAgcGF0aC51bnNoaWZ0KHJlZi4kaW5kZXgkKTtcbiAgICAgIHJlZiA9IHJlZi4kcGFyZW50JDtcbiAgICB9XG4gICAgLy8gTm93IHdlIGFyZSBhdCByb290LCBidXQgaXQgY291bGQgYmUgYSBiYWNrcmVmXG4gICAgcGF0aC51bnNoaWZ0KHJlZi4kaW5kZXgkKTtcblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgJHByb21vdGVUb1Jvb3QkKHJlZjogU2VlblJlZiwgb2JqOiB1bmtub3duLCBpbmRleD86IG51bWJlcikge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLiRnZXRPYmplY3RQYXRoJChyZWYpO1xuICAgIGNvbnN0IGlzTmV3Um9vdCA9IGluZGV4ID09PSB1bmRlZmluZWQ7XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluZGV4ID0gdGhpcy4kcm9vdHMkLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy4kcm9vdHMkW2luZGV4XSA9IG5ldyBTZXJpYWxpemF0aW9uQmFja1JlZihwYXRoKTtcbiAgICBpZiAoaXNOZXdSb290KSB7XG4gICAgICB0aGlzLiRyb290T2JqcyRbaW5kZXhdID0gb2JqO1xuICAgIH1cbiAgICByZWYuJHBhcmVudCQgPSBudWxsO1xuICAgIHJlZi4kaW5kZXgkID0gaW5kZXg7XG4gICAgaWYgKGlzTmV3Um9vdCkge1xuICAgICAgdGhpcy4kb25BZGRSb290JD8uKGluZGV4LCB0aGlzLiRyb290cyRbaW5kZXhdLCBvYmopO1xuICAgIH1cbiAgfVxuXG4gICRhZGRSb290JChvYmo6IGFueSwgcmV0dXJuUmVmOiB0cnVlKTogU2VlblJlZjtcbiAgJGFkZFJvb3QkKG9iajogYW55LCByZXR1cm5SZWY/OiBuZXZlcik6IG51bWJlcjtcbiAgJGFkZFJvb3QkKG9iajogYW55LCByZXR1cm5SZWY6IGJvb2xlYW4gPSBmYWxzZSk6IG51bWJlciB8IFNlZW5SZWYge1xuICAgIGxldCBzZWVuID0gdGhpcy4kc2Vlbk9ianNNYXAkLmdldChvYmopO1xuICAgIGxldCBpbmRleDogbnVtYmVyO1xuXG4gICAgaWYgKCFzZWVuKSB7XG4gICAgICBpbmRleCA9IHRoaXMuJHJvb3RzJC5sZW5ndGg7XG4gICAgICBzZWVuID0ge1xuICAgICAgICAkaW5kZXgkOiBpbmRleCxcbiAgICAgICAgLy8gVE9ETyBiZW5jaG1hcmsgd2l0aCBhbmQgd2l0aG91dCAkcGFyZW50JFxuICAgICAgICAvLyAkcGFyZW50JDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdGhpcy4kc2Vlbk9ianNNYXAkLnNldChvYmosIHNlZW4pO1xuICAgICAgdGhpcy4kcm9vdHMkLnB1c2gob2JqKTtcbiAgICAgIHRoaXMuJHJvb3RPYmpzJC5wdXNoKG9iaik7XG4gICAgICB0aGlzLiRvbkFkZFJvb3QkPy4oaW5kZXgsIG9iaiwgb2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNlZW4uJHBhcmVudCQpIHtcbiAgICAgICAgdGhpcy4kcHJvbW90ZVRvUm9vdCQoc2Vlbiwgb2JqKTtcbiAgICAgIH1cbiAgICAgIGluZGV4ID0gc2Vlbi4kaW5kZXgkO1xuICAgIH1cblxuICAgIHJldHVybiByZXR1cm5SZWYgPyBzZWVuIDogaW5kZXg7XG4gIH1cblxuICAkYWRkRHVwbGljYXRlUm9vdCQob2JqOiB1bmtub3duKTogU2VlblJlZiB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLiRyb290cyQubGVuZ3RoO1xuICAgIGNvbnN0IHJlZiA9IHsgJGluZGV4JDogaW5kZXggfTtcbiAgICB0aGlzLiRzZWVuT2Jqc01hcCQuc2V0KG9iaiwgcmVmKTtcbiAgICB0aGlzLiRyb290cyQucHVzaChvYmopO1xuICAgIHRoaXMuJHJvb3RPYmpzJC5wdXNoKG9iaik7XG4gICAgdGhpcy4kb25BZGRSb290JD8uKGluZGV4LCBvYmosIG9iaik7XG4gICAgcmV0dXJuIHJlZjtcbiAgfVxuXG4gICRjb21taXRSb290JChyb290OiB1bmtub3duLCBvYmo6IHVua25vd24pOiBudW1iZXIge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4kcm9vdHMkLmxlbmd0aDtcbiAgICBjb25zdCByZWYgPSB7ICRpbmRleCQ6IGluZGV4IH07XG4gICAgdGhpcy4kc2Vlbk9ianNNYXAkLnNldChvYmosIHJlZik7XG4gICAgdGhpcy4kcm9vdHMkLnB1c2gocm9vdCk7XG4gICAgdGhpcy4kcm9vdE9ianMkLnB1c2gob2JqKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAkaXNTc3JOb2RlJChvYmo6IHVua25vd24pOiBvYmogaXMgSVNzck5vZGUge1xuICAgIHJldHVybiB0aGlzLk5vZGVDb25zdHJ1Y3RvciA/IG9iaiBpbnN0YW5jZW9mIHRoaXMuTm9kZUNvbnN0cnVjdG9yIDogZmFsc2U7XG4gIH1cblxuICAkaXNEb21SZWYkKG9iajogdW5rbm93bik6IG9iaiBpcyBEb21SZWYge1xuICAgIHJldHVybiB0aGlzLkRvbVJlZkNvbnN0cnVjdG9yID8gb2JqIGluc3RhbmNlb2YgdGhpcy5Eb21SZWZDb25zdHJ1Y3RvciA6IGZhbHNlO1xuICB9XG5cbiAgJGhhc1Jvb3RJZCQob2JqOiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuJHNlZW5PYmpzTWFwJC5nZXQob2JqKTtcbiAgICByZXR1cm4gaWQgJiYgKGlkLiRwYXJlbnQkID8gdW5kZWZpbmVkIDogaWQuJGluZGV4JCk7XG4gIH1cblxuICAkYWRkU3luY0ZuJChmdW5jU3RyOiBzdHJpbmcgfCBudWxsLCBhcmdDb3VudDogbnVtYmVyLCBmbjogRnVuY3Rpb24pOiBudW1iZXIge1xuICAgIGNvbnN0IGlzRnVsbEZuID0gZnVuY1N0ciA9PSBudWxsO1xuICAgIGlmIChpc0Z1bGxGbikge1xuICAgICAgZnVuY1N0ciA9ICgoZm4gYXMgYW55KS5zZXJpYWxpemVkIGFzIHN0cmluZykgfHwgZm4udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IGlkID0gdGhpcy4kc3luY0ZuTWFwJC5nZXQoZnVuY1N0ciEpO1xuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZCA9IHRoaXMuJHN5bmNGbk9mZnNldCQgKyB0aGlzLiRzeW5jRm5zJC5sZW5ndGg7XG4gICAgICB0aGlzLiRzeW5jRm5NYXAkLnNldChmdW5jU3RyISwgaWQpO1xuICAgICAgaWYgKGlzRnVsbEZuKSB7XG4gICAgICAgIHRoaXMuJHN5bmNGbnMkLnB1c2goZnVuY1N0ciEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvZGUgPSAnKCc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgICAgIGNvZGUgKz0gKGkgPT0gMCA/ICdwJyA6ICcscCcpICsgaTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRzeW5jRm5zJC5wdXNoKChjb2RlICs9ICcpPT4nICsgZnVuY1N0cikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAkc2V0U3luY0ZuT2Zmc2V0JChvZmZzZXQ6IG51bWJlciwgZXhpc3RpbmdGbnM/OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuJHN5bmNGbk9mZnNldCQgPSBvZmZzZXQ7XG4gICAgaWYgKGV4aXN0aW5nRm5zKSB7XG4gICAgICB0aGlzLiRzeW5jRm5NYXAkLmNsZWFyKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuJHN5bmNGbk1hcCQuc2V0KGV4aXN0aW5nRm5zW2ldLCBpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlcmlhbGl6YXRpb25Db250ZXh0ID0gKFxuICAvKipcbiAgICogTm9kZSBjb25zdHJ1Y3RvciwgZm9yIGluc3RhbmNlb2YgY2hlY2tzLlxuICAgKlxuICAgKiBBIG5vZGUgY29uc3RydWN0b3IgY2FuIGJlIG51bGwuIEZvciBleGFtcGxlIG9uIHRoZSBjbGllbnQgd2UgY2FuJ3Qgc2VyaWFsaXplIERPTSBub2RlcyBhc1xuICAgKiBzZXJ2ZXIgd2lsbCBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlbS5cbiAgICovXG4gIE5vZGVDb25zdHJ1Y3Rvcjoge1xuICAgIG5ldyAoLi4ucmVzdDogYW55W10pOiB7IF9fYnJhbmRfXzogJ1Nzck5vZGUnIH07XG4gIH0gfCBudWxsLFxuICAvKiogRG9tUmVmIGNvbnN0cnVjdG9yLCBmb3IgaW5zdGFuY2VvZiBjaGVja3MuICovXG4gIERvbVJlZkNvbnN0cnVjdG9yOiB7XG4gICAgbmV3ICguLi5yZXN0OiBhbnlbXSk6IHsgX19icmFuZF9fOiAnRG9tUmVmJyB9O1xuICB9IHwgbnVsbCxcbiAgc3ltYm9sVG9DaHVua1Jlc29sdmVyOiBTeW1ib2xUb0NodW5rUmVzb2x2ZXIsXG4gIHNldFByb3A6IChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkLFxuICBzdG9yZVByb3h5TWFwOiBPYmpUb1Byb3h5TWFwLFxuICB3cml0ZXI/OiBTU1JJbnRlcm5hbFN0cmVhbVdyaXRlclxuKTogU2VyaWFsaXphdGlvbkNvbnRleHQgPT4ge1xuICBpZiAoIXdyaXRlcikge1xuICAgIGNvbnN0IGJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgICB3cml0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgY3JlYXRlU3RyaW5nU3RyZWFtV3JpdGVyKCh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgYnVmZmVyLnB1c2godGV4dCk7XG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgdG9TdHJpbmc6ICgpID0+IGJ1ZmZlci5qb2luKCcnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNEb21SZWYgPSAoXG4gICAgRG9tUmVmQ29uc3RydWN0b3IgPyAob2JqKSA9PiBvYmogaW5zdGFuY2VvZiBEb21SZWZDb25zdHJ1Y3RvciA6ICgoKCkgPT4gZmFsc2UpIGFzIGFueSlcbiAgKSBhcyAob2JqOiB1bmtub3duKSA9PiBvYmogaXMgRG9tUmVmO1xuXG4gIHJldHVybiBuZXcgU2VyaWFsaXphdGlvbkNvbnRleHRJbXBsKFxuICAgIE5vZGVDb25zdHJ1Y3RvcixcbiAgICBEb21SZWZDb25zdHJ1Y3RvcixcbiAgICBzeW1ib2xUb0NodW5rUmVzb2x2ZXIsXG4gICAgc2V0UHJvcCxcbiAgICBzdG9yZVByb3h5TWFwLFxuICAgIHdyaXRlclxuICApO1xufTtcbiJdfQ==","import { getStoreTarget, isStore } from '../../reactive-primitives/impl/store';\nimport { SubscriptionData } from '../../reactive-primitives/subscription-data';\nimport { NEEDS_COMPUTATION, STORE_ALL_PROPS } from '../../reactive-primitives/types';\nimport { untrack } from '../../use/use-core';\nimport { isTask } from '../../use/use-task';\nimport { isQwikComponent } from '../component.public';\nimport { isJSXNode } from '../jsx/jsx-node';\nimport { isPropsProxy } from '../jsx/props-proxy';\nimport { Slot } from '../jsx/slot.public';\nimport { isQrl } from '../qrl/qrl-utils';\nimport { _UNINITIALIZED } from '../utils/constants';\nimport { isPromise } from '../utils/promises';\nimport { isDomRef } from './serialization-context';\n// Keep last\nimport { Fragment } from '../jsx/jsx-runtime';\nimport { isSerializerObj } from '../../reactive-primitives/utils';\nconst getKeyVal = (value, key) => value[key];\nexport const canSerialize = (value, seen = new WeakSet()) => {\n    const hasTemporal = typeof Temporal !== 'undefined';\n    if (value == null ||\n        typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'boolean' ||\n        typeof value === 'bigint') {\n        return true;\n    }\n    else if (typeof value === 'object') {\n        if (seen.has(value)) {\n            return true;\n        }\n        seen.add(value);\n        const proto = Object.getPrototypeOf(value);\n        if (isStore(value)) {\n            value = getStoreTarget(value);\n        }\n        if (proto == Object.prototype) {\n            for (const key in value) {\n                // if the value is a props proxy, then sometimes we could create a component-level subscription,\n                // so we should call untrack here to avoid tracking the value\n                if (!canSerialize(untrack(getKeyVal, value, key), seen)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        else if (proto == Array.prototype) {\n            for (let i = 0; i < value.length; i++) {\n                // ignore sparse array holes\n                if (!(i in value)) {\n                    return false;\n                }\n                if (!canSerialize(value[i], seen)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        else if (isTask(value)) {\n            return true;\n        }\n        else if (isPropsProxy(value)) {\n            return true;\n        }\n        else if (isPromise(value)) {\n            return true;\n        }\n        else if (isJSXNode(value)) {\n            return true;\n        }\n        else if (isSerializerObj(value)) {\n            return true;\n        }\n        else if (value instanceof Error) {\n            return true;\n        }\n        else if (value instanceof URL) {\n            return true;\n        }\n        else if (value instanceof Date) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.Duration) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.Instant) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.PlainDate) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.PlainDateTime) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.PlainMonthDay) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.PlainTime) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.PlainYearMonth) {\n            return true;\n        }\n        else if (hasTemporal && value instanceof Temporal.ZonedDateTime) {\n            return true;\n        }\n        else if (value instanceof RegExp) {\n            return true;\n        }\n        else if (value instanceof URLSearchParams) {\n            return true;\n        }\n        else if (value instanceof FormData) {\n            return true;\n        }\n        else if (value instanceof Set) {\n            return true;\n        }\n        else if (value instanceof Map) {\n            return true;\n        }\n        else if (value instanceof Uint8Array) {\n            return true;\n        }\n        else if (value instanceof SubscriptionData) {\n            return true;\n        }\n        else if (isDomRef?.(value)) {\n            return true;\n        }\n    }\n    else if (typeof value === 'function') {\n        if (isQrl(value) || isQwikComponent(value) || value === Slot || value === Fragment) {\n            return true;\n        }\n    }\n    else if (value === _UNINITIALIZED || value === NEEDS_COMPUTATION || value === STORE_ALL_PROPS) {\n        return true;\n    }\n    return false;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLXNlcmlhbGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2VyZGVzL2Nhbi1zZXJpYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELFlBQVk7QUFDWixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWxFLE1BQU0sU0FBUyxHQUFHLENBQUksS0FBUSxFQUFFLEdBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FB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ZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25GLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLEtBQUssS0FBSyxjQUFjLElBQUksS0FBSyxLQUFLLGlCQUFpQixJQUFJLEtBQUssS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUNoRyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFN0b3JlVGFyZ2V0LCBpc1N0b3JlIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB7IE5FRURTX0NPTVBVVEFUSU9OLCBTVE9SRV9BTExfUFJPUFMgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IHVudHJhY2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHsgaXNUYXNrIH0gZnJvbSAnLi4vLi4vdXNlL3VzZS10YXNrJztcbmltcG9ydCB7IGlzUXdpa0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHsgaXNKU1hOb2RlIH0gZnJvbSAnLi4vanN4L2pzeC1ub2RlJztcbmltcG9ydCB7IGlzUHJvcHNQcm94eSB9IGZyb20gJy4uL2pzeC9wcm9wcy1wcm94eSc7XG5pbXBvcnQgeyBTbG90IH0gZnJvbSAnLi4vanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB7IGlzUXJsIH0gZnJvbSAnLi4vcXJsL3FybC11dGlscyc7XG5pbXBvcnQgeyBfVU5JTklUSUFMSVpFRCB9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgeyBpc0RvbVJlZiB9IGZyb20gJy4vc2VyaWFsaXphdGlvbi1jb250ZXh0Jztcbi8vIEtlZXAgbGFzdFxuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgaXNTZXJpYWxpemVyT2JqIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy91dGlscyc7XG5cbmNvbnN0IGdldEtleVZhbCA9IDxUPih2YWx1ZTogVCwga2V5OiBrZXlvZiBUKSA9PiB2YWx1ZVtrZXldO1xuXG5leHBvcnQgY29uc3QgY2FuU2VyaWFsaXplID0gKHZhbHVlOiB1bmtub3duLCBzZWVuOiBXZWFrU2V0PGFueT4gPSBuZXcgV2Vha1NldCgpKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGhhc1RlbXBvcmFsID0gdHlwZW9mIFRlbXBvcmFsICE9PSAndW5kZWZpbmVkJztcbiAgaWYgKFxuICAgIHZhbHVlID09IG51bGwgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYmlnaW50J1xuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKGlzU3RvcmUodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IGdldFN0b3JlVGFyZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHByb3RvID09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlIGFzIG9iamVjdCkge1xuICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYSBwcm9wcyBwcm94eSwgdGhlbiBzb21ldGltZXMgd2UgY291bGQgY3JlYXRlIGEgY29tcG9uZW50LWxldmVsIHN1YnNjcmlwdGlvbixcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgdW50cmFjayBoZXJlIHRvIGF2b2lkIHRyYWNraW5nIHRoZSB2YWx1ZVxuICAgICAgICBpZiAoIWNhblNlcmlhbGl6ZSh1bnRyYWNrKGdldEtleVZhbCwgdmFsdWUsIGtleSBhcyBrZXlvZiB0eXBlb2YgdmFsdWUpLCBzZWVuKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChwcm90byA9PSBBcnJheS5wcm90b3R5cGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHZhbHVlIGFzIHVua25vd25bXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gaWdub3JlIHNwYXJzZSBhcnJheSBob2xlc1xuICAgICAgICBpZiAoIShpIGluICh2YWx1ZSBhcyB1bmtub3duW10pKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhblNlcmlhbGl6ZSgodmFsdWUgYXMgdW5rbm93bltdKVtpXSwgc2VlbikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNUYXNrKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChpc1Byb3BzUHJveHkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNKU1hOb2RlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChpc1NlcmlhbGl6ZXJPYmoodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc1RlbXBvcmFsICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaGFzVGVtcG9yYWwgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZW1wb3JhbC5JbnN0YW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc1RlbXBvcmFsICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuUGxhaW5EYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc1RlbXBvcmFsICYmIHZhbHVlIGluc3RhbmNlb2YgVGVtcG9yYWwuUGxhaW5EYXRlVGltZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChoYXNUZW1wb3JhbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBvcmFsLlBsYWluTW9udGhEYXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaGFzVGVtcG9yYWwgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZW1wb3JhbC5QbGFpblRpbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaGFzVGVtcG9yYWwgJiYgdmFsdWUgaW5zdGFuY2VvZiBUZW1wb3JhbC5QbGFpblllYXJNb250aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChoYXNUZW1wb3JhbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBvcmFsLlpvbmVkRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb25EYXRhKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGlzRG9tUmVmPy4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGlzUXJsKHZhbHVlKSB8fCBpc1F3aWtDb21wb25lbnQodmFsdWUpIHx8IHZhbHVlID09PSBTbG90IHx8IHZhbHVlID09PSBGcmFnbWVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKHZhbHVlID09PSBfVU5JTklUSUFMSVpFRCB8fCB2YWx1ZSA9PT0gTkVFRFNfQ09NUFVUQVRJT04gfHwgdmFsdWUgPT09IFNUT1JFX0FMTF9QUk9QUykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=","import { vnode_isVNode, vnode_toString } from '../../client/vnode-utils';\nimport { isObject } from '../utils/types';\nimport { _typeIdNames, _constantNames } from './constants';\nconst circularProofJson = (obj, indent) => {\n    const seen = new WeakSet();\n    return JSON.stringify(obj, (_, value) => {\n        if (isObject(value)) {\n            if (seen.has(value)) {\n                return `[Circular ${value.constructor.name}]`;\n            }\n            seen.add(value);\n        }\n        return value;\n    }, indent);\n};\nconst printRaw = (value, prefix) => {\n    let result = vnode_isVNode(value)\n        ? vnode_toString.call(value, 1, '', true).replaceAll(/\\n.*/gm, '')\n        : typeof value === 'function'\n            ? String(value)\n            : circularProofJson(value, 2);\n    if (result.length > 500) {\n        result = result.slice(0, 500) + '\"...';\n    }\n    result = result.replace(/\\n/g, '\\n' + prefix);\n    return result.includes('\\n') ? (result = `\\n${prefix}${result}`) : result;\n};\nlet hasRaw = false;\n/** @internal */\nexport const _dumpState = (state, color = false, prefix = '', limit = 20) => {\n    const RED = color ? '\\x1b[31m' : '';\n    const RESET = color ? '\\x1b[0m' : '';\n    const isRoot = prefix === '';\n    const out = [];\n    for (let i = 0; i < state.length; i++) {\n        if (limit && i > 2 * limit) {\n            out.push('...');\n            break;\n        }\n        const key = state[i];\n        let value = state[++i];\n        if (key === 0 /* TypeIds.Plain */) {\n            const isRaw = typeof value !== 'number' && typeof value !== 'string';\n            if (isRaw) {\n                hasRaw = true;\n            }\n            const type = `{${isObject(value) ? value.constructor.name : typeof value}}`;\n            out.push(`${RED}${type}${RESET} ${printRaw(value, `${prefix}  `)}`);\n        }\n        else {\n            if (key === 3 /* TypeIds.Constant */) {\n                value = constantToName(value);\n            }\n            else if (typeof value === 'string') {\n                value = JSON.stringify(value);\n                if (value.length > 120) {\n                    value = value.slice(0, 120) + '\"...';\n                }\n            }\n            else if (key === 14 /* TypeIds.ForwardRefs */) {\n                value = '[' + `\\n${prefix}  ${value.join(`\\n${prefix}  `)}\\n${prefix}]`;\n            }\n            else if (Array.isArray(value)) {\n                value = value.length ? `[\\n${_dumpState(value, color, `${prefix}  `)}\\n${prefix}]` : '[]';\n            }\n            out.push(`${RED}${typeIdToName(key)}${RESET} ${value}`);\n        }\n    }\n    const result = out.map((v, i) => `${prefix}${isRoot ? `${i} ` : ''}${v}`).join('\\n');\n    if (isRoot) {\n        const count = hasRaw ? '' : `(${JSON.stringify(state).length} chars)`;\n        hasRaw = false;\n        return `\\n${result}\\n${count}`;\n    }\n    return result;\n};\nexport const typeIdToName = (code) => {\n    return _typeIdNames[code] || `Unknown(${code})`;\n};\nexport const constantToName = (code) => {\n    return _constantNames[code] || `Unknown(${code})`;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtcC1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2VyZGVzL2R1bXAtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUEyQixZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFZLEVBQUUsTUFBd0IsRUFBRSxFQUFFO0lBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUNuQixHQUFHLEVBQ0gsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDWCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLGFBQWEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUM5QyxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLFVB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QVMsQ0FBQztRQUN0RSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsT0FBTyxLQUFLLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7SUFDNUMsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLEdBQUcsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFlLEVBQUUsRUFBRTtJQUNoRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZub2RlX2lzVk5vZGUsIHZub2RlX3RvU3RyaW5nIH0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLXV0aWxzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBDb25zdGFudHMsIFR5cGVJZHMsIF90eXBlSWROYW1lcywgX2NvbnN0YW50TmFtZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IGNpcmN1bGFyUHJvb2ZKc29uID0gKG9iajogdW5rbm93biwgaW5kZW50Pzogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgb2JqLFxuICAgIChfLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGBbQ2lyY3VsYXIgJHt2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfV1gO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGluZGVudFxuICApO1xufTtcblxuY29uc3QgcHJpbnRSYXcgPSAodmFsdWU6IGFueSwgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHZub2RlX2lzVk5vZGUodmFsdWUpXG4gICAgPyB2bm9kZV90b1N0cmluZy5jYWxsKHZhbHVlLCAxLCAnJywgdHJ1ZSkucmVwbGFjZUFsbCgvXFxuLiovZ20sICcnKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICA/IFN0cmluZyh2YWx1ZSlcbiAgICAgIDogY2lyY3VsYXJQcm9vZkpzb24odmFsdWUsIDIpO1xuICBpZiAocmVzdWx0Lmxlbmd0aCA+IDUwMCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCA1MDApICsgJ1wiLi4uJztcbiAgfVxuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXFxuL2csICdcXG4nICsgcHJlZml4KTtcbiAgcmV0dXJuIHJlc3VsdC5pbmNsdWRlcygnXFxuJykgPyAocmVzdWx0ID0gYFxcbiR7cHJlZml4fSR7cmVzdWx0fWApIDogcmVzdWx0O1xufTtcblxubGV0IGhhc1JhdyA9IGZhbHNlO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2R1bXBTdGF0ZSA9IChcbiAgc3RhdGU6IHVua25vd25bXSxcbiAgY29sb3IgPSBmYWxzZSxcbiAgcHJlZml4ID0gJycsXG4gIGxpbWl0OiBudW1iZXIgfCBudWxsID0gMjBcbikgPT4ge1xuICBjb25zdCBSRUQgPSBjb2xvciA/ICdcXHgxYlszMW0nIDogJyc7XG4gIGNvbnN0IFJFU0VUID0gY29sb3IgPyAnXFx4MWJbMG0nIDogJyc7XG4gIGNvbnN0IGlzUm9vdCA9IHByZWZpeCA9PT0gJyc7XG4gIGNvbnN0IG91dDogYW55W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsaW1pdCAmJiBpID4gMiAqIGxpbWl0KSB7XG4gICAgICBvdXQucHVzaCgnLi4uJyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gc3RhdGVbaV07XG4gICAgbGV0IHZhbHVlID0gc3RhdGVbKytpXTtcbiAgICBpZiAoa2V5ID09PSBUeXBlSWRzLlBsYWluKSB7XG4gICAgICBjb25zdCBpc1JhdyA9IHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJztcbiAgICAgIGlmIChpc1Jhdykge1xuICAgICAgICBoYXNSYXcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGB7JHtpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIDogdHlwZW9mIHZhbHVlfX1gO1xuXG4gICAgICBvdXQucHVzaChgJHtSRUR9JHt0eXBlfSR7UkVTRVR9ICR7cHJpbnRSYXcodmFsdWUsIGAke3ByZWZpeH0gIGApfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoa2V5ID09PSBUeXBlSWRzLkNvbnN0YW50KSB7XG4gICAgICAgIHZhbHVlID0gY29uc3RhbnRUb05hbWUodmFsdWUgYXMgQ29uc3RhbnRzKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgaWYgKCh2YWx1ZSBhcyBzdHJpbmcpLmxlbmd0aCA+IDEyMCkge1xuICAgICAgICAgIHZhbHVlID0gKHZhbHVlIGFzIHN0cmluZykuc2xpY2UoMCwgMTIwKSArICdcIi4uLic7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBUeXBlSWRzLkZvcndhcmRSZWZzKSB7XG4gICAgICAgIHZhbHVlID0gJ1snICsgYFxcbiR7cHJlZml4fSAgJHsodmFsdWUgYXMgbnVtYmVyW10pLmpvaW4oYFxcbiR7cHJlZml4fSAgYCl9XFxuJHtwcmVmaXh9XWA7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubGVuZ3RoID8gYFtcXG4ke19kdW1wU3RhdGUodmFsdWUsIGNvbG9yLCBgJHtwcmVmaXh9ICBgKX1cXG4ke3ByZWZpeH1dYCA6ICdbXSc7XG4gICAgICB9XG4gICAgICBvdXQucHVzaChgJHtSRUR9JHt0eXBlSWRUb05hbWUoa2V5IGFzIFR5cGVJZHMpfSR7UkVTRVR9ICR7dmFsdWV9YCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG91dC5tYXAoKHYsIGkpID0+IGAke3ByZWZpeH0ke2lzUm9vdCA/IGAke2l9IGAgOiAnJ30ke3Z9YCkuam9pbignXFxuJyk7XG4gIGlmIChpc1Jvb3QpIHtcbiAgICBjb25zdCBjb3VudCA9IGhhc1JhdyA/ICcnIDogYCgke0pTT04uc3RyaW5naWZ5KHN0YXRlKS5sZW5ndGh9IGNoYXJzKWA7XG4gICAgaGFzUmF3ID0gZmFsc2U7XG4gICAgcmV0dXJuIGBcXG4ke3Jlc3VsdH1cXG4ke2NvdW50fWA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCB0eXBlSWRUb05hbWUgPSAoY29kZTogVHlwZUlkcykgPT4ge1xuICByZXR1cm4gX3R5cGVJZE5hbWVzW2NvZGVdIHx8IGBVbmtub3duKCR7Y29kZX0pYDtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdGFudFRvTmFtZSA9IChjb2RlOiBDb25zdGFudHMpID0+IHtcbiAgcmV0dXJuIF9jb25zdGFudE5hbWVzW2NvZGVdIHx8IGBVbmtub3duKCR7Y29kZX0pYDtcbn07XG4iXX0=","/**\n * Preprocess the state data to:\n *\n * - Replace RootRef with the actual object\n * - Create a map for forward refs\n * - Create an array of indexes for initial QRLs\n *\n * Before:\n *\n * ```\n * 0 Object [\n *   String \"foo\"\n *   Object [\n *     String \"shared\"\n *     Number 1\n *   ]\n * ]\n * 1 Object [\n *   String \"bar\"\n *   RootRef 2\n * ]\n * 2 RootRef \"0 1\"\n * (59 chars)\n * ```\n *\n * After:\n *\n * ```\n * 0 Object [\n *   String \"foo\"\n *   RootRef 2\n * ]\n * 1 Object [\n *   String \"bar\"\n *   RootRef 2\n * ]\n * 2 Object [\n *   String \"shared\"\n *   Number 1\n * ]\n * (55 chars)\n * ```\n *\n * @param data - The state data to preprocess\n * @returns The preprocessed state data\n * @internal\n */\nexport function preprocessState(data, container, segmentId, startIndex = 0) {\n    const isRootDeepRef = (type, value) => {\n        return type === 1 /* TypeIds.RootRef */ && typeof value === 'string' && value.indexOf(' ') !== -1;\n    };\n    const isForwardRefsMap = (type) => {\n        return type === 14 /* TypeIds.ForwardRefs */;\n    };\n    const processRootRef = (index) => {\n        const rootRefPath = data[index + 1].split(' ');\n        const firstRefIndex = parseInt(rootRefPath[0], 10);\n        let object = data;\n        let objectType = 1 /* TypeIds.RootRef */;\n        let typeIndex = 0;\n        let valueIndex = 0;\n        let parent = null;\n        for (let i = 0; i < rootRefPath.length; i++) {\n            parent = object;\n            typeIndex = (i === 0 ? firstRefIndex : parseInt(rootRefPath[i], 10)) * 2;\n            valueIndex = typeIndex + 1;\n            const objectArray = object;\n            objectType = objectArray[typeIndex];\n            object = objectArray[valueIndex];\n            if (objectType === 1 /* TypeIds.RootRef */) {\n                const rootRef = typeof object === 'string' ? parseInt(object, 10) : object;\n                const rootRefTypeIndex = rootRef * 2;\n                objectType = data[rootRefTypeIndex];\n                object = data[rootRefTypeIndex + 1];\n            }\n        }\n        if (parent) {\n            parent[typeIndex] = 1 /* TypeIds.RootRef */;\n            parent[valueIndex] = index / 2;\n        }\n        data[index] = objectType;\n        data[index + 1] = object;\n    };\n    for (let i = startIndex; i < data.length; i += 2) {\n        if (isRootDeepRef(data[i], data[i + 1])) {\n            processRootRef(i);\n        }\n        else if (isForwardRefsMap(data[i])) {\n            container.$forwardRefs$ = data[i + 1];\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcHJvY2Vzcy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2VyZGVzL3ByZXByb2Nlc3Mtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFlLEVBQ2YsU0FBK0IsRUFDL0IsU0FBa0IsRUFDbEIsVUFBVSxHQUFHLENBQUM7SUFFZCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsRUFBRTtRQUN0RCxPQUFPLElBQUksNEJBQW9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQyxDQUFDO0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sSUFBSSxpQ0FBd0IsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sV0FBVyxHQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxNQUFNLEdBQWdDLElBQUksQ0FBQztRQUMvQyxJQUFJLFVBQVUsMEJBQTJCLENBQUM7UUFDMUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLE1BQU0sR0FBcUIsSUFBSSxDQUFDO1FBRXBDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsTUFBTSxHQUFHLE1BQW1CLENBQUM7WUFFN0IsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLFVBQVUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBRTNCLE1BQU0sV0FBVyxHQUFHLE1BQW1CLENBQUM7WUFDeEMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQVksQ0FBQztZQUMvQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBYyxDQUFDO1lBRTlDLElBQUksVUFBVSw0QkFBb0IsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLE9BQU8sR0FDWCxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLE1BQTRCLENBQUM7Z0JBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDckMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBWSxDQUFDO2dCQUMvQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBYyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxTQUFTLENBQUMsMEJBQWtCLENBQUM7WUFDcEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQzthQUFNLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBWSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUEyQixDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1leHBlY3QtZXJyb3Igd2UgZG9uJ3QgaGF2ZSB0eXBlcyBmb3IgdGhlIHByZWxvYWRlclxuaW1wb3J0IHsgcCBhcyBwcmVsb2FkIH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvcHJlbG9hZGVyJztcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVDb250YWluZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlSWRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByZXByb2Nlc3MgdGhlIHN0YXRlIGRhdGEgdG86XG4gKlxuICogLSBSZXBsYWNlIFJvb3RSZWYgd2l0aCB0aGUgYWN0dWFsIG9iamVjdFxuICogLSBDcmVhdGUgYSBtYXAgZm9yIGZvcndhcmQgcmVmc1xuICogLSBDcmVhdGUgYW4gYXJyYXkgb2YgaW5kZXhlcyBmb3IgaW5pdGlhbCBRUkxzXG4gKlxuICogQmVmb3JlOlxuICpcbiAqIGBgYFxuICogMCBPYmplY3QgW1xuICogICBTdHJpbmcgXCJmb29cIlxuICogICBPYmplY3QgW1xuICogICAgIFN0cmluZyBcInNoYXJlZFwiXG4gKiAgICAgTnVtYmVyIDFcbiAqICAgXVxuICogXVxuICogMSBPYmplY3QgW1xuICogICBTdHJpbmcgXCJiYXJcIlxuICogICBSb290UmVmIDJcbiAqIF1cbiAqIDIgUm9vdFJlZiBcIjAgMVwiXG4gKiAoNTkgY2hhcnMpXG4gKiBgYGBcbiAqXG4gKiBBZnRlcjpcbiAqXG4gKiBgYGBcbiAqIDAgT2JqZWN0IFtcbiAqICAgU3RyaW5nIFwiZm9vXCJcbiAqICAgUm9vdFJlZiAyXG4gKiBdXG4gKiAxIE9iamVjdCBbXG4gKiAgIFN0cmluZyBcImJhclwiXG4gKiAgIFJvb3RSZWYgMlxuICogXVxuICogMiBPYmplY3QgW1xuICogICBTdHJpbmcgXCJzaGFyZWRcIlxuICogICBOdW1iZXIgMVxuICogXVxuICogKDU1IGNoYXJzKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGRhdGEgLSBUaGUgc3RhdGUgZGF0YSB0byBwcmVwcm9jZXNzXG4gKiBAcmV0dXJucyBUaGUgcHJlcHJvY2Vzc2VkIHN0YXRlIGRhdGFcbiAqIEBpbnRlcm5hbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzU3RhdGUoXG4gIGRhdGE6IHVua25vd25bXSxcbiAgY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lcixcbiAgc2VnbWVudElkPzogc3RyaW5nLFxuICBzdGFydEluZGV4ID0gMFxuKSB7XG4gIGNvbnN0IGlzUm9vdERlZXBSZWYgPSAodHlwZTogVHlwZUlkcywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgICByZXR1cm4gdHlwZSA9PT0gVHlwZUlkcy5Sb290UmVmICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5kZXhPZignICcpICE9PSAtMTtcbiAgfTtcblxuICBjb25zdCBpc0ZvcndhcmRSZWZzTWFwID0gKHR5cGU6IFR5cGVJZHMpID0+IHtcbiAgICByZXR1cm4gdHlwZSA9PT0gVHlwZUlkcy5Gb3J3YXJkUmVmcztcbiAgfTtcblxuICBjb25zdCBwcm9jZXNzUm9vdFJlZiA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgcm9vdFJlZlBhdGggPSAoZGF0YVtpbmRleCArIDFdIGFzIHN0cmluZykuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBmaXJzdFJlZkluZGV4ID0gcGFyc2VJbnQocm9vdFJlZlBhdGhbMF0sIDEwKTtcbiAgICBsZXQgb2JqZWN0OiB1bmtub3duW10gfCBudW1iZXIgfCBzdHJpbmcgPSBkYXRhO1xuICAgIGxldCBvYmplY3RUeXBlOiBUeXBlSWRzID0gVHlwZUlkcy5Sb290UmVmO1xuICAgIGxldCB0eXBlSW5kZXggPSAwO1xuICAgIGxldCB2YWx1ZUluZGV4ID0gMDtcbiAgICBsZXQgcGFyZW50OiB1bmtub3duW10gfCBudWxsID0gbnVsbDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm9vdFJlZlBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhcmVudCA9IG9iamVjdCBhcyB1bmtub3duW107XG5cbiAgICAgIHR5cGVJbmRleCA9IChpID09PSAwID8gZmlyc3RSZWZJbmRleCA6IHBhcnNlSW50KHJvb3RSZWZQYXRoW2ldLCAxMCkpICogMjtcbiAgICAgIHZhbHVlSW5kZXggPSB0eXBlSW5kZXggKyAxO1xuXG4gICAgICBjb25zdCBvYmplY3RBcnJheSA9IG9iamVjdCBhcyB1bmtub3duW107XG4gICAgICBvYmplY3RUeXBlID0gb2JqZWN0QXJyYXlbdHlwZUluZGV4XSBhcyBUeXBlSWRzO1xuICAgICAgb2JqZWN0ID0gb2JqZWN0QXJyYXlbdmFsdWVJbmRleF0gYXMgdW5rbm93bltdO1xuXG4gICAgICBpZiAob2JqZWN0VHlwZSA9PT0gVHlwZUlkcy5Sb290UmVmKSB7XG4gICAgICAgIGNvbnN0IHJvb3RSZWYgPVxuICAgICAgICAgIHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQob2JqZWN0LCAxMCkgOiAob2JqZWN0IGFzIHVua25vd24gYXMgbnVtYmVyKTtcbiAgICAgICAgY29uc3Qgcm9vdFJlZlR5cGVJbmRleCA9IHJvb3RSZWYgKiAyO1xuICAgICAgICBvYmplY3RUeXBlID0gZGF0YVtyb290UmVmVHlwZUluZGV4XSBhcyBUeXBlSWRzO1xuICAgICAgICBvYmplY3QgPSBkYXRhW3Jvb3RSZWZUeXBlSW5kZXggKyAxXSBhcyB1bmtub3duW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50W3R5cGVJbmRleF0gPSBUeXBlSWRzLlJvb3RSZWY7XG4gICAgICBwYXJlbnRbdmFsdWVJbmRleF0gPSBpbmRleCAvIDI7XG4gICAgfVxuICAgIGRhdGFbaW5kZXhdID0gb2JqZWN0VHlwZTtcbiAgICBkYXRhW2luZGV4ICsgMV0gPSBvYmplY3Q7XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKGlzUm9vdERlZXBSZWYoZGF0YVtpXSBhcyBUeXBlSWRzLCBkYXRhW2kgKyAxXSkpIHtcbiAgICAgIHByb2Nlc3NSb290UmVmKGkpO1xuICAgIH0gZWxzZSBpZiAoaXNGb3J3YXJkUmVmc01hcChkYXRhW2ldIGFzIFR5cGVJZHMpKSB7XG4gICAgICBjb250YWluZXIuJGZvcndhcmRSZWZzJCA9IGRhdGFbaSArIDFdIGFzIEFycmF5PG51bWJlciB8IHN0cmluZz47XG4gICAgfVxuICB9XG59XG4iXX0=","import { ensureMaterialized, vnode_getNode, vnode_isVNode, vnode_locate, } from '../../client/vnode-utils';\nimport { AsyncSignalImpl } from '../../reactive-primitives/impl/async-signal-impl';\nimport { ComputedSignalImpl } from '../../reactive-primitives/impl/computed-signal-impl';\nimport { SerializerSignalImpl } from '../../reactive-primitives/impl/serializer-signal-impl';\nimport { SignalImpl } from '../../reactive-primitives/impl/signal-impl';\nimport { getOrCreateStore } from '../../reactive-primitives/impl/store';\nimport { WrappedSignalImpl } from '../../reactive-primitives/impl/wrapped-signal-impl';\nimport { SubscriptionData } from '../../reactive-primitives/subscription-data';\nimport { EffectSubscription } from '../../reactive-primitives/types';\nimport { Task } from '../../use/use-task';\nimport { componentQrl } from '../component.public';\nimport { qError } from '../error/error';\nimport { JSXNodeImpl } from '../jsx/jsx-node';\nimport { createPropsProxy } from '../jsx/props-proxy';\nimport { _UNINITIALIZED } from '../utils/constants';\nimport { _constants } from './constants';\nimport { needsInflation } from './deser-proxy';\nimport { createQRLWithBackChannel } from './qrl-to-string';\nimport { SubscriptionPatch } from './subscription-patch';\nexport const resolvers = new WeakMap();\nexport const pendingStoreTargets = new Map();\nexport const allocate = (container, typeId, value) => {\n    switch (typeId) {\n        case 0 /* TypeIds.Plain */:\n            return value;\n        case 1 /* TypeIds.RootRef */:\n            return container.$getObjectById$(value);\n        case 2 /* TypeIds.ForwardRef */:\n            const rootRef = container.$getForwardRef$(value);\n            if (rootRef === -1 || rootRef === undefined) {\n                return _UNINITIALIZED;\n            }\n            else {\n                return container.$getObjectById$(rootRef);\n            }\n        case 14 /* TypeIds.ForwardRefs */:\n            return value;\n        case 3 /* TypeIds.Constant */:\n            return _constants[value];\n        case 4 /* TypeIds.Array */:\n            return Array(value.length / 2);\n        case 5 /* TypeIds.Object */:\n            return {};\n        case 9 /* TypeIds.QRL */: {\n            let qrl;\n            if (typeof value === 'string') {\n                const [chunkId, symbolId, captureIds] = value.split('#');\n                const chunk = container.$getObjectById$(chunkId);\n                const symbol = container.$getObjectById$(symbolId);\n                qrl = createQRLWithBackChannel(chunk, symbol, captureIds || null, container);\n            }\n            else {\n                // Sync qrl\n                qrl = createQRLWithBackChannel('', String(value), null, container);\n            }\n            return qrl;\n        }\n        case 28 /* TypeIds.Task */:\n            return new Task(-1, -1, null, null, null, null);\n        case 6 /* TypeIds.URL */:\n            return new URL(value);\n        case 7 /* TypeIds.Date */:\n            return new Date(value);\n        case 15 /* TypeIds.TemporalDuration */:\n            return Temporal.Duration.from(value);\n        case 16 /* TypeIds.TemporalInstant */:\n            return Temporal.Instant.from(value);\n        case 17 /* TypeIds.TemporalPlainDate */:\n            return Temporal.PlainDate.from(value);\n        case 18 /* TypeIds.TemporalPlainDateTime */:\n            return Temporal.PlainDateTime.from(value);\n        case 19 /* TypeIds.TemporalPlainMonthDay */:\n            return Temporal.PlainMonthDay.from(value);\n        case 20 /* TypeIds.TemporalPlainTime */:\n            return Temporal.PlainTime.from(value);\n        case 21 /* TypeIds.TemporalPlainYearMonth */:\n            return Temporal.PlainYearMonth.from(value);\n        case 22 /* TypeIds.TemporalZonedDateTime */:\n            return Temporal.ZonedDateTime.from(value);\n        case 8 /* TypeIds.Regex */:\n            const idx = value.lastIndexOf('/');\n            return new RegExp(value.slice(1, idx), value.slice(idx + 1));\n        case 23 /* TypeIds.Error */:\n            return new Error();\n        case 29 /* TypeIds.Component */:\n            return componentQrl(null);\n        case 30 /* TypeIds.Signal */:\n            return new SignalImpl(container, 0);\n        case 31 /* TypeIds.WrappedSignal */:\n            return new WrappedSignalImpl(container, null, null, null);\n        case 32 /* TypeIds.ComputedSignal */:\n            return new ComputedSignalImpl(container, null);\n        case 33 /* TypeIds.AsyncSignal */:\n            return new AsyncSignalImpl(container, null, undefined, {});\n        case 34 /* TypeIds.SerializerSignal */:\n            return new SerializerSignalImpl(container, null);\n        case 35 /* TypeIds.Store */: {\n            const data = value;\n            // We need to allocate the store first, before we inflate its data, because the data can\n            // reference the store itself (circular)\n            // Note: the actual store data will be inflated in inflate()\n            const t = data[0];\n            const v = data[1];\n            const storeValue = allocate(container, t, v);\n            const store = getOrCreateStore(storeValue, 0 /* StoreFlags.NONE */, container);\n            if (needsInflation(t)) {\n                pendingStoreTargets.set(storeValue, { t, v });\n            }\n            // We must store the reference so it doesn't get deserialized again in inflate()\n            data[0] = 0 /* TypeIds.Plain */;\n            data[1] = storeValue;\n            return store;\n        }\n        case 13 /* TypeIds.URLSearchParams */:\n            return new URLSearchParams(value);\n        case 36 /* TypeIds.FormData */:\n            return new FormData();\n        case 37 /* TypeIds.JSXNode */:\n            return new JSXNodeImpl(null, null, null, null, 0, null);\n        case 12 /* TypeIds.BigInt */:\n            return BigInt(value);\n        case 25 /* TypeIds.Set */:\n            return new Set();\n        case 26 /* TypeIds.Map */:\n            return new Map();\n        case 24 /* TypeIds.Promise */:\n            let resolve;\n            let reject;\n            const promise = new Promise((res, rej) => {\n                resolve = res;\n                reject = rej;\n            });\n            resolvers.set(promise, [resolve, reject]);\n            // Don't leave unhandled promise rejections\n            promise.catch(() => { });\n            return promise;\n        case 27 /* TypeIds.Uint8Array */:\n            const encodedLength = value.length;\n            const blocks = encodedLength >>> 2;\n            const rest = encodedLength & 3;\n            const decodedLength = blocks * 3 + (rest ? rest - 1 : 0);\n            return new Uint8Array(decodedLength);\n        case 38 /* TypeIds.PropsProxy */:\n            return createPropsProxy(null);\n        case 10 /* TypeIds.VNode */:\n            return retrieveVNodeOrDocument(container, value);\n        case 11 /* TypeIds.RefVNode */:\n            const vNode = retrieveVNodeOrDocument(container, value);\n            if (vnode_isVNode(vNode)) {\n                /**\n                 * If we have a ref, we need to ensure the element is materialized.\n                 *\n                 * Example:\n                 *\n                 * ```\n                 * const Cmp = component$(() => {\n                 *       const element = useSignal<HTMLDivElement>();\n                 *\n                 *       useVisibleTask$(() => {\n                 *         element.value!.innerHTML = 'I am the innerHTML content!';\n                 *       });\n                 *\n                 *       return (\n                 *          <div ref={element} />\n                 *       );\n                 * });\n                 * ```\n                 *\n                 * If we don't materialize early element with ref property, and change element innerHTML it\n                 * will be applied to a vnode tree during the lazy materialization, and it is wrong.\n                 *\n                 * Next if we rerender component it will remove applied innerHTML, because the system thinks\n                 * it is a part of the vnode tree.\n                 */\n                ensureMaterialized(vNode);\n                return vnode_getNode(vNode);\n            }\n            else {\n                throw qError(17 /* QError.serializeErrorExpectedVNode */, [typeof vNode]);\n            }\n        case 39 /* TypeIds.SubscriptionData */:\n            return new SubscriptionData({});\n        case 40 /* TypeIds.EffectSubscription */:\n            return new EffectSubscription(null, null, null, null);\n        case 41 /* TypeIds.SubscriptionPatch */:\n            return new SubscriptionPatch();\n        default:\n            throw qError(18 /* QError.serializeErrorCannotAllocate */, [typeId]);\n    }\n};\nexport function retrieveVNodeOrDocument(container, value) {\n    return value\n        ? container.rootVNode\n            ? vnode_locate(container.rootVNode, value)\n            : undefined\n        : container.element?.ownerDocument;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3NlcmRlcy9hbGxvY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixhQUFhLEVBQ2IsWUFBWSxHQUNiLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sNkNBQTZDLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFjLE1BQU0saUNBQWlDLENBQUM7QUFDakYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdwRCxPQUFPLEVBQUUsVUFBVSxFQUEyQixNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBc0MsQ0FBQztBQUMzRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBc0MsQ0FBQztBQUVqRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxTQUErQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQU8sRUFBRTtJQUMvRixRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2Y7WUFDRSxPQUFPLEtBQUssQ0FBQztRQUNmO1lBQ0UsT0FBTyxTQUFTLENBQUMsZUFBZSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ3BEO1lBQ0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFlLENBQUMsQ0FBQztZQUMzRCxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVDLE9BQU8sY0FBYyxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFNBQVMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNIO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sVUFBVSxDQUFDLEtBQWtCLENBQUMsQ0FBQztRQUN4QztZQUNFLE9BQU8sS0FBSyxDQUFFLEtBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUM7WUFDRSxPQUFPLEVBQUUsQ0FBQztRQUNaLHdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLEdBQWdCLENBQUM7WUFDckIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQVcsQ0FBQztnQkFDM0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQVcsQ0FBQztnQkFDN0QsR0FBRyxHQUFHLHdCQUF3QixDQUM1QixLQUFLLEVBQ0wsTUFBTSxFQUNOLFVBQVUsSUFBSSxJQUFJLEVBQ2xCLFNBQXlCLENBQzFCLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sV0FBVztnQkFDWCxHQUFHLEdBQUcsd0JBQXdCLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBeUIsQ0FBQyxDQUFDO1lBQ3JGLENBQUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRDtZQUNFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSyxFQUFFLElBQUssRUFBRSxJQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQ7WUFDRSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ2xDO1lBQ0UsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUNuQztZQUNFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDakQ7WUFDRSxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ2hEO1lBQ0UsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUNsRDtZQUNFLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDdEQ7WUFDRSxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ3REO1lBQ0UsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUNsRDtZQUNFLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDdkQ7WUFDRSxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ3REO1lBQ0UsTUFBTSxHQUFHLEdBQUksS0FBZ0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsT0FBTyxJQUFJLE1BQU0sQ0FBRSxLQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUcsS0FBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkY7WUFDRSxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7UUFDckI7WUFDRSxPQUFPLFlBQVksQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUM3QjtZQUNFLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QztZQUNFLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxTQUFnQixFQUFFLElBQUssRUFBRSxJQUFLLEVBQUUsSUFBSyxDQUFDLENBQUM7UUFDdEU7WUFDRSxPQUFPLElBQUksa0JBQWtCLENBQUMsU0FBZ0IsRUFBRSxJQUFLLENBQUMsQ0FBQztRQUN6RDtZQUNFLE9BQU8sSUFBSSxlQUFlLENBQUMsU0FBZ0IsRUFBRSxJQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFO1lBQ0UsT0FBTyxJQUFJLG9CQUFvQixDQUFDLFNBQWdCLEVBQUUsSUFBSyxDQUFDLENBQUM7UUFDM0QsMkJBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sSUFBSSxHQUFHLEtBQTJCLENBQUM7WUFDekMsd0ZBQXdGO1lBQ3hGLHdDQUF3QztZQUN4Qyw0REFBNEQ7WUFDNUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBWSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLDJCQUFtQixTQUF5QixDQUFDLENBQUM7WUFDdkYsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCxnRkFBZ0Y7WUFDaEYsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBZ0IsQ0FBQztZQUN4QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNEO1lBQ0UsT0FBTyxJQUFJLGVBQWUsQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUM5QztZQUNFLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN4QjtZQUNFLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRDtZQUNFLE9BQU8sTUFBTSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ2pDO1lBQ0UsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25CO1lBQ0UsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25CO1lBQ0UsSUFBSSxPQUE4QixDQUFDO1lBQ25DLElBQUksTUFBNkIsQ0FBQztZQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDdkMsT0FBTyxHQUFHLEdBQUcsQ0FBQztnQkFDZCxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFDLDJDQUEyQztZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sT0FBTyxDQUFDO1FBQ2pCO1lBQ0UsTUFBTSxhQUFhLEdBQUksS0FBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDL0MsTUFBTSxNQUFNLEdBQUcsYUFBYSxLQUFLLENBQUMsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkM7WUFDRSxPQUFPLGdCQUFnQixDQUFDLElBQUssQ0FBQyxDQUFDO1FBQ2pDO1lBQ0UsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQ7WUFDRSxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkF3Qkc7Z0JBQ0gsa0JBQWtCLENBQUMsS0FBcUIsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxNQUFNLDhDQUFxQyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0g7WUFDRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsRUFBa0IsQ0FBQyxDQUFDO1FBQ2xEO1lBQ0UsT0FBTyxJQUFJLGtCQUFrQixDQUFDLElBQUssRUFBRSxJQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFEO1lBQ0UsT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDakM7WUFDRSxNQUFNLE1BQU0sK0NBQXNDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxTQUErQixFQUMvQixLQUFxQjtJQUVyQixPQUFPLEtBQUs7UUFDVixDQUFDLENBQUUsU0FBaUIsQ0FBQyxTQUFTO1lBQzVCLENBQUMsQ0FBQyxZQUFZLENBQUUsU0FBaUIsQ0FBQyxTQUFTLEVBQUUsS0FBZSxDQUFDO1lBQzdELENBQUMsQ0FBQyxTQUFTO1FBQ2IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERvbUNvbnRhaW5lciB9IGZyb20gJy4uLy4uL2NsaWVudC9kb20tY29udGFpbmVyJztcbmltcG9ydCB7XG4gIGVuc3VyZU1hdGVyaWFsaXplZCxcbiAgdm5vZGVfZ2V0Tm9kZSxcbiAgdm5vZGVfaXNWTm9kZSxcbiAgdm5vZGVfbG9jYXRlLFxufSBmcm9tICcuLi8uLi9jbGllbnQvdm5vZGUtdXRpbHMnO1xuaW1wb3J0IHsgQXN5bmNTaWduYWxJbXBsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL2FzeW5jLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IENvbXB1dGVkU2lnbmFsSW1wbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9jb21wdXRlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBTZXJpYWxpemVyU2lnbmFsSW1wbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9zZXJpYWxpemVyLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IFNpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVTdG9yZSB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9zdG9yZSc7XG5pbXBvcnQgeyBXcmFwcGVkU2lnbmFsSW1wbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC93cmFwcGVkLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkRhdGEsIHR5cGUgTm9kZVByb3BEYXRhIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zdWJzY3JpcHRpb24tZGF0YSc7XG5pbXBvcnQgeyBFZmZlY3RTdWJzY3JpcHRpb24sIFN0b3JlRmxhZ3MgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHsgY29tcG9uZW50UXJsIH0gZnJvbSAnLi4vY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyBxRXJyb3IsIFFFcnJvciB9IGZyb20gJy4uL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IEpTWE5vZGVJbXBsIH0gZnJvbSAnLi4vanN4L2pzeC1ub2RlJztcbmltcG9ydCB7IGNyZWF0ZVByb3BzUHJveHkgfSBmcm9tICcuLi9qc3gvcHJvcHMtcHJveHknO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBEZXNlcmlhbGl6ZUNvbnRhaW5lciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IF9VTklOSVRJQUxJWkVEIH0gZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFZOb2RlIH0gZnJvbSAnLi4vdm5vZGUvZWxlbWVudC12bm9kZSc7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vdm5vZGUvdm5vZGUnO1xuaW1wb3J0IHsgX2NvbnN0YW50cywgVHlwZUlkcywgdHlwZSBDb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBuZWVkc0luZmxhdGlvbiB9IGZyb20gJy4vZGVzZXItcHJveHknO1xuaW1wb3J0IHsgY3JlYXRlUVJMV2l0aEJhY2tDaGFubmVsIH0gZnJvbSAnLi9xcmwtdG8tc3RyaW5nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvblBhdGNoIH0gZnJvbSAnLi9zdWJzY3JpcHRpb24tcGF0Y2gnO1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZXJzID0gbmV3IFdlYWtNYXA8UHJvbWlzZTxhbnk+LCBbRnVuY3Rpb24sIEZ1bmN0aW9uXT4oKTtcbmV4cG9ydCBjb25zdCBwZW5kaW5nU3RvcmVUYXJnZXRzID0gbmV3IE1hcDxvYmplY3QsIHsgdDogVHlwZUlkczsgdjogdW5rbm93biB9PigpO1xuXG5leHBvcnQgY29uc3QgYWxsb2NhdGUgPSAoY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lciwgdHlwZUlkOiBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogYW55ID0+IHtcbiAgc3dpdGNoICh0eXBlSWQpIHtcbiAgICBjYXNlIFR5cGVJZHMuUGxhaW46XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgY2FzZSBUeXBlSWRzLlJvb3RSZWY6XG4gICAgICByZXR1cm4gY29udGFpbmVyLiRnZXRPYmplY3RCeUlkJCh2YWx1ZSBhcyBudW1iZXIpO1xuICAgIGNhc2UgVHlwZUlkcy5Gb3J3YXJkUmVmOlxuICAgICAgY29uc3Qgcm9vdFJlZiA9IGNvbnRhaW5lci4kZ2V0Rm9yd2FyZFJlZiQodmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgIGlmIChyb290UmVmID09PSAtMSB8fCByb290UmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIF9VTklOSVRJQUxJWkVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQocm9vdFJlZik7XG4gICAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkZvcndhcmRSZWZzOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGNhc2UgVHlwZUlkcy5Db25zdGFudDpcbiAgICAgIHJldHVybiBfY29uc3RhbnRzW3ZhbHVlIGFzIENvbnN0YW50c107XG4gICAgY2FzZSBUeXBlSWRzLkFycmF5OlxuICAgICAgcmV0dXJuIEFycmF5KCh2YWx1ZSBhcyBhbnlbXSkubGVuZ3RoIC8gMik7XG4gICAgY2FzZSBUeXBlSWRzLk9iamVjdDpcbiAgICAgIHJldHVybiB7fTtcbiAgICBjYXNlIFR5cGVJZHMuUVJMOiB7XG4gICAgICBsZXQgcXJsOiBRUkxJbnRlcm5hbDtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IFtjaHVua0lkLCBzeW1ib2xJZCwgY2FwdHVyZUlkc10gPSB2YWx1ZS5zcGxpdCgnIycpO1xuICAgICAgICBjb25zdCBjaHVuayA9IGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQoY2h1bmtJZCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBjb250YWluZXIuJGdldE9iamVjdEJ5SWQkKHN5bWJvbElkKSBhcyBzdHJpbmc7XG4gICAgICAgIHFybCA9IGNyZWF0ZVFSTFdpdGhCYWNrQ2hhbm5lbChcbiAgICAgICAgICBjaHVuayxcbiAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgY2FwdHVyZUlkcyB8fCBudWxsLFxuICAgICAgICAgIGNvbnRhaW5lciBhcyBEb21Db250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN5bmMgcXJsXG4gICAgICAgIHFybCA9IGNyZWF0ZVFSTFdpdGhCYWNrQ2hhbm5lbCgnJywgU3RyaW5nKHZhbHVlKSwgbnVsbCwgY29udGFpbmVyIGFzIERvbUNvbnRhaW5lcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcXJsO1xuICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuVGFzazpcbiAgICAgIHJldHVybiBuZXcgVGFzaygtMSwgLTEsIG51bGwhLCBudWxsISwgbnVsbCEsIG51bGwpO1xuICAgIGNhc2UgVHlwZUlkcy5VUkw6XG4gICAgICByZXR1cm4gbmV3IFVSTCh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgVHlwZUlkcy5EYXRlOlxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlIGFzIG51bWJlcik7XG4gICAgY2FzZSBUeXBlSWRzLlRlbXBvcmFsRHVyYXRpb246XG4gICAgICByZXR1cm4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgVHlwZUlkcy5UZW1wb3JhbEluc3RhbnQ6XG4gICAgICByZXR1cm4gVGVtcG9yYWwuSW5zdGFudC5mcm9tKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSBUeXBlSWRzLlRlbXBvcmFsUGxhaW5EYXRlOlxuICAgICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluRGF0ZS5mcm9tKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSBUeXBlSWRzLlRlbXBvcmFsUGxhaW5EYXRlVGltZTpcbiAgICAgIHJldHVybiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lLmZyb20odmFsdWUgYXMgc3RyaW5nKTtcbiAgICBjYXNlIFR5cGVJZHMuVGVtcG9yYWxQbGFpbk1vbnRoRGF5OlxuICAgICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluTW9udGhEYXkuZnJvbSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgVHlwZUlkcy5UZW1wb3JhbFBsYWluVGltZTpcbiAgICAgIHJldHVybiBUZW1wb3JhbC5QbGFpblRpbWUuZnJvbSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgVHlwZUlkcy5UZW1wb3JhbFBsYWluWWVhck1vbnRoOlxuICAgICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluWWVhck1vbnRoLmZyb20odmFsdWUgYXMgc3RyaW5nKTtcbiAgICBjYXNlIFR5cGVJZHMuVGVtcG9yYWxab25lZERhdGVUaW1lOlxuICAgICAgcmV0dXJuIFRlbXBvcmFsLlpvbmVkRGF0ZVRpbWUuZnJvbSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgVHlwZUlkcy5SZWdleDpcbiAgICAgIGNvbnN0IGlkeCA9ICh2YWx1ZSBhcyBzdHJpbmcpLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cCgodmFsdWUgYXMgc3RyaW5nKS5zbGljZSgxLCBpZHgpLCAodmFsdWUgYXMgc3RyaW5nKS5zbGljZShpZHggKyAxKSk7XG4gICAgY2FzZSBUeXBlSWRzLkVycm9yOlxuICAgICAgcmV0dXJuIG5ldyBFcnJvcigpO1xuICAgIGNhc2UgVHlwZUlkcy5Db21wb25lbnQ6XG4gICAgICByZXR1cm4gY29tcG9uZW50UXJsKG51bGwhKTtcbiAgICBjYXNlIFR5cGVJZHMuU2lnbmFsOlxuICAgICAgcmV0dXJuIG5ldyBTaWduYWxJbXBsKGNvbnRhaW5lciBhcyBhbnksIDApO1xuICAgIGNhc2UgVHlwZUlkcy5XcmFwcGVkU2lnbmFsOlxuICAgICAgcmV0dXJuIG5ldyBXcmFwcGVkU2lnbmFsSW1wbChjb250YWluZXIgYXMgYW55LCBudWxsISwgbnVsbCEsIG51bGwhKTtcbiAgICBjYXNlIFR5cGVJZHMuQ29tcHV0ZWRTaWduYWw6XG4gICAgICByZXR1cm4gbmV3IENvbXB1dGVkU2lnbmFsSW1wbChjb250YWluZXIgYXMgYW55LCBudWxsISk7XG4gICAgY2FzZSBUeXBlSWRzLkFzeW5jU2lnbmFsOlxuICAgICAgcmV0dXJuIG5ldyBBc3luY1NpZ25hbEltcGwoY29udGFpbmVyIGFzIGFueSwgbnVsbCEsIHVuZGVmaW5lZCwge30pO1xuICAgIGNhc2UgVHlwZUlkcy5TZXJpYWxpemVyU2lnbmFsOlxuICAgICAgcmV0dXJuIG5ldyBTZXJpYWxpemVyU2lnbmFsSW1wbChjb250YWluZXIgYXMgYW55LCBudWxsISk7XG4gICAgY2FzZSBUeXBlSWRzLlN0b3JlOiB7XG4gICAgICBjb25zdCBkYXRhID0gdmFsdWUgYXMgW1R5cGVJZHMsIHVua25vd25dO1xuICAgICAgLy8gV2UgbmVlZCB0byBhbGxvY2F0ZSB0aGUgc3RvcmUgZmlyc3QsIGJlZm9yZSB3ZSBpbmZsYXRlIGl0cyBkYXRhLCBiZWNhdXNlIHRoZSBkYXRhIGNhblxuICAgICAgLy8gcmVmZXJlbmNlIHRoZSBzdG9yZSBpdHNlbGYgKGNpcmN1bGFyKVxuICAgICAgLy8gTm90ZTogdGhlIGFjdHVhbCBzdG9yZSBkYXRhIHdpbGwgYmUgaW5mbGF0ZWQgaW4gaW5mbGF0ZSgpXG4gICAgICBjb25zdCB0ID0gZGF0YVswXSBhcyBUeXBlSWRzO1xuICAgICAgY29uc3QgdiA9IGRhdGFbMV07XG4gICAgICBjb25zdCBzdG9yZVZhbHVlID0gYWxsb2NhdGUoY29udGFpbmVyLCB0LCB2KTtcbiAgICAgIGNvbnN0IHN0b3JlID0gZ2V0T3JDcmVhdGVTdG9yZShzdG9yZVZhbHVlLCBTdG9yZUZsYWdzLk5PTkUsIGNvbnRhaW5lciBhcyBEb21Db250YWluZXIpO1xuICAgICAgaWYgKG5lZWRzSW5mbGF0aW9uKHQpKSB7XG4gICAgICAgIHBlbmRpbmdTdG9yZVRhcmdldHMuc2V0KHN0b3JlVmFsdWUsIHsgdCwgdiB9KTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG11c3Qgc3RvcmUgdGhlIHJlZmVyZW5jZSBzbyBpdCBkb2Vzbid0IGdldCBkZXNlcmlhbGl6ZWQgYWdhaW4gaW4gaW5mbGF0ZSgpXG4gICAgICBkYXRhWzBdID0gVHlwZUlkcy5QbGFpbjtcbiAgICAgIGRhdGFbMV0gPSBzdG9yZVZhbHVlO1xuICAgICAgcmV0dXJuIHN0b3JlO1xuICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuVVJMU2VhcmNoUGFyYW1zOlxuICAgICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXModmFsdWUgYXMgc3RyaW5nKTtcbiAgICBjYXNlIFR5cGVJZHMuRm9ybURhdGE6XG4gICAgICByZXR1cm4gbmV3IEZvcm1EYXRhKCk7XG4gICAgY2FzZSBUeXBlSWRzLkpTWE5vZGU6XG4gICAgICByZXR1cm4gbmV3IEpTWE5vZGVJbXBsKG51bGwhLCBudWxsLCBudWxsLCBudWxsLCAwLCBudWxsKTtcbiAgICBjYXNlIFR5cGVJZHMuQmlnSW50OlxuICAgICAgcmV0dXJuIEJpZ0ludCh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgVHlwZUlkcy5TZXQ6XG4gICAgICByZXR1cm4gbmV3IFNldCgpO1xuICAgIGNhc2UgVHlwZUlkcy5NYXA6XG4gICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgIGNhc2UgVHlwZUlkcy5Qcm9taXNlOlxuICAgICAgbGV0IHJlc29sdmUhOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgICAgIGxldCByZWplY3QhOiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgfSk7XG4gICAgICByZXNvbHZlcnMuc2V0KHByb21pc2UsIFtyZXNvbHZlLCByZWplY3RdKTtcbiAgICAgIC8vIERvbid0IGxlYXZlIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnNcbiAgICAgIHByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgY2FzZSBUeXBlSWRzLlVpbnQ4QXJyYXk6XG4gICAgICBjb25zdCBlbmNvZGVkTGVuZ3RoID0gKHZhbHVlIGFzIHN0cmluZykubGVuZ3RoO1xuICAgICAgY29uc3QgYmxvY2tzID0gZW5jb2RlZExlbmd0aCA+Pj4gMjtcbiAgICAgIGNvbnN0IHJlc3QgPSBlbmNvZGVkTGVuZ3RoICYgMztcbiAgICAgIGNvbnN0IGRlY29kZWRMZW5ndGggPSBibG9ja3MgKiAzICsgKHJlc3QgPyByZXN0IC0gMSA6IDApO1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlY29kZWRMZW5ndGgpO1xuICAgIGNhc2UgVHlwZUlkcy5Qcm9wc1Byb3h5OlxuICAgICAgcmV0dXJuIGNyZWF0ZVByb3BzUHJveHkobnVsbCEpO1xuICAgIGNhc2UgVHlwZUlkcy5WTm9kZTpcbiAgICAgIHJldHVybiByZXRyaWV2ZVZOb2RlT3JEb2N1bWVudChjb250YWluZXIsIHZhbHVlKTtcbiAgICBjYXNlIFR5cGVJZHMuUmVmVk5vZGU6XG4gICAgICBjb25zdCB2Tm9kZSA9IHJldHJpZXZlVk5vZGVPckRvY3VtZW50KGNvbnRhaW5lciwgdmFsdWUpO1xuICAgICAgaWYgKHZub2RlX2lzVk5vZGUodk5vZGUpKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB3ZSBoYXZlIGEgcmVmLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgZWxlbWVudCBpcyBtYXRlcmlhbGl6ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEV4YW1wbGU6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKiBjb25zdCBDbXAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAgICAgICAgICogICAgICAgY29uc3QgZWxlbWVudCA9IHVzZVNpZ25hbDxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgdXNlVmlzaWJsZVRhc2skKCgpID0+IHtcbiAgICAgICAgICogICAgICAgICBlbGVtZW50LnZhbHVlIS5pbm5lckhUTUwgPSAnSSBhbSB0aGUgaW5uZXJIVE1MIGNvbnRlbnQhJztcbiAgICAgICAgICogICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgIHJldHVybiAoXG4gICAgICAgICAqICAgICAgICAgIDxkaXYgcmVmPXtlbGVtZW50fSAvPlxuICAgICAgICAgKiAgICAgICApO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHdlIGRvbid0IG1hdGVyaWFsaXplIGVhcmx5IGVsZW1lbnQgd2l0aCByZWYgcHJvcGVydHksIGFuZCBjaGFuZ2UgZWxlbWVudCBpbm5lckhUTUwgaXRcbiAgICAgICAgICogd2lsbCBiZSBhcHBsaWVkIHRvIGEgdm5vZGUgdHJlZSBkdXJpbmcgdGhlIGxhenkgbWF0ZXJpYWxpemF0aW9uLCBhbmQgaXQgaXMgd3JvbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5leHQgaWYgd2UgcmVyZW5kZXIgY29tcG9uZW50IGl0IHdpbGwgcmVtb3ZlIGFwcGxpZWQgaW5uZXJIVE1MLCBiZWNhdXNlIHRoZSBzeXN0ZW0gdGhpbmtzXG4gICAgICAgICAqIGl0IGlzIGEgcGFydCBvZiB0aGUgdm5vZGUgdHJlZS5cbiAgICAgICAgICovXG4gICAgICAgIGVuc3VyZU1hdGVyaWFsaXplZCh2Tm9kZSBhcyBFbGVtZW50Vk5vZGUpO1xuICAgICAgICByZXR1cm4gdm5vZGVfZ2V0Tm9kZSh2Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnNlcmlhbGl6ZUVycm9yRXhwZWN0ZWRWTm9kZSwgW3R5cGVvZiB2Tm9kZV0pO1xuICAgICAgfVxuICAgIGNhc2UgVHlwZUlkcy5TdWJzY3JpcHRpb25EYXRhOlxuICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25EYXRhKHt9IGFzIE5vZGVQcm9wRGF0YSk7XG4gICAgY2FzZSBUeXBlSWRzLkVmZmVjdFN1YnNjcmlwdGlvbjpcbiAgICAgIHJldHVybiBuZXcgRWZmZWN0U3Vic2NyaXB0aW9uKG51bGwhLCBudWxsISwgbnVsbCwgbnVsbCk7XG4gICAgY2FzZSBUeXBlSWRzLlN1YnNjcmlwdGlvblBhdGNoOlxuICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25QYXRjaCgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnNlcmlhbGl6ZUVycm9yQ2Fubm90QWxsb2NhdGUsIFt0eXBlSWRdKTtcbiAgfVxufTtcbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZVZOb2RlT3JEb2N1bWVudChcbiAgY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lcixcbiAgdmFsdWU6IHVua25vd24gfCBudWxsXG4pOiBWTm9kZSB8IERvY3VtZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgPyAoY29udGFpbmVyIGFzIGFueSkucm9vdFZOb2RlXG4gICAgICA/IHZub2RlX2xvY2F0ZSgoY29udGFpbmVyIGFzIGFueSkucm9vdFZOb2RlLCB2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogY29udGFpbmVyLmVsZW1lbnQ/Lm93bmVyRG9jdW1lbnQ7XG59XG4iXX0=","import { qError } from '../error/error';\nimport { qDev } from '../utils/qdev';\nimport { isFunction, isString } from '../utils/types';\nimport { createQRL } from './qrl-class';\n// <docs markdown=\"../../readme.md#qrl\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#qrl instead and run `pnpm docs.sync`)\n/**\n * Used by Qwik Optimizer to point to lazy-loaded resources.\n *\n * This function should be used by the Qwik Optimizer only. The function should not be directly\n * referred to in the source code of the application.\n *\n * @param chunkOrFn - Chunk name (or function which is stringified to extract chunk name)\n * @param symbol - Symbol to lazy load\n * @param lexicalScopeCapture - A set of lexically scoped variables to capture.\n * @public\n * @see `QRL`, `$(...)`\n */\n// </docs>\nexport const qrl = (chunkOrFn, symbol, lexicalScopeCapture, stackOffset = 0) => {\n    let chunk = null;\n    let symbolFn = null;\n    if (isFunction(chunkOrFn)) {\n        symbolFn = chunkOrFn;\n    }\n    else if (isString(chunkOrFn)) {\n        chunk = chunkOrFn;\n    }\n    else {\n        throw qError(7 /* QError.unknownTypeArgument */, [chunkOrFn]);\n    }\n    // Unwrap subscribers\n    return createQRL(chunk, symbol, null, symbolFn, lexicalScopeCapture);\n};\n/**\n * Create an inlined QRL. This is mostly useful on the server side for serialization.\n *\n * @param symbol - The object/function to register, or `null` to retrieve a previously registered\n *   one by hash\n * @param symbolName - The name of the symbol.\n * @param lexicalScopeCapture - A set of lexically scoped variables to capture.\n * @public\n */\nexport const inlinedQrl = (symbol, symbolName, lexicalScopeCapture) => {\n    // Unwrap subscribers\n    return createQRL(null, symbolName, symbol, null, lexicalScopeCapture);\n};\n/** @internal */\nexport const _noopQrl = (symbolName, lexicalScopeCapture) => {\n    return createQRL(null, symbolName, null, null, lexicalScopeCapture);\n};\n/** @internal */\nexport const _noopQrlDEV = (symbolName, opts, lexicalScopeCapture) => {\n    const newQrl = _noopQrl(symbolName, lexicalScopeCapture);\n    qDev && newQrl.$setDev$(opts);\n    return newQrl;\n};\n/** @internal */\nexport const _qrlWithChunk = (chunk, importer, symbol, lexicalScopeCapture) => {\n    return createQRL(chunk, symbol, null, importer, lexicalScopeCapture);\n};\n/** @internal */\nexport const _qrlWithChunkDEV = (chunk, importer, symbol, opts, lexicalScopeCapture) => {\n    const newQrl = _qrlWithChunk(chunk, importer, symbol, lexicalScopeCapture);\n    newQrl.$setDev$(opts);\n    return newQrl;\n};\n/** @internal */\nexport const qrlDEV = (chunkOrFn, symbol, opts, lexicalScopeCapture) => {\n    const newQrl = qrl(chunkOrFn, symbol, lexicalScopeCapture, 1);\n    qDev && newQrl.$setDev$(opts);\n    return newQrl;\n};\n/** @internal */\nexport const inlinedQrlDEV = (symbol, symbolName, opts, lexicalScopeCapture) => {\n    const qrl = inlinedQrl(symbol, symbolName, lexicalScopeCapture);\n    qDev && qrl.$setDev$(opts);\n    return qrl;\n};\n/**\n * Register a QRL symbol globally for lookup by its hash. This is used by the optimizer to register\n * the names passed in `reg_ctx_name`.\n *\n * @internal\n */\nexport const _regSymbol = (symbol, hash) => {\n    if (typeof globalThis.__qwik_reg_symbols === 'undefined') {\n        globalThis.__qwik_reg_symbols = new Map();\n    }\n    globalThis.__qwik_reg_symbols.set(hash, symbol);\n    return symbol;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvcXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFVMUQsd0NBQXdDO0FBQ3hDLHlDQUF5QztBQUN6Qyw4REFBOEQ7QUFDOUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQ2pCLFNBQXdDLEVBQ3hDLE1BQWMsRUFDZCxtQkFBZ0QsRUFDaEQsV0FBVyxHQUFHLENBQUMsRUFDUCxFQUFFO0lBQ1YsSUFBSSxLQUFLLEdBQWtCLElBQUksQ0FBQztJQUNoQyxJQUFJLFFBQVEsR0FBZ0QsSUFBSSxDQUFDO0lBQ2pFLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUIsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMvQixLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxNQUFNLHFDQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixPQUFPLFNBQVMsQ0FBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVB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Q3pELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgcURldiB9IGZyb20gJy4uL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVRUkwsIHR5cGUgUVJMSW50ZXJuYWwgfSBmcm9tICcuL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4vcXJsLnB1YmxpYyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFFSTERldiB7XG4gIGZpbGU6IHN0cmluZztcbiAgbG86IG51bWJlcjtcbiAgaGk6IG51bWJlcjtcbn1cblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi8uLi9yZWFkbWUubWQjcXJsXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vLi4vcmVhZG1lLm1kI3FybCBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogVXNlZCBieSBRd2lrIE9wdGltaXplciB0byBwb2ludCB0byBsYXp5LWxvYWRlZCByZXNvdXJjZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBieSB0aGUgUXdpayBPcHRpbWl6ZXIgb25seS4gVGhlIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgZGlyZWN0bHlcbiAqIHJlZmVycmVkIHRvIGluIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIGNodW5rT3JGbiAtIENodW5rIG5hbWUgKG9yIGZ1bmN0aW9uIHdoaWNoIGlzIHN0cmluZ2lmaWVkIHRvIGV4dHJhY3QgY2h1bmsgbmFtZSlcbiAqIEBwYXJhbSBzeW1ib2wgLSBTeW1ib2wgdG8gbGF6eSBsb2FkXG4gKiBAcGFyYW0gbGV4aWNhbFNjb3BlQ2FwdHVyZSAtIEEgc2V0IG9mIGxleGljYWxseSBzY29wZWQgdmFyaWFibGVzIHRvIGNhcHR1cmUuXG4gKiBAcHVibGljXG4gKiBAc2VlIGBRUkxgLCBgJCguLi4pYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgcXJsID0gPFQgPSBhbnk+KFxuICBjaHVua09yRm46IHN0cmluZyB8ICgoKSA9PiBQcm9taXNlPGFueT4pLFxuICBzeW1ib2w6IHN0cmluZyxcbiAgbGV4aWNhbFNjb3BlQ2FwdHVyZT86IFJlYWRvbmx5PHVua25vd25bXT4gfCBudWxsLFxuICBzdGFja09mZnNldCA9IDBcbik6IFFSTDxUPiA9PiB7XG4gIGxldCBjaHVuazogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBzeW1ib2xGbjogbnVsbCB8ICgoKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+KSA9IG51bGw7XG4gIGlmIChpc0Z1bmN0aW9uKGNodW5rT3JGbikpIHtcbiAgICBzeW1ib2xGbiA9IGNodW5rT3JGbjtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhjaHVua09yRm4pKSB7XG4gICAgY2h1bmsgPSBjaHVua09yRm47XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci51bmtub3duVHlwZUFyZ3VtZW50LCBbY2h1bmtPckZuXSk7XG4gIH1cblxuICAvLyBVbndyYXAgc3Vic2NyaWJlcnNcbiAgcmV0dXJuIGNyZWF0ZVFSTDxUPihjaHVuaywgc3ltYm9sLCBudWxsLCBzeW1ib2xGbiwgbGV4aWNhbFNjb3BlQ2FwdHVyZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbmxpbmVkIFFSTC4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIG9uIHRoZSBzZXJ2ZXIgc2lkZSBmb3Igc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3ltYm9sIC0gVGhlIG9iamVjdC9mdW5jdGlvbiB0byByZWdpc3Rlciwgb3IgYG51bGxgIHRvIHJldHJpZXZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKiAgIG9uZSBieSBoYXNoXG4gKiBAcGFyYW0gc3ltYm9sTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wuXG4gKiBAcGFyYW0gbGV4aWNhbFNjb3BlQ2FwdHVyZSAtIEEgc2V0IG9mIGxleGljYWxseSBzY29wZWQgdmFyaWFibGVzIHRvIGNhcHR1cmUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBpbmxpbmVkUXJsID0gPFQ+KFxuICBzeW1ib2w6IFQgfCBudWxsLFxuICBzeW1ib2xOYW1lOiBzdHJpbmcsXG4gIGxleGljYWxTY29wZUNhcHR1cmU/OiBSZWFkb25seTx1bmtub3duW10+XG4pOiBRUkw8VD4gPT4ge1xuICAvLyBVbndyYXAgc3Vic2NyaWJlcnNcbiAgcmV0dXJuIGNyZWF0ZVFSTDxUPihudWxsLCBzeW1ib2xOYW1lLCBzeW1ib2wsIG51bGwsIGxleGljYWxTY29wZUNhcHR1cmUpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9ub29wUXJsID0gPFQ+KFxuICBzeW1ib2xOYW1lOiBzdHJpbmcsXG4gIGxleGljYWxTY29wZUNhcHR1cmU/OiBSZWFkb25seTx1bmtub3duW10+XG4pOiBRUkw8VD4gPT4ge1xuICByZXR1cm4gY3JlYXRlUVJMPFQ+KG51bGwsIHN5bWJvbE5hbWUsIG51bGwsIG51bGwsIGxleGljYWxTY29wZUNhcHR1cmUpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9ub29wUXJsREVWID0gPFQ+KFxuICBzeW1ib2xOYW1lOiBzdHJpbmcsXG4gIG9wdHM6IFFSTERldixcbiAgbGV4aWNhbFNjb3BlQ2FwdHVyZT86IFJlYWRvbmx5PHVua25vd25bXT5cbik6IFFSTDxUPiA9PiB7XG4gIGNvbnN0IG5ld1FybCA9IF9ub29wUXJsKHN5bWJvbE5hbWUsIGxleGljYWxTY29wZUNhcHR1cmUpIGFzIFFSTEludGVybmFsPFQ+O1xuICBxRGV2ICYmIG5ld1FybC4kc2V0RGV2JChvcHRzKTtcbiAgcmV0dXJuIG5ld1FybDtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfcXJsV2l0aENodW5rID0gPFQgPSBhbnk+KFxuICBjaHVuazogc3RyaW5nLFxuICBpbXBvcnRlcjogKCkgPT4gUHJvbWlzZTxhbnk+LFxuICBzeW1ib2w6IHN0cmluZyxcbiAgbGV4aWNhbFNjb3BlQ2FwdHVyZT86IFJlYWRvbmx5PHVua25vd25bXT5cbik6IFFSTDxUPiA9PiB7XG4gIHJldHVybiBjcmVhdGVRUkw8VD4oY2h1bmssIHN5bWJvbCwgbnVsbCwgaW1wb3J0ZXIsIGxleGljYWxTY29wZUNhcHR1cmUpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9xcmxXaXRoQ2h1bmtERVYgPSA8VCA9IGFueT4oXG4gIGNodW5rOiBzdHJpbmcsXG4gIGltcG9ydGVyOiAoKSA9PiBQcm9taXNlPGFueT4sXG4gIHN5bWJvbDogc3RyaW5nLFxuICBvcHRzOiBRUkxEZXYsXG4gIGxleGljYWxTY29wZUNhcHR1cmU/OiBSZWFkb25seTx1bmtub3duW10+XG4pOiBRUkw8VD4gPT4ge1xuICBjb25zdCBuZXdRcmwgPSBfcXJsV2l0aENodW5rKGNodW5rLCBpbXBvcnRlciwgc3ltYm9sLCBsZXhpY2FsU2NvcGVDYXB0dXJlKSBhcyBRUkxJbnRlcm5hbDxUPjtcbiAgbmV3UXJsLiRzZXREZXYkKG9wdHMpO1xuICByZXR1cm4gbmV3UXJsO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHFybERFViA9IDxUID0gYW55PihcbiAgY2h1bmtPckZuOiBzdHJpbmcgfCAoKCkgPT4gUHJvbWlzZTxhbnk+KSxcbiAgc3ltYm9sOiBzdHJpbmcsXG4gIG9wdHM6IFFSTERldixcbiAgbGV4aWNhbFNjb3BlQ2FwdHVyZT86IFJlYWRvbmx5PHVua25vd25bXT5cbik6IFFSTDxUPiA9PiB7XG4gIGNvbnN0IG5ld1FybCA9IHFybChjaHVua09yRm4sIHN5bWJvbCwgbGV4aWNhbFNjb3BlQ2FwdHVyZSwgMSkgYXMgUVJMSW50ZXJuYWw8VD47XG4gIHFEZXYgJiYgbmV3UXJsLiRzZXREZXYkKG9wdHMpO1xuICByZXR1cm4gbmV3UXJsO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGlubGluZWRRcmxERVYgPSA8VCA9IGFueT4oXG4gIHN5bWJvbDogVCxcbiAgc3ltYm9sTmFtZTogc3RyaW5nLFxuICBvcHRzOiBRUkxEZXYsXG4gIGxleGljYWxTY29wZUNhcHR1cmU/OiBSZWFkb25seTx1bmtub3duW10+XG4pOiBRUkw8VD4gPT4ge1xuICBjb25zdCBxcmwgPSBpbmxpbmVkUXJsKHN5bWJvbCwgc3ltYm9sTmFtZSwgbGV4aWNhbFNjb3BlQ2FwdHVyZSkgYXMgUVJMSW50ZXJuYWw8VD47XG4gIHFEZXYgJiYgcXJsLiRzZXREZXYkKG9wdHMpO1xuICByZXR1cm4gcXJsO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIFFSTCBzeW1ib2wgZ2xvYmFsbHkgZm9yIGxvb2t1cCBieSBpdHMgaGFzaC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBvcHRpbWl6ZXIgdG8gcmVnaXN0ZXJcbiAqIHRoZSBuYW1lcyBwYXNzZWQgaW4gYHJlZ19jdHhfbmFtZWAuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBfcmVnU3ltYm9sID0gKHN5bWJvbDogYW55LCBoYXNoOiBzdHJpbmcpID0+IHtcbiAgaWYgKHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fcXdpa19yZWdfc3ltYm9scyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fcXdpa19yZWdfc3ltYm9scyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIH1cbiAgKGdsb2JhbFRoaXMgYXMgYW55KS5fX3F3aWtfcmVnX3N5bWJvbHMuc2V0KGhhc2gsIHN5bWJvbCk7XG4gIHJldHVybiBzeW1ib2w7XG59O1xuIl19","/** @internal */\nexport const getAsyncLocalStorage = () => {\n    const process = globalThis.process;\n    return process?.getBuiltinModule?.('node:async_hooks')?.AsyncLocalStorage;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtbG9jYWwtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcGxhdGZvcm0vYXN5bmMtbG9jYWwtc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO0lBQ3ZDLE1BQU0sT0FBTyxHQUFJLFVBQWdELENBQUMsT0FBTyxDQUFDO0lBQzFFLE9BQ0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMsa0JBQWtCLENBRy9DLEVBQUUsaUJBQWlCLENBQUM7QUFDdkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJ25vZGU6YXN5bmNfaG9va3MnO1xuXG50eXBlIFByb2Nlc3NXaXRoQnVpbHRpbnMgPSB7XG4gIGdldEJ1aWx0aW5Nb2R1bGU/OiAoaWQ6IHN0cmluZykgPT4gdW5rbm93bjtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBnZXRBc3luY0xvY2FsU3RvcmFnZSA9ICgpID0+IHtcbiAgY29uc3QgcHJvY2VzcyA9IChnbG9iYWxUaGlzIGFzIHsgcHJvY2Vzcz86IFByb2Nlc3NXaXRoQnVpbHRpbnMgfSkucHJvY2VzcztcbiAgcmV0dXJuIChcbiAgICBwcm9jZXNzPy5nZXRCdWlsdGluTW9kdWxlPy4oJ25vZGU6YXN5bmNfaG9va3MnKSBhc1xuICAgICAgfCB7IEFzeW5jTG9jYWxTdG9yYWdlPzogbmV3IDxUPigpID0+IEFzeW5jTG9jYWxTdG9yYWdlPFQ+IH1cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk/LkFzeW5jTG9jYWxTdG9yYWdlO1xufTtcbiJdfQ==","/** @file Shared types */\n/** @internal */\nexport function isStringifiable(value) {\n    return (value === null ||\n        typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'boolean');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXR5cGVzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5QkFBeUI7QUFLekIsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYztJQUM1QyxPQUFPLENBQ0wsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUMzQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAZmlsZSBTaGFyZWQgdHlwZXMgKi9cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHR5cGUgU3RyaW5naWZpYWJsZSA9IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBudWxsO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdpZmlhYmxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU3RyaW5naWZpYWJsZSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gICk7XG59XG4iXX0=","import { WrappedSignalImpl } from '../../reactive-primitives/impl/wrapped-signal-impl';\n/** @internal */\nexport const _fnSignal = (fn, args, fnStr) => {\n    return new WrappedSignalImpl(null, fn, args, fnStr || null);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lZC1mbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcXJsL2lubGluZWQtZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFdkYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixFQUFLLEVBQ0wsSUFBbUIsRUFDbkIsS0FBYyxFQUNkLEVBQUU7SUFDRixPQUFPLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyYXBwZWRTaWduYWxJbXBsIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3dyYXBwZWQtc2lnbmFsLWltcGwnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2ZuU2lnbmFsID0gPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBhbnk+KFxuICBmbjogVCxcbiAgYXJnczogUGFyYW1ldGVyczxUPixcbiAgZm5TdHI/OiBzdHJpbmdcbikgPT4ge1xuICByZXR1cm4gbmV3IFdyYXBwZWRTaWduYWxJbXBsKG51bGwsIGZuLCBhcmdzLCBmblN0ciB8fCBudWxsKTtcbn07XG4iXX0=","import { trackSignalAndAssignHost } from '../use/use-core';\nimport { version } from '../version';\nimport { createSerializationContext, } from './serdes/serialization-context';\n/** @internal */\nexport class _SharedContainer {\n    $version$;\n    $storeProxyMap$;\n    $rootContainer$ = null;\n    $isOutOfOrderSegment$ = false;\n    /// Current language locale\n    $locale$;\n    /// Retrieve Object from paused serialized state.\n    $getObjectById$;\n    $serverData$;\n    $currentUniqueId$ = 0;\n    $instanceHash$ = null;\n    $buildBase$ = null;\n    $renderPromise$ = null;\n    $resolveRenderPromise$ = null;\n    $pendingCount$ = 0;\n    constructor(serverData, locale) {\n        this.$serverData$ = serverData;\n        this.$locale$ = locale;\n        this.$version$ = version;\n        this.$storeProxyMap$ = new WeakMap();\n        this.$getObjectById$ = (_id) => {\n            throw Error('Not implemented');\n        };\n    }\n    trackSignalValue(signal, subscriber, property, data) {\n        return trackSignalAndAssignHost(signal, subscriber, property, this, data);\n    }\n    serializationCtxFactory(NodeConstructor, DomRefConstructor, symbolToChunkResolver, writer) {\n        return createSerializationContext(NodeConstructor, DomRefConstructor, symbolToChunkResolver, this.setHostProp.bind(this), this.$storeProxyMap$, writer);\n    }\n    $checkPendingCount$() {\n        if (this.$pendingCount$ === 0) {\n            this.$resolveRenderPromise$?.();\n            this.$renderPromise$ = null;\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2hhcmVkLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUXJDLE9BQU8sRUFDTCwwQkFBMEIsR0FFM0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd4QyxnQkFBZ0I7QUFDaEIsTUFBTSxPQUFnQixnQkFBZ0I7SUFDM0IsU0FBUyxDQUFTO0lBQ2xCLGVBQWUsQ0FBZ0I7SUFDeEMsZUFBZSxHQUFxQixJQUFJLENBQUM7SUFDekMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQzlCLDJCQUEyQjtJQUNsQixRQUFRLENBQVM7SUFDMUIsaURBQWlEO0lBQ3hDLGVBQWUsQ0FBK0I7SUFDdkQsWUFBWSxDQUFzQjtJQUNsQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFDckMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsZUFBZSxHQUF5QixJQUFJLENBQUM7SUFDN0Msc0JBQXNCLEdBQXdCLElBQUksQ0FBQztJQUNuRCxjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBRTNCLFlBQVksVUFBK0IsRUFBRSxNQUFjO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBb0IsRUFBRSxFQUFFO1lBQzlDLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUNkLE1BQWMsRUFDZCxVQUF1QixFQUN2QixRQUFnQixFQUNoQixJQUFzQjtRQUV0QixPQUFPLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLGVBRVEsRUFDUixpQkFFUSxFQUNSLHFCQUE0QyxFQUM1QyxNQUFxQjtRQUVyQixPQUFPLDBCQUEwQixDQUMvQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFDcEIsTUFBNkMsQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7Q0FlRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi4vdXNlL3VzZS1jb250ZXh0JztcbmltcG9ydCB7IHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vdmVyc2lvbic7XG5pbXBvcnQgdHlwZSB7IFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmltcG9ydCB0eXBlIHtcbiAgU1NSSW50ZXJuYWxTdHJlYW1Xcml0ZXIsXG4gIFN0cmVhbVdyaXRlcixcbiAgU3ltYm9sVG9DaHVua1Jlc29sdmVyLFxufSBmcm9tICcuLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNlcmlhbGl6YXRpb25Db250ZXh0LFxuICB0eXBlIFNlcmlhbGl6YXRpb25Db250ZXh0LFxufSBmcm9tICcuL3NlcmRlcy9zZXJpYWxpemF0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIsIEhvc3RFbGVtZW50LCBPYmpUb1Byb3h5TWFwIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBfU2hhcmVkQ29udGFpbmVyIGltcGxlbWVudHMgQ29udGFpbmVyIHtcbiAgcmVhZG9ubHkgJHZlcnNpb24kOiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRzdG9yZVByb3h5TWFwJDogT2JqVG9Qcm94eU1hcDtcbiAgJHJvb3RDb250YWluZXIkOiBDb250YWluZXIgfCBudWxsID0gbnVsbDtcbiAgJGlzT3V0T2ZPcmRlclNlZ21lbnQkID0gZmFsc2U7XG4gIC8vLyBDdXJyZW50IGxhbmd1YWdlIGxvY2FsZVxuICByZWFkb25seSAkbG9jYWxlJDogc3RyaW5nO1xuICAvLy8gUmV0cmlldmUgT2JqZWN0IGZyb20gcGF1c2VkIHNlcmlhbGl6ZWQgc3RhdGUuXG4gIHJlYWRvbmx5ICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGFueTtcbiAgJHNlcnZlckRhdGEkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAkY3VycmVudFVuaXF1ZUlkJCA9IDA7XG4gICRpbnN0YW5jZUhhc2gkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgJGJ1aWxkQmFzZSQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAkcmVuZGVyUHJvbWlzZSQ6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgJHJlc29sdmVSZW5kZXJQcm9taXNlJDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICRwZW5kaW5nQ291bnQkOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHNlcnZlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgdGhpcy4kc2VydmVyRGF0YSQgPSBzZXJ2ZXJEYXRhO1xuICAgIHRoaXMuJGxvY2FsZSQgPSBsb2NhbGU7XG4gICAgdGhpcy4kdmVyc2lvbiQgPSB2ZXJzaW9uO1xuICAgIHRoaXMuJHN0b3JlUHJveHlNYXAkID0gbmV3IFdlYWtNYXAoKTtcbiAgICB0aGlzLiRnZXRPYmplY3RCeUlkJCA9IChfaWQ6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgICAgdGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH07XG4gIH1cblxuICB0cmFja1NpZ25hbFZhbHVlPFQ+KFxuICAgIHNpZ25hbDogU2lnbmFsLFxuICAgIHN1YnNjcmliZXI6IEhvc3RFbGVtZW50LFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgZGF0YTogU3Vic2NyaXB0aW9uRGF0YVxuICApOiBUIHtcbiAgICByZXR1cm4gdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0KHNpZ25hbCwgc3Vic2NyaWJlciwgcHJvcGVydHksIHRoaXMsIGRhdGEpO1xuICB9XG5cbiAgc2VyaWFsaXphdGlvbkN0eEZhY3RvcnkoXG4gICAgTm9kZUNvbnN0cnVjdG9yOiB7XG4gICAgICBuZXcgKC4uLnJlc3Q6IGFueVtdKTogeyBfX2JyYW5kX186ICdTc3JOb2RlJyB9O1xuICAgIH0gfCBudWxsLFxuICAgIERvbVJlZkNvbnN0cnVjdG9yOiB7XG4gICAgICBuZXcgKC4uLnJlc3Q6IGFueVtdKTogeyBfX2JyYW5kX186ICdEb21SZWYnIH07XG4gICAgfSB8IG51bGwsXG4gICAgc3ltYm9sVG9DaHVua1Jlc29sdmVyOiBTeW1ib2xUb0NodW5rUmVzb2x2ZXIsXG4gICAgd3JpdGVyPzogU3RyZWFtV3JpdGVyXG4gICk6IFNlcmlhbGl6YXRpb25Db250ZXh0IHtcbiAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphdGlvbkNvbnRleHQoXG4gICAgICBOb2RlQ29uc3RydWN0b3IsXG4gICAgICBEb21SZWZDb25zdHJ1Y3RvcixcbiAgICAgIHN5bWJvbFRvQ2h1bmtSZXNvbHZlcixcbiAgICAgIHRoaXMuc2V0SG9zdFByb3AuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuJHN0b3JlUHJveHlNYXAkLFxuICAgICAgd3JpdGVyIGFzIFNTUkludGVybmFsU3RyZWFtV3JpdGVyIHwgdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gICRjaGVja1BlbmRpbmdDb3VudCQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuJHBlbmRpbmdDb3VudCQgPT09IDApIHtcbiAgICAgIHRoaXMuJHJlc29sdmVSZW5kZXJQcm9taXNlJD8uKCk7XG4gICAgICB0aGlzLiRyZW5kZXJQcm9taXNlJCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZW5zdXJlUHJvamVjdGlvblJlc29sdmVkKGhvc3Q6IEhvc3RFbGVtZW50KTogdm9pZDtcbiAgYWJzdHJhY3QgaGFuZGxlRXJyb3IoZXJyOiBhbnksICRob3N0JDogSG9zdEVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgYWJzdHJhY3QgZ2V0UGFyZW50SG9zdChob3N0OiBIb3N0RWxlbWVudCk6IEhvc3RFbGVtZW50IHwgbnVsbDtcbiAgYWJzdHJhY3Qgc2V0Q29udGV4dDxUPihob3N0OiBIb3N0RWxlbWVudCwgY29udGV4dDogQ29udGV4dElkPFQ+LCB2YWx1ZTogVCk6IHZvaWQ7XG4gIGFic3RyYWN0IHJlc29sdmVDb250ZXh0PFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBjb250ZXh0SWQ6IENvbnRleHRJZDxUPik6IFQgfCB1bmRlZmluZWQ7XG4gIGFic3RyYWN0IHNldEhvc3RQcm9wPFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZDtcbiAgYWJzdHJhY3QgZ2V0SG9zdFByb3A8VD4oaG9zdDogSG9zdEVsZW1lbnQsIG5hbWU6IHN0cmluZyk6IFQgfCBudWxsO1xuICBhYnN0cmFjdCAkYXBwZW5kU3R5bGUkKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBzdHlsZUlkOiBzdHJpbmcsXG4gICAgaG9zdDogSG9zdEVsZW1lbnQsXG4gICAgc2NvcGVkOiBib29sZWFuXG4gICk6IHZvaWQ7XG59XG4iXX0=","export function isAsyncGenerator(value) {\n    return !!value[Symbol.asyncIterator];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9hc3luYy1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWE7SUFDNUMsT0FBTyxDQUFDLENBQUUsS0FBd0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jR2VuZXJhdG9yKHZhbHVlOiBvYmplY3QpOiB2YWx1ZSBpcyBBc3luY0dlbmVyYXRvciB7XG4gIHJldHVybiAhISh2YWx1ZSBhcyBBc3luY0dlbmVyYXRvcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xufVxuIl19","const InternalServerComponentSymbol = Symbol('qInternalServerComponent');\n/** @internal */\nexport const createInternalServerComponent = (handler) => {\n    const component = (() => {\n        throw new Error('Internal server component must be handled by the SSR renderer.');\n    });\n    component[InternalServerComponentSymbol] = handler;\n    return component;\n};\n/** @internal */\nexport const isInternalServerComponent = (type) => {\n    return typeof type === 'function' && InternalServerComponentSymbol in type;\n};\n/** @internal */\nexport const getInternalServerComponentHandler = (type) => {\n    return type[InternalServerComponentSymbol];\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtc2VydmVyLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zc3IvaW50ZXJuYWwtc2VydmVyLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLDZCQUE2QixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBZXpFLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUMzQyxPQUF1QyxFQUNQLEVBQUU7SUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO0lBQ3BGLENBQUMsQ0FBOEMsQ0FBQztJQUNoRCxTQUFTLENBQUMsNkJBQTZCLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDbkQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBYSxFQUFtQyxFQUFFO0lBQzFGLE9BQU8sT0FBTyxJQUFJLEtBQUssVUFBVSxJQUFJLDZCQUE2QixJQUFJLElBQUksQ0FBQztBQUM3RSxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsQ0FDL0MsSUFBNkIsRUFDRyxFQUFFO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGdW5jdGlvbkNvbXBvbmVudCwgSlNYTm9kZUludGVybmFsIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU3RhY2tWYWx1ZSB9IGZyb20gJy4vc3NyLXJlbmRlci1qc3gnO1xuaW1wb3J0IHR5cGUgeyBTU1JDb250YWluZXIsIFNTUlJlbmRlckpTWE9wdGlvbnMgfSBmcm9tICcuL3Nzci10eXBlcyc7XG5cbmNvbnN0IEludGVybmFsU2VydmVyQ29tcG9uZW50U3ltYm9sID0gU3ltYm9sKCdxSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnQnKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHR5cGUgSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnRIYW5kbGVyID0gKFxuICBzc3I6IFNTUkNvbnRhaW5lcixcbiAganN4OiBKU1hOb2RlSW50ZXJuYWwsXG4gIG9wdGlvbnM6IFNTUlJlbmRlckpTWE9wdGlvbnMsXG4gIGVucXVldWU6ICh2YWx1ZTogU3RhY2tWYWx1ZSkgPT4gdm9pZFxuKSA9PiBWYWx1ZU9yUHJvbWlzZTx2b2lkPjtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHR5cGUgSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnQ8UFJPUFMgPSB1bmtub3duPiA9IEZ1bmN0aW9uQ29tcG9uZW50PFBST1BTPiAmIHtcbiAgW0ludGVybmFsU2VydmVyQ29tcG9uZW50U3ltYm9sXTogSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnRIYW5kbGVyO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUludGVybmFsU2VydmVyQ29tcG9uZW50ID0gPFBST1BTPihcbiAgaGFuZGxlcjogSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnRIYW5kbGVyXG4pOiBJbnRlcm5hbFNlcnZlckNvbXBvbmVudDxQUk9QUz4gPT4ge1xuICBjb25zdCBjb21wb25lbnQgPSAoKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgc2VydmVyIGNvbXBvbmVudCBtdXN0IGJlIGhhbmRsZWQgYnkgdGhlIFNTUiByZW5kZXJlci4nKTtcbiAgfSkgYXMgdW5rbm93biBhcyBJbnRlcm5hbFNlcnZlckNvbXBvbmVudDxQUk9QUz47XG4gIGNvbXBvbmVudFtJbnRlcm5hbFNlcnZlckNvbXBvbmVudFN5bWJvbF0gPSBoYW5kbGVyO1xuICByZXR1cm4gY29tcG9uZW50O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGlzSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnQgPSAodHlwZTogdW5rbm93bik6IHR5cGUgaXMgSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnQgPT4ge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnRTeW1ib2wgaW4gdHlwZTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBnZXRJbnRlcm5hbFNlcnZlckNvbXBvbmVudEhhbmRsZXIgPSAoXG4gIHR5cGU6IEludGVybmFsU2VydmVyQ29tcG9uZW50XG4pOiBJbnRlcm5hbFNlcnZlckNvbXBvbmVudEhhbmRsZXIgPT4ge1xuICByZXR1cm4gdHlwZVtJbnRlcm5hbFNlcnZlckNvbXBvbmVudFN5bWJvbF07XG59O1xuIl19","import { SERIALIZABLE_STATE } from '../shared/component.public';\nimport { ELEMENT_KEY, ELEMENT_PROPS, OnRenderProp } from '../shared/utils/markers';\nimport { executeComponent } from '../shared/component-execution';\nexport const applyInlineComponent = (ssr, componentHost, inlineComponentFunction, jsx) => {\n    const host = ssr.getOrCreateLastNode();\n    return executeComponent(ssr, host, componentHost, inlineComponentFunction, jsx.props);\n};\nexport const applyQwikComponentBody = (ssr, jsx, component) => {\n    const host = ssr.getOrCreateLastNode();\n    const [componentQrl] = component[SERIALIZABLE_STATE];\n    const srcProps = jsx.props;\n    if (srcProps && srcProps.children) {\n        delete srcProps.children;\n    }\n    host.setProp(OnRenderProp, componentQrl);\n    host.setProp(ELEMENT_PROPS, srcProps);\n    if (jsx.key !== null) {\n        host.setProp(ELEMENT_KEY, jsx.key);\n    }\n    return executeComponent(ssr, host, host, componentQrl, srcProps);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLXJlbmRlci1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc3NyL3Nzci1yZW5kZXItY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBbUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUlqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxHQUFpQixFQUNqQixhQUE4QixFQUM5Qix1QkFBd0MsRUFDeEMsR0FBWSxFQUNaLEVBQUU7SUFDRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN2QyxPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxHQUFpQixFQUNqQixHQUFZLEVBQ1osU0FBb0IsRUFDTyxFQUFFO0lBQzdCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBSSxTQUFpQixDQUFDLGtCQUFrQixDQUFtQyxDQUFDO0lBQ2hHLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDM0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBKU1hOb2RlIH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUnO1xuaW1wb3J0IHsgU0VSSUFMSVpBQkxFX1NUQVRFLCB0eXBlIENvbXBvbmVudCwgdHlwZSBPblJlbmRlckZuIH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IEVMRU1FTlRfS0VZLCBFTEVNRU5UX1BST1BTLCBPblJlbmRlclByb3AgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyB0eXBlIElTc3JOb2RlLCB0eXBlIFNTUkNvbnRhaW5lciB9IGZyb20gJy4vc3NyLXR5cGVzJztcbmltcG9ydCB7IGV4ZWN1dGVDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50LWV4ZWN1dGlvbic7XG5pbXBvcnQgdHlwZSB7IFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgSlNYT3V0cHV0IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5cbmV4cG9ydCBjb25zdCBhcHBseUlubGluZUNvbXBvbmVudCA9IChcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIGNvbXBvbmVudEhvc3Q6IElTc3JOb2RlIHwgbnVsbCxcbiAgaW5saW5lQ29tcG9uZW50RnVuY3Rpb246IE9uUmVuZGVyRm48YW55PixcbiAganN4OiBKU1hOb2RlXG4pID0+IHtcbiAgY29uc3QgaG9zdCA9IHNzci5nZXRPckNyZWF0ZUxhc3ROb2RlKCk7XG4gIHJldHVybiBleGVjdXRlQ29tcG9uZW50KHNzciwgaG9zdCwgY29tcG9uZW50SG9zdCwgaW5saW5lQ29tcG9uZW50RnVuY3Rpb24sIGpzeC5wcm9wcyk7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwbHlRd2lrQ29tcG9uZW50Qm9keSA9IChcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIGpzeDogSlNYTm9kZSxcbiAgY29tcG9uZW50OiBDb21wb25lbnRcbik6IFZhbHVlT3JQcm9taXNlPEpTWE91dHB1dD4gPT4ge1xuICBjb25zdCBob3N0ID0gc3NyLmdldE9yQ3JlYXRlTGFzdE5vZGUoKTtcbiAgY29uc3QgW2NvbXBvbmVudFFybF0gPSAoY29tcG9uZW50IGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXSBhcyBbUVJMSW50ZXJuYWw8T25SZW5kZXJGbjxhbnk+Pl07XG4gIGNvbnN0IHNyY1Byb3BzID0ganN4LnByb3BzO1xuICBpZiAoc3JjUHJvcHMgJiYgc3JjUHJvcHMuY2hpbGRyZW4pIHtcbiAgICBkZWxldGUgc3JjUHJvcHMuY2hpbGRyZW47XG4gIH1cbiAgaG9zdC5zZXRQcm9wKE9uUmVuZGVyUHJvcCwgY29tcG9uZW50UXJsKTtcbiAgaG9zdC5zZXRQcm9wKEVMRU1FTlRfUFJPUFMsIHNyY1Byb3BzKTtcbiAgaWYgKGpzeC5rZXkgIT09IG51bGwpIHtcbiAgICBob3N0LnNldFByb3AoRUxFTUVOVF9LRVksIGpzeC5rZXkpO1xuICB9XG4gIHJldHVybiBleGVjdXRlQ29tcG9uZW50KHNzciwgaG9zdCwgaG9zdCwgY29tcG9uZW50UXJsLCBzcmNQcm9wcyk7XG59O1xuIl19","import { isDev } from '@qwik.dev/core/build';\nimport { AsyncSignalImpl } from '../reactive-primitives/impl/async-signal-impl';\nimport { WrappedSignalImpl } from '../reactive-primitives/impl/wrapped-signal-impl';\nimport { isSignal } from '../reactive-primitives/utils';\nimport { isQwikComponent } from '../shared/component.public';\nimport { Fragment } from '../shared/jsx/jsx-runtime';\nimport { directGetPropsProxyProp } from '../shared/jsx/props-proxy';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { SSRComment, SSRRaw, SSRStream, SSRStreamBlock, } from '../shared/jsx/utils.public';\nimport { DEBUG_TYPE } from '../shared/types';\nimport { isAsyncGenerator } from '../shared/utils/async-generator';\nimport { EMPTY_OBJ } from '../shared/utils/flyweight';\nimport { getFileLocationFromJsx } from '../shared/utils/jsx-filename';\nimport { ELEMENT_KEY, QCursorBoundary, QDefaultSlot, QScopedStyle, QSlot, QSlotParent, qwikInspectorAttr, } from '../shared/utils/markers';\nimport { isPromise, retryOnPromise } from '../shared/utils/promises';\nimport { qInspector } from '../shared/utils/qdev';\nimport { addComponentStylePrefix } from '../shared/utils/scoped-styles';\nimport { isFunction } from '../shared/utils/types';\nimport { trackSignalAndAssignHost } from '../use/use-core';\nimport { getInternalServerComponentHandler, isInternalServerComponent, } from './internal-server-component';\nimport { applyInlineComponent, applyQwikComponentBody } from './ssr-render-component';\nimport { resolveSlotName } from '../shared/utils/prop';\nclass MaybeAsyncSignal {\n}\nfunction setParentOptions(mutable, styleScoped, parentComponentFrame) {\n    return () => {\n        mutable.currentStyleScoped = styleScoped;\n        mutable.parentComponentFrame = parentComponentFrame;\n    };\n}\n/** @internal */\nexport async function _walkJSX(ssr, value, options) {\n    const stack = [value];\n    const enqueue = (value) => stack.push(value);\n    const drain = async () => {\n        while (stack.length) {\n            try {\n                const value = stack.pop();\n                // Reference equality first (no prototype walk), then typeof\n                if (value === MaybeAsyncSignal) {\n                    const trackFn = stack.pop();\n                    await retryOnPromise(() => stack.push(trackFn()));\n                    continue;\n                }\n                if (typeof value === 'function') {\n                    if (value === Promise) {\n                        stack.push(await stack.pop());\n                    }\n                    else {\n                        const result = value.apply(ssr);\n                        if (isPromise(result)) {\n                            await result;\n                        }\n                    }\n                    continue;\n                }\n                processJSXNode(ssr, enqueue, value, options);\n            }\n            finally {\n                const pendingFlush = ssr.streamHandler.waitForPendingFlush();\n                if (isPromise(pendingFlush)) {\n                    await pendingFlush;\n                }\n            }\n        }\n    };\n    await drain();\n}\nfunction processJSXNode(ssr, enqueue, value, options) {\n    // console.log('processJSXNode', value);\n    if (value == null) {\n        ssr.textNode('');\n    }\n    else if (typeof value === 'boolean') {\n        ssr.textNode('');\n    }\n    else if (typeof value === 'number') {\n        ssr.textNode(String(value));\n    }\n    else if (typeof value === 'string') {\n        ssr.textNode(value);\n    }\n    else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n            for (let i = value.length - 1; i >= 0; i--) {\n                enqueue(value[i]);\n            }\n        }\n        else if (isSignal(value)) {\n            maybeAddPollingAsyncSignalToEagerResume(ssr.serializationCtx, value);\n            ssr.openFragment(isDev ? { [DEBUG_TYPE]: \"S\" /* VirtualType.WrappedSignal */ } : EMPTY_OBJ);\n            const signalNode = ssr.getOrCreateLastNode();\n            const unwrappedSignal = value instanceof WrappedSignalImpl ? value.$unwrapIfSignal$() : value;\n            enqueue(ssr.closeFragment);\n            enqueue(() => trackSignalAndAssignHost(unwrappedSignal, signalNode, \".\" /* EffectProperty.VNODE */, ssr));\n            enqueue(MaybeAsyncSignal);\n        }\n        else if (isPromise(value)) {\n            ssr.openFragment(isDev ? { [DEBUG_TYPE]: \"A\" /* VirtualType.Awaited */ } : EMPTY_OBJ);\n            enqueue(ssr.closeFragment);\n            enqueue(value);\n            enqueue(Promise);\n            enqueue(() => ssr.streamHandler.flush());\n        }\n        else if (isAsyncGenerator(value)) {\n            enqueue(async () => {\n                for await (const chunk of value) {\n                    await _walkJSX(ssr, chunk, {\n                        currentStyleScoped: options.currentStyleScoped,\n                        parentComponentFrame: options.parentComponentFrame,\n                    });\n                    await ssr.streamHandler.flush();\n                }\n            });\n        }\n        else {\n            const jsx = value;\n            const type = jsx.type;\n            // Below, JSXChildren allows functions and regexes, but we assume the dev only uses those as appropriate.\n            if (typeof type === 'string') {\n                appendClassIfScopedStyleExists(jsx, options.currentStyleScoped);\n                let qwikInspectorAttrValue = null;\n                if (isDev && jsx.dev && jsx.type !== 'head') {\n                    qwikInspectorAttrValue = getFileLocationFromJsx(jsx.dev);\n                    if (qInspector) {\n                        appendQwikInspectorAttribute(jsx, qwikInspectorAttrValue);\n                    }\n                }\n                const innerHTML = ssr.openElement(type, jsx.key, jsx.varProps, jsx.constProps, options.currentStyleScoped, qwikInspectorAttrValue, !!(jsx.flags & 4 /* JSXNodeFlags.HasCapturedProps */));\n                if (innerHTML) {\n                    ssr.htmlNode(innerHTML);\n                }\n                enqueue(ssr.closeElement);\n                if (type === 'head') {\n                    ssr.emitQwikLoaderAtTopIfNeeded();\n                    ssr.emitPreloaderPre();\n                    enqueue(ssr.additionalHeadNodes);\n                }\n                else if (type === 'body') {\n                    enqueue(ssr.additionalBodyNodes);\n                }\n                else {\n                    const innerSSR = ssr;\n                    if (!ssr.isHtml && !innerSSR._didAddQwikLoader && !ssr.$noScriptHere$) {\n                        ssr.emitQwikLoaderAtTopIfNeeded();\n                        ssr.emitPreloaderPre();\n                        innerSSR._didAddQwikLoader = true;\n                    }\n                }\n                const children = jsx.children;\n                children != null && enqueue(children);\n            }\n            else if (isFunction(type)) {\n                if (__EXPERIMENTAL__.suspense && isInternalServerComponent(type)) {\n                    enqueue(() => getInternalServerComponentHandler(type)(ssr, jsx, options, enqueue));\n                    return;\n                }\n                else if (type === Fragment) {\n                    const attrs = jsx.key != null ? { [ELEMENT_KEY]: jsx.key } : {};\n                    if (isDev) {\n                        attrs[DEBUG_TYPE] = \"F\" /* VirtualType.Fragment */; // Add debug info.\n                    }\n                    ssr.openFragment(attrs);\n                    enqueue(ssr.closeFragment);\n                    // In theory we could get functions or regexes, but we assume all is well\n                    const children = jsx.children;\n                    children != null && enqueue(children);\n                }\n                else if (type === Slot) {\n                    const componentFrame = options.parentComponentFrame;\n                    if (componentFrame) {\n                        const compId = componentFrame.componentNode.id || '';\n                        const projectionAttrs = isDev ? { [DEBUG_TYPE]: \"P\" /* VirtualType.Projection */ } : {};\n                        const cursorBoundary = directGetPropsProxyProp(jsx, QCursorBoundary);\n                        if (cursorBoundary) {\n                            projectionAttrs[QCursorBoundary] = cursorBoundary;\n                        }\n                        projectionAttrs[QSlotParent] = compId;\n                        ssr.openProjection(projectionAttrs);\n                        const host = componentFrame.componentNode;\n                        const node = ssr.getOrCreateLastNode();\n                        const slotName = resolveSlotName(host, jsx, ssr);\n                        projectionAttrs[QSlot] = slotName;\n                        enqueue(setParentOptions(options, options.currentStyleScoped, options.parentComponentFrame));\n                        enqueue(ssr.closeProjection);\n                        const slotDefaultChildren = jsx.children || null;\n                        const slotChildren = componentFrame.consumeChildrenForSlot(node, slotName) || slotDefaultChildren;\n                        if (slotDefaultChildren && slotChildren !== slotDefaultChildren) {\n                            ssr.addUnclaimedProjection(componentFrame, QDefaultSlot, slotDefaultChildren);\n                        }\n                        enqueue(slotChildren);\n                        enqueue(setParentOptions(options, componentFrame.projectionScopedStyle, componentFrame.projectionComponentFrame));\n                    }\n                    else {\n                        // Even thought we are not projecting we still need to leave a marker for the slot.\n                        let projectionAttrs = EMPTY_OBJ;\n                        if (isDev) {\n                            projectionAttrs = { [DEBUG_TYPE]: \"P\" /* VirtualType.Projection */ };\n                        }\n                        ssr.openFragment(projectionAttrs);\n                        ssr.closeFragment();\n                    }\n                }\n                else if (type === SSRComment) {\n                    ssr.commentNode(directGetPropsProxyProp(jsx, 'data') || '');\n                }\n                else if (type === SSRStream) {\n                    ssr.streamHandler.flush();\n                    const generator = jsx.children;\n                    let value;\n                    if (isFunction(generator)) {\n                        value = generator({\n                            async write(chunk) {\n                                await _walkJSX(ssr, chunk, {\n                                    currentStyleScoped: options.currentStyleScoped,\n                                    parentComponentFrame: options.parentComponentFrame,\n                                });\n                                await ssr.streamHandler.flush();\n                            },\n                        });\n                    }\n                    else {\n                        value = generator;\n                    }\n                    enqueue(value);\n                    isPromise(value) && enqueue(Promise);\n                }\n                else if (type === SSRRaw) {\n                    ssr.htmlNode(directGetPropsProxyProp(jsx, 'data'));\n                }\n                else if (type === SSRStreamBlock) {\n                    ssr.streamHandler.streamBlockStart();\n                    enqueue(() => ssr.streamHandler.streamBlockEnd());\n                    enqueue(jsx.children);\n                }\n                else if (isQwikComponent(type)) {\n                    // prod: use new instance of an object for props, we always modify props for a component\n                    const componentAttrs = {};\n                    if (isDev) {\n                        componentAttrs[DEBUG_TYPE] = \"C\" /* VirtualType.Component */;\n                    }\n                    ssr.openComponent(componentAttrs);\n                    const host = ssr.getOrCreateLastNode();\n                    const componentFrame = ssr.getParentComponentFrame();\n                    componentFrame.distributeChildrenIntoSlots(jsx.children, options.currentStyleScoped, options.parentComponentFrame);\n                    const jsxOutput = applyQwikComponentBody(ssr, jsx, type);\n                    enqueue(setParentOptions(options, options.currentStyleScoped, options.parentComponentFrame));\n                    enqueue(() => ssr.closeComponent());\n                    if (isPromise(jsxOutput)) {\n                        // Defer reading QScopedStyle until after the promise resolves\n                        enqueue(async () => {\n                            const resolvedOutput = await jsxOutput;\n                            const compStyleComponentId = addComponentStylePrefix(host.getProp(QScopedStyle));\n                            enqueue(resolvedOutput);\n                            enqueue(setParentOptions(options, compStyleComponentId, componentFrame));\n                        });\n                    }\n                    else {\n                        enqueue(jsxOutput);\n                        const compStyleComponentId = addComponentStylePrefix(host.getProp(QScopedStyle));\n                        enqueue(setParentOptions(options, compStyleComponentId, componentFrame));\n                    }\n                }\n                else {\n                    const inlineComponentProps = { [ELEMENT_KEY]: jsx.key };\n                    if (isDev) {\n                        inlineComponentProps[DEBUG_TYPE] = \"I\" /* VirtualType.InlineComponent */;\n                    }\n                    ssr.openFragment(inlineComponentProps);\n                    enqueue(ssr.closeFragment);\n                    const component = ssr.getParentComponentFrame();\n                    const jsxOutput = applyInlineComponent(ssr, component && component.componentNode, type, jsx);\n                    enqueue(jsxOutput);\n                    isPromise(jsxOutput) && enqueue(Promise);\n                }\n            }\n        }\n    }\n}\nfunction maybeAddPollingAsyncSignalToEagerResume(serializationCtx, signal) {\n    // Unwrap if it's a WrappedSignalImpl\n    const unwrappedSignal = signal instanceof WrappedSignalImpl ? signal.$unwrapIfSignal$() : signal;\n    if (unwrappedSignal instanceof AsyncSignalImpl) {\n        const expires = unwrappedSignal.$expires$;\n        // Don't check for $effects$ here - effects are added later during tracking.\n        // The AsyncSignal's polling mechanism will check for effects before scheduling.\n        // Only eager-resume for polling signals, not stale-only ones.\n        if (expires && !(unwrappedSignal.$flags$ & 256 /* AsyncSignalFlags.NO_POLL */)) {\n            serializationCtx.$addRoot$(unwrappedSignal);\n            serializationCtx.$eagerResume$.add(unwrappedSignal);\n        }\n    }\n}\nfunction appendQwikInspectorAttribute(jsx, qwikInspectorAttrValue) {\n    if (qwikInspectorAttrValue && (!jsx.constProps || !(qwikInspectorAttr in jsx.constProps))) {\n        (jsx.constProps ||= {})[qwikInspectorAttr] = qwikInspectorAttrValue;\n    }\n}\n// append class attribute if styleScopedId exists and there is no class attribute\nfunction appendClassIfScopedStyleExists(jsx, styleScoped) {\n    const classAttributeExists = directGetPropsProxyProp(jsx, 'class') != null;\n    if (!classAttributeExists && styleScoped) {\n        if (!jsx.constProps) {\n            jsx.constProps = {};\n        }\n        jsx.constProps['class'] = '';\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLXJlbmRlci1qc3guanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc3NyL3Nzci1yZW5kZXItanN4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFjLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2pELE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFNBQVMsRUFDVCxjQUFjLEdBRWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JF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QUFDLG9CQUFvQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBfcnVuIH0gZnJvbSAnLi4vY2xpZW50L3J1bi1xcmwnO1xuaW1wb3J0IHsgQXN5bmNTaWduYWxJbXBsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL2FzeW5jLXNpZ25hbC1pbXBsJztcbmltcG9ydCB7IFdyYXBwZWRTaWduYWxJbXBsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3dyYXBwZWQtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgQXN5bmNTaWduYWxGbGFncywgRWZmZWN0UHJvcGVydHkgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IGlzU2lnbmFsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy91dGlscyc7XG5pbXBvcnQgeyBpc1F3aWtDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdHlwZSBQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgZGlyZWN0R2V0UHJvcHNQcm94eVByb3AgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Byb3BzLXByb3h5JztcbmltcG9ydCB7IFNsb3QgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB7IEpTWE5vZGVGbGFncywgdHlwZSBKU1hOb2RlSW50ZXJuYWwsIHR5cGUgSlNYT3V0cHV0IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWENoaWxkcmVuIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB7XG4gIFNTUkNvbW1lbnQsXG4gIFNTUlJhdyxcbiAgU1NSU3RyZWFtLFxuICBTU1JTdHJlYW1CbG9jayxcbiAgdHlwZSBTU1JTdHJlYW1DaGlsZHJlbixcbn0gZnJvbSAnLi4vc2hhcmVkL2pzeC91dGlscy5wdWJsaWMnO1xuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemF0aW9uQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvaW5kZXgnO1xuaW1wb3J0IHsgREVCVUdfVFlQRSwgVmlydHVhbFR5cGUgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNBc3luY0dlbmVyYXRvciB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9hc3luYy1nZW5lcmF0b3InO1xuaW1wb3J0IHsgRU1QVFlfT0JKIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2ZseXdlaWdodCc7XG5pbXBvcnQgeyBnZXRGaWxlTG9jYXRpb25Gcm9tSnN4IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2pzeC1maWxlbmFtZSc7XG5pbXBvcnQge1xuICBFTEVNRU5UX0tFWSxcbiAgUUN1cnNvckJvdW5kYXJ5LFxuICBRRGVmYXVsdFNsb3QsXG4gIFFTY29wZWRTdHlsZSxcbiAgUVNsb3QsXG4gIFFTbG90UGFyZW50LFxuICBxd2lrSW5zcGVjdG9yQXR0cixcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgaXNQcm9taXNlLCByZXRyeU9uUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgeyBxSW5zcGVjdG9yIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgYWRkQ29tcG9uZW50U3R5bGVQcmVmaXggfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvc2NvcGVkLXN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IElubmVyQ29udGFpbmVyIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2NvbnRhaW5lcic7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCB0eXBlIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgdHlwZSB7IEN1cnNvckJvdW5kYXJ5IH0gZnJvbSAnLi4vdXNlL3VzZS1jdXJzb3ItYm91bmRhcnknO1xuaW1wb3J0IHtcbiAgZ2V0SW50ZXJuYWxTZXJ2ZXJDb21wb25lbnRIYW5kbGVyLFxuICBpc0ludGVybmFsU2VydmVyQ29tcG9uZW50LFxufSBmcm9tICcuL2ludGVybmFsLXNlcnZlci1jb21wb25lbnQnO1xuaW1wb3J0IHsgYXBwbHlJbmxpbmVDb21wb25lbnQsIGFwcGx5UXdpa0NvbXBvbmVudEJvZHkgfSBmcm9tICcuL3Nzci1yZW5kZXItY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgSVNzckNvbXBvbmVudEZyYW1lLCBTU1JDb250YWluZXIsIFNTUlJlbmRlckpTWE9wdGlvbnMgfSBmcm9tICcuL3Nzci10eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlU2xvdE5hbWUgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvcCc7XG5cbmNsYXNzIE1heWJlQXN5bmNTaWduYWwge31cblxudHlwZSBTdGFja0ZuID0gKCkgPT4gVmFsdWVPclByb21pc2U8dm9pZD47XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gVmFsdWVPclByb21pc2U8XG4gIHwgSlNYT3V0cHV0XG4gIHwgU3RhY2tGblxuICB8IFByb21pc2U8SlNYT3V0cHV0PlxuICB8IHR5cGVvZiBQcm9taXNlXG4gIHwgQXN5bmNHZW5lcmF0b3JcbiAgfCB0eXBlb2YgTWF5YmVBc3luY1NpZ25hbFxuPjtcblxuZnVuY3Rpb24gc2V0UGFyZW50T3B0aW9ucyhcbiAgbXV0YWJsZTogeyBjdXJyZW50U3R5bGVTY29wZWQ6IHN0cmluZyB8IG51bGw7IHBhcmVudENvbXBvbmVudEZyYW1lOiBJU3NyQ29tcG9uZW50RnJhbWUgfCBudWxsIH0sXG4gIHN0eWxlU2NvcGVkOiBzdHJpbmcgfCBudWxsLFxuICBwYXJlbnRDb21wb25lbnRGcmFtZTogSVNzckNvbXBvbmVudEZyYW1lIHwgbnVsbFxuKTogU3RhY2tGbiB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgbXV0YWJsZS5jdXJyZW50U3R5bGVTY29wZWQgPSBzdHlsZVNjb3BlZDtcbiAgICBtdXRhYmxlLnBhcmVudENvbXBvbmVudEZyYW1lID0gcGFyZW50Q29tcG9uZW50RnJhbWU7XG4gIH07XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfd2Fsa0pTWChcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIHZhbHVlOiBKU1hPdXRwdXQsXG4gIG9wdGlvbnM6IFNTUlJlbmRlckpTWE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFjazogU3RhY2tWYWx1ZVtdID0gW3ZhbHVlXTtcbiAgY29uc3QgZW5xdWV1ZSA9ICh2YWx1ZTogU3RhY2tWYWx1ZSkgPT4gc3RhY2sucHVzaCh2YWx1ZSk7XG4gIGNvbnN0IGRyYWluID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3RhY2sucG9wKCk7XG4gICAgICAgIC8vIFJlZmVyZW5jZSBlcXVhbGl0eSBmaXJzdCAobm8gcHJvdG90eXBlIHdhbGspLCB0aGVuIHR5cGVvZlxuICAgICAgICBpZiAodmFsdWUgPT09IE1heWJlQXN5bmNTaWduYWwpIHtcbiAgICAgICAgICBjb25zdCB0cmFja0ZuID0gc3RhY2sucG9wKCkgYXMgKCkgPT4gU3RhY2tWYWx1ZTtcbiAgICAgICAgICBhd2FpdCByZXRyeU9uUHJvbWlzZSgoKSA9PiBzdGFjay5wdXNoKHRyYWNrRm4oKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IFByb21pc2UpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYXdhaXQgKHN0YWNrLnBvcCgpIGFzIFByb21pc2U8SlNYT3V0cHV0PikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAodmFsdWUgYXMgU3RhY2tGbikuYXBwbHkoc3NyKTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICBhd2FpdCByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NKU1hOb2RlKHNzciwgZW5xdWV1ZSwgdmFsdWUgYXMgSlNYT3V0cHV0LCBvcHRpb25zKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdGbHVzaCA9IHNzci5zdHJlYW1IYW5kbGVyLndhaXRGb3JQZW5kaW5nRmx1c2goKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShwZW5kaW5nRmx1c2gpKSB7XG4gICAgICAgICAgYXdhaXQgcGVuZGluZ0ZsdXNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBhd2FpdCBkcmFpbigpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzSlNYTm9kZShcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIGVucXVldWU6ICh2YWx1ZTogU3RhY2tWYWx1ZSkgPT4gdm9pZCxcbiAgdmFsdWU6IEpTWE91dHB1dCxcbiAgb3B0aW9uczogU1NSUmVuZGVySlNYT3B0aW9uc1xuKSB7XG4gIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzSlNYTm9kZScsIHZhbHVlKTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICBzc3IudGV4dE5vZGUoJycpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgc3NyLnRleHROb2RlKCcnKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgc3NyLnRleHROb2RlKFN0cmluZyh2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBzc3IudGV4dE5vZGUodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSB2YWx1ZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBlbnF1ZXVlKHZhbHVlW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgbWF5YmVBZGRQb2xsaW5nQXN5bmNTaWduYWxUb0VhZ2VyUmVzdW1lKHNzci5zZXJpYWxpemF0aW9uQ3R4LCB2YWx1ZSk7XG4gICAgICBzc3Iub3BlbkZyYWdtZW50KGlzRGV2ID8geyBbREVCVUdfVFlQRV06IFZpcnR1YWxUeXBlLldyYXBwZWRTaWduYWwgfSA6IEVNUFRZX09CSik7XG4gICAgICBjb25zdCBzaWduYWxOb2RlID0gc3NyLmdldE9yQ3JlYXRlTGFzdE5vZGUoKTtcbiAgICAgIGNvbnN0IHVud3JhcHBlZFNpZ25hbCA9IHZhbHVlIGluc3RhbmNlb2YgV3JhcHBlZFNpZ25hbEltcGwgPyB2YWx1ZS4kdW53cmFwSWZTaWduYWwkKCkgOiB2YWx1ZTtcbiAgICAgIGVucXVldWUoc3NyLmNsb3NlRnJhZ21lbnQpO1xuICAgICAgZW5xdWV1ZSgoKSA9PlxuICAgICAgICB0cmFja1NpZ25hbEFuZEFzc2lnbkhvc3QodW53cmFwcGVkU2lnbmFsLCBzaWduYWxOb2RlLCBFZmZlY3RQcm9wZXJ0eS5WTk9ERSwgc3NyKVxuICAgICAgKTtcbiAgICAgIGVucXVldWUoTWF5YmVBc3luY1NpZ25hbCk7XG4gICAgfSBlbHNlIGlmIChpc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICBzc3Iub3BlbkZyYWdtZW50KGlzRGV2ID8geyBbREVCVUdfVFlQRV06IFZpcnR1YWxUeXBlLkF3YWl0ZWQgfSA6IEVNUFRZX09CSik7XG4gICAgICBlbnF1ZXVlKHNzci5jbG9zZUZyYWdtZW50KTtcbiAgICAgIGVucXVldWUodmFsdWUpO1xuICAgICAgZW5xdWV1ZShQcm9taXNlKTtcbiAgICAgIGVucXVldWUoKCkgPT4gc3NyLnN0cmVhbUhhbmRsZXIuZmx1c2goKSk7XG4gICAgfSBlbHNlIGlmIChpc0FzeW5jR2VuZXJhdG9yKHZhbHVlKSkge1xuICAgICAgZW5xdWV1ZShhc3luYyAoKSA9PiB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgdmFsdWUpIHtcbiAgICAgICAgICBhd2FpdCBfd2Fsa0pTWChzc3IsIGNodW5rIGFzIEpTWE91dHB1dCwge1xuICAgICAgICAgICAgY3VycmVudFN0eWxlU2NvcGVkOiBvcHRpb25zLmN1cnJlbnRTdHlsZVNjb3BlZCxcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudEZyYW1lOiBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHNzci5zdHJlYW1IYW5kbGVyLmZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBqc3ggPSB2YWx1ZSBhcyBKU1hOb2RlSW50ZXJuYWw7XG4gICAgICBjb25zdCB0eXBlID0ganN4LnR5cGU7XG4gICAgICAvLyBCZWxvdywgSlNYQ2hpbGRyZW4gYWxsb3dzIGZ1bmN0aW9ucyBhbmQgcmVnZXhlcywgYnV0IHdlIGFzc3VtZSB0aGUgZGV2IG9ubHkgdXNlcyB0aG9zZSBhcyBhcHByb3ByaWF0ZS5cbiAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXBwZW5kQ2xhc3NJZlNjb3BlZFN0eWxlRXhpc3RzKGpzeCwgb3B0aW9ucy5jdXJyZW50U3R5bGVTY29wZWQpO1xuICAgICAgICBsZXQgcXdpa0luc3BlY3RvckF0dHJWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChpc0RldiAmJiBqc3guZGV2ICYmIGpzeC50eXBlICE9PSAnaGVhZCcpIHtcbiAgICAgICAgICBxd2lrSW5zcGVjdG9yQXR0clZhbHVlID0gZ2V0RmlsZUxvY2F0aW9uRnJvbUpzeChqc3guZGV2KTtcbiAgICAgICAgICBpZiAocUluc3BlY3Rvcikge1xuICAgICAgICAgICAgYXBwZW5kUXdpa0luc3BlY3RvckF0dHJpYnV0ZShqc3gsIHF3aWtJbnNwZWN0b3JBdHRyVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlubmVySFRNTCA9IHNzci5vcGVuRWxlbWVudChcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGpzeC5rZXksXG4gICAgICAgICAganN4LnZhclByb3BzLFxuICAgICAgICAgIGpzeC5jb25zdFByb3BzLFxuICAgICAgICAgIG9wdGlvbnMuY3VycmVudFN0eWxlU2NvcGVkLFxuICAgICAgICAgIHF3aWtJbnNwZWN0b3JBdHRyVmFsdWUsXG4gICAgICAgICAgISEoanN4LmZsYWdzICYgSlNYTm9kZUZsYWdzLkhhc0NhcHR1cmVkUHJvcHMpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbm5lckhUTUwpIHtcbiAgICAgICAgICBzc3IuaHRtbE5vZGUoaW5uZXJIVE1MKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVucXVldWUoc3NyLmNsb3NlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdoZWFkJykge1xuICAgICAgICAgIHNzci5lbWl0UXdpa0xvYWRlckF0VG9wSWZOZWVkZWQoKTtcbiAgICAgICAgICBzc3IuZW1pdFByZWxvYWRlclByZSgpO1xuICAgICAgICAgIGVucXVldWUoc3NyLmFkZGl0aW9uYWxIZWFkTm9kZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib2R5Jykge1xuICAgICAgICAgIGVucXVldWUoc3NyLmFkZGl0aW9uYWxCb2R5Tm9kZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlubmVyU1NSID0gc3NyIGFzIFNTUkNvbnRhaW5lciAmIElubmVyQ29udGFpbmVyO1xuICAgICAgICAgIGlmICghc3NyLmlzSHRtbCAmJiAhaW5uZXJTU1IuX2RpZEFkZFF3aWtMb2FkZXIgJiYgIXNzci4kbm9TY3JpcHRIZXJlJCkge1xuICAgICAgICAgICAgc3NyLmVtaXRRd2lrTG9hZGVyQXRUb3BJZk5lZWRlZCgpO1xuICAgICAgICAgICAgc3NyLmVtaXRQcmVsb2FkZXJQcmUoKTtcbiAgICAgICAgICAgIGlubmVyU1NSLl9kaWRBZGRRd2lrTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGpzeC5jaGlsZHJlbiBhcyBKU1hPdXRwdXQ7XG4gICAgICAgIGNoaWxkcmVuICE9IG51bGwgJiYgZW5xdWV1ZShjaGlsZHJlbik7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odHlwZSkpIHtcbiAgICAgICAgaWYgKF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UgJiYgaXNJbnRlcm5hbFNlcnZlckNvbXBvbmVudCh0eXBlKSkge1xuICAgICAgICAgIGVucXVldWUoKCkgPT4gZ2V0SW50ZXJuYWxTZXJ2ZXJDb21wb25lbnRIYW5kbGVyKHR5cGUpKHNzciwganN4LCBvcHRpb25zLCBlbnF1ZXVlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZyYWdtZW50KSB7XG4gICAgICAgICAgY29uc3QgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+ID1cbiAgICAgICAgICAgIGpzeC5rZXkgIT0gbnVsbCA/IHsgW0VMRU1FTlRfS0VZXToganN4LmtleSB9IDoge307XG4gICAgICAgICAgaWYgKGlzRGV2KSB7XG4gICAgICAgICAgICBhdHRyc1tERUJVR19UWVBFXSA9IFZpcnR1YWxUeXBlLkZyYWdtZW50OyAvLyBBZGQgZGVidWcgaW5mby5cbiAgICAgICAgICB9XG4gICAgICAgICAgc3NyLm9wZW5GcmFnbWVudChhdHRycyk7XG4gICAgICAgICAgZW5xdWV1ZShzc3IuY2xvc2VGcmFnbWVudCk7XG4gICAgICAgICAgLy8gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBmdW5jdGlvbnMgb3IgcmVnZXhlcywgYnV0IHdlIGFzc3VtZSBhbGwgaXMgd2VsbFxuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ganN4LmNoaWxkcmVuIGFzIEpTWE91dHB1dDtcbiAgICAgICAgICBjaGlsZHJlbiAhPSBudWxsICYmIGVucXVldWUoY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNsb3QpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRGcmFtZSA9IG9wdGlvbnMucGFyZW50Q29tcG9uZW50RnJhbWU7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudEZyYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wSWQgPSBjb21wb25lbnRGcmFtZS5jb21wb25lbnROb2RlLmlkIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbkF0dHJzOiBQcm9wcyA9IGlzRGV2ID8geyBbREVCVUdfVFlQRV06IFZpcnR1YWxUeXBlLlByb2plY3Rpb24gfSA6IHt9O1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yQm91bmRhcnkgPSBkaXJlY3RHZXRQcm9wc1Byb3h5UHJvcDxDdXJzb3JCb3VuZGFyeSB8IG51bGwsIGFueT4oXG4gICAgICAgICAgICAgIGpzeCxcbiAgICAgICAgICAgICAgUUN1cnNvckJvdW5kYXJ5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnNvckJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgIHByb2plY3Rpb25BdHRyc1tRQ3Vyc29yQm91bmRhcnldID0gY3Vyc29yQm91bmRhcnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9qZWN0aW9uQXR0cnNbUVNsb3RQYXJlbnRdID0gY29tcElkO1xuICAgICAgICAgICAgc3NyLm9wZW5Qcm9qZWN0aW9uKHByb2plY3Rpb25BdHRycyk7XG4gICAgICAgICAgICBjb25zdCBob3N0ID0gY29tcG9uZW50RnJhbWUuY29tcG9uZW50Tm9kZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBzc3IuZ2V0T3JDcmVhdGVMYXN0Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2xvdE5hbWUgPSByZXNvbHZlU2xvdE5hbWUoaG9zdCwganN4LCBzc3IpO1xuICAgICAgICAgICAgcHJvamVjdGlvbkF0dHJzW1FTbG90XSA9IHNsb3ROYW1lO1xuXG4gICAgICAgICAgICBlbnF1ZXVlKFxuICAgICAgICAgICAgICBzZXRQYXJlbnRPcHRpb25zKG9wdGlvbnMsIG9wdGlvbnMuY3VycmVudFN0eWxlU2NvcGVkLCBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVucXVldWUoc3NyLmNsb3NlUHJvamVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBzbG90RGVmYXVsdENoaWxkcmVuOiBKU1hDaGlsZHJlbiB8IG51bGwgPSBqc3guY2hpbGRyZW4gfHwgbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHNsb3RDaGlsZHJlbiA9XG4gICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lLmNvbnN1bWVDaGlsZHJlbkZvclNsb3Qobm9kZSwgc2xvdE5hbWUpIHx8IHNsb3REZWZhdWx0Q2hpbGRyZW47XG4gICAgICAgICAgICBpZiAoc2xvdERlZmF1bHRDaGlsZHJlbiAmJiBzbG90Q2hpbGRyZW4gIT09IHNsb3REZWZhdWx0Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgc3NyLmFkZFVuY2xhaW1lZFByb2plY3Rpb24oY29tcG9uZW50RnJhbWUsIFFEZWZhdWx0U2xvdCwgc2xvdERlZmF1bHRDaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnF1ZXVlKHNsb3RDaGlsZHJlbiBhcyBKU1hPdXRwdXQpO1xuICAgICAgICAgICAgZW5xdWV1ZShcbiAgICAgICAgICAgICAgc2V0UGFyZW50T3B0aW9ucyhcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lLnByb2plY3Rpb25TY29wZWRTdHlsZSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZS5wcm9qZWN0aW9uQ29tcG9uZW50RnJhbWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2h0IHdlIGFyZSBub3QgcHJvamVjdGluZyB3ZSBzdGlsbCBuZWVkIHRvIGxlYXZlIGEgbWFya2VyIGZvciB0aGUgc2xvdC5cbiAgICAgICAgICAgIGxldCBwcm9qZWN0aW9uQXR0cnMgPSBFTVBUWV9PQko7XG4gICAgICAgICAgICBpZiAoaXNEZXYpIHtcbiAgICAgICAgICAgICAgcHJvamVjdGlvbkF0dHJzID0geyBbREVCVUdfVFlQRV06IFZpcnR1YWxUeXBlLlByb2plY3Rpb24gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNzci5vcGVuRnJhZ21lbnQocHJvamVjdGlvbkF0dHJzKTtcbiAgICAgICAgICAgIHNzci5jbG9zZUZyYWdtZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNTUkNvbW1lbnQpIHtcbiAgICAgICAgICBzc3IuY29tbWVudE5vZGUoZGlyZWN0R2V0UHJvcHNQcm94eVByb3AoanN4LCAnZGF0YScpIHx8ICcnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBTU1JTdHJlYW0pIHtcbiAgICAgICAgICBzc3Iuc3RyZWFtSGFuZGxlci5mbHVzaCgpO1xuICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IGpzeC5jaGlsZHJlbiBhcyBTU1JTdHJlYW1DaGlsZHJlbjtcbiAgICAgICAgICBsZXQgdmFsdWU6IEFzeW5jR2VuZXJhdG9yIHwgUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihnZW5lcmF0b3IpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGdlbmVyYXRvcih7XG4gICAgICAgICAgICAgIGFzeW5jIHdyaXRlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgX3dhbGtKU1goc3NyLCBjaHVuaywge1xuICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlU2NvcGVkOiBvcHRpb25zLmN1cnJlbnRTdHlsZVNjb3BlZCxcbiAgICAgICAgICAgICAgICAgIHBhcmVudENvbXBvbmVudEZyYW1lOiBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHNzci5zdHJlYW1IYW5kbGVyLmZsdXNoKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW5xdWV1ZSh2YWx1ZSBhcyBTdGFja1ZhbHVlKTtcbiAgICAgICAgICBpc1Byb21pc2UodmFsdWUpICYmIGVucXVldWUoUHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU1NSUmF3KSB7XG4gICAgICAgICAgc3NyLmh0bWxOb2RlKGRpcmVjdEdldFByb3BzUHJveHlQcm9wKGpzeCwgJ2RhdGEnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU1NSU3RyZWFtQmxvY2spIHtcbiAgICAgICAgICBzc3Iuc3RyZWFtSGFuZGxlci5zdHJlYW1CbG9ja1N0YXJ0KCk7XG4gICAgICAgICAgZW5xdWV1ZSgoKSA9PiBzc3Iuc3RyZWFtSGFuZGxlci5zdHJlYW1CbG9ja0VuZCgpKTtcbiAgICAgICAgICBlbnF1ZXVlKGpzeC5jaGlsZHJlbiBhcyBKU1hPdXRwdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUXdpa0NvbXBvbmVudCh0eXBlKSkge1xuICAgICAgICAgIC8vIHByb2Q6IHVzZSBuZXcgaW5zdGFuY2Ugb2YgYW4gb2JqZWN0IGZvciBwcm9wcywgd2UgYWx3YXlzIG1vZGlmeSBwcm9wcyBmb3IgYSBjb21wb25lbnRcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRBdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcbiAgICAgICAgICBpZiAoaXNEZXYpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudEF0dHJzW0RFQlVHX1RZUEVdID0gVmlydHVhbFR5cGUuQ29tcG9uZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzc3Iub3BlbkNvbXBvbmVudChjb21wb25lbnRBdHRycyk7XG4gICAgICAgICAgY29uc3QgaG9zdCA9IHNzci5nZXRPckNyZWF0ZUxhc3ROb2RlKCk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RnJhbWUgPSBzc3IuZ2V0UGFyZW50Q29tcG9uZW50RnJhbWUoKSE7XG4gICAgICAgICAgY29tcG9uZW50RnJhbWUhLmRpc3RyaWJ1dGVDaGlsZHJlbkludG9TbG90cyhcbiAgICAgICAgICAgIGpzeC5jaGlsZHJlbixcbiAgICAgICAgICAgIG9wdGlvbnMuY3VycmVudFN0eWxlU2NvcGVkLFxuICAgICAgICAgICAgb3B0aW9ucy5wYXJlbnRDb21wb25lbnRGcmFtZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBqc3hPdXRwdXQgPSBhcHBseVF3aWtDb21wb25lbnRCb2R5KHNzciwganN4LCB0eXBlKTtcbiAgICAgICAgICBlbnF1ZXVlKFxuICAgICAgICAgICAgc2V0UGFyZW50T3B0aW9ucyhvcHRpb25zLCBvcHRpb25zLmN1cnJlbnRTdHlsZVNjb3BlZCwgb3B0aW9ucy5wYXJlbnRDb21wb25lbnRGcmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGVucXVldWUoKCkgPT4gc3NyLmNsb3NlQ29tcG9uZW50KCkpO1xuICAgICAgICAgIGlmIChpc1Byb21pc2UoanN4T3V0cHV0KSkge1xuICAgICAgICAgICAgLy8gRGVmZXIgcmVhZGluZyBRU2NvcGVkU3R5bGUgdW50aWwgYWZ0ZXIgdGhlIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgICAgICAgIGVucXVldWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZE91dHB1dCA9IGF3YWl0IGpzeE91dHB1dDtcbiAgICAgICAgICAgICAgY29uc3QgY29tcFN0eWxlQ29tcG9uZW50SWQgPSBhZGRDb21wb25lbnRTdHlsZVByZWZpeChob3N0LmdldFByb3AoUVNjb3BlZFN0eWxlKSk7XG5cbiAgICAgICAgICAgICAgZW5xdWV1ZShyZXNvbHZlZE91dHB1dCk7XG4gICAgICAgICAgICAgIGVucXVldWUoc2V0UGFyZW50T3B0aW9ucyhvcHRpb25zLCBjb21wU3R5bGVDb21wb25lbnRJZCwgY29tcG9uZW50RnJhbWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnF1ZXVlKGpzeE91dHB1dCk7XG4gICAgICAgICAgICBjb25zdCBjb21wU3R5bGVDb21wb25lbnRJZCA9IGFkZENvbXBvbmVudFN0eWxlUHJlZml4KGhvc3QuZ2V0UHJvcChRU2NvcGVkU3R5bGUpKTtcbiAgICAgICAgICAgIGVucXVldWUoc2V0UGFyZW50T3B0aW9ucyhvcHRpb25zLCBjb21wU3R5bGVDb21wb25lbnRJZCwgY29tcG9uZW50RnJhbWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaW5saW5lQ29tcG9uZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+ID0geyBbRUxFTUVOVF9LRVldOiBqc3gua2V5IH07XG4gICAgICAgICAgaWYgKGlzRGV2KSB7XG4gICAgICAgICAgICBpbmxpbmVDb21wb25lbnRQcm9wc1tERUJVR19UWVBFXSA9IFZpcnR1YWxUeXBlLklubGluZUNvbXBvbmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3NyLm9wZW5GcmFnbWVudChpbmxpbmVDb21wb25lbnRQcm9wcyk7XG4gICAgICAgICAgZW5xdWV1ZShzc3IuY2xvc2VGcmFnbWVudCk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gc3NyLmdldFBhcmVudENvbXBvbmVudEZyYW1lKCk7XG4gICAgICAgICAgY29uc3QganN4T3V0cHV0ID0gYXBwbHlJbmxpbmVDb21wb25lbnQoXG4gICAgICAgICAgICBzc3IsXG4gICAgICAgICAgICBjb21wb25lbnQgJiYgY29tcG9uZW50LmNvbXBvbmVudE5vZGUsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAganN4XG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbnF1ZXVlKGpzeE91dHB1dCk7XG4gICAgICAgICAgaXNQcm9taXNlKGpzeE91dHB1dCkgJiYgZW5xdWV1ZShQcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZUFkZFBvbGxpbmdBc3luY1NpZ25hbFRvRWFnZXJSZXN1bWUoXG4gIHNlcmlhbGl6YXRpb25DdHg6IFNlcmlhbGl6YXRpb25Db250ZXh0LFxuICBzaWduYWw6IHVua25vd25cbikge1xuICAvLyBVbndyYXAgaWYgaXQncyBhIFdyYXBwZWRTaWduYWxJbXBsXG4gIGNvbnN0IHVud3JhcHBlZFNpZ25hbCA9IHNpZ25hbCBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWxJbXBsID8gc2lnbmFsLiR1bndyYXBJZlNpZ25hbCQoKSA6IHNpZ25hbDtcblxuICBpZiAodW53cmFwcGVkU2lnbmFsIGluc3RhbmNlb2YgQXN5bmNTaWduYWxJbXBsKSB7XG4gICAgY29uc3QgZXhwaXJlcyA9IHVud3JhcHBlZFNpZ25hbC4kZXhwaXJlcyQ7XG4gICAgLy8gRG9uJ3QgY2hlY2sgZm9yICRlZmZlY3RzJCBoZXJlIC0gZWZmZWN0cyBhcmUgYWRkZWQgbGF0ZXIgZHVyaW5nIHRyYWNraW5nLlxuICAgIC8vIFRoZSBBc3luY1NpZ25hbCdzIHBvbGxpbmcgbWVjaGFuaXNtIHdpbGwgY2hlY2sgZm9yIGVmZmVjdHMgYmVmb3JlIHNjaGVkdWxpbmcuXG4gICAgLy8gT25seSBlYWdlci1yZXN1bWUgZm9yIHBvbGxpbmcgc2lnbmFscywgbm90IHN0YWxlLW9ubHkgb25lcy5cbiAgICBpZiAoZXhwaXJlcyAmJiAhKHVud3JhcHBlZFNpZ25hbC4kZmxhZ3MkICYgQXN5bmNTaWduYWxGbGFncy5OT19QT0xMKSkge1xuICAgICAgc2VyaWFsaXphdGlvbkN0eC4kYWRkUm9vdCQodW53cmFwcGVkU2lnbmFsKTtcbiAgICAgIHNlcmlhbGl6YXRpb25DdHguJGVhZ2VyUmVzdW1lJC5hZGQodW53cmFwcGVkU2lnbmFsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwZW5kUXdpa0luc3BlY3RvckF0dHJpYnV0ZShqc3g6IEpTWE5vZGVJbnRlcm5hbCwgcXdpa0luc3BlY3RvckF0dHJWYWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAocXdpa0luc3BlY3RvckF0dHJWYWx1ZSAmJiAoIWpzeC5jb25zdFByb3BzIHx8ICEocXdpa0luc3BlY3RvckF0dHIgaW4ganN4LmNvbnN0UHJvcHMpKSkge1xuICAgIChqc3guY29uc3RQcm9wcyB8fD0ge30pW3F3aWtJbnNwZWN0b3JBdHRyXSA9IHF3aWtJbnNwZWN0b3JBdHRyVmFsdWU7XG4gIH1cbn1cblxuLy8gYXBwZW5kIGNsYXNzIGF0dHJpYnV0ZSBpZiBzdHlsZVNjb3BlZElkIGV4aXN0cyBhbmQgdGhlcmUgaXMgbm8gY2xhc3MgYXR0cmlidXRlXG5mdW5jdGlvbiBhcHBlbmRDbGFzc0lmU2NvcGVkU3R5bGVFeGlzdHMoanN4OiBKU1hOb2RlSW50ZXJuYWwsIHN0eWxlU2NvcGVkOiBzdHJpbmcgfCBudWxsKSB7XG4gIGNvbnN0IGNsYXNzQXR0cmlidXRlRXhpc3RzID0gZGlyZWN0R2V0UHJvcHNQcm94eVByb3AoanN4LCAnY2xhc3MnKSAhPSBudWxsO1xuICBpZiAoIWNsYXNzQXR0cmlidXRlRXhpc3RzICYmIHN0eWxlU2NvcGVkKSB7XG4gICAgaWYgKCFqc3guY29uc3RQcm9wcykge1xuICAgICAganN4LmNvbnN0UHJvcHMgPSB7fTtcbiAgICB9XG4gICAganN4LmNvbnN0UHJvcHNbJ2NsYXNzJ10gPSAnJztcbiAgfVxufVxuIl19","import { isDev } from '@qwik.dev/core/build';\nimport { assertDefined } from '../shared/error/assert';\nimport { _captures } from '../shared/qrl/qrl-class';\n// <docs markdown=\"../readme.md#useLexicalScope\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useLexicalScope instead and run `pnpm docs.sync`)\n/**\n * Used by the Qwik Optimizer to restore the lexically scoped variables.\n *\n * This method should not be present in the application source code.\n *\n * NOTE: `useLexicalScope` method can only be used in the synchronous portion of the callback\n * (before any `await` statements.)\n *\n * @deprecated Use `_captures` instead.\n * @internal\n */\n// </docs>\nexport const useLexicalScope = () => {\n    isDev && assertDefined(_captures, 'invoke: captures must be defined for useLexicalScope()');\n    return _captures;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxleGljYWwtc2NvcGUucHVibGljLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtbGV4aWNhbC1zY29wZS5wdWJsaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsaURBQWlEO0FBQ2pELHlDQUF5QztBQUN6Qyx1RUFBdUU7QUFDdkU7Ozs7Ozs7Ozs7R0FVRztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsR0FBNkIsRUFBRTtJQUM1RCxLQUFLLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSx3REFBd0QsQ0FBQyxDQUFDO0lBQzVGLE9BQU8sU0FBaUIsQ0FBQztBQUMzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfZ2V0UUNvbnRhaW5lckVsZW1lbnQgfSBmcm9tICcuLi9jbGllbnQvZG9tLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IF9jYXB0dXJlcyB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlTGV4aWNhbFNjb3BlXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI3VzZUxleGljYWxTY29wZSBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogVXNlZCBieSB0aGUgUXdpayBPcHRpbWl6ZXIgdG8gcmVzdG9yZSB0aGUgbGV4aWNhbGx5IHNjb3BlZCB2YXJpYWJsZXMuXG4gKlxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBwcmVzZW50IGluIHRoZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZS5cbiAqXG4gKiBOT1RFOiBgdXNlTGV4aWNhbFNjb3BlYCBtZXRob2QgY2FuIG9ubHkgYmUgdXNlZCBpbiB0aGUgc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgY2FsbGJhY2tcbiAqIChiZWZvcmUgYW55IGBhd2FpdGAgc3RhdGVtZW50cy4pXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBfY2FwdHVyZXNgIGluc3RlYWQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IHVzZUxleGljYWxTY29wZSA9IDxWQVJTIGV4dGVuZHMgYW55W10+KCk6IFZBUlMgPT4ge1xuICBpc0RldiAmJiBhc3NlcnREZWZpbmVkKF9jYXB0dXJlcywgJ2ludm9rZTogY2FwdHVyZXMgbXVzdCBiZSBkZWZpbmVkIGZvciB1c2VMZXhpY2FsU2NvcGUoKScpO1xuICByZXR1cm4gX2NhcHR1cmVzIGFzIFZBUlM7XG59O1xuIl19","import { qwikDebugToString } from '../debug';\nimport { _captures } from '../internal';\nimport { createStore } from '../reactive-primitives/impl/store';\nimport { createAsyncQrl, } from '../reactive-primitives/signal.public';\nimport { createQRL } from '../shared/qrl/qrl-class';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { isPromise } from '../shared/utils/promises';\nimport { useSequentialScope } from './use-sequential-scope';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('RESOURCE', ...args.map(qwikDebugToString));\n/**\n * The resource function wrapper\n *\n * @internal\n */\nexport const _rsc = async (arg) => {\n    const [fn, ref] = _captures;\n    DEBUG && log('invoke resource function');\n    const result = await fn(arg);\n    DEBUG && log('resource function resolved', result);\n    if (result && typeof result === 'object') {\n        if (ref.r) {\n            Object.assign(ref.r, result);\n        }\n        else {\n            // We need lazy creation because we don't know if it will be an array or an object, and we want to preserve the original reference for reactivity to work\n            ref.r = createStore(fn.$container$, result, 1 /* StoreFlags.RECURSIVE */);\n            DEBUG && log('store created', ref.r);\n        }\n    }\n    else {\n        ref.r = result;\n    }\n    return { r: ref.r };\n};\n/** @internal */\nexport const useResourceQrl = (qrl, opts) => {\n    assertQrl(qrl);\n    const { val, set, iCtx } = useSequentialScope();\n    if (val) {\n        return val;\n    }\n    const ref = {};\n    // Wrap the function so we can maintain a stable reference to the store\n    const wrapped = createQRL(null, '_rsc', _rsc, null, [qrl, ref], iCtx.$container$);\n    const asyncSignal = createAsyncQrl(wrapped, {\n        timeout: opts?.timeout,\n        container: iCtx.$container$,\n        concurrency: 0,\n    });\n    // Resource is eager\n    asyncSignal.$computeIfNeeded$();\n    // Create a wrapper that presents the Promise-based ResourceReturn API\n    const resource = {\n        __brand: 'resource',\n        signal: asyncSignal,\n        get value() {\n            return asyncSignal\n                .promise()\n                .then(() => (asyncSignal.error ? Promise.reject(asyncSignal.error) : asyncSignal.value.r));\n        },\n        get loading() {\n            return asyncSignal.loading;\n        },\n    };\n    set(resource);\n    return resource;\n};\n/**\n * ```tsx\n * const Cmp = component$(() => {\n *   const city = useSignal('');\n *\n *   const weather = useAsync$(async ({ track, cleanup, abortSignal }) => {\n *     const cityName = track(city);\n *     const res = await fetch(`http://weatherdata.com?city=${cityName}`, {\n *       signal: abortSignal,\n *     });\n *     const temp = (await res.json()) as { temp: number };\n *     return temp;\n *   });\n *\n *   return (\n *     <div>\n *       <input name=\"city\" bind:value={city} />\n *       <div>\n *         Temperature:{' '}\n *         {weather.loading\n *           ? 'Loading...'\n *           : weather.error\n *             ? `Error: ${weather.error.message}`\n *             : weather.value.temp}\n *       </div>\n *     </div>\n *   );\n * });\n * ```\n *\n * @deprecated Use `useAsync$` instead, which is more efficient, and has a more flexible API. Just\n *   read the `loading` and `error` properties from the returned signal to determine the status.\n * @public\n */\nexport const Resource = ({ value, onResolved, onPending, onRejected, }) => {\n    if (isPromise(value)) {\n        DEBUG && log('value is a promise, awaiting it');\n        return value.then(onResolved, onRejected);\n    }\n    const isRes = isResourceReturn(value);\n    const signal = isRes ? value.signal : value;\n    if (onPending && signal.loading) {\n        return onPending();\n    }\n    if (onRejected && signal.error) {\n        return onRejected(signal.error);\n    }\n    const val = isRes ? signal.value?.r : signal.value;\n    return (isPromise(val)\n        ? val.then(onResolved, onRejected)\n        : onResolved(val));\n};\nconst isResourceReturn = (obj) => {\n    return obj && obj.__brand === 'resource';\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxjQUFjLEdBR2YsTUFBTSxzQ0FBc0MsQ0FBQztBQUk5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDcEIsc0NBQXNDO0FBQ3RDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUErQ3hGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFLLEdBQW1CLEVBQUUsRUFBRTtJQUNuRCxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLFNBQThELENBQUM7SUFDakYsS0FBSyxJQUFJLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEtBQUssSUFBSSxHQUFHLENBQUMsNEJBQTRC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QkFBZ0IsQ0FBSSxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLEtBQW9DLENBQUM7SUFDNUUsSUFBSSxTQUFTLElBQUssTUFBeUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwRCxPQUFPLFNBQVMsRUFBMEIsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBSSxVQUFVLElBQUssTUFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuRCxPQUFPLFVBQVUsQ0FBRSxNQUF5QixDQUFDLEtBQU0sQ0FBeUIsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxNQUFnQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLE1BQXlCLENBQUMsS0FBSyxDQUFDO0lBQ2xHLE9BQU8sQ0FBQyxTQUFTLENBQUksR0FBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDbEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFJLENBQUMsQ0FBeUIsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUksR0FBUSxFQUFvQyxFQUFFO0lBQ3pFLE9BQU8sR0FBRyxJQUFLLEdBQVcsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUVJMSW50ZXJuYWwsIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2VydmVyL3F3aWstdHlwZXMnO1xuaW1wb3J0IHsgcXdpa0RlYnVnVG9TdHJpbmcgfSBmcm9tICcuLi9kZWJ1Zyc7XG5pbXBvcnQgeyBfY2FwdHVyZXMgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9zdG9yZSc7XG5pbXBvcnQge1xuICBjcmVhdGVBc3luY1FybCxcbiAgdHlwZSBBc3luY1NpZ25hbCxcbiAgdHlwZSBTaWduYWwsXG59IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IEFzeW5jQ3R4IH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBTdG9yZUZsYWdzIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEpTWE91dHB1dCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHsgY3JlYXRlUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbmNvbnN0IGxvZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2coJ1JFU09VUkNFJywgLi4uYXJncy5tYXAocXdpa0RlYnVnVG9TdHJpbmcpKTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDdHg8VCA9IHVua25vd24+IGV4dGVuZHMgQXN5bmNDdHg8VD4ge1xuICAvKiogQGRlcHJlY2F0ZWQgRG9lcyBub3QgZG8gYW55dGhpbmcgKi9cbiAgY2FjaGUocG9saWN5T3JNaWxsaXNlY29uZHM6IG51bWJlciB8ICdpbW11dGFibGUnKTogdm9pZDtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFJlc291cmNlRm48VD4gPSAoY3R4OiBSZXNvdXJjZUN0eCkgPT4gVmFsdWVPclByb21pc2U8VD47XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVJldHVybjxUPiA9IHtcbiAgcmVhZG9ubHkgdmFsdWU6IFByb21pc2U8VD47XG4gIHJlYWRvbmx5IGxvYWRpbmc6IGJvb2xlYW47XG59O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VQZW5kaW5nPFQ+ID0gUmVzb3VyY2VSZXR1cm48VD47XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVJlc29sdmVkPFQ+ID0gUmVzb3VyY2VSZXR1cm48VD47XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVJlamVjdGVkPFQ+ID0gUmVzb3VyY2VSZXR1cm48VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VSZXR1cm5JbnRlcm5hbDxUPiB7XG4gIF9fYnJhbmQ6ICdyZXNvdXJjZSc7XG4gIHZhbHVlOiBQcm9taXNlPFQ+O1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBzaWduYWw6IEFzeW5jU2lnbmFsPHsgcjogVCB9Pjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIHBhc3MgdG8gYHVzZVJlc291cmNlJCgpYFxuICpcbiAqIEBwdWJsaWNcbiAqIEBzZWUgdXNlUmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMuIElmIHRoZSByZXNvdXJjZSB0YWtlcyBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCBtaWxsaXNlY29uZCwgaXQgd2lsbFxuICAgKiB0aW1lb3V0LiBSZXN1bHRpbmcgb24gYSByZWplY3RlZCByZXNvdXJjZS5cbiAgICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGZ1bmN0aW9uIHdyYXBwZXJcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IF9yc2MgPSBhc3luYyA8VD4oYXJnOiBSZXNvdXJjZUN0eDxUPikgPT4ge1xuICBjb25zdCBbZm4sIHJlZl0gPSBfY2FwdHVyZXMgYXMgW1FSTEludGVybmFsPFJlc291cmNlRm48VD4+LCB7IHI6IFQ7IGk6IG51bWJlciB9XTtcbiAgREVCVUcgJiYgbG9nKCdpbnZva2UgcmVzb3VyY2UgZnVuY3Rpb24nKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oYXJnKTtcbiAgREVCVUcgJiYgbG9nKCdyZXNvdXJjZSBmdW5jdGlvbiByZXNvbHZlZCcsIHJlc3VsdCk7XG4gIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAocmVmLnIpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVmLnIsIHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIG5lZWQgbGF6eSBjcmVhdGlvbiBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgaXQgd2lsbCBiZSBhbiBhcnJheSBvciBhbiBvYmplY3QsIGFuZCB3ZSB3YW50IHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCByZWZlcmVuY2UgZm9yIHJlYWN0aXZpdHkgdG8gd29ya1xuICAgICAgcmVmLnIgPSBjcmVhdGVTdG9yZShmbi4kY29udGFpbmVyJCwgcmVzdWx0LCBTdG9yZUZsYWdzLlJFQ1VSU0lWRSk7XG4gICAgICBERUJVRyAmJiBsb2coJ3N0b3JlIGNyZWF0ZWQnLCByZWYucik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlZi5yID0gcmVzdWx0IGFzIGFueTtcbiAgfVxuICByZXR1cm4geyByOiByZWYuciB9O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVJlc291cmNlUXJsID0gPFQ+KFxuICBxcmw6IFFSTDxSZXNvdXJjZUZuPFQ+PixcbiAgb3B0cz86IFJlc291cmNlT3B0aW9uc1xuKTogUmVzb3VyY2VSZXR1cm48VD4gPT4ge1xuICBhc3NlcnRRcmwocXJsKTtcblxuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8UmVzb3VyY2VSZXR1cm5JbnRlcm5hbDxUPj4oKTtcbiAgaWYgKHZhbCkge1xuICAgIHJldHVybiB2YWwgYXMgUmVzb3VyY2VSZXR1cm48VD47XG4gIH1cblxuICBjb25zdCByZWYgPSB7fSBhcyB7IHI6IFQgfTtcbiAgLy8gV3JhcCB0aGUgZnVuY3Rpb24gc28gd2UgY2FuIG1haW50YWluIGEgc3RhYmxlIHJlZmVyZW5jZSB0byB0aGUgc3RvcmVcbiAgY29uc3Qgd3JhcHBlZCA9IGNyZWF0ZVFSTChudWxsLCAnX3JzYycsIF9yc2MsIG51bGwsIFtxcmwsIHJlZl0sIGlDdHguJGNvbnRhaW5lciQpO1xuICBjb25zdCBhc3luY1NpZ25hbCA9IGNyZWF0ZUFzeW5jUXJsPHsgcjogVCB9Pih3cmFwcGVkIGFzIGFueSwge1xuICAgIHRpbWVvdXQ6IG9wdHM/LnRpbWVvdXQsXG4gICAgY29udGFpbmVyOiBpQ3R4LiRjb250YWluZXIkLFxuICAgIGNvbmN1cnJlbmN5OiAwLFxuICB9KTtcbiAgLy8gUmVzb3VyY2UgaXMgZWFnZXJcbiAgYXN5bmNTaWduYWwuJGNvbXB1dGVJZk5lZWRlZCQoKTtcblxuICAvLyBDcmVhdGUgYSB3cmFwcGVyIHRoYXQgcHJlc2VudHMgdGhlIFByb21pc2UtYmFzZWQgUmVzb3VyY2VSZXR1cm4gQVBJXG4gIGNvbnN0IHJlc291cmNlOiBSZXNvdXJjZVJldHVybkludGVybmFsPFQ+ID0ge1xuICAgIF9fYnJhbmQ6ICdyZXNvdXJjZScsXG4gICAgc2lnbmFsOiBhc3luY1NpZ25hbCxcbiAgICBnZXQgdmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICByZXR1cm4gYXN5bmNTaWduYWxcbiAgICAgICAgLnByb21pc2UoKVxuICAgICAgICAudGhlbigoKSA9PiAoYXN5bmNTaWduYWwuZXJyb3IgPyBQcm9taXNlLnJlamVjdChhc3luY1NpZ25hbC5lcnJvcikgOiBhc3luY1NpZ25hbC52YWx1ZS5yKSk7XG4gICAgfSxcbiAgICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhc3luY1NpZ25hbC5sb2FkaW5nO1xuICAgIH0sXG4gIH07XG5cbiAgc2V0KHJlc291cmNlKTtcbiAgcmV0dXJuIHJlc291cmNlO1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcm9wczxUPiB7XG4gIHJlYWRvbmx5IHZhbHVlOiBSZXNvdXJjZVJldHVybjxUPiB8IFNpZ25hbDxQcm9taXNlPFQ+IHwgVD4gfCBQcm9taXNlPFQ+O1xuICBvblJlc29sdmVkOiAodmFsdWU6IFQpID0+IEpTWE91dHB1dCB8IFByb21pc2U8SlNYT3V0cHV0PjtcbiAgb25QZW5kaW5nPzogKCkgPT4gSlNYT3V0cHV0IHwgUHJvbWlzZTxKU1hPdXRwdXQ+O1xuICBvblJlamVjdGVkPzogKHJlYXNvbjogRXJyb3IpID0+IEpTWE91dHB1dCB8IFByb21pc2U8SlNYT3V0cHV0Pjtcbn1cblxuLyoqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBjaXR5ID0gdXNlU2lnbmFsKCcnKTtcbiAqXG4gKiAgIGNvbnN0IHdlYXRoZXIgPSB1c2VBc3luYyQoYXN5bmMgKHsgdHJhY2ssIGNsZWFudXAsIGFib3J0U2lnbmFsIH0pID0+IHtcbiAqICAgICBjb25zdCBjaXR5TmFtZSA9IHRyYWNrKGNpdHkpO1xuICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwOi8vd2VhdGhlcmRhdGEuY29tP2NpdHk9JHtjaXR5TmFtZX1gLCB7XG4gKiAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICogICAgIH0pO1xuICogICAgIGNvbnN0IHRlbXAgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgeyB0ZW1wOiBudW1iZXIgfTtcbiAqICAgICByZXR1cm4gdGVtcDtcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8aW5wdXQgbmFtZT1cImNpdHlcIiBiaW5kOnZhbHVlPXtjaXR5fSAvPlxuICogICAgICAgPGRpdj5cbiAqICAgICAgICAgVGVtcGVyYXR1cmU6eycgJ31cbiAqICAgICAgICAge3dlYXRoZXIubG9hZGluZ1xuICogICAgICAgICAgID8gJ0xvYWRpbmcuLi4nXG4gKiAgICAgICAgICAgOiB3ZWF0aGVyLmVycm9yXG4gKiAgICAgICAgICAgICA/IGBFcnJvcjogJHt3ZWF0aGVyLmVycm9yLm1lc3NhZ2V9YFxuICogICAgICAgICAgICAgOiB3ZWF0aGVyLnZhbHVlLnRlbXB9XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGB1c2VBc3luYyRgIGluc3RlYWQsIHdoaWNoIGlzIG1vcmUgZWZmaWNpZW50LCBhbmQgaGFzIGEgbW9yZSBmbGV4aWJsZSBBUEkuIEp1c3RcbiAqICAgcmVhZCB0aGUgYGxvYWRpbmdgIGFuZCBgZXJyb3JgIHByb3BlcnRpZXMgZnJvbSB0aGUgcmV0dXJuZWQgc2lnbmFsIHRvIGRldGVybWluZSB0aGUgc3RhdHVzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgUmVzb3VyY2UgPSA8VD4oe1xuICB2YWx1ZSxcbiAgb25SZXNvbHZlZCxcbiAgb25QZW5kaW5nLFxuICBvblJlamVjdGVkLFxufTogUmVzb3VyY2VQcm9wczxUPik6IEpTWE91dHB1dCA9PiB7XG4gIGlmIChpc1Byb21pc2U8VD4odmFsdWUpKSB7XG4gICAgREVCVUcgJiYgbG9nKCd2YWx1ZSBpcyBhIHByb21pc2UsIGF3YWl0aW5nIGl0Jyk7XG4gICAgcmV0dXJuIHZhbHVlLnRoZW4ob25SZXNvbHZlZCwgb25SZWplY3RlZCkgYXMgdW5rbm93biBhcyBKU1hPdXRwdXQ7XG4gIH1cbiAgY29uc3QgaXNSZXMgPSBpc1Jlc291cmNlUmV0dXJuPFQ+KHZhbHVlKTtcbiAgY29uc3Qgc2lnbmFsID0gaXNSZXMgPyB2YWx1ZS5zaWduYWwgOiAodmFsdWUgYXMgYW55IGFzIEFzeW5jU2lnbmFsPG51bWJlcj4pO1xuICBpZiAob25QZW5kaW5nICYmIChzaWduYWwgYXMgQXN5bmNTaWduYWw8VD4pLmxvYWRpbmcpIHtcbiAgICByZXR1cm4gb25QZW5kaW5nKCkgYXMgdW5rbm93biBhcyBKU1hPdXRwdXQ7XG4gIH1cbiAgaWYgKG9uUmVqZWN0ZWQgJiYgKHNpZ25hbCBhcyBBc3luY1NpZ25hbDxUPikuZXJyb3IpIHtcbiAgICByZXR1cm4gb25SZWplY3RlZCgoc2lnbmFsIGFzIEFzeW5jU2lnbmFsPFQ+KS5lcnJvciEpIGFzIHVua25vd24gYXMgSlNYT3V0cHV0O1xuICB9XG4gIGNvbnN0IHZhbCA9IGlzUmVzID8gKHNpZ25hbCBhcyBBc3luY1NpZ25hbDx7IHI6IFQgfT4pLnZhbHVlPy5yIDogKHNpZ25hbCBhcyBBc3luY1NpZ25hbDxUPikudmFsdWU7XG4gIHJldHVybiAoaXNQcm9taXNlPFQ+KHZhbCEpXG4gICAgPyB2YWwudGhlbihvblJlc29sdmVkLCBvblJlamVjdGVkKVxuICAgIDogb25SZXNvbHZlZCh2YWwhKSkgYXMgdW5rbm93biBhcyBKU1hPdXRwdXQ7XG59O1xuXG5jb25zdCBpc1Jlc291cmNlUmV0dXJuID0gPFQ+KG9iajogYW55KTogb2JqIGlzIFJlc291cmNlUmV0dXJuSW50ZXJuYWw8VD4gPT4ge1xuICByZXR1cm4gb2JqICYmIChvYmogYXMgYW55KS5fX2JyYW5kID09PSAncmVzb3VyY2UnO1xufTtcbiJdfQ==","import { _run } from '../client/run-qrl';\nimport { createQRL } from '../shared/qrl/qrl-class';\nimport { isQrl } from '../shared/qrl/qrl-utils';\nimport { qrlToChunks } from '../shared/serdes/qrl-to-string';\nimport { getEventDataFromHtmlAttribute, getScopedEventName } from '../shared/utils/event-names';\n/** @internal */\nexport function setEvent(serializationCtx, key, rawValue, hasMovedCaptures) {\n    let value = null;\n    const qrls = rawValue;\n    const appendToValue = (valueToAppend) => {\n        if (value == null) {\n            value = valueToAppend;\n        }\n        else if (typeof value === 'string' && typeof valueToAppend === 'string') {\n            value += '|' + valueToAppend;\n        }\n        else {\n            value = [\n                ...(typeof value === 'string' ? [value] : value),\n                '|',\n                ...(typeof valueToAppend === 'string' ? [valueToAppend] : valueToAppend),\n            ];\n        }\n    };\n    const getQrlString = (qrl) => {\n        /**\n         * If there are captures we need to schedule so everything is executed in the right order + qrls\n         * are resolved.\n         *\n         * For internal qrls (starting with `_`) we assume that they do the right thing.\n         */\n        if (!qrl.$symbol$.startsWith('_') && (qrl.$captures$?.length || hasMovedCaptures)) {\n            qrl = createQRL(null, '_run', _run, null, [qrl]);\n        }\n        return qrlToChunks(serializationCtx, qrl);\n    };\n    if (Array.isArray(qrls)) {\n        for (let i = 0; i < qrls.length; i++) {\n            const qrl = qrls[i];\n            if (isQrl(qrl)) {\n                appendToValue(getQrlString(qrl));\n                addQwikEventToSerializationContext(serializationCtx, key, qrl);\n            }\n            else if (qrl != null) {\n                // nested arrays etc.\n                const nestedValue = setEvent(serializationCtx, key, qrl, hasMovedCaptures);\n                if (nestedValue) {\n                    appendToValue(nestedValue);\n                }\n            }\n        }\n    }\n    else if (isQrl(qrls)) {\n        value = getQrlString(qrls);\n        addQwikEventToSerializationContext(serializationCtx, key, qrls);\n    }\n    return value;\n}\nfunction addQwikEventToSerializationContext(serializationCtx, key, qrl) {\n    const data = getEventDataFromHtmlAttribute(key);\n    if (data) {\n        const [scope, eventName] = data;\n        const scopedEvent = getScopedEventName(scope, eventName);\n        serializationCtx.$eventNames$.add(scopedEvent);\n        serializationCtx.$eventQrls$.add(qrl);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zc3Ivc3NyLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2hHLGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsUUFBUSxDQUN0QixnQkFBc0MsRUFDdEMsR0FBVyxFQUNYLFFBQWlCLEVBQ2pCLGdCQUF5QjtJQUV6QixJQUFJLEtBQUssR0FBb0MsSUFBSSxDQUFDO0lBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUV0QixNQUFNLGFBQWEsR0FBRyxDQUFDLGFBQXVDLEVBQUUsRUFBRTtRQUNoRSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQixLQUFLLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxRSxLQUFLLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssR0FBRztnQkFDTixHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hELEdBQUc7Z0JBQ0gsR0FBRyxDQUFDLE9BQU8sYUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2FBQ3pFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUF5QixFQUFFLEVBQUU7UUFDakQ7Ozs7O1dBS0c7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEYsR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxHQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDakMsa0NBQWtDLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLHFCQUFxQjtnQkFDckIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QixLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLGtDQUFrQyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxrQ0FBa0MsQ0FDekMsZ0JBQXNDLEVBQ3RDLEdBQVcsRUFDWCxHQUFRO0lBRVIsTUFBTSxJQUFJLEdBQUcsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfcnVuIH0gZnJvbSAnLi4vY2xpZW50L3J1bi1xcmwnO1xuaW1wb3J0IHsgY3JlYXRlUVJMLCB0eXBlIFFSTEludGVybmFsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgaXNRcmwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBxcmxUb0NodW5rcyB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvcXJsLXRvLXN0cmluZyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YXRpb25Db250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL3NlcmRlcy9zZXJpYWxpemF0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgZ2V0RXZlbnREYXRhRnJvbUh0bWxBdHRyaWJ1dGUsIGdldFNjb3BlZEV2ZW50TmFtZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9ldmVudC1uYW1lcyc7XG5pbXBvcnQgdHlwZSB7IFNTUldyaXRlQ2h1bmsgfSBmcm9tICcuL3Nzci10eXBlcyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFdmVudChcbiAgc2VyaWFsaXphdGlvbkN0eDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICByYXdWYWx1ZTogdW5rbm93bixcbiAgaGFzTW92ZWRDYXB0dXJlczogYm9vbGVhblxuKTogc3RyaW5nIHwgU1NSV3JpdGVDaHVua1tdIHwgbnVsbCB7XG4gIGxldCB2YWx1ZTogc3RyaW5nIHwgU1NSV3JpdGVDaHVua1tdIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHFybHMgPSByYXdWYWx1ZTtcblxuICBjb25zdCBhcHBlbmRUb1ZhbHVlID0gKHZhbHVlVG9BcHBlbmQ6IHN0cmluZyB8IFNTUldyaXRlQ2h1bmtbXSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlVG9BcHBlbmQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZVRvQXBwZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgKz0gJ3wnICsgdmFsdWVUb0FwcGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBbXG4gICAgICAgIC4uLih0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gW3ZhbHVlXSA6IHZhbHVlKSxcbiAgICAgICAgJ3wnLFxuICAgICAgICAuLi4odHlwZW9mIHZhbHVlVG9BcHBlbmQgPT09ICdzdHJpbmcnID8gW3ZhbHVlVG9BcHBlbmRdIDogdmFsdWVUb0FwcGVuZCksXG4gICAgICBdO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZ2V0UXJsU3RyaW5nID0gKHFybDogUVJMSW50ZXJuYWw8dW5rbm93bj4pID0+IHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSBhcmUgY2FwdHVyZXMgd2UgbmVlZCB0byBzY2hlZHVsZSBzbyBldmVyeXRoaW5nIGlzIGV4ZWN1dGVkIGluIHRoZSByaWdodCBvcmRlciArIHFybHNcbiAgICAgKiBhcmUgcmVzb2x2ZWQuXG4gICAgICpcbiAgICAgKiBGb3IgaW50ZXJuYWwgcXJscyAoc3RhcnRpbmcgd2l0aCBgX2ApIHdlIGFzc3VtZSB0aGF0IHRoZXkgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAqL1xuICAgIGlmICghcXJsLiRzeW1ib2wkLnN0YXJ0c1dpdGgoJ18nKSAmJiAocXJsLiRjYXB0dXJlcyQ/Lmxlbmd0aCB8fCBoYXNNb3ZlZENhcHR1cmVzKSkge1xuICAgICAgcXJsID0gY3JlYXRlUVJMKG51bGwsICdfcnVuJywgX3J1biwgbnVsbCwgW3FybF0pO1xuICAgIH1cbiAgICByZXR1cm4gcXJsVG9DaHVua3Moc2VyaWFsaXphdGlvbkN0eCwgcXJsKTtcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShxcmxzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcXJsOiB1bmtub3duID0gcXJsc1tpXTtcbiAgICAgIGlmIChpc1FybChxcmwpKSB7XG4gICAgICAgIGFwcGVuZFRvVmFsdWUoZ2V0UXJsU3RyaW5nKHFybCkpO1xuICAgICAgICBhZGRRd2lrRXZlbnRUb1NlcmlhbGl6YXRpb25Db250ZXh0KHNlcmlhbGl6YXRpb25DdHgsIGtleSwgcXJsKTtcbiAgICAgIH0gZWxzZSBpZiAocXJsICE9IG51bGwpIHtcbiAgICAgICAgLy8gbmVzdGVkIGFycmF5cyBldGMuXG4gICAgICAgIGNvbnN0IG5lc3RlZFZhbHVlID0gc2V0RXZlbnQoc2VyaWFsaXphdGlvbkN0eCwga2V5LCBxcmwsIGhhc01vdmVkQ2FwdHVyZXMpO1xuICAgICAgICBpZiAobmVzdGVkVmFsdWUpIHtcbiAgICAgICAgICBhcHBlbmRUb1ZhbHVlKG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1FybChxcmxzKSkge1xuICAgIHZhbHVlID0gZ2V0UXJsU3RyaW5nKHFybHMpO1xuICAgIGFkZFF3aWtFdmVudFRvU2VyaWFsaXphdGlvbkNvbnRleHQoc2VyaWFsaXphdGlvbkN0eCwga2V5LCBxcmxzKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYWRkUXdpa0V2ZW50VG9TZXJpYWxpemF0aW9uQ29udGV4dChcbiAgc2VyaWFsaXphdGlvbkN0eDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBxcmw6IFFSTFxuKSB7XG4gIGNvbnN0IGRhdGEgPSBnZXRFdmVudERhdGFGcm9tSHRtbEF0dHJpYnV0ZShrZXkpO1xuICBpZiAoZGF0YSkge1xuICAgIGNvbnN0IFtzY29wZSwgZXZlbnROYW1lXSA9IGRhdGE7XG4gICAgY29uc3Qgc2NvcGVkRXZlbnQgPSBnZXRTY29wZWRFdmVudE5hbWUoc2NvcGUsIGV2ZW50TmFtZSk7XG4gICAgc2VyaWFsaXphdGlvbkN0eC4kZXZlbnROYW1lcyQuYWRkKHNjb3BlZEV2ZW50KTtcbiAgICBzZXJpYWxpemF0aW9uQ3R4LiRldmVudFFybHMkLmFkZChxcmwpO1xuICB9XG59XG4iXX0=","import { useInvokeContext } from './use-core';\nimport { USE_ON_LOCAL, USE_ON_LOCAL_FLAGS, USE_ON_LOCAL_SEQ_IDX } from '../shared/utils/markers';\nimport { fromCamelToKebabCase } from '../shared/utils/event-names';\n// <docs markdown=\"../readme.md#useOn\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useOn instead and run `pnpm docs.sync`)\n/**\n * Register a listener on the current component's host element.\n *\n * Used to programmatically add event listeners. Useful from custom `use*` methods, which do not\n * have access to the JSX. Otherwise, it's adding a JSX listener in the `<div>` is a better idea.\n *\n * Events are case sensitive.\n *\n * @public\n * @see `useOn`, `useOnWindow`, `useOnDocument`.\n */\n// </docs>\nexport const useOn = (event, eventQrl, options) => {\n    _useOn(options?.passive ? \"q-ep:\" /* EventNameHtmlScope.onPassive */ : \"q-e:\" /* EventNameHtmlScope.on */, event, eventQrl, options);\n};\n// <docs markdown=\"../readme.md#useOnDocument\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useOnDocument instead and run `pnpm docs.sync`)\n/**\n * Register a listener on `document`.\n *\n * Used to programmatically add event listeners. Useful from custom `use*` methods, which do not\n * have access to the JSX.\n *\n * Events are case sensitive.\n *\n * @public\n * @see `useOn`, `useOnWindow`, `useOnDocument`.\n *\n * ```tsx\n * function useScroll() {\n *   useOnDocument(\n *     'scroll',\n *     $((event) => {\n *       console.log('body scrolled', event);\n *     })\n *   );\n * }\n *\n * const Cmp = component$(() => {\n *   useScroll();\n *   return <div>Profit!</div>;\n * });\n * ```\n */\n// </docs>\nexport const useOnDocument = (event, eventQrl, options) => {\n    _useOn(options?.passive ? \"q-dp:\" /* EventNameHtmlScope.documentPassive */ : \"q-d:\" /* EventNameHtmlScope.document */, event, eventQrl, options);\n};\n// <docs markdown=\"../readme.md#useOnWindow\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useOnWindow instead and run `pnpm docs.sync`)\n/**\n * Register a listener on `window`.\n *\n * Used to programmatically add event listeners. Useful from custom `use*` methods, which do not\n * have access to the JSX.\n *\n * Events are case sensitive.\n *\n * @public\n * @see `useOn`, `useOnWindow`, `useOnDocument`.\n *\n * ```tsx\n * function useAnalytics() {\n *   useOnWindow(\n *     'popstate',\n *     $((event) => {\n *       console.log('navigation happened', event);\n *       // report to analytics\n *     })\n *   );\n * }\n *\n * const Cmp = component$(() => {\n *   useAnalytics();\n *   return <div>Profit!</div>;\n * });\n * ```\n */\n// </docs>\nexport const useOnWindow = (event, eventQrl, options) => {\n    _useOn(options?.passive ? \"q-wp:\" /* EventNameHtmlScope.windowPassive */ : \"q-w:\" /* EventNameHtmlScope.window */, event, eventQrl, options);\n};\nconst _useOn = (prefix, eventName, eventQrl, options) => {\n    const { isAdded, addEvent } = useOnEventsSequentialScope();\n    if (isAdded) {\n        return;\n    }\n    if (eventQrl) {\n        if (Array.isArray(eventName)) {\n            for (let i = 0; i < eventName.length; i++) {\n                const event = eventName[i];\n                addEvent(prefix + fromCamelToKebabCase(event), eventQrl, options);\n            }\n        }\n        else {\n            addEvent(prefix + fromCamelToKebabCase(eventName), eventQrl, options);\n        }\n    }\n};\n/**\n * This hook is like the `useSequentialScope` but it is specifically for `useOn`. This is needed\n * because we want to execute the `useOn` hooks only once and store the event listeners on the host\n * element. From Qwik V2 the component is rerunning when the promise is thrown, so we need to make\n * sure that the event listeners are not added multiple times.\n *\n * - The event listeners are stored in the `USE_ON_LOCAL` property.\n * - The `USE_ON_LOCAL_SEQ_IDX` is used to keep track of the index of the hook that calls this.\n * - The `USE_ON_LOCAL_FLAGS` is used to keep track of whether the event listener has been added or\n *   not.\n */\nconst useOnEventsSequentialScope = () => {\n    const iCtx = useInvokeContext();\n    const hostElement = iCtx.$hostElement$;\n    const host = hostElement;\n    let onMap = iCtx.$container$.getHostProp(host, USE_ON_LOCAL);\n    if (onMap === null) {\n        onMap = {};\n        iCtx.$container$.setHostProp(host, USE_ON_LOCAL, onMap);\n    }\n    let seqIdx = iCtx.$container$.getHostProp(host, USE_ON_LOCAL_SEQ_IDX);\n    if (seqIdx === null) {\n        seqIdx = 0;\n    }\n    iCtx.$container$.setHostProp(host, USE_ON_LOCAL_SEQ_IDX, seqIdx + 1);\n    let addedFlags = iCtx.$container$.getHostProp(host, USE_ON_LOCAL_FLAGS);\n    if (addedFlags === null) {\n        addedFlags = [];\n        iCtx.$container$.setHostProp(host, USE_ON_LOCAL_FLAGS, addedFlags);\n    }\n    while (addedFlags.length <= seqIdx) {\n        addedFlags.push(false);\n    }\n    const addEvent = (eventName, eventQrl, options) => {\n        addedFlags[seqIdx] = true;\n        let event = onMap[eventName];\n        if (!event) {\n            onMap[eventName] = event = {\n                qrls: [],\n                capture: false,\n                preventdefault: false,\n                stoppropagation: false,\n            };\n        }\n        event.qrls.push(eventQrl);\n        if (options?.capture) {\n            event.capture = true;\n        }\n        if (options?.preventdefault) {\n            event.preventdefault = true;\n        }\n        if (options?.stoppropagation) {\n            event.stoppropagation = true;\n        }\n    };\n    return {\n        isAdded: addedFlags[seqIdx],\n        addEvent,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW9uLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2Utb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUTlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRyxPQUFPLEVBQXNCLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUF3QnZGLHVDQUF1QztBQUN2Qyx5Q0FBeUM7QUFDekMsNkRBQTZEO0FBQzdEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQ25CLEtBQWMsRUFDZCxRQUFxQixFQUNyQixPQUFzQixFQUN0QixFQUFFO0lBQ0YsTUFBTSxDQUNKLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyw0Q0FBOEIsQ0FBQyxtQ0FBc0IsRUFDdkUsS0FBSyxFQUNMLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLCtDQUErQztBQUMvQyx5Q0FBeUM7QUFDekMscUVBQXFFO0FBQ3JFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBYyxFQUNkLFFBQXFCLEVBQ3JCLE9BQXNCLEVBQ3RCLEVBQUU7SUFDRixNQUFNLENBQ0osT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtEQUFvQyxDQUFDLHlDQUE0QixFQUNuRixLQUFLLEVBQ0wsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxtRUFBbUU7QUFDbkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILFVBQVU7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RTtRQUNGLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxLQUFLLEdBQUcsS0FBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEdBQUc7Z0JBQzFCLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixlQUFlLEVBQUUsS0FBSzthQUN2QixDQUFDO1FBQ0osQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUMzQixRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IHVzZUludm9rZUNvbnRleHQgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB7IHR5cGUgS25vd25FdmVudE5hbWVzIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1ldmVudHMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmVudEhhbmRsZXIsXG4gIEV2ZW50RnJvbU5hbWUsXG4gIEFsbEV2ZW50S2V5cyxcbn0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB0eXBlIHsgSG9zdEVsZW1lbnQgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgVVNFX09OX0xPQ0FMLCBVU0VfT05fTE9DQUxfRkxBR1MsIFVTRV9PTl9MT0NBTF9TRVFfSURYIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgRXZlbnROYW1lSHRtbFNjb3BlLCBmcm9tQ2FtZWxUb0tlYmFiQ2FzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9ldmVudC1uYW1lcyc7XG5cbmV4cG9ydCB0eXBlIEV2ZW50UVJMPFQgZXh0ZW5kcyBzdHJpbmcgPSBBbGxFdmVudEtleXM+ID1cbiAgfCBRUkw8RXZlbnRIYW5kbGVyPEV2ZW50RnJvbU5hbWU8VD4sIEVsZW1lbnQ+PlxuICB8IHVuZGVmaW5lZDtcblxuaW50ZXJmYWNlIFVzZU9uT3B0aW9uc0Jhc2Uge1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgc3RvcHByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFVzZU9uT3B0aW9ucyA9IFVzZU9uT3B0aW9uc0Jhc2UgJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBhc3NpdmU/OiBib29sZWFuO1xuICAgICAgICBwcmV2ZW50ZGVmYXVsdD86IG5ldmVyO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBwYXNzaXZlPzogbmV2ZXI7XG4gICAgICAgIHByZXZlbnRkZWZhdWx0PzogYm9vbGVhbjtcbiAgICAgIH1cbiAgKTtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlT25cIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlT24gaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgb24gdGhlIGN1cnJlbnQgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50LlxuICpcbiAqIFVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBhZGQgZXZlbnQgbGlzdGVuZXJzLiBVc2VmdWwgZnJvbSBjdXN0b20gYHVzZSpgIG1ldGhvZHMsIHdoaWNoIGRvIG5vdFxuICogaGF2ZSBhY2Nlc3MgdG8gdGhlIEpTWC4gT3RoZXJ3aXNlLCBpdCdzIGFkZGluZyBhIEpTWCBsaXN0ZW5lciBpbiB0aGUgYDxkaXY+YCBpcyBhIGJldHRlciBpZGVhLlxuICpcbiAqIEV2ZW50cyBhcmUgY2FzZSBzZW5zaXRpdmUuXG4gKlxuICogQHB1YmxpY1xuICogQHNlZSBgdXNlT25gLCBgdXNlT25XaW5kb3dgLCBgdXNlT25Eb2N1bWVudGAuXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VPbiA9IDxUIGV4dGVuZHMgS25vd25FdmVudE5hbWVzPihcbiAgZXZlbnQ6IFQgfCBUW10sXG4gIGV2ZW50UXJsOiBFdmVudFFSTDxUPixcbiAgb3B0aW9ucz86IFVzZU9uT3B0aW9uc1xuKSA9PiB7XG4gIF91c2VPbihcbiAgICBvcHRpb25zPy5wYXNzaXZlID8gRXZlbnROYW1lSHRtbFNjb3BlLm9uUGFzc2l2ZSA6IEV2ZW50TmFtZUh0bWxTY29wZS5vbixcbiAgICBldmVudCxcbiAgICBldmVudFFybCxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VPbkRvY3VtZW50XCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI3VzZU9uRG9jdW1lbnQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgb24gYGRvY3VtZW50YC5cbiAqXG4gKiBVc2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgYWRkIGV2ZW50IGxpc3RlbmVycy4gVXNlZnVsIGZyb20gY3VzdG9tIGB1c2UqYCBtZXRob2RzLCB3aGljaCBkbyBub3RcbiAqIGhhdmUgYWNjZXNzIHRvIHRoZSBKU1guXG4gKlxuICogRXZlbnRzIGFyZSBjYXNlIHNlbnNpdGl2ZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGB1c2VPbmAsIGB1c2VPbldpbmRvd2AsIGB1c2VPbkRvY3VtZW50YC5cbiAqXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIHVzZVNjcm9sbCgpIHtcbiAqICAgdXNlT25Eb2N1bWVudChcbiAqICAgICAnc2Nyb2xsJyxcbiAqICAgICAkKChldmVudCkgPT4ge1xuICogICAgICAgY29uc29sZS5sb2coJ2JvZHkgc2Nyb2xsZWQnLCBldmVudCk7XG4gKiAgICAgfSlcbiAqICAgKTtcbiAqIH1cbiAqXG4gKiBjb25zdCBDbXAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlU2Nyb2xsKCk7XG4gKiAgIHJldHVybiA8ZGl2PlByb2ZpdCE8L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlT25Eb2N1bWVudCA9IDxUIGV4dGVuZHMgS25vd25FdmVudE5hbWVzPihcbiAgZXZlbnQ6IFQgfCBUW10sXG4gIGV2ZW50UXJsOiBFdmVudFFSTDxUPixcbiAgb3B0aW9ucz86IFVzZU9uT3B0aW9uc1xuKSA9PiB7XG4gIF91c2VPbihcbiAgICBvcHRpb25zPy5wYXNzaXZlID8gRXZlbnROYW1lSHRtbFNjb3BlLmRvY3VtZW50UGFzc2l2ZSA6IEV2ZW50TmFtZUh0bWxTY29wZS5kb2N1bWVudCxcbiAgICBldmVudCxcbiAgICBldmVudFFybCxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VPbldpbmRvd1wiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VPbldpbmRvdyBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogUmVnaXN0ZXIgYSBsaXN0ZW5lciBvbiBgd2luZG93YC5cbiAqXG4gKiBVc2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgYWRkIGV2ZW50IGxpc3RlbmVycy4gVXNlZnVsIGZyb20gY3VzdG9tIGB1c2UqYCBtZXRob2RzLCB3aGljaCBkbyBub3RcbiAqIGhhdmUgYWNjZXNzIHRvIHRoZSBKU1guXG4gKlxuICogRXZlbnRzIGFyZSBjYXNlIHNlbnNpdGl2ZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGB1c2VPbmAsIGB1c2VPbldpbmRvd2AsIGB1c2VPbkRvY3VtZW50YC5cbiAqXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIHVzZUFuYWx5dGljcygpIHtcbiAqICAgdXNlT25XaW5kb3coXG4gKiAgICAgJ3BvcHN0YXRlJyxcbiAqICAgICAkKChldmVudCkgPT4ge1xuICogICAgICAgY29uc29sZS5sb2coJ25hdmlnYXRpb24gaGFwcGVuZWQnLCBldmVudCk7XG4gKiAgICAgICAvLyByZXBvcnQgdG8gYW5hbHl0aWNzXG4gKiAgICAgfSlcbiAqICAgKTtcbiAqIH1cbiAqXG4gKiBjb25zdCBDbXAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlQW5hbHl0aWNzKCk7XG4gKiAgIHJldHVybiA8ZGl2PlByb2ZpdCE8L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlT25XaW5kb3cgPSA8VCBleHRlbmRzIEtub3duRXZlbnROYW1lcz4oXG4gIGV2ZW50OiBUIHwgVFtdLFxuICBldmVudFFybDogRXZlbnRRUkw8VD4sXG4gIG9wdGlvbnM/OiBVc2VPbk9wdGlvbnNcbikgPT4ge1xuICBfdXNlT24oXG4gICAgb3B0aW9ucz8ucGFzc2l2ZSA/IEV2ZW50TmFtZUh0bWxTY29wZS53aW5kb3dQYXNzaXZlIDogRXZlbnROYW1lSHRtbFNjb3BlLndpbmRvdyxcbiAgICBldmVudCxcbiAgICBldmVudFFybCxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5jb25zdCBfdXNlT24gPSAoXG4gIHByZWZpeDogRXZlbnROYW1lSHRtbFNjb3BlLFxuICBldmVudE5hbWU6IHN0cmluZyB8IHN0cmluZ1tdLFxuICBldmVudFFybDogRXZlbnRRUkwsXG4gIG9wdGlvbnM/OiBVc2VPbk9wdGlvbnNcbikgPT4ge1xuICBjb25zdCB7IGlzQWRkZWQsIGFkZEV2ZW50IH0gPSB1c2VPbkV2ZW50c1NlcXVlbnRpYWxTY29wZSgpO1xuICBpZiAoaXNBZGRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZXZlbnRRcmwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudE5hbWUpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50TmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50TmFtZVtpXTtcbiAgICAgICAgYWRkRXZlbnQocHJlZml4ICsgZnJvbUNhbWVsVG9LZWJhYkNhc2UoZXZlbnQpLCBldmVudFFybCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEV2ZW50KHByZWZpeCArIGZyb21DYW1lbFRvS2ViYWJDYXNlKGV2ZW50TmFtZSksIGV2ZW50UXJsLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBob29rIGlzIGxpa2UgdGhlIGB1c2VTZXF1ZW50aWFsU2NvcGVgIGJ1dCBpdCBpcyBzcGVjaWZpY2FsbHkgZm9yIGB1c2VPbmAuIFRoaXMgaXMgbmVlZGVkXG4gKiBiZWNhdXNlIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgYHVzZU9uYCBob29rcyBvbmx5IG9uY2UgYW5kIHN0b3JlIHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIGhvc3RcbiAqIGVsZW1lbnQuIEZyb20gUXdpayBWMiB0aGUgY29tcG9uZW50IGlzIHJlcnVubmluZyB3aGVuIHRoZSBwcm9taXNlIGlzIHRocm93biwgc28gd2UgbmVlZCB0byBtYWtlXG4gKiBzdXJlIHRoYXQgdGhlIGV2ZW50IGxpc3RlbmVycyBhcmUgbm90IGFkZGVkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIC0gVGhlIGV2ZW50IGxpc3RlbmVycyBhcmUgc3RvcmVkIGluIHRoZSBgVVNFX09OX0xPQ0FMYCBwcm9wZXJ0eS5cbiAqIC0gVGhlIGBVU0VfT05fTE9DQUxfU0VRX0lEWGAgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBpbmRleCBvZiB0aGUgaG9vayB0aGF0IGNhbGxzIHRoaXMuXG4gKiAtIFRoZSBgVVNFX09OX0xPQ0FMX0ZMQUdTYCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXIgaGFzIGJlZW4gYWRkZWQgb3JcbiAqICAgbm90LlxuICovXG5jb25zdCB1c2VPbkV2ZW50c1NlcXVlbnRpYWxTY29wZSA9ICgpID0+IHtcbiAgY29uc3QgaUN0eCA9IHVzZUludm9rZUNvbnRleHQoKTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBpQ3R4LiRob3N0RWxlbWVudCQ7XG4gIGNvbnN0IGhvc3Q6IEhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQgYXMgYW55O1xuICBsZXQgb25NYXAgPSBpQ3R4LiRjb250YWluZXIkLmdldEhvc3RQcm9wPFVzZU9uTWFwPihob3N0LCBVU0VfT05fTE9DQUwpO1xuICBpZiAob25NYXAgPT09IG51bGwpIHtcbiAgICBvbk1hcCA9IHt9O1xuICAgIGlDdHguJGNvbnRhaW5lciQuc2V0SG9zdFByb3AoaG9zdCwgVVNFX09OX0xPQ0FMLCBvbk1hcCk7XG4gIH1cbiAgbGV0IHNlcUlkeCA9IGlDdHguJGNvbnRhaW5lciQuZ2V0SG9zdFByb3A8bnVtYmVyPihob3N0LCBVU0VfT05fTE9DQUxfU0VRX0lEWCk7XG4gIGlmIChzZXFJZHggPT09IG51bGwpIHtcbiAgICBzZXFJZHggPSAwO1xuICB9XG4gIGlDdHguJGNvbnRhaW5lciQuc2V0SG9zdFByb3AoaG9zdCwgVVNFX09OX0xPQ0FMX1NFUV9JRFgsIHNlcUlkeCArIDEpO1xuICBsZXQgYWRkZWRGbGFncyA9IGlDdHguJGNvbnRhaW5lciQuZ2V0SG9zdFByb3A8Ym9vbGVhbltdPihob3N0LCBVU0VfT05fTE9DQUxfRkxBR1MpO1xuICBpZiAoYWRkZWRGbGFncyA9PT0gbnVsbCkge1xuICAgIGFkZGVkRmxhZ3MgPSBbXTtcbiAgICBpQ3R4LiRjb250YWluZXIkLnNldEhvc3RQcm9wKGhvc3QsIFVTRV9PTl9MT0NBTF9GTEFHUywgYWRkZWRGbGFncyk7XG4gIH1cbiAgd2hpbGUgKGFkZGVkRmxhZ3MubGVuZ3RoIDw9IHNlcUlkeCkge1xuICAgIGFkZGVkRmxhZ3MucHVzaChmYWxzZSk7XG4gIH1cbiAgY29uc3QgYWRkRXZlbnQgPSAoXG4gICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgZXZlbnRRcmw6IEV2ZW50UVJMPEtub3duRXZlbnROYW1lcz4sXG4gICAgb3B0aW9ucz86IFVzZU9uT3B0aW9uc1xuICApID0+IHtcbiAgICBhZGRlZEZsYWdzW3NlcUlkeF0gPSB0cnVlO1xuICAgIGxldCBldmVudCA9IG9uTWFwIVtldmVudE5hbWVdO1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIG9uTWFwIVtldmVudE5hbWVdID0gZXZlbnQgPSB7XG4gICAgICAgIHFybHM6IFtdLFxuICAgICAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICAgICAgcHJldmVudGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzdG9wcHJvcGFnYXRpb246IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG4gICAgZXZlbnQucXJscy5wdXNoKGV2ZW50UXJsKTtcbiAgICBpZiAob3B0aW9ucz8uY2FwdHVyZSkge1xuICAgICAgZXZlbnQuY2FwdHVyZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5wcmV2ZW50ZGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudGRlZmF1bHQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uc3RvcHByb3BhZ2F0aW9uKSB7XG4gICAgICBldmVudC5zdG9wcHJvcGFnYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGlzQWRkZWQ6IGFkZGVkRmxhZ3Nbc2VxSWR4XSxcbiAgICBhZGRFdmVudCxcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlT25FdmVudE9wdGlvbnMge1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgcHJldmVudGRlZmF1bHQ/OiBib29sZWFuO1xuICBzdG9wcHJvcGFnYXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZU9uRXZlbnQgZXh0ZW5kcyBVc2VPbkV2ZW50T3B0aW9ucyB7XG4gIHFybHM6IEV2ZW50UVJMPEtub3duRXZlbnROYW1lcz5bXTtcbn1cblxuZXhwb3J0IHR5cGUgVXNlT25NYXAgPSBSZWNvcmQ8c3RyaW5nLCBVc2VPbkV2ZW50PjtcbiJdfQ==","import { getDomContainer } from '../client/dom-container';\nimport { _captures, deserializeCaptures, setCaptures, } from '../shared/qrl/qrl-class';\nimport { inlinedQrl } from '../shared/qrl/qrl';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { tryGetInvokeContext } from './use-core';\nimport { useOnDocument } from './use-on';\n/**\n * HMR event handler. The host VNode is captured at registration time via QRL captures.\n *\n * When called by the qwikloader or the test dispatch, `this` is the serialized captures string\n * which we deserialize to get the host VNode. When called through `_qDispatch` (client-rendered),\n * `_captures` is already set by `ensureQrlCaptures` in the QRL call chain.\n *\n * @internal\n */\nexport const _hmr = function (event, element) {\n    if (!event.detail.files.some((file) => element.getAttribute('data-qwik-inspector')?.startsWith(file))) {\n        return;\n    }\n    // Deserialize captures from `this` when called via qwikloader/attribute dispatch\n    if (typeof this === 'string') {\n        const container = getDomContainer(element);\n        setCaptures(deserializeCaptures(container, this));\n    }\n    const host = _captures[0];\n    const container = getDomContainer(element);\n    markVNodeDirty(container, host, 4 /* ChoreBits.COMPONENT */);\n    // Mark HMR as handled\n    const doc = element.ownerDocument;\n    doc.__hmrDone = doc.__hmrT;\n};\nlet hmrQrl;\n/**\n * Injected by the optimizer into component$ bodies in HMR mode. Registers a document event listener\n * that triggers component re-render on HMR updates.\n *\n * @internal\n */\nexport function _useHmr(devPath) {\n    const iCtx = tryGetInvokeContext();\n    if (!iCtx) {\n        return;\n    }\n    hmrQrl ||= inlinedQrl(_hmr, '_hmr');\n    const hostElement = iCtx.$hostElement$;\n    // We must capture the vnode to be able to re-render\n    const qrl = hmrQrl.w([hostElement]);\n    useOnDocument('qHmr', qrl);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWhtci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLWhtci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUNMLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsV0FBVyxHQUVaLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUd6Qzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxVQUVsQixLQUFrRCxFQUNsRCxPQUFnQjtJQUVoQixJQUNFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDOUQsRUFDRCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxpRkFBaUY7SUFDakYsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxTQUFVLENBQUMsQ0FBQyxDQUFVLENBQUM7SUFDcEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSw4QkFBc0IsQ0FBQztJQUNyRCxzQkFBc0I7SUFDdEIsTUFBTSxHQUFHLEdBQVEsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUN2QyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsSUFBSSxNQUEyRCxDQUFDO0FBQ2hFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFlO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLG9EQUFvRDtJQUNwRCxNQUFNLEdBQUcsR0FBSSxNQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFrQixDQUFDO0lBQ3RFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERvbUNvbnRhaW5lciB9IGZyb20gJy4uL2NsaWVudC9kb20tY29udGFpbmVyJztcbmltcG9ydCB7XG4gIF9jYXB0dXJlcyxcbiAgZGVzZXJpYWxpemVDYXB0dXJlcyxcbiAgc2V0Q2FwdHVyZXMsXG4gIHR5cGUgUVJMSW50ZXJuYWwsXG59IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGlubGluZWRRcmwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybCc7XG5pbXBvcnQgeyBDaG9yZUJpdHMgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvZW51bXMvY2hvcmUtYml0cy5lbnVtJztcbmltcG9ydCB0eXBlIHsgVk5vZGUgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdm5vZGUnO1xuaW1wb3J0IHsgbWFya1ZOb2RlRGlydHkgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvdm5vZGUtZGlydHknO1xuaW1wb3J0IHsgdHJ5R2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4vdXNlLWNvcmUnO1xuaW1wb3J0IHsgdXNlT25Eb2N1bWVudCB9IGZyb20gJy4vdXNlLW9uJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcblxuLyoqXG4gKiBITVIgZXZlbnQgaGFuZGxlci4gVGhlIGhvc3QgVk5vZGUgaXMgY2FwdHVyZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWUgdmlhIFFSTCBjYXB0dXJlcy5cbiAqXG4gKiBXaGVuIGNhbGxlZCBieSB0aGUgcXdpa2xvYWRlciBvciB0aGUgdGVzdCBkaXNwYXRjaCwgYHRoaXNgIGlzIHRoZSBzZXJpYWxpemVkIGNhcHR1cmVzIHN0cmluZ1xuICogd2hpY2ggd2UgZGVzZXJpYWxpemUgdG8gZ2V0IHRoZSBob3N0IFZOb2RlLiBXaGVuIGNhbGxlZCB0aHJvdWdoIGBfcURpc3BhdGNoYCAoY2xpZW50LXJlbmRlcmVkKSxcbiAqIGBfY2FwdHVyZXNgIGlzIGFscmVhZHkgc2V0IGJ5IGBlbnN1cmVRcmxDYXB0dXJlc2AgaW4gdGhlIFFSTCBjYWxsIGNoYWluLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgX2htciA9IGZ1bmN0aW9uIChcbiAgdGhpczogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBldmVudDogQ3VzdG9tRXZlbnQ8eyBmaWxlczogc3RyaW5nW107IHQ6IG51bWJlciB9PixcbiAgZWxlbWVudDogRWxlbWVudFxuKSB7XG4gIGlmIChcbiAgICAhZXZlbnQuZGV0YWlsLmZpbGVzLnNvbWUoKGZpbGUpID0+XG4gICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1xd2lrLWluc3BlY3RvcicpPy5zdGFydHNXaXRoKGZpbGUpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gRGVzZXJpYWxpemUgY2FwdHVyZXMgZnJvbSBgdGhpc2Agd2hlbiBjYWxsZWQgdmlhIHF3aWtsb2FkZXIvYXR0cmlidXRlIGRpc3BhdGNoXG4gIGlmICh0eXBlb2YgdGhpcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXREb21Db250YWluZXIoZWxlbWVudCk7XG4gICAgc2V0Q2FwdHVyZXMoZGVzZXJpYWxpemVDYXB0dXJlcyhjb250YWluZXIsIHRoaXMpKTtcbiAgfVxuICBjb25zdCBob3N0ID0gX2NhcHR1cmVzIVswXSBhcyBWTm9kZTtcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0RG9tQ29udGFpbmVyKGVsZW1lbnQpO1xuICBtYXJrVk5vZGVEaXJ0eShjb250YWluZXIsIGhvc3QsIENob3JlQml0cy5DT01QT05FTlQpO1xuICAvLyBNYXJrIEhNUiBhcyBoYW5kbGVkXG4gIGNvbnN0IGRvYzogYW55ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICBkb2MuX19obXJEb25lID0gZG9jLl9faG1yVDtcbn07XG5cbmxldCBobXJRcmw6IFFSTDwoZXZlbnQ6IEN1c3RvbUV2ZW50LCBlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkPjtcbi8qKlxuICogSW5qZWN0ZWQgYnkgdGhlIG9wdGltaXplciBpbnRvIGNvbXBvbmVudCQgYm9kaWVzIGluIEhNUiBtb2RlLiBSZWdpc3RlcnMgYSBkb2N1bWVudCBldmVudCBsaXN0ZW5lclxuICogdGhhdCB0cmlnZ2VycyBjb21wb25lbnQgcmUtcmVuZGVyIG9uIEhNUiB1cGRhdGVzLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3VzZUhtcihkZXZQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgaUN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgaWYgKCFpQ3R4KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhtclFybCB8fD0gaW5saW5lZFFybChfaG1yLCAnX2htcicpO1xuICBjb25zdCBob3N0RWxlbWVudCA9IGlDdHguJGhvc3RFbGVtZW50JDtcbiAgLy8gV2UgbXVzdCBjYXB0dXJlIHRoZSB2bm9kZSB0byBiZSBhYmxlIHRvIHJlLXJlbmRlclxuICBjb25zdCBxcmwgPSAoaG1yUXJsIGFzIFFSTEludGVybmFsKS53KFtob3N0RWxlbWVudF0pIGFzIHR5cGVvZiBobXJRcmw7XG4gIHVzZU9uRG9jdW1lbnQoJ3FIbXInLCBxcmwpO1xufVxuIl19","import { vnode_applyJournal, vnode_getProp, vnode_newVirtual, vnode_setProp, } from '../../client/vnode-utils';\nimport { cleanup } from '../../client/vnode-diff';\nimport { markVNodeDirty } from '../vnode/vnode-dirty';\nimport { addCursor } from '../cursor/cursor';\nimport { OnRenderProp, ELEMENT_PROPS, QSlot, QTargetElement } from '../utils/markers';\n/**\n * Register an external projection on a parent component VNode.\n *\n * Creates a new VirtualVNode that will render the given component QRL with the given props. The\n * VNode is stored as a projection on the parent, and a low-priority cursor is added so the cursor\n * walker will process it.\n *\n * Use `_setProjectionTarget` to set the DOM target element before the cursor fires.\n *\n * @internal\n */\nexport function _addProjection(container, parentVNode, componentQRL, props, slotName) {\n    const vnode = vnode_newVirtual();\n    vnode_setProp(vnode, QSlot, slotName);\n    vnode.parent = parentVNode;\n    vnode_setProp(parentVNode, slotName, vnode);\n    vnode_setProp(vnode, OnRenderProp, componentQRL);\n    vnode_setProp(vnode, ELEMENT_PROPS, props);\n    vnode.dirty = 4 /* ChoreBits.COMPONENT */;\n    addCursor(container, vnode, 1); // low priority\n    return vnode;\n}\n/**\n * Set the DOM target element for an external projection VNode.\n *\n * When the cursor walker processes this VNode, DOM operations will target this element instead of\n * walking the parent chain.\n *\n * @internal\n */\nexport function _setProjectionTarget(vnode, targetElement) {\n    vnode_setProp(vnode, QTargetElement, targetElement);\n    vnode.flags |= 2048 /* VNodeFlags.HasTargetElement */;\n}\n/**\n * Update the props on an external projection VNode and trigger re-rendering.\n *\n * @internal\n */\nexport function _updateProjectionProps(container, vnode, newProps) {\n    vnode_setProp(vnode, ELEMENT_PROPS, newProps);\n    markVNodeDirty(container, vnode, 4 /* ChoreBits.COMPONENT */);\n}\n/**\n * Remove an external projection from its parent and clean up.\n *\n * @internal\n */\nexport function _removeProjection(container, parentVNode, vnode, slotName) {\n    // Remove from parent's projections\n    vnode_setProp(parentVNode, slotName, null);\n    // Clean up effects, subscriptions, and child vnodes\n    const journal = [];\n    cleanup(container, journal, vnode);\n    vnode_applyJournal(journal);\n    // Clean up DOM\n    if (vnode.flags & 2048 /* VNodeFlags.HasTargetElement */) {\n        const targetEl = vnode_getProp(vnode, QTargetElement, null);\n        if (targetEl) {\n            targetEl.replaceChildren();\n        }\n        vnode_setProp(vnode, QTargetElement, null);\n        vnode.flags &= ~2048 /* VNodeFlags.HasTargetElement */;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtcHJvamVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcHJvamVjdGlvbi9leHRlcm5hbC1wcm9qZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixhQUFhLEdBRWQsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJdEY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFNBQW9CLEVBQ3BCLFdBQXlCLEVBQ3pCLFlBQXNCLEVBQ3RCLEtBQThCLEVBQzlCLFFBQWdCO0lBRWhCLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDM0IsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakQsYUFBYSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsS0FBSyxDQUFDLEtBQUssOEJBQXNCLENBQUM7SUFDbEMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQy9DLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBbUIsRUFBRSxhQUFzQjtJQUM5RSxhQUFhLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRCxLQUFLLENBQUMsS0FBSywwQ0FBK0IsQ0FBQztBQUM3QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsU0FBb0IsRUFDcEIsS0FBbUIsRUFDbkIsUUFBaUM7SUFFakMsYUFBYSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLDhCQUFzQixDQUFDO0FBQ3hELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixTQUFvQixFQUNwQixXQUF5QixFQUN6QixLQUFtQixFQUNuQixRQUFnQjtJQUVoQixtQ0FBbUM7SUFDbkMsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFM0Msb0RBQW9EO0lBQ3BELE1BQU0sT0FBTyxHQUFpQixFQUFFLENBQUM7SUFDakMsT0FBTyxDQUFDLFNBQTRCLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVCLGVBQWU7SUFDZixJQUFJLEtBQUssQ0FBQyxLQUFLLHlDQUE4QixFQUFFLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFVLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsYUFBYSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsS0FBSyxDQUFDLEtBQUssSUFBSSx1Q0FBNEIsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ2xpZW50Q29udGFpbmVyLCBWTm9kZUZsYWdzIH0gZnJvbSAnLi4vLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7XG4gIHZub2RlX2FwcGx5Sm91cm5hbCxcbiAgdm5vZGVfZ2V0UHJvcCxcbiAgdm5vZGVfbmV3VmlydHVhbCxcbiAgdm5vZGVfc2V0UHJvcCxcbiAgdHlwZSBWTm9kZUpvdXJuYWwsXG59IGZyb20gJy4uLy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyBjbGVhbnVwIH0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBWaXJ0dWFsVk5vZGUgfSBmcm9tICcuLi92bm9kZS92aXJ0dWFsLXZub2RlJztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4uL3Zub2RlL2VudW1zL2Nob3JlLWJpdHMuZW51bSc7XG5pbXBvcnQgeyBtYXJrVk5vZGVEaXJ0eSB9IGZyb20gJy4uL3Zub2RlL3Zub2RlLWRpcnR5JztcbmltcG9ydCB7IGFkZEN1cnNvciB9IGZyb20gJy4uL2N1cnNvci9jdXJzb3InO1xuaW1wb3J0IHsgT25SZW5kZXJQcm9wLCBFTEVNRU5UX1BST1BTLCBRU2xvdCwgUVRhcmdldEVsZW1lbnQgfSBmcm9tICcuLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9xcmwvcXJsLnB1YmxpYyc7XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWwgcHJvamVjdGlvbiBvbiBhIHBhcmVudCBjb21wb25lbnQgVk5vZGUuXG4gKlxuICogQ3JlYXRlcyBhIG5ldyBWaXJ0dWFsVk5vZGUgdGhhdCB3aWxsIHJlbmRlciB0aGUgZ2l2ZW4gY29tcG9uZW50IFFSTCB3aXRoIHRoZSBnaXZlbiBwcm9wcy4gVGhlXG4gKiBWTm9kZSBpcyBzdG9yZWQgYXMgYSBwcm9qZWN0aW9uIG9uIHRoZSBwYXJlbnQsIGFuZCBhIGxvdy1wcmlvcml0eSBjdXJzb3IgaXMgYWRkZWQgc28gdGhlIGN1cnNvclxuICogd2Fsa2VyIHdpbGwgcHJvY2VzcyBpdC5cbiAqXG4gKiBVc2UgYF9zZXRQcm9qZWN0aW9uVGFyZ2V0YCB0byBzZXQgdGhlIERPTSB0YXJnZXQgZWxlbWVudCBiZWZvcmUgdGhlIGN1cnNvciBmaXJlcy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9hZGRQcm9qZWN0aW9uKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgcGFyZW50Vk5vZGU6IFZpcnR1YWxWTm9kZSxcbiAgY29tcG9uZW50UVJMOiBRUkw8YW55PixcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzbG90TmFtZTogc3RyaW5nXG4pOiBWaXJ0dWFsVk5vZGUge1xuICBjb25zdCB2bm9kZSA9IHZub2RlX25ld1ZpcnR1YWwoKTtcbiAgdm5vZGVfc2V0UHJvcCh2bm9kZSwgUVNsb3QsIHNsb3ROYW1lKTtcbiAgdm5vZGUucGFyZW50ID0gcGFyZW50Vk5vZGU7XG4gIHZub2RlX3NldFByb3AocGFyZW50Vk5vZGUsIHNsb3ROYW1lLCB2bm9kZSk7XG4gIHZub2RlX3NldFByb3Aodm5vZGUsIE9uUmVuZGVyUHJvcCwgY29tcG9uZW50UVJMKTtcbiAgdm5vZGVfc2V0UHJvcCh2bm9kZSwgRUxFTUVOVF9QUk9QUywgcHJvcHMpO1xuICB2bm9kZS5kaXJ0eSA9IENob3JlQml0cy5DT01QT05FTlQ7XG4gIGFkZEN1cnNvcihjb250YWluZXIsIHZub2RlLCAxKTsgLy8gbG93IHByaW9yaXR5XG4gIHJldHVybiB2bm9kZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIERPTSB0YXJnZXQgZWxlbWVudCBmb3IgYW4gZXh0ZXJuYWwgcHJvamVjdGlvbiBWTm9kZS5cbiAqXG4gKiBXaGVuIHRoZSBjdXJzb3Igd2Fsa2VyIHByb2Nlc3NlcyB0aGlzIFZOb2RlLCBET00gb3BlcmF0aW9ucyB3aWxsIHRhcmdldCB0aGlzIGVsZW1lbnQgaW5zdGVhZCBvZlxuICogd2Fsa2luZyB0aGUgcGFyZW50IGNoYWluLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3NldFByb2plY3Rpb25UYXJnZXQodm5vZGU6IFZpcnR1YWxWTm9kZSwgdGFyZ2V0RWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICB2bm9kZV9zZXRQcm9wKHZub2RlLCBRVGFyZ2V0RWxlbWVudCwgdGFyZ2V0RWxlbWVudCk7XG4gIHZub2RlLmZsYWdzIHw9IFZOb2RlRmxhZ3MuSGFzVGFyZ2V0RWxlbWVudDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHByb3BzIG9uIGFuIGV4dGVybmFsIHByb2plY3Rpb24gVk5vZGUgYW5kIHRyaWdnZXIgcmUtcmVuZGVyaW5nLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3VwZGF0ZVByb2plY3Rpb25Qcm9wcyhcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIHZub2RlOiBWaXJ0dWFsVk5vZGUsXG4gIG5ld1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG4gIHZub2RlX3NldFByb3Aodm5vZGUsIEVMRU1FTlRfUFJPUFMsIG5ld1Byb3BzKTtcbiAgbWFya1ZOb2RlRGlydHkoY29udGFpbmVyLCB2bm9kZSwgQ2hvcmVCaXRzLkNPTVBPTkVOVCk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFuIGV4dGVybmFsIHByb2plY3Rpb24gZnJvbSBpdHMgcGFyZW50IGFuZCBjbGVhbiB1cC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZW1vdmVQcm9qZWN0aW9uKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgcGFyZW50Vk5vZGU6IFZpcnR1YWxWTm9kZSxcbiAgdm5vZGU6IFZpcnR1YWxWTm9kZSxcbiAgc2xvdE5hbWU6IHN0cmluZ1xuKTogdm9pZCB7XG4gIC8vIFJlbW92ZSBmcm9tIHBhcmVudCdzIHByb2plY3Rpb25zXG4gIHZub2RlX3NldFByb3AocGFyZW50Vk5vZGUsIHNsb3ROYW1lLCBudWxsKTtcblxuICAvLyBDbGVhbiB1cCBlZmZlY3RzLCBzdWJzY3JpcHRpb25zLCBhbmQgY2hpbGQgdm5vZGVzXG4gIGNvbnN0IGpvdXJuYWw6IFZOb2RlSm91cm5hbCA9IFtdO1xuICBjbGVhbnVwKGNvbnRhaW5lciBhcyBDbGllbnRDb250YWluZXIsIGpvdXJuYWwsIHZub2RlKTtcbiAgdm5vZGVfYXBwbHlKb3VybmFsKGpvdXJuYWwpO1xuXG4gIC8vIENsZWFuIHVwIERPTVxuICBpZiAodm5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLkhhc1RhcmdldEVsZW1lbnQpIHtcbiAgICBjb25zdCB0YXJnZXRFbCA9IHZub2RlX2dldFByb3A8RWxlbWVudD4odm5vZGUsIFFUYXJnZXRFbGVtZW50LCBudWxsKTtcbiAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgIHRhcmdldEVsLnJlcGxhY2VDaGlsZHJlbigpO1xuICAgIH1cbiAgICB2bm9kZV9zZXRQcm9wKHZub2RlLCBRVGFyZ2V0RWxlbWVudCwgbnVsbCk7XG4gICAgdm5vZGUuZmxhZ3MgJj0gflZOb2RlRmxhZ3MuSGFzVGFyZ2V0RWxlbWVudDtcbiAgfVxufVxuIl19","import { isServer } from '@qwik.dev/core/build';\nimport { qTest } from '../utils/qdev';\nimport { vnode_getFirstChild, vnode_getProp, vnode_getText, vnode_isTextVNode, vnode_isVNode, } from '../../client/vnode-utils';\nimport { _EFFECT_BACK_REF } from '../../internal';\nimport { getStoreHandler, unwrapStore } from '../../reactive-primitives/impl/store';\nimport { NEEDS_COMPUTATION, } from '../../reactive-primitives/types';\nimport { SERIALIZABLE_STATE } from '../component.public';\nimport { qError } from '../error/error';\nimport { JSXNodeImpl } from '../jsx/jsx-node';\nimport { Fragment } from '../jsx/jsx-runtime';\nimport { isServerPlatform } from '../platform/platform';\nimport { _OWNER, _PROPS_HANDLER, _UNINITIALIZED } from '../utils/constants';\nimport { isString } from '../utils/types';\nimport { allocate, pendingStoreTargets, resolvers } from './allocate';\nimport { needsInflation } from './deser-proxy';\nexport let loading = Promise.resolve();\nconst dangerousObjectKeys = new Set([\n    'constructor',\n    'prototype',\n    'toString',\n    'valueOf',\n    'toJSON',\n    'then',\n]);\nconst isSafeObjectKV = (key, value) => {\n    if (typeof key === 'number') {\n        return true;\n    }\n    return (typeof key === 'string' &&\n        key !== '__proto__' &&\n        (typeof value !== 'function' || !dangerousObjectKeys.has(key)));\n};\nexport const inflate = (container, target, typeId, data) => {\n    if (typeId === 0 /* TypeIds.Plain */) {\n        // Already processed\n        return;\n    }\n    // Restore the complex data, special case for Array\n    if (typeId !== 4 /* TypeIds.Array */ && Array.isArray(data)) {\n        data = _eagerDeserializeArray(container, data);\n    }\n    switch (typeId) {\n        case 4 /* TypeIds.Array */:\n            // Arrays are special, we need to fill the array in place\n            _eagerDeserializeArray(container, data, target);\n            break;\n        case 5 /* TypeIds.Object */:\n            if (data === 0) {\n                // Special case, was an empty object\n                break;\n            }\n            for (let i = 0; i < data.length; i += 2) {\n                const key = data[i];\n                const value = data[i + 1];\n                if (!isSafeObjectKV(key, value)) {\n                    continue;\n                }\n                target[key] = value;\n            }\n            break;\n        case 28 /* TypeIds.Task */:\n            const task = target;\n            const v = data;\n            task.$qrl$ = v[0];\n            task.$flags$ = v[1];\n            task.$index$ = v[2];\n            task.$el$ = v[3];\n            task.$state$ = v[4];\n            break;\n        case 29 /* TypeIds.Component */:\n            target[SERIALIZABLE_STATE][0] = data[0];\n            break;\n        case 35 /* TypeIds.Store */: {\n            // Inflate the store target\n            const store = unwrapStore(target);\n            const storeTarget = pendingStoreTargets.get(store);\n            if (storeTarget) {\n                pendingStoreTargets.delete(store);\n                inflate(container, store, storeTarget.t, storeTarget.v);\n            }\n            /**\n             * Note that we don't do anything with the innerstores we added during serialization, because\n             * they are already inflated in the deserialize of the data, above.\n             */\n            const [, flags, effects] = data;\n            const storeHandler = getStoreHandler(target);\n            storeHandler.$flags$ = flags;\n            storeHandler.$effects$ = effects;\n            restoreEffectBackRefForEffectsMap(storeHandler.$effects$, store);\n            break;\n        }\n        case 30 /* TypeIds.Signal */: {\n            const signal = target;\n            const d = data;\n            signal.$untrackedValue$ = d[0];\n            signal.$effects$ = new Set(d.slice(1));\n            restoreEffectBackRefForEffects(signal.$effects$, signal);\n            break;\n        }\n        case 31 /* TypeIds.WrappedSignal */: {\n            const signal = target;\n            const d = data;\n            signal.$func$ = container.getSyncFn(d[0]);\n            signal.$args$ = d[1];\n            signal.$untrackedValue$ = NEEDS_COMPUTATION;\n            signal.$flags$ = d[2];\n            signal.$flags$ |= 1 /* SignalFlags.INVALID */;\n            signal.$hostElement$ = d[3];\n            signal.$effects$ = new Set(d.slice(4));\n            inflateWrappedSignalValue(signal);\n            restoreEffectBackRefForEffects(signal.$effects$, signal);\n            break;\n        }\n        case 33 /* TypeIds.AsyncSignal */: {\n            const asyncSignal = target;\n            const d = data;\n            asyncSignal.$computeQrl$ = d[0];\n            if (d[1]) {\n                asyncSignal.$effects$ = new Set(d[1]);\n            }\n            if (d[2]) {\n                asyncSignal.$loadingEffects$ = new Set(d[2]);\n            }\n            if (d[3]) {\n                asyncSignal.$errorEffects$ = new Set(d[3]);\n            }\n            if (d[4]) {\n                asyncSignal.$untrackedError$ = d[4];\n            }\n            asyncSignal.$flags$ = d[5] ?? 0;\n            if (asyncSignal.$flags$ & 64 /* AsyncSignalFlags.CLIENT_ONLY */) {\n                // If it's client only, it was serialized because it pretended to be loading\n                asyncSignal.$untrackedLoading$ = true;\n            }\n            const hasValue = d.length > 6;\n            if (hasValue) {\n                asyncSignal.$untrackedValue$ = d[6];\n            }\n            // can happen when never serialize etc\n            if (asyncSignal.$untrackedValue$ === NEEDS_COMPUTATION) {\n                asyncSignal.$flags$ |= 1 /* SignalFlags.INVALID */;\n            }\n            // Handle old format (negative = no poll) and new format (always positive, flag in d[5])\n            const rawExpires = (d[7] ?? 0);\n            asyncSignal.expires = Math.abs(rawExpires);\n            if (rawExpires < 0) {\n                asyncSignal.$flags$ |= 256 /* AsyncSignalFlags.NO_POLL */;\n            }\n            if (d[8] !== undefined && d[8] !== 1) {\n                asyncSignal.$concurrency$ = (d[8] ?? 1);\n                asyncSignal.$jobs$ = [];\n            }\n            asyncSignal.$timeoutMs$ = (d[9] ?? 0);\n            restoreEffectBackRefForEffects(asyncSignal.$effects$, asyncSignal);\n            restoreEffectBackRefForEffects(asyncSignal.$loadingEffects$, asyncSignal);\n            restoreEffectBackRefForEffects(asyncSignal.$errorEffects$, asyncSignal);\n            break;\n        }\n        // Inflating a SerializerSignal is the same as inflating a ComputedSignal\n        case 34 /* TypeIds.SerializerSignal */:\n        case 32 /* TypeIds.ComputedSignal */: {\n            const computed = target;\n            const d = data;\n            computed.$computeQrl$ = d[0];\n            /**\n             * If we try to compute value and the qrl is not resolved, then system throws an error with\n             * the resolve promise. To prevent that we load it now and qrls wait for the loading to\n             * finish.\n             */\n            const p = computed.$computeQrl$.resolve(container).catch(() => {\n                // ignore preload errors\n            });\n            loading = loading.finally(() => p);\n            if (d[1]) {\n                computed.$effects$ = new Set(d[1]);\n            }\n            const hasValue = d.length > 2;\n            if (hasValue) {\n                computed.$untrackedValue$ = d[2];\n            }\n            if (typeId !== 34 /* TypeIds.SerializerSignal */ && computed.$untrackedValue$ !== NEEDS_COMPUTATION) {\n                // If we have a value after SSR, it will always be mean the signal was not invalid\n                // The serialized signal is always left invalid so it can recreate the custom object\n                computed.$flags$ &= ~1 /* SignalFlags.INVALID */;\n            }\n            restoreEffectBackRefForEffects(computed.$effects$, computed);\n            break;\n        }\n        case 23 /* TypeIds.Error */: {\n            const d = data;\n            target.message = d[0];\n            for (let i = 1; i < d.length; i += 2) {\n                target[d[i]] = d[i + 1];\n            }\n            break;\n        }\n        case 36 /* TypeIds.FormData */: {\n            const formData = target;\n            const d = data;\n            for (let i = 0; i < d.length; i++) {\n                formData.append(d[i++], d[i]);\n            }\n            break;\n        }\n        case 37 /* TypeIds.JSXNode */: {\n            const jsx = target;\n            const [type, key, varProps, constProps, children, toSort] = data;\n            jsx.type = type;\n            jsx.key = key;\n            jsx.varProps = varProps;\n            jsx.constProps = constProps || null;\n            jsx.children = children;\n            jsx.toSort = !!toSort;\n            break;\n        }\n        case 25 /* TypeIds.Set */: {\n            const set = target;\n            const d = data;\n            for (let i = 0; i < d.length; i++) {\n                set.add(d[i]);\n            }\n            break;\n        }\n        case 26 /* TypeIds.Map */: {\n            const map = target;\n            const d = data;\n            for (let i = 0; i < d.length; i++) {\n                map.set(d[i++], d[i]);\n            }\n            break;\n        }\n        case 24 /* TypeIds.Promise */: {\n            const promise = target;\n            const [resolved, result] = data;\n            const [resolve, reject] = resolvers.get(promise);\n            if (resolved) {\n                resolve(result);\n            }\n            else {\n                reject(result);\n            }\n            break;\n        }\n        case 27 /* TypeIds.Uint8Array */:\n            const bytes = target;\n            const buf = atob(data);\n            let i = 0;\n            for (let j = 0; j < buf.length; j++) {\n                const s = buf[j];\n                bytes[i++] = s.charCodeAt(0);\n            }\n            break;\n        case 38 /* TypeIds.PropsProxy */:\n            const propsProxy = target;\n            const d = data;\n            let owner = d[0];\n            if (owner === _UNINITIALIZED) {\n                owner = new JSXNodeImpl(Fragment, d[1], d[2], null, 0, null);\n                owner._proxy = propsProxy;\n            }\n            propsProxy[_OWNER] = owner;\n            const propsHandler = propsProxy[_PROPS_HANDLER];\n            propsHandler.$effects$ = d[3];\n            restoreEffectBackRefForEffectsMap(propsHandler.$effects$, propsProxy);\n            break;\n        case 39 /* TypeIds.SubscriptionData */: {\n            const effectData = target;\n            effectData.data.$scopedStyleIdPrefix$ = data[0];\n            effectData.data.$isConst$ = data[1];\n            break;\n        }\n        case 40 /* TypeIds.EffectSubscription */: {\n            const effectSub = target;\n            const d = data;\n            effectSub.consumer = d[0];\n            effectSub.property = d[1];\n            effectSub.data = d[2];\n            restoreEffectBackRefForConsumer(effectSub);\n            break;\n        }\n        case 41 /* TypeIds.SubscriptionPatch */: {\n            const patch = target;\n            const d = data;\n            patch.rootId = d[0];\n            patch.subscriptions = d[1];\n            break;\n        }\n        default:\n            throw qError(16 /* QError.serializeErrorNotImplemented */, [typeId]);\n    }\n};\n/**\n * Restores an array eagerly. If you need it lazily, use `deserializeData(container, TypeIds.Array,\n * array)` instead\n */\nexport const _eagerDeserializeArray = (container, data, output = Array(data.length / 2)) => {\n    for (let i = 0; i < data.length; i += 2) {\n        output[i / 2] = deserializeData(container, data[i], data[i + 1]);\n    }\n    return output;\n};\nexport function deserializeData(container, typeId, value) {\n    if (typeId === 0 /* TypeIds.Plain */) {\n        return value;\n    }\n    const propValue = allocate(container, typeId, value);\n    if (needsInflation(typeId)) {\n        inflate(container, propValue, typeId, value);\n    }\n    return propValue;\n}\nexport function inflateWrappedSignalValue(signal) {\n    if (signal.$hostElement$ !== null && vnode_isVNode(signal.$hostElement$)) {\n        const hostVNode = signal.$hostElement$;\n        const effects = signal.$effects$;\n        let hasAttrValue = false;\n        if (effects) {\n            // Find string keys (attribute names) in the effect back refs\n            for (const effect of effects) {\n                const key = effect.property;\n                if (isString(key)) {\n                    // This is an attribute name, try to read its value\n                    const attrValue = vnode_getProp(hostVNode, key, null);\n                    if (attrValue !== null) {\n                        signal.$untrackedValue$ = attrValue;\n                        hasAttrValue = true;\n                        break; // Take first non-null attribute value\n                    }\n                }\n            }\n        }\n        if (!hasAttrValue) {\n            // If no attribute value found, check if this is a text content signal\n            const firstChild = vnode_getFirstChild(hostVNode);\n            if (firstChild &&\n                hostVNode.firstChild === hostVNode.lastChild &&\n                vnode_isTextVNode(firstChild)) {\n                signal.$untrackedValue$ = vnode_getText(firstChild);\n            }\n        }\n    }\n}\nfunction restoreEffectBackRefForConsumer(effect) {\n    const isServerSide = qTest ? isServerPlatform() : isServer;\n    const consumerBackRef = effect.consumer;\n    if (isServerSide && !consumerBackRef) {\n        // on browser, we don't serialize for example VNodes, so then on server side we don't have consumer\n        return;\n    }\n    consumerBackRef[_EFFECT_BACK_REF] ||= new Map();\n    consumerBackRef[_EFFECT_BACK_REF].set(effect.property, effect);\n}\nfunction restoreEffectBackRefForEffects(effects, consumer) {\n    if (effects) {\n        for (const effect of effects) {\n            effect.backRef ||= new Set();\n            effect.backRef.add(consumer);\n        }\n    }\n}\nfunction restoreEffectBackRefForEffectsMap(effectsMap, consumer) {\n    if (effectsMap) {\n        for (const [, effects] of effectsMap) {\n            restoreEffectBackRefForEffects(effects, consumer);\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2VyZGVzL2luZmxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixhQUFhLEdBQ2QsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3BGLE9BQU8sRUFHTCxpQkFBaUIsR0FRbEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsSUFB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cnZlciB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5pbXBvcnQge1xuICB2bm9kZV9nZXRGaXJzdENoaWxkLFxuICB2bm9kZV9nZXRQcm9wLFxuICB2bm9kZV9nZXRUZXh0LFxuICB2bm9kZV9pc1RleHRWTm9kZSxcbiAgdm5vZGVfaXNWTm9kZSxcbn0gZnJvbSAnLi4vLi4vY2xpZW50L3Zub2RlLXV0aWxzJztcbmltcG9ydCB7IF9FRkZFQ1RfQkFDS19SRUYgfSBmcm9tICcuLi8uLi9pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IEJhY2tSZWYgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2JhY2tyZWYnO1xuaW1wb3J0IHR5cGUgeyBBc3luY1NpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvYXN5bmMtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZFNpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvY29tcHV0ZWQtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgU2lnbmFsSW1wbCB9IGZyb20gJy4uLy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9zaWduYWwtaW1wbCc7XG5pbXBvcnQgeyBnZXRTdG9yZUhhbmRsZXIsIHVud3JhcFN0b3JlIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgV3JhcHBlZFNpZ25hbEltcGwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvd3JhcHBlZC1zaWduYWwtaW1wbCc7XG5pbXBvcnQgdHlwZSB7IFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmlwdGlvbi1kYXRhJztcbmltcG9ydCB7XG4gIEFzeW5jU2lnbmFsRmxhZ3MsXG4gIEVmZmVjdFByb3BlcnR5LFxuICBORUVEU19DT01QVVRBVElPTixcbiAgU2lnbmFsRmxhZ3MsXG4gIHR5cGUgQWxsU2lnbmFsRmxhZ3MsXG4gIHR5cGUgQXN5bmNRUkwsXG4gIHR5cGUgQ29uc3VtZXIsXG4gIHR5cGUgRWZmZWN0QmFja1JlZixcbiAgdHlwZSBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIHR5cGUgU3RvcmVGbGFncyxcbn0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHsgU0VSSUFMSVpBQkxFX1NUQVRFIH0gZnJvbSAnLi4vY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyBxRXJyb3IsIFFFcnJvciB9IGZyb20gJy4uL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IEpTWE5vZGVJbXBsIH0gZnJvbSAnLi4vanN4L2pzeC1ub2RlJztcbmltcG9ydCB7IEZyYWdtZW50LCBQcm9wcyB9IGZyb20gJy4uL2pzeC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBQcm9wc1Byb3h5IH0gZnJvbSAnLi4vanN4L3Byb3BzLXByb3h5JztcbmltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IERlc2VyaWFsaXplQ29udGFpbmVyLCBIb3N0RWxlbWVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IF9PV05FUiwgX1BST1BTX0hBTkRMRVIsIF9VTklOSVRJQUxJWkVEIH0gZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBWaXJ0dWFsVk5vZGUgfSBmcm9tICcuLi92bm9kZS92aXJ0dWFsLXZub2RlJztcbmltcG9ydCB7IGFsbG9jYXRlLCBwZW5kaW5nU3RvcmVUYXJnZXRzLCByZXNvbHZlcnMgfSBmcm9tICcuL2FsbG9jYXRlJztcbmltcG9ydCB7IFR5cGVJZHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBuZWVkc0luZmxhdGlvbiB9IGZyb20gJy4vZGVzZXItcHJveHknO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb25QYXRjaCB9IGZyb20gJy4vc3Vic2NyaXB0aW9uLXBhdGNoJztcblxuZXhwb3J0IGxldCBsb2FkaW5nID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbmNvbnN0IGRhbmdlcm91c09iamVjdEtleXMgPSBuZXcgU2V0KFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ3Byb3RvdHlwZScsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJyxcbiAgJ3RvSlNPTicsXG4gICd0aGVuJyxcbl0pO1xuY29uc3QgaXNTYWZlT2JqZWN0S1YgPSAoa2V5OiB1bmtub3duLCB2YWx1ZTogdW5rbm93bik6IGtleSBpcyBzdHJpbmcgfCBudW1iZXIgPT4ge1xuICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmXG4gICAga2V5ICE9PSAnX19wcm90b19fJyAmJlxuICAgICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgfHwgIWRhbmdlcm91c09iamVjdEtleXMuaGFzKGtleSkpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5mbGF0ZSA9IChcbiAgY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lcixcbiAgdGFyZ2V0OiB1bmtub3duLFxuICB0eXBlSWQ6IFR5cGVJZHMsXG4gIGRhdGE6IHVua25vd25cbik6IHZvaWQgPT4ge1xuICBpZiAodHlwZUlkID09PSBUeXBlSWRzLlBsYWluKSB7XG4gICAgLy8gQWxyZWFkeSBwcm9jZXNzZWRcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUmVzdG9yZSB0aGUgY29tcGxleCBkYXRhLCBzcGVjaWFsIGNhc2UgZm9yIEFycmF5XG4gIGlmICh0eXBlSWQgIT09IFR5cGVJZHMuQXJyYXkgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGRhdGEgPSBfZWFnZXJEZXNlcmlhbGl6ZUFycmF5KGNvbnRhaW5lciwgZGF0YSk7XG4gIH1cbiAgc3dpdGNoICh0eXBlSWQpIHtcbiAgICBjYXNlIFR5cGVJZHMuQXJyYXk6XG4gICAgICAvLyBBcnJheXMgYXJlIHNwZWNpYWwsIHdlIG5lZWQgdG8gZmlsbCB0aGUgYXJyYXkgaW4gcGxhY2VcbiAgICAgIF9lYWdlckRlc2VyaWFsaXplQXJyYXkoY29udGFpbmVyLCBkYXRhIGFzIHVua25vd25bXSwgdGFyZ2V0IGFzIHVua25vd25bXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuT2JqZWN0OlxuICAgICAgaWYgKGRhdGEgPT09IDApIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlLCB3YXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoZGF0YSBhcyBhbnlbXSkubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gKGRhdGEgYXMgdW5rbm93bltdKVtpXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZGF0YSBhcyB1bmtub3duW10pW2kgKyAxXTtcbiAgICAgICAgaWYgKCFpc1NhZmVPYmplY3RLVihrZXksIHZhbHVlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVHlwZUlkcy5UYXNrOlxuICAgICAgY29uc3QgdGFzayA9IHRhcmdldCBhcyBUYXNrO1xuICAgICAgY29uc3QgdiA9IGRhdGEgYXMgYW55W107XG4gICAgICB0YXNrLiRxcmwkID0gdlswXTtcbiAgICAgIHRhc2suJGZsYWdzJCA9IHZbMV07XG4gICAgICB0YXNrLiRpbmRleCQgPSB2WzJdO1xuICAgICAgdGFzay4kZWwkID0gdlszXSBhcyBIb3N0RWxlbWVudDtcbiAgICAgIHRhc2suJHN0YXRlJCA9IHZbNF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuQ29tcG9uZW50OlxuICAgICAgKHRhcmdldCBhcyBhbnkpW1NFUklBTElaQUJMRV9TVEFURV1bMF0gPSAoZGF0YSBhcyBhbnlbXSlbMF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuU3RvcmU6IHtcbiAgICAgIC8vIEluZmxhdGUgdGhlIHN0b3JlIHRhcmdldFxuICAgICAgY29uc3Qgc3RvcmUgPSB1bndyYXBTdG9yZSh0YXJnZXQpIGFzIG9iamVjdDtcbiAgICAgIGNvbnN0IHN0b3JlVGFyZ2V0ID0gcGVuZGluZ1N0b3JlVGFyZ2V0cy5nZXQoc3RvcmUpO1xuICAgICAgaWYgKHN0b3JlVGFyZ2V0KSB7XG4gICAgICAgIHBlbmRpbmdTdG9yZVRhcmdldHMuZGVsZXRlKHN0b3JlKTtcbiAgICAgICAgaW5mbGF0ZShjb250YWluZXIsIHN0b3JlLCBzdG9yZVRhcmdldC50LCBzdG9yZVRhcmdldC52KTtcbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogTm90ZSB0aGF0IHdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIGlubmVyc3RvcmVzIHdlIGFkZGVkIGR1cmluZyBzZXJpYWxpemF0aW9uLCBiZWNhdXNlXG4gICAgICAgKiB0aGV5IGFyZSBhbHJlYWR5IGluZmxhdGVkIGluIHRoZSBkZXNlcmlhbGl6ZSBvZiB0aGUgZGF0YSwgYWJvdmUuXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IFssIGZsYWdzLCBlZmZlY3RzXSA9IGRhdGEgYXMgdW5rbm93bltdO1xuICAgICAgY29uc3Qgc3RvcmVIYW5kbGVyID0gZ2V0U3RvcmVIYW5kbGVyKHRhcmdldCBhcyBvYmplY3QpITtcbiAgICAgIHN0b3JlSGFuZGxlci4kZmxhZ3MkID0gZmxhZ3MgYXMgU3RvcmVGbGFncztcbiAgICAgIHN0b3JlSGFuZGxlci4kZWZmZWN0cyQgPSBlZmZlY3RzIGFzIGFueTtcbiAgICAgIHJlc3RvcmVFZmZlY3RCYWNrUmVmRm9yRWZmZWN0c01hcChzdG9yZUhhbmRsZXIuJGVmZmVjdHMkLCBzdG9yZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLlNpZ25hbDoge1xuICAgICAgY29uc3Qgc2lnbmFsID0gdGFyZ2V0IGFzIFNpZ25hbEltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBbdW5rbm93biwgLi4uRWZmZWN0U3Vic2NyaXB0aW9uW11dO1xuICAgICAgc2lnbmFsLiR1bnRyYWNrZWRWYWx1ZSQgPSBkWzBdO1xuICAgICAgc2lnbmFsLiRlZmZlY3RzJCA9IG5ldyBTZXQoZC5zbGljZSgxKSBhcyBFZmZlY3RTdWJzY3JpcHRpb25bXSk7XG4gICAgICByZXN0b3JlRWZmZWN0QmFja1JlZkZvckVmZmVjdHMoc2lnbmFsLiRlZmZlY3RzJCwgc2lnbmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuV3JhcHBlZFNpZ25hbDoge1xuICAgICAgY29uc3Qgc2lnbmFsID0gdGFyZ2V0IGFzIFdyYXBwZWRTaWduYWxJbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgZCA9IGRhdGEgYXMgW251bWJlciwgdW5rbm93bltdLCBBbGxTaWduYWxGbGFncywgSG9zdEVsZW1lbnQsIC4uLkVmZmVjdFN1YnNjcmlwdGlvbltdXTtcbiAgICAgIHNpZ25hbC4kZnVuYyQgPSBjb250YWluZXIuZ2V0U3luY0ZuKGRbMF0pO1xuICAgICAgc2lnbmFsLiRhcmdzJCA9IGRbMV07XG4gICAgICBzaWduYWwuJHVudHJhY2tlZFZhbHVlJCA9IE5FRURTX0NPTVBVVEFUSU9OO1xuICAgICAgc2lnbmFsLiRmbGFncyQgPSBkWzJdO1xuICAgICAgc2lnbmFsLiRmbGFncyQgfD0gU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICAgIHNpZ25hbC4kaG9zdEVsZW1lbnQkID0gZFszXTtcbiAgICAgIHNpZ25hbC4kZWZmZWN0cyQgPSBuZXcgU2V0KGQuc2xpY2UoNCkgYXMgRWZmZWN0U3Vic2NyaXB0aW9uW10pO1xuICAgICAgaW5mbGF0ZVdyYXBwZWRTaWduYWxWYWx1ZShzaWduYWwpO1xuICAgICAgcmVzdG9yZUVmZmVjdEJhY2tSZWZGb3JFZmZlY3RzKHNpZ25hbC4kZWZmZWN0cyQsIHNpZ25hbCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkFzeW5jU2lnbmFsOiB7XG4gICAgICBjb25zdCBhc3luY1NpZ25hbCA9IHRhcmdldCBhcyBBc3luY1NpZ25hbEltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBbXG4gICAgICAgIEFzeW5jUVJMPHVua25vd24+LFxuICAgICAgICBBcnJheTxFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkLFxuICAgICAgICBBcnJheTxFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkLFxuICAgICAgICBBcnJheTxFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkLFxuICAgICAgICBFcnJvciB8IHVuZGVmaW5lZCxcbiAgICAgICAgbnVtYmVyPyxcbiAgICAgICAgdW5rbm93bj8sXG4gICAgICAgIG51bWJlcj8sXG4gICAgICAgIG51bWJlcj8sXG4gICAgICAgIG51bWJlcj8sXG4gICAgICBdO1xuICAgICAgYXN5bmNTaWduYWwuJGNvbXB1dGVRcmwkID0gZFswXSBhcyBBc3luY1FSTDx1bmtub3duPjtcbiAgICAgIGlmIChkWzFdKSB7XG4gICAgICAgIGFzeW5jU2lnbmFsLiRlZmZlY3RzJCA9IG5ldyBTZXQoZFsxXSBhcyBFZmZlY3RTdWJzY3JpcHRpb25bXSk7XG4gICAgICB9XG4gICAgICBpZiAoZFsyXSkge1xuICAgICAgICBhc3luY1NpZ25hbC4kbG9hZGluZ0VmZmVjdHMkID0gbmV3IFNldChkWzJdIGFzIEVmZmVjdFN1YnNjcmlwdGlvbltdKTtcbiAgICAgIH1cbiAgICAgIGlmIChkWzNdKSB7XG4gICAgICAgIGFzeW5jU2lnbmFsLiRlcnJvckVmZmVjdHMkID0gbmV3IFNldChkWzNdIGFzIEVmZmVjdFN1YnNjcmlwdGlvbltdKTtcbiAgICAgIH1cbiAgICAgIGlmIChkWzRdKSB7XG4gICAgICAgIGFzeW5jU2lnbmFsLiR1bnRyYWNrZWRFcnJvciQgPSBkWzRdO1xuICAgICAgfVxuXG4gICAgICBhc3luY1NpZ25hbC4kZmxhZ3MkID0gKGRbNV0gYXMgbnVtYmVyKSA/PyAwO1xuXG4gICAgICBpZiAoYXN5bmNTaWduYWwuJGZsYWdzJCAmIEFzeW5jU2lnbmFsRmxhZ3MuQ0xJRU5UX09OTFkpIHtcbiAgICAgICAgLy8gSWYgaXQncyBjbGllbnQgb25seSwgaXQgd2FzIHNlcmlhbGl6ZWQgYmVjYXVzZSBpdCBwcmV0ZW5kZWQgdG8gYmUgbG9hZGluZ1xuICAgICAgICBhc3luY1NpZ25hbC4kdW50cmFja2VkTG9hZGluZyQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IGQubGVuZ3RoID4gNjtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICBhc3luY1NpZ25hbC4kdW50cmFja2VkVmFsdWUkID0gZFs2XTtcbiAgICAgIH1cbiAgICAgIC8vIGNhbiBoYXBwZW4gd2hlbiBuZXZlciBzZXJpYWxpemUgZXRjXG4gICAgICBpZiAoYXN5bmNTaWduYWwuJHVudHJhY2tlZFZhbHVlJCA9PT0gTkVFRFNfQ09NUFVUQVRJT04pIHtcbiAgICAgICAgYXN5bmNTaWduYWwuJGZsYWdzJCB8PSBTaWduYWxGbGFncy5JTlZBTElEO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgb2xkIGZvcm1hdCAobmVnYXRpdmUgPSBubyBwb2xsKSBhbmQgbmV3IGZvcm1hdCAoYWx3YXlzIHBvc2l0aXZlLCBmbGFnIGluIGRbNV0pXG4gICAgICBjb25zdCByYXdFeHBpcmVzID0gKGRbN10gPz8gMCkgYXMgbnVtYmVyO1xuICAgICAgYXN5bmNTaWduYWwuZXhwaXJlcyA9IE1hdGguYWJzKHJhd0V4cGlyZXMpO1xuICAgICAgaWYgKHJhd0V4cGlyZXMgPCAwKSB7XG4gICAgICAgIGFzeW5jU2lnbmFsLiRmbGFncyQgfD0gQXN5bmNTaWduYWxGbGFncy5OT19QT0xMO1xuICAgICAgfVxuXG4gICAgICBpZiAoZFs4XSAhPT0gdW5kZWZpbmVkICYmIGRbOF0gIT09IDEpIHtcbiAgICAgICAgYXN5bmNTaWduYWwuJGNvbmN1cnJlbmN5JCA9IChkWzhdID8/IDEpIGFzIG51bWJlcjtcbiAgICAgICAgYXN5bmNTaWduYWwuJGpvYnMkID0gW107XG4gICAgICB9XG4gICAgICBhc3luY1NpZ25hbC4kdGltZW91dE1zJCA9IChkWzldID8/IDApIGFzIG51bWJlcjtcbiAgICAgIHJlc3RvcmVFZmZlY3RCYWNrUmVmRm9yRWZmZWN0cyhhc3luY1NpZ25hbC4kZWZmZWN0cyQsIGFzeW5jU2lnbmFsKTtcbiAgICAgIHJlc3RvcmVFZmZlY3RCYWNrUmVmRm9yRWZmZWN0cyhhc3luY1NpZ25hbC4kbG9hZGluZ0VmZmVjdHMkLCBhc3luY1NpZ25hbCk7XG4gICAgICByZXN0b3JlRWZmZWN0QmFja1JlZkZvckVmZmVjdHMoYXN5bmNTaWduYWwuJGVycm9yRWZmZWN0cyQsIGFzeW5jU2lnbmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBJbmZsYXRpbmcgYSBTZXJpYWxpemVyU2lnbmFsIGlzIHRoZSBzYW1lIGFzIGluZmxhdGluZyBhIENvbXB1dGVkU2lnbmFsXG4gICAgY2FzZSBUeXBlSWRzLlNlcmlhbGl6ZXJTaWduYWw6XG4gICAgY2FzZSBUeXBlSWRzLkNvbXB1dGVkU2lnbmFsOiB7XG4gICAgICBjb25zdCBjb21wdXRlZCA9IHRhcmdldCBhcyBDb21wdXRlZFNpZ25hbEltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBbUVJMSW50ZXJuYWw8KCkgPT4ge30+LCBFZmZlY3RTdWJzY3JpcHRpb25bXSB8IHVuZGVmaW5lZCwgdW5rbm93bj9dO1xuICAgICAgY29tcHV0ZWQuJGNvbXB1dGVRcmwkID0gZFswXTtcbiAgICAgIC8qKlxuICAgICAgICogSWYgd2UgdHJ5IHRvIGNvbXB1dGUgdmFsdWUgYW5kIHRoZSBxcmwgaXMgbm90IHJlc29sdmVkLCB0aGVuIHN5c3RlbSB0aHJvd3MgYW4gZXJyb3Igd2l0aFxuICAgICAgICogdGhlIHJlc29sdmUgcHJvbWlzZS4gVG8gcHJldmVudCB0aGF0IHdlIGxvYWQgaXQgbm93IGFuZCBxcmxzIHdhaXQgZm9yIHRoZSBsb2FkaW5nIHRvXG4gICAgICAgKiBmaW5pc2guXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHAgPSBjb21wdXRlZC4kY29tcHV0ZVFybCQucmVzb2x2ZShjb250YWluZXIgYXMgYW55KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIGlnbm9yZSBwcmVsb2FkIGVycm9yc1xuICAgICAgfSk7XG4gICAgICBsb2FkaW5nID0gbG9hZGluZy5maW5hbGx5KCgpID0+IHApO1xuICAgICAgaWYgKGRbMV0pIHtcbiAgICAgICAgY29tcHV0ZWQuJGVmZmVjdHMkID0gbmV3IFNldChkWzFdKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc1ZhbHVlID0gZC5sZW5ndGggPiAyO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIGNvbXB1dGVkLiR1bnRyYWNrZWRWYWx1ZSQgPSBkWzJdO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVJZCAhPT0gVHlwZUlkcy5TZXJpYWxpemVyU2lnbmFsICYmIGNvbXB1dGVkLiR1bnRyYWNrZWRWYWx1ZSQgIT09IE5FRURTX0NPTVBVVEFUSU9OKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB2YWx1ZSBhZnRlciBTU1IsIGl0IHdpbGwgYWx3YXlzIGJlIG1lYW4gdGhlIHNpZ25hbCB3YXMgbm90IGludmFsaWRcbiAgICAgICAgLy8gVGhlIHNlcmlhbGl6ZWQgc2lnbmFsIGlzIGFsd2F5cyBsZWZ0IGludmFsaWQgc28gaXQgY2FuIHJlY3JlYXRlIHRoZSBjdXN0b20gb2JqZWN0XG4gICAgICAgIGNvbXB1dGVkLiRmbGFncyQgJj0gflNpZ25hbEZsYWdzLklOVkFMSUQ7XG4gICAgICB9XG4gICAgICByZXN0b3JlRWZmZWN0QmFja1JlZkZvckVmZmVjdHMoY29tcHV0ZWQuJGVmZmVjdHMkLCBjb21wdXRlZCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkVycm9yOiB7XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBzdHJpbmdbXTtcbiAgICAgICh0YXJnZXQgYXMgRXJyb3IpLm1lc3NhZ2UgPSBkWzBdIGFzIHN0cmluZztcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAodGFyZ2V0IGFzIGFueSlbZFtpXV0gPSBkW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuRm9ybURhdGE6IHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGFyZ2V0IGFzIEZvcm1EYXRhO1xuICAgICAgY29uc3QgZCA9IGRhdGEgYXMgYW55W107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGRbaSsrXSwgZFtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkpTWE5vZGU6IHtcbiAgICAgIGNvbnN0IGpzeCA9IHRhcmdldCBhcyBKU1hOb2RlSW1wbDx1bmtub3duPjtcbiAgICAgIGNvbnN0IFt0eXBlLCBrZXksIHZhclByb3BzLCBjb25zdFByb3BzLCBjaGlsZHJlbiwgdG9Tb3J0XSA9IGRhdGEgYXMgYW55W107XG4gICAgICBqc3gudHlwZSA9IHR5cGU7XG4gICAgICBqc3gua2V5ID0ga2V5O1xuICAgICAganN4LnZhclByb3BzID0gdmFyUHJvcHM7XG4gICAgICBqc3guY29uc3RQcm9wcyA9IGNvbnN0UHJvcHMgfHwgbnVsbDtcbiAgICAgIGpzeC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAganN4LnRvU29ydCA9ICEhdG9Tb3J0O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgVHlwZUlkcy5TZXQ6IHtcbiAgICAgIGNvbnN0IHNldCA9IHRhcmdldCBhcyBTZXQ8dW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBhbnlbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZXQuYWRkKGRbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgVHlwZUlkcy5NYXA6IHtcbiAgICAgIGNvbnN0IG1hcCA9IHRhcmdldCBhcyBNYXA8dW5rbm93biwgdW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBhbnlbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXAuc2V0KGRbaSsrXSwgZFtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLlByb21pc2U6IHtcbiAgICAgIGNvbnN0IHByb21pc2UgPSB0YXJnZXQgYXMgUHJvbWlzZTx1bmtub3duPjtcbiAgICAgIGNvbnN0IFtyZXNvbHZlZCwgcmVzdWx0XSA9IGRhdGEgYXMgW2Jvb2xlYW4sIHVua25vd25dO1xuICAgICAgY29uc3QgW3Jlc29sdmUsIHJlamVjdF0gPSByZXNvbHZlcnMuZ2V0KHByb21pc2UpITtcbiAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuVWludDhBcnJheTpcbiAgICAgIGNvbnN0IGJ5dGVzID0gdGFyZ2V0IGFzIFVpbnQ4QXJyYXk7XG4gICAgICBjb25zdCBidWYgPSBhdG9iKGRhdGEgYXMgc3RyaW5nKTtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYnVmLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHMgPSBidWZbal07XG4gICAgICAgIGJ5dGVzW2krK10gPSBzLmNoYXJDb2RlQXQoMCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuUHJvcHNQcm94eTpcbiAgICAgIGNvbnN0IHByb3BzUHJveHkgPSB0YXJnZXQgYXMgUHJvcHNQcm94eTtcbiAgICAgIGNvbnN0IGQgPSBkYXRhIGFzIFtcbiAgICAgICAgSlNYTm9kZUltcGwgfCB0eXBlb2YgX1VOSU5JVElBTElaRUQsXG4gICAgICAgIFByb3BzLFxuICAgICAgICBQcm9wcyB8IG51bGwsXG4gICAgICAgIE1hcDxzdHJpbmcgfCBzeW1ib2wsIFNldDxFZmZlY3RTdWJzY3JpcHRpb24+PiB8IHVuZGVmaW5lZCxcbiAgICAgIF07XG4gICAgICBsZXQgb3duZXIgPSBkWzBdO1xuICAgICAgaWYgKG93bmVyID09PSBfVU5JTklUSUFMSVpFRCkge1xuICAgICAgICBvd25lciA9IG5ldyBKU1hOb2RlSW1wbChGcmFnbWVudCwgZFsxXSwgZFsyXSwgbnVsbCwgMCwgbnVsbCk7XG4gICAgICAgIG93bmVyLl9wcm94eSA9IHByb3BzUHJveHk7XG4gICAgICB9XG4gICAgICBwcm9wc1Byb3h5W19PV05FUl0gPSBvd25lcjtcbiAgICAgIGNvbnN0IHByb3BzSGFuZGxlciA9IHByb3BzUHJveHlbX1BST1BTX0hBTkRMRVJdO1xuICAgICAgcHJvcHNIYW5kbGVyLiRlZmZlY3RzJCA9IGRbM107XG4gICAgICByZXN0b3JlRWZmZWN0QmFja1JlZkZvckVmZmVjdHNNYXAocHJvcHNIYW5kbGVyLiRlZmZlY3RzJCwgcHJvcHNQcm94eSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuU3Vic2NyaXB0aW9uRGF0YToge1xuICAgICAgY29uc3QgZWZmZWN0RGF0YSA9IHRhcmdldCBhcyBTdWJzY3JpcHRpb25EYXRhO1xuICAgICAgZWZmZWN0RGF0YS5kYXRhLiRzY29wZWRTdHlsZUlkUHJlZml4JCA9IChkYXRhIGFzIGFueVtdKVswXTtcbiAgICAgIGVmZmVjdERhdGEuZGF0YS4kaXNDb25zdCQgPSAoZGF0YSBhcyBhbnlbXSlbMV07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkVmZmVjdFN1YnNjcmlwdGlvbjoge1xuICAgICAgY29uc3QgZWZmZWN0U3ViID0gdGFyZ2V0IGFzIEVmZmVjdFN1YnNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGQgPSBkYXRhIGFzIFtDb25zdW1lciwgRWZmZWN0UHJvcGVydHkgfCBzdHJpbmcsIFN1YnNjcmlwdGlvbkRhdGEgfCBudWxsXTtcbiAgICAgIGVmZmVjdFN1Yi5jb25zdW1lciA9IGRbMF07XG4gICAgICBlZmZlY3RTdWIucHJvcGVydHkgPSBkWzFdO1xuICAgICAgZWZmZWN0U3ViLmRhdGEgPSBkWzJdO1xuICAgICAgcmVzdG9yZUVmZmVjdEJhY2tSZWZGb3JDb25zdW1lcihlZmZlY3RTdWIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgVHlwZUlkcy5TdWJzY3JpcHRpb25QYXRjaDoge1xuICAgICAgY29uc3QgcGF0Y2ggPSB0YXJnZXQgYXMgU3Vic2NyaXB0aW9uUGF0Y2g7XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBbXG4gICAgICAgIG51bWJlcixcbiAgICAgICAgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4gfCBNYXA8c3RyaW5nIHwgc3ltYm9sLCBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPj4sXG4gICAgICBdO1xuICAgICAgcGF0Y2gucm9vdElkID0gZFswXTtcbiAgICAgIHBhdGNoLnN1YnNjcmlwdGlvbnMgPSBkWzFdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnNlcmlhbGl6ZUVycm9yTm90SW1wbGVtZW50ZWQsIFt0eXBlSWRdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXN0b3JlcyBhbiBhcnJheSBlYWdlcmx5LiBJZiB5b3UgbmVlZCBpdCBsYXppbHksIHVzZSBgZGVzZXJpYWxpemVEYXRhKGNvbnRhaW5lciwgVHlwZUlkcy5BcnJheSxcbiAqIGFycmF5KWAgaW5zdGVhZFxuICovXG5leHBvcnQgY29uc3QgX2VhZ2VyRGVzZXJpYWxpemVBcnJheSA9IChcbiAgY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lcixcbiAgZGF0YTogdW5rbm93bltdLFxuICBvdXRwdXQ6IHVua25vd25bXSA9IEFycmF5KGRhdGEubGVuZ3RoIC8gMilcbik6IHVua25vd25bXSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgIG91dHB1dFtpIC8gMl0gPSBkZXNlcmlhbGl6ZURhdGEoY29udGFpbmVyLCBkYXRhW2ldIGFzIFR5cGVJZHMsIGRhdGFbaSArIDFdKTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplRGF0YShjb250YWluZXI6IERlc2VyaWFsaXplQ29udGFpbmVyLCB0eXBlSWQ6IG51bWJlciwgdmFsdWU6IHVua25vd24pIHtcbiAgaWYgKHR5cGVJZCA9PT0gVHlwZUlkcy5QbGFpbikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBjb25zdCBwcm9wVmFsdWUgPSBhbGxvY2F0ZShjb250YWluZXIsIHR5cGVJZCwgdmFsdWUpO1xuICBpZiAobmVlZHNJbmZsYXRpb24odHlwZUlkKSkge1xuICAgIGluZmxhdGUoY29udGFpbmVyLCBwcm9wVmFsdWUsIHR5cGVJZCwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZsYXRlV3JhcHBlZFNpZ25hbFZhbHVlKHNpZ25hbDogV3JhcHBlZFNpZ25hbEltcGw8dW5rbm93bj4pIHtcbiAgaWYgKHNpZ25hbC4kaG9zdEVsZW1lbnQkICE9PSBudWxsICYmIHZub2RlX2lzVk5vZGUoc2lnbmFsLiRob3N0RWxlbWVudCQpKSB7XG4gICAgY29uc3QgaG9zdFZOb2RlID0gc2lnbmFsLiRob3N0RWxlbWVudCQgYXMgVmlydHVhbFZOb2RlO1xuICAgIGNvbnN0IGVmZmVjdHMgPSBzaWduYWwuJGVmZmVjdHMkO1xuICAgIGxldCBoYXNBdHRyVmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoZWZmZWN0cykge1xuICAgICAgLy8gRmluZCBzdHJpbmcga2V5cyAoYXR0cmlidXRlIG5hbWVzKSBpbiB0aGUgZWZmZWN0IGJhY2sgcmVmc1xuICAgICAgZm9yIChjb25zdCBlZmZlY3Qgb2YgZWZmZWN0cykge1xuICAgICAgICBjb25zdCBrZXkgPSBlZmZlY3QucHJvcGVydHk7XG4gICAgICAgIGlmIChpc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhbiBhdHRyaWJ1dGUgbmFtZSwgdHJ5IHRvIHJlYWQgaXRzIHZhbHVlXG4gICAgICAgICAgY29uc3QgYXR0clZhbHVlID0gdm5vZGVfZ2V0UHJvcChob3N0Vk5vZGUsIGtleSwgbnVsbCk7XG4gICAgICAgICAgaWYgKGF0dHJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2lnbmFsLiR1bnRyYWNrZWRWYWx1ZSQgPSBhdHRyVmFsdWU7XG4gICAgICAgICAgICBoYXNBdHRyVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7IC8vIFRha2UgZmlyc3Qgbm9uLW51bGwgYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFoYXNBdHRyVmFsdWUpIHtcbiAgICAgIC8vIElmIG5vIGF0dHJpYnV0ZSB2YWx1ZSBmb3VuZCwgY2hlY2sgaWYgdGhpcyBpcyBhIHRleHQgY29udGVudCBzaWduYWxcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKGhvc3RWTm9kZSk7XG4gICAgICBpZiAoXG4gICAgICAgIGZpcnN0Q2hpbGQgJiZcbiAgICAgICAgaG9zdFZOb2RlLmZpcnN0Q2hpbGQgPT09IGhvc3RWTm9kZS5sYXN0Q2hpbGQgJiZcbiAgICAgICAgdm5vZGVfaXNUZXh0Vk5vZGUoZmlyc3RDaGlsZClcbiAgICAgICkge1xuICAgICAgICBzaWduYWwuJHVudHJhY2tlZFZhbHVlJCA9IHZub2RlX2dldFRleHQoZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVFZmZlY3RCYWNrUmVmRm9yQ29uc3VtZXIoZWZmZWN0OiBFZmZlY3RTdWJzY3JpcHRpb24pOiB2b2lkIHtcbiAgY29uc3QgaXNTZXJ2ZXJTaWRlID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcjtcbiAgY29uc3QgY29uc3VtZXJCYWNrUmVmID0gZWZmZWN0LmNvbnN1bWVyIGFzIEJhY2tSZWY7XG4gIGlmIChpc1NlcnZlclNpZGUgJiYgIWNvbnN1bWVyQmFja1JlZikge1xuICAgIC8vIG9uIGJyb3dzZXIsIHdlIGRvbid0IHNlcmlhbGl6ZSBmb3IgZXhhbXBsZSBWTm9kZXMsIHNvIHRoZW4gb24gc2VydmVyIHNpZGUgd2UgZG9uJ3QgaGF2ZSBjb25zdW1lclxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdW1lckJhY2tSZWZbX0VGRkVDVF9CQUNLX1JFRl0gfHw9IG5ldyBNYXAoKTtcbiAgY29uc3VtZXJCYWNrUmVmW19FRkZFQ1RfQkFDS19SRUZdLnNldChlZmZlY3QucHJvcGVydHksIGVmZmVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVFZmZlY3RCYWNrUmVmRm9yRWZmZWN0cyhcbiAgZWZmZWN0czogU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjb25zdW1lcjogRWZmZWN0QmFja1JlZlxuKTogdm9pZCB7XG4gIGlmIChlZmZlY3RzKSB7XG4gICAgZm9yIChjb25zdCBlZmZlY3Qgb2YgZWZmZWN0cykge1xuICAgICAgZWZmZWN0LmJhY2tSZWYgfHw9IG5ldyBTZXQoKTtcbiAgICAgIGVmZmVjdC5iYWNrUmVmLmFkZChjb25zdW1lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVFZmZlY3RCYWNrUmVmRm9yRWZmZWN0c01hcChcbiAgZWZmZWN0c01hcDogTWFwPHN0cmluZyB8IHN5bWJvbCwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY29uc3VtZXI6IEVmZmVjdEJhY2tSZWZcbik6IHZvaWQge1xuICBpZiAoZWZmZWN0c01hcCkge1xuICAgIGZvciAoY29uc3QgWywgZWZmZWN0c10gb2YgZWZmZWN0c01hcCkge1xuICAgICAgcmVzdG9yZUVmZmVjdEJhY2tSZWZGb3JFZmZlY3RzKGVmZmVjdHMsIGNvbnN1bWVyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { vnode_isVNode } from '../../client/vnode-utils';\nimport { isObject } from '../utils/types';\nimport { allocate } from './allocate';\nimport { inflate } from './inflate';\n/** Arrays/Objects are special-cased so their identifiers is a single digit. */\nexport const needsInflation = (typeId) => typeId >= 23 /* TypeIds.Error */ || typeId === 4 /* TypeIds.Array */ || typeId === 5 /* TypeIds.Object */;\nconst deserializedProxyMap = new WeakMap();\nexport const isDeserializerProxy = (value) => {\n    return isObject(value) && SERIALIZER_PROXY_UNWRAP in value;\n};\nexport const SERIALIZER_PROXY_UNWRAP = Symbol('UNWRAP');\n/** Call this on the serialized root state */\nexport const wrapDeserializerProxy = (container, data) => {\n    if (!Array.isArray(data) || // must be an array\n        vnode_isVNode(data) || // and not a VNode or Slot\n        isDeserializerProxy(data) // and not already wrapped\n    ) {\n        return data;\n    }\n    let proxy = deserializedProxyMap.get(data);\n    if (!proxy) {\n        const target = Array(data.length / 2).fill(undefined);\n        proxy = new Proxy(target, new DeserializationHandler(container, data));\n        deserializedProxyMap.set(data, proxy);\n    }\n    return proxy;\n};\nclass DeserializationHandler {\n    $container$;\n    $data$;\n    constructor($container$, $data$) {\n        this.$container$ = $container$;\n        this.$data$ = $data$;\n    }\n    get(target, property, receiver) {\n        if (property === SERIALIZER_PROXY_UNWRAP) {\n            // Note that this will only be partially filled in\n            return target;\n        }\n        const i = typeof property === 'number'\n            ? property\n            : typeof property === 'string'\n                ? parseInt(property, 10)\n                : NaN;\n        if (Number.isNaN(i) || i < 0 || i >= this.$data$.length / 2) {\n            return Reflect.get(target, property, receiver);\n        }\n        // The serialized data is an array with 2 values for each item\n        const idx = i * 2;\n        const typeId = this.$data$[idx];\n        const value = this.$data$[idx + 1];\n        if (typeId === 0 /* TypeIds.Plain */) {\n            // The value is already cached\n            return value;\n        }\n        const container = this.$container$;\n        const propValue = allocate(container, typeId, value);\n        Reflect.set(target, property, propValue);\n        this.$data$[idx] = 0 /* TypeIds.Plain */;\n        this.$data$[idx + 1] = propValue;\n        /** We stored the reference, so now we can inflate, allowing cycles */\n        if (needsInflation(typeId)) {\n            inflate(container, propValue, typeId, value);\n        }\n        return propValue;\n    }\n    has(target, property) {\n        if (property === SERIALIZER_PROXY_UNWRAP) {\n            return true;\n        }\n        return Object.prototype.hasOwnProperty.call(target, property);\n    }\n    set(target, property, value, receiver) {\n        if (property === SERIALIZER_PROXY_UNWRAP) {\n            return false;\n        }\n        const out = Reflect.set(target, property, value, receiver);\n        const i = typeof property === 'number' ? property : parseInt(property, 10);\n        if (Number.isNaN(i) || i < 0 || i >= this.$data$.length / 2) {\n            return out;\n        }\n        const idx = i * 2;\n        this.$data$[idx] = 0 /* TypeIds.Plain */;\n        this.$data$[idx + 1] = value;\n        return true;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzZXItcHJveHkuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3NlcmRlcy9kZXNlci1wcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQywrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUUsQ0FDaEQsTUFBTSwwQkFBaUIsSUFBSSxNQUFNLDBCQUFrQixJQUFJLE1BQU0sMkJBQW1CLENBQUM7QUFDbkYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUc5RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWMsRUFBOEIsRUFBRTtJQUNoRixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSx1QkFBdUIsSUFBSSxLQUFLLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFNBQXVCLEVBQUUsSUFBYSxFQUFhLEVBQUU7SUFDekYsSUFDRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksbUJBQW1CO1FBQzNDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSwwQkFBMEI7UUFDakQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsMEJBQTBCO01BQ3BELENBQUM7UUFDRCxPQUFPLElBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RCxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksc0JBQXNCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFjLENBQUM7UUFDcEYsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFDRixNQUFNLHNCQUFzQjtJQUVqQjtJQUNBO0lBRlQsWUFDUyxXQUF5QixFQUN6QixNQUFpQjtRQURqQixnQkFBVyxHQUFYLFdBQVcsQ0FBYztRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBQ3ZCLENBQUM7SUFFSixHQUFHLENBQUMsTUFBaUIsRUFBRSxRQUFxQixFQUFFLFFBQWdCO1FBQzVELElBQUksUUFBUSxLQUFLLHVCQUF1QixFQUFFLENBQUM7WUFDekMsa0RBQWtEO1lBQ2xELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLENBQUMsR0FDTCxPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQzFCLENBQUMsQ0FBQyxRQUFRO1lBQ1YsQ0FBQyxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVE7Z0JBQzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDWixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELDhEQUE4RDtRQUM5RCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFXLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxNQUFNLDBCQUFrQixFQUFFLENBQUM7WUFDN0IsOEJBQThCO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUFnQixDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUVqQyxzRUFBc0U7UUFDdEUsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQXFCO1FBQ3ZDLElBQUksUUFBUSxLQUFLLHVCQUF1QixFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQXFCLEVBQUUsS0FBVSxFQUFFLFFBQWdCO1FBQ3JFLElBQUksUUFBUSxLQUFLLHVCQUF1QixFQUFFLENBQUM7WUFDekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckYsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQWdCLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZUlkcyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgdm5vZGVfaXNWTm9kZSB9IGZyb20gJy4uLy4uL2NsaWVudC92bm9kZS11dGlscyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IGFsbG9jYXRlIH0gZnJvbSAnLi9hbGxvY2F0ZSc7XG5pbXBvcnQgeyBpbmZsYXRlIH0gZnJvbSAnLi9pbmZsYXRlJztcblxuLyoqIEFycmF5cy9PYmplY3RzIGFyZSBzcGVjaWFsLWNhc2VkIHNvIHRoZWlyIGlkZW50aWZpZXJzIGlzIGEgc2luZ2xlIGRpZ2l0LiAqL1xuZXhwb3J0IGNvbnN0IG5lZWRzSW5mbGF0aW9uID0gKHR5cGVJZDogVHlwZUlkcykgPT5cbiAgdHlwZUlkID49IFR5cGVJZHMuRXJyb3IgfHwgdHlwZUlkID09PSBUeXBlSWRzLkFycmF5IHx8IHR5cGVJZCA9PT0gVHlwZUlkcy5PYmplY3Q7XG5jb25zdCBkZXNlcmlhbGl6ZWRQcm94eU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgdW5rbm93bltdPigpO1xudHlwZSBEZXNlcmlhbGl6ZXJQcm94eTxUIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiA9IFQgJiB7IFtTRVJJQUxJWkVSX1BST1hZX1VOV1JBUF06IG9iamVjdCB9O1xuXG5leHBvcnQgY29uc3QgaXNEZXNlcmlhbGl6ZXJQcm94eSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIERlc2VyaWFsaXplclByb3h5ID0+IHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiBTRVJJQUxJWkVSX1BST1hZX1VOV1JBUCBpbiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBTRVJJQUxJWkVSX1BST1hZX1VOV1JBUCA9IFN5bWJvbCgnVU5XUkFQJyk7XG4vKiogQ2FsbCB0aGlzIG9uIHRoZSBzZXJpYWxpemVkIHJvb3Qgc3RhdGUgKi9cbmV4cG9ydCBjb25zdCB3cmFwRGVzZXJpYWxpemVyUHJveHkgPSAoY29udGFpbmVyOiBEb21Db250YWluZXIsIGRhdGE6IHVua25vd24pOiB1bmtub3duW10gPT4ge1xuICBpZiAoXG4gICAgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgLy8gbXVzdCBiZSBhbiBhcnJheVxuICAgIHZub2RlX2lzVk5vZGUoZGF0YSkgfHwgLy8gYW5kIG5vdCBhIFZOb2RlIG9yIFNsb3RcbiAgICBpc0Rlc2VyaWFsaXplclByb3h5KGRhdGEpIC8vIGFuZCBub3QgYWxyZWFkeSB3cmFwcGVkXG4gICkge1xuICAgIHJldHVybiBkYXRhIGFzIGFueTtcbiAgfVxuICBsZXQgcHJveHkgPSBkZXNlcmlhbGl6ZWRQcm94eU1hcC5nZXQoZGF0YSk7XG4gIGlmICghcHJveHkpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBBcnJheShkYXRhLmxlbmd0aCAvIDIpLmZpbGwodW5kZWZpbmVkKTtcbiAgICBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIG5ldyBEZXNlcmlhbGl6YXRpb25IYW5kbGVyKGNvbnRhaW5lciwgZGF0YSkpIGFzIHVua25vd25bXTtcbiAgICBkZXNlcmlhbGl6ZWRQcm94eU1hcC5zZXQoZGF0YSwgcHJveHkpO1xuICB9XG4gIHJldHVybiBwcm94eTtcbn07XG5jbGFzcyBEZXNlcmlhbGl6YXRpb25IYW5kbGVyIGltcGxlbWVudHMgUHJveHlIYW5kbGVyPG9iamVjdD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgJGNvbnRhaW5lciQ6IERvbUNvbnRhaW5lcixcbiAgICBwdWJsaWMgJGRhdGEkOiB1bmtub3duW11cbiAgKSB7fVxuXG4gIGdldCh0YXJnZXQ6IHVua25vd25bXSwgcHJvcGVydHk6IFByb3BlcnR5S2V5LCByZWNlaXZlcjogb2JqZWN0KSB7XG4gICAgaWYgKHByb3BlcnR5ID09PSBTRVJJQUxJWkVSX1BST1hZX1VOV1JBUCkge1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IGJlIHBhcnRpYWxseSBmaWxsZWQgaW5cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNvbnN0IGkgPVxuICAgICAgdHlwZW9mIHByb3BlcnR5ID09PSAnbnVtYmVyJ1xuICAgICAgICA/IHByb3BlcnR5XG4gICAgICAgIDogdHlwZW9mIHByb3BlcnR5ID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gcGFyc2VJbnQocHJvcGVydHkgYXMgc3RyaW5nLCAxMClcbiAgICAgICAgICA6IE5hTjtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGkpIHx8IGkgPCAwIHx8IGkgPj0gdGhpcy4kZGF0YSQubGVuZ3RoIC8gMikge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgLy8gVGhlIHNlcmlhbGl6ZWQgZGF0YSBpcyBhbiBhcnJheSB3aXRoIDIgdmFsdWVzIGZvciBlYWNoIGl0ZW1cbiAgICBjb25zdCBpZHggPSBpICogMjtcbiAgICBjb25zdCB0eXBlSWQgPSB0aGlzLiRkYXRhJFtpZHhdIGFzIG51bWJlcjtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuJGRhdGEkW2lkeCArIDFdO1xuICAgIGlmICh0eXBlSWQgPT09IFR5cGVJZHMuUGxhaW4pIHtcbiAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhbHJlYWR5IGNhY2hlZFxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuJGNvbnRhaW5lciQ7XG4gICAgY29uc3QgcHJvcFZhbHVlID0gYWxsb2NhdGUoY29udGFpbmVyLCB0eXBlSWQsIHZhbHVlKTtcblxuICAgIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHksIHByb3BWYWx1ZSk7XG4gICAgdGhpcy4kZGF0YSRbaWR4XSA9IFR5cGVJZHMuUGxhaW47XG4gICAgdGhpcy4kZGF0YSRbaWR4ICsgMV0gPSBwcm9wVmFsdWU7XG5cbiAgICAvKiogV2Ugc3RvcmVkIHRoZSByZWZlcmVuY2UsIHNvIG5vdyB3ZSBjYW4gaW5mbGF0ZSwgYWxsb3dpbmcgY3ljbGVzICovXG4gICAgaWYgKG5lZWRzSW5mbGF0aW9uKHR5cGVJZCkpIHtcbiAgICAgIGluZmxhdGUoY29udGFpbmVyLCBwcm9wVmFsdWUsIHR5cGVJZCwgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cblxuICBoYXModGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5OiBQcm9wZXJ0eUtleSkge1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gU0VSSUFMSVpFUl9QUk9YWV9VTldSQVApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcGVydHkpO1xuICB9XG5cbiAgc2V0KHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eTogUHJvcGVydHlLZXksIHZhbHVlOiBhbnksIHJlY2VpdmVyOiBvYmplY3QpIHtcbiAgICBpZiAocHJvcGVydHkgPT09IFNFUklBTElaRVJfUFJPWFlfVU5XUkFQKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlcik7XG4gICAgY29uc3QgaSA9IHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ251bWJlcicgPyBwcm9wZXJ0eSA6IHBhcnNlSW50KHByb3BlcnR5IGFzIHN0cmluZywgMTApO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oaSkgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLiRkYXRhJC5sZW5ndGggLyAyKSB7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBjb25zdCBpZHggPSBpICogMjtcbiAgICB0aGlzLiRkYXRhJFtpZHhdID0gVHlwZUlkcy5QbGFpbjtcbiAgICB0aGlzLiRkYXRhJFtpZHggKyAxXSA9IHZhbHVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=","import { createSerializationContext } from './index';\nimport { assertTrue } from '../error/assert';\nimport { wrapDeserializerProxy } from './deser-proxy';\nimport { deserializeData } from './inflate';\nimport { preprocessState } from './preprocess-state';\nimport { isDev } from '@qwik.dev/core/build';\n/**\n * Serialize data to string using SerializationContext.\n *\n * @internal\n */\nexport async function _serialize(data) {\n    const serializationContext = createSerializationContext(null, null, () => '', () => { }, new WeakMap());\n    serializationContext.$addRoot$(data);\n    await serializationContext.$serialize$();\n    return serializationContext.$writer$.toString();\n}\n/**\n * Deserialize data from string to an array of objects.\n *\n * @param rawStateData - Data to deserialize\n * @internal\n */\nexport function _deserialize(rawStateData) {\n    if (rawStateData == null) {\n        throw new Error('No state data to deserialize');\n    }\n    const stateData = JSON.parse(rawStateData);\n    if (!Array.isArray(stateData) || stateData.length < 2 || typeof stateData[0] !== 'number') {\n        throw new Error('Invalid state data');\n    }\n    const container = _createDeserializeContainer(stateData);\n    return deserializeData(container, stateData[0], stateData[1]);\n}\nexport function getObjectById(id, stateData) {\n    if (typeof id === 'string') {\n        id = parseInt(id, 10);\n        // This return statement is needed to prevent the function from turning megamorphic\n        return stateData[id];\n    }\n    isDev && assertTrue(id < stateData.length, `Invalid reference ${id} >= ${stateData.length}`);\n    return stateData[id];\n}\n/** @internal */\nexport function _createDeserializeContainer(stateData) {\n    // eslint-disable-next-line prefer-const\n    let state;\n    const container = {\n        $getObjectById$: (id) => getObjectById(id, state),\n        $getForwardRef$: (id) => container.$forwardRefs$?.[Number(id)],\n        getSyncFn: (_) => {\n            const fn = () => { };\n            return fn;\n        },\n        $storeProxyMap$: new WeakMap(),\n        element: null,\n        $forwardRefs$: null,\n    };\n    preprocessState(stateData, container);\n    state = wrapDeserializerProxy(container, stateData);\n    container.$state$ = state;\n    return container;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyZGVzLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2VyZGVzL3NlcmRlcy5wdWJsaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdDOzs7O0dBSUc7QUFFSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBSSxJQUFPO0lBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsMEJBQTBCLENBQ3JELElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUFFLENBQUMsRUFBRSxFQUNSLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFDUixJQUFJLE9BQU8sRUFBWSxDQUN4QixDQUFDO0lBRUYsb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUNEOzs7OztHQUtHO0FBRUgsTUFBTSxVQUFVLFlBQVksQ0FBSSxZQUFvQjtJQUNsRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxPQUFPLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEVBQW1CLEVBQUUsU0FBb0I7SUFDckUsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QixtRkFBbUY7UUFDbkYsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3RixPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxTQUFvQjtJQUM5RCx3Q0FBd0M7SUFDeEMsSUFBSSxLQUFnQixDQUFDO0lBQ3JCLE1BQU0sU0FBUyxHQUF5QjtRQUN0QyxlQUFlLEVBQUUsQ0FBQyxFQUFtQixFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQztRQUNsRSxlQUFlLEVBQUUsQ0FBQyxFQUFtQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLFNBQVMsRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxlQUFlLEVBQUUsSUFBSSxPQUFPLEVBQUU7UUFDOUIsT0FBTyxFQUFFLElBQUk7UUFDYixhQUFhLEVBQUUsSUFBSTtLQUNwQixDQUFDO0lBQ0YsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0QyxLQUFLLEdBQUcscUJBQXFCLENBQUMsU0FBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUMxQixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2VyaWFsaXphdGlvbkNvbnRleHQgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGFzc2VydFRydWUgfSBmcm9tICcuLi9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHR5cGUgeyBEZXNlcmlhbGl6ZUNvbnRhaW5lciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHdyYXBEZXNlcmlhbGl6ZXJQcm94eSB9IGZyb20gJy4vZGVzZXItcHJveHknO1xuaW1wb3J0IHsgZGVzZXJpYWxpemVEYXRhIH0gZnJvbSAnLi9pbmZsYXRlJztcbmltcG9ydCB7IHByZXByb2Nlc3NTdGF0ZSB9IGZyb20gJy4vcHJlcHJvY2Vzcy1zdGF0ZSc7XG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcblxuLyoqXG4gKiBTZXJpYWxpemUgZGF0YSB0byBzdHJpbmcgdXNpbmcgU2VyaWFsaXphdGlvbkNvbnRleHQuXG4gKlxuICogQGludGVybmFsXG4gKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9zZXJpYWxpemU8VD4oZGF0YTogVCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNlcmlhbGl6YXRpb25Db250ZXh0ID0gY3JlYXRlU2VyaWFsaXphdGlvbkNvbnRleHQoXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgICgpID0+ICcnLFxuICAgICgpID0+IHt9LFxuICAgIG5ldyBXZWFrTWFwPGFueSwgYW55PigpXG4gICk7XG5cbiAgc2VyaWFsaXphdGlvbkNvbnRleHQuJGFkZFJvb3QkKGRhdGEpO1xuICBhd2FpdCBzZXJpYWxpemF0aW9uQ29udGV4dC4kc2VyaWFsaXplJCgpO1xuICByZXR1cm4gc2VyaWFsaXphdGlvbkNvbnRleHQuJHdyaXRlciQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogRGVzZXJpYWxpemUgZGF0YSBmcm9tIHN0cmluZyB0byBhbiBhcnJheSBvZiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSByYXdTdGF0ZURhdGEgLSBEYXRhIHRvIGRlc2VyaWFsaXplXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gX2Rlc2VyaWFsaXplPFQ+KHJhd1N0YXRlRGF0YTogc3RyaW5nKTogVCB7XG4gIGlmIChyYXdTdGF0ZURhdGEgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gc3RhdGUgZGF0YSB0byBkZXNlcmlhbGl6ZScpO1xuICB9XG4gIGNvbnN0IHN0YXRlRGF0YSA9IEpTT04ucGFyc2UocmF3U3RhdGVEYXRhKTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlRGF0YSkgfHwgc3RhdGVEYXRhLmxlbmd0aCA8IDIgfHwgdHlwZW9mIHN0YXRlRGF0YVswXSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUgZGF0YScpO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gX2NyZWF0ZURlc2VyaWFsaXplQ29udGFpbmVyKHN0YXRlRGF0YSk7XG4gIHJldHVybiBkZXNlcmlhbGl6ZURhdGEoY29udGFpbmVyLCBzdGF0ZURhdGFbMF0sIHN0YXRlRGF0YVsxXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3RCeUlkKGlkOiBudW1iZXIgfCBzdHJpbmcsIHN0YXRlRGF0YTogdW5rbm93bltdKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBwYXJzZUludChpZCwgMTApO1xuICAgIC8vIFRoaXMgcmV0dXJuIHN0YXRlbWVudCBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgZnVuY3Rpb24gZnJvbSB0dXJuaW5nIG1lZ2Ftb3JwaGljXG4gICAgcmV0dXJuIHN0YXRlRGF0YVtpZF07XG4gIH1cbiAgaXNEZXYgJiYgYXNzZXJ0VHJ1ZShpZCA8IHN0YXRlRGF0YS5sZW5ndGgsIGBJbnZhbGlkIHJlZmVyZW5jZSAke2lkfSA+PSAke3N0YXRlRGF0YS5sZW5ndGh9YCk7XG4gIHJldHVybiBzdGF0ZURhdGFbaWRdO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gX2NyZWF0ZURlc2VyaWFsaXplQ29udGFpbmVyKHN0YXRlRGF0YTogdW5rbm93bltdKTogRGVzZXJpYWxpemVDb250YWluZXIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCBzdGF0ZTogdW5rbm93bltdO1xuICBjb25zdCBjb250YWluZXI6IERlc2VyaWFsaXplQ29udGFpbmVyID0ge1xuICAgICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGdldE9iamVjdEJ5SWQoaWQsIHN0YXRlKSxcbiAgICAkZ2V0Rm9yd2FyZFJlZiQ6IChpZDogbnVtYmVyIHwgc3RyaW5nKSA9PiBjb250YWluZXIuJGZvcndhcmRSZWZzJD8uW051bWJlcihpZCldLFxuICAgIGdldFN5bmNGbjogKF86IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgZm4gPSAoKSA9PiB7fTtcbiAgICAgIHJldHVybiBmbjtcbiAgICB9LFxuICAgICRzdG9yZVByb3h5TWFwJDogbmV3IFdlYWtNYXAoKSxcbiAgICBlbGVtZW50OiBudWxsLFxuICAgICRmb3J3YXJkUmVmcyQ6IG51bGwsXG4gIH07XG4gIHByZXByb2Nlc3NTdGF0ZShzdGF0ZURhdGEsIGNvbnRhaW5lcik7XG4gIHN0YXRlID0gd3JhcERlc2VyaWFsaXplclByb3h5KGNvbnRhaW5lciBhcyBhbnksIHN0YXRlRGF0YSk7XG4gIGNvbnRhaW5lci4kc3RhdGUkID0gc3RhdGU7XG4gIHJldHVybiBjb250YWluZXI7XG59XG4iXX0=","import { qError } from '../error/error';\nimport { isNode } from '../utils/element';\nimport { isPromise } from '../utils/promises';\nimport { isArray, isFunction, isObject, isSerializableObject } from '../utils/types';\nimport { canSerialize } from './index';\nimport { isSignal } from '../../reactive-primitives/utils';\nimport { unwrapStore } from '../../reactive-primitives/impl/store';\nimport { untrack } from '../../use/use-core';\nimport { VNode } from '../vnode/vnode';\n/** @internal */\nexport const verifySerializable = (value, preMessage) => {\n    const seen = new WeakSet();\n    return untrack(_verifySerializable, value, seen, '_', preMessage);\n};\nconst _verifySerializable = (value, seen, ctx, preMessage) => {\n    const unwrapped = unwrapStore(value);\n    if (unwrapped == null) {\n        return value;\n    }\n    if (shouldSerialize(unwrapped)) {\n        if (typeof unwrapped === 'object') {\n            if (seen.has(unwrapped)) {\n                return value;\n            }\n            seen.add(unwrapped);\n        }\n        if (isSignal(unwrapped)) {\n            return value;\n        }\n        if (canSerialize(unwrapped)) {\n            return value;\n        }\n        // Framework-internal branded values (e.g. route loaders/actions, validators)\n        // are callables or objects that stamp __brand / __brand__ to opt out of the\n        // serializer walking their internals. Honor that for both objects and\n        // functions — loader/action refs are functions with __brand = 'server_loader'\n        // / 'server_action' and should not be rejected as unserializable.\n        if (unwrapped.__brand || unwrapped.__brand__) {\n            return value;\n        }\n        const typeObj = typeof unwrapped;\n        switch (typeObj) {\n            case 'object':\n                if (isPromise(unwrapped)) {\n                    return value;\n                }\n                if (isNode(unwrapped)) {\n                    return value;\n                }\n                if (isArray(unwrapped)) {\n                    let expectIndex = 0;\n                    // Make sure the array has no holes\n                    for (let i = 0; i < unwrapped.length; i++) {\n                        if (!(i in unwrapped)) {\n                            throw qError(3 /* QError.verifySerializable */, [unwrapped]);\n                        }\n                        const v = unwrapped[i];\n                        if (i !== expectIndex) {\n                            throw qError(3 /* QError.verifySerializable */, [unwrapped]);\n                        }\n                        _verifySerializable(v, seen, ctx + '[' + i + ']');\n                        expectIndex = i + 1;\n                    }\n                    return value;\n                }\n                // We don't want to walk internal framework objects\n                if (unwrapped instanceof VNode) {\n                    return value;\n                }\n                if (isSerializableObject(unwrapped)) {\n                    for (const [key, item] of Object.entries(unwrapped)) {\n                        _verifySerializable(item, seen, ctx + '.' + key);\n                    }\n                    return value;\n                }\n                break;\n        }\n        let message;\n        if (preMessage) {\n            message = preMessage;\n        }\n        else {\n            message = 'Value cannot be serialized';\n        }\n        if (ctx !== '_') {\n            message += ` in ${ctx},`;\n        }\n        if (typeObj === 'object') {\n            message += ` because it's an instance of \"${value?.constructor.name}\". You might need to use 'noSerialize()' or use an object literal instead. Check out https://qwik.dev/docs/advanced/dollar/`;\n        }\n        else if (typeObj === 'function') {\n            const fnName = value.name;\n            message += ` because it's a function named \"${fnName}\". You might need to convert it to a QRL using $(fn):\\n\\nconst ${fnName} = $(${String(value)});\\n\\nPlease check out https://qwik.dev/docs/advanced/qrl/ for more information.`;\n        }\n        throw qError(3 /* QError.verifySerializable */, [message]);\n    }\n    return value;\n};\nconst noSerializeSet = /*#__PURE__*/ new WeakSet();\nconst shouldSerialize = (obj) => {\n    if (isObject(obj) || isFunction(obj)) {\n        return !noSerializeSet.has(obj) && !(NoSerializeSymbol in obj);\n    }\n    return true;\n};\nexport const fastSkipSerialize = (obj) => {\n    return (!!obj &&\n        (isObject(obj) || typeof obj === 'function') &&\n        (noSerializeSet.has(obj) || NoSerializeSymbol in obj));\n};\n// <docs markdown=\"../../readme.md#noSerialize\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#noSerialize instead and run `pnpm docs.sync`)\n/**\n * Marks a property on a store as non-serializable.\n *\n * At times it is necessary to store values on a store that are non-serializable. Normally this is a\n * runtime error as Store wants to eagerly report when a non-serializable property is assigned to\n * it.\n *\n * You can use `noSerialize()` to mark a value as non-serializable. The value is persisted in the\n * Store but does not survive serialization. The implication is that when your application is\n * resumed, the value of this object will be `undefined`. You will be responsible for recovering\n * from this.\n *\n * See: [noSerialize Tutorial](http://qwik.dev/tutorial/store/no-serialize)\n *\n * @public\n */\n// </docs>\nexport const noSerialize = (input) => {\n    // only add supported values to the noSerializeSet, prevent console errors\n    if ((isObject(input) && input !== null) || typeof input === 'function') {\n        noSerializeSet.add(input);\n    }\n    return input;\n};\n/**\n * If an object has this property, it will not be serialized. Use this on prototypes to avoid having\n * to call `noSerialize()` on every object.\n *\n * @public\n */\nexport const NoSerializeSymbol = Symbol('noSerialize');\n/**\n * If an object has this property as a function, it will be called with the object and should return\n * a serializable value.\n *\n * This can be used to clean up, integrate with other libraries, etc.\n *\n * The type your object should conform to is:\n *\n * ```ts\n * {\n *   [SerializerSymbol]: (this: YourType, toSerialize: YourType) => YourSerializableType;\n * }\n * ```\n *\n * @public\n */\nexport const SerializerSymbol = Symbol('serialize');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zZXJkZXMvdmVyaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFJLEtBQVEsRUFBRSxVQUFtQixFQUFLLEVBQUU7SUFDeEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMzQixPQUFPLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQU0sQ0FBQztBQUN6RSxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQzFCLEtBQVEsRUFDUixJQUFrQixFQUNsQixHQUFXLEVBQ1gsVUFBbUIsRUFDaEIsRUFBRTtJQUNMLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxJQUFJLFNBQVMs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QUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQztRQUM1QyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQWlCLElBQUksR0FBRyxDQUFDLENBQ3RELENBQUM7QUFDSixDQUFDLENBQUM7QUFVRixnREFBZ0Q7QUFDaEQseUNBQXlDO0FBQ3pDLHNFQUFzRTtBQUN0RTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQStCLEtBQVEsRUFBa0IsRUFBRTtJQUNwRiwwRUFBMEU7SUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsT0FBTyxLQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tICcuLi91dGlscy9lbGVtZW50JztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1NlcmlhbGl6YWJsZU9iamVjdCB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IGNhblNlcmlhbGl6ZSB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgaXNTaWduYWwgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3V0aWxzJztcbmltcG9ydCB7IHVud3JhcFN0b3JlIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlJztcbmltcG9ydCB7IHVudHJhY2sgfSBmcm9tICcuLi8uLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHsgVk5vZGUgfSBmcm9tICcuLi92bm9kZS92bm9kZSc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB2ZXJpZnlTZXJpYWxpemFibGUgPSA8VD4odmFsdWU6IFQsIHByZU1lc3NhZ2U/OiBzdHJpbmcpOiBUID0+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gIHJldHVybiB1bnRyYWNrKF92ZXJpZnlTZXJpYWxpemFibGUsIHZhbHVlLCBzZWVuLCAnXycsIHByZU1lc3NhZ2UpIGFzIFQ7XG59O1xuXG5jb25zdCBfdmVyaWZ5U2VyaWFsaXphYmxlID0gPFQ+KFxuICB2YWx1ZTogVCxcbiAgc2VlbjogV2Vha1NldDxhbnk+LFxuICBjdHg6IHN0cmluZyxcbiAgcHJlTWVzc2FnZT86IHN0cmluZ1xuKTogVCA9PiB7XG4gIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcFN0b3JlKHZhbHVlKTtcbiAgaWYgKHVud3JhcHBlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChzaG91bGRTZXJpYWxpemUodW53cmFwcGVkKSkge1xuICAgIGlmICh0eXBlb2YgdW53cmFwcGVkID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHNlZW4uaGFzKHVud3JhcHBlZCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQodW53cmFwcGVkKTtcbiAgICB9XG4gICAgaWYgKGlzU2lnbmFsKHVud3JhcHBlZCkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGNhblNlcmlhbGl6ZSh1bndyYXBwZWQpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8vIEZyYW1ld29yay1pbnRlcm5hbCBicmFuZGVkIHZhbHVlcyAoZS5nLiByb3V0ZSBsb2FkZXJzL2FjdGlvbnMsIHZhbGlkYXRvcnMpXG4gICAgLy8gYXJlIGNhbGxhYmxlcyBvciBvYmplY3RzIHRoYXQgc3RhbXAgX19icmFuZCAvIF9fYnJhbmRfXyB0byBvcHQgb3V0IG9mIHRoZVxuICAgIC8vIHNlcmlhbGl6ZXIgd2Fsa2luZyB0aGVpciBpbnRlcm5hbHMuIEhvbm9yIHRoYXQgZm9yIGJvdGggb2JqZWN0cyBhbmRcbiAgICAvLyBmdW5jdGlvbnMg4oCUIGxvYWRlci9hY3Rpb24gcmVmcyBhcmUgZnVuY3Rpb25zIHdpdGggX19icmFuZCA9ICdzZXJ2ZXJfbG9hZGVyJ1xuICAgIC8vIC8gJ3NlcnZlcl9hY3Rpb24nIGFuZCBzaG91bGQgbm90IGJlIHJlamVjdGVkIGFzIHVuc2VyaWFsaXphYmxlLlxuICAgIGlmICgodW53cmFwcGVkIGFzIGFueSkuX19icmFuZCB8fCAodW53cmFwcGVkIGFzIGFueSkuX19icmFuZF9fKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVPYmogPSB0eXBlb2YgdW53cmFwcGVkO1xuICAgIHN3aXRjaCAodHlwZU9iaikge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh1bndyYXBwZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05vZGUodW53cmFwcGVkKSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheSh1bndyYXBwZWQpKSB7XG4gICAgICAgICAgbGV0IGV4cGVjdEluZGV4ID0gMDtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGhhcyBubyBob2xlc1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW53cmFwcGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIShpIGluIHVud3JhcHBlZCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci52ZXJpZnlTZXJpYWxpemFibGUsIFt1bndyYXBwZWRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHYgPSB1bndyYXBwZWRbaV07XG4gICAgICAgICAgICBpZiAoaSAhPT0gZXhwZWN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci52ZXJpZnlTZXJpYWxpemFibGUsIFt1bndyYXBwZWRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF92ZXJpZnlTZXJpYWxpemFibGUodiwgc2VlbiwgY3R4ICsgJ1snICsgaSArICddJyk7XG4gICAgICAgICAgICBleHBlY3RJbmRleCA9IGkgKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWxrIGludGVybmFsIGZyYW1ld29yayBvYmplY3RzXG4gICAgICAgIGlmICh1bndyYXBwZWQgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTZXJpYWxpemFibGVPYmplY3QodW53cmFwcGVkKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgT2JqZWN0LmVudHJpZXModW53cmFwcGVkKSkge1xuICAgICAgICAgICAgX3ZlcmlmeVNlcmlhbGl6YWJsZShpdGVtLCBzZWVuLCBjdHggKyAnLicgKyBrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHByZU1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBwcmVNZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gJ1ZhbHVlIGNhbm5vdCBiZSBzZXJpYWxpemVkJztcbiAgICB9XG4gICAgaWYgKGN0eCAhPT0gJ18nKSB7XG4gICAgICBtZXNzYWdlICs9IGAgaW4gJHtjdHh9LGA7XG4gICAgfVxuICAgIGlmICh0eXBlT2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgbWVzc2FnZSArPSBgIGJlY2F1c2UgaXQncyBhbiBpbnN0YW5jZSBvZiBcIiR7dmFsdWU/LmNvbnN0cnVjdG9yLm5hbWV9XCIuIFlvdSBtaWdodCBuZWVkIHRvIHVzZSAnbm9TZXJpYWxpemUoKScgb3IgdXNlIGFuIG9iamVjdCBsaXRlcmFsIGluc3RlYWQuIENoZWNrIG91dCBodHRwczovL3F3aWsuZGV2L2RvY3MvYWR2YW5jZWQvZG9sbGFyL2A7XG4gICAgfSBlbHNlIGlmICh0eXBlT2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmbk5hbWUgPSAodmFsdWUgYXMgRnVuY3Rpb24pLm5hbWU7XG4gICAgICBtZXNzYWdlICs9IGAgYmVjYXVzZSBpdCdzIGEgZnVuY3Rpb24gbmFtZWQgXCIke2ZuTmFtZX1cIi4gWW91IG1pZ2h0IG5lZWQgdG8gY29udmVydCBpdCB0byBhIFFSTCB1c2luZyAkKGZuKTpcXG5cXG5jb25zdCAke2ZuTmFtZX0gPSAkKCR7U3RyaW5nKFxuICAgICAgICB2YWx1ZVxuICAgICAgKX0pO1xcblxcblBsZWFzZSBjaGVjayBvdXQgaHR0cHM6Ly9xd2lrLmRldi9kb2NzL2FkdmFuY2VkL3FybC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uYDtcbiAgICB9XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci52ZXJpZnlTZXJpYWxpemFibGUsIFttZXNzYWdlXSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuY29uc3Qgbm9TZXJpYWxpemVTZXQgPSAvKiNfX1BVUkVfXyovIG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuY29uc3Qgc2hvdWxkU2VyaWFsaXplID0gKG9iajogdW5rbm93bik6IGJvb2xlYW4gPT4ge1xuICBpZiAoaXNPYmplY3Qob2JqKSB8fCBpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICByZXR1cm4gIW5vU2VyaWFsaXplU2V0LmhhcyhvYmopICYmICEoTm9TZXJpYWxpemVTeW1ib2wgaW4gb2JqKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBmYXN0U2tpcFNlcmlhbGl6ZSA9IChvYmo6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIW9iaiAmJlxuICAgIChpc09iamVjdChvYmopIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmXG4gICAgKG5vU2VyaWFsaXplU2V0LmhhcyhvYmopIHx8IE5vU2VyaWFsaXplU3ltYm9sIGluIG9iailcbiAgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuZWQgdHlwZSBvZiB0aGUgYG5vU2VyaWFsaXplKClgIGZ1bmN0aW9uLiBJdCB3aWxsIGJlIFRZUEUgb3IgdW5kZWZpbmVkLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBzZWUgbm9TZXJpYWxpemVcbiAqL1xuZXhwb3J0IHR5cGUgTm9TZXJpYWxpemU8VD4gPSAoVCAmIHsgX19ub19zZXJpYWxpemVfXz86IHRydWUgfSkgfCB1bmRlZmluZWQ7XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vLi4vcmVhZG1lLm1kI25vU2VyaWFsaXplXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vLi4vcmVhZG1lLm1kI25vU2VyaWFsaXplIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBNYXJrcyBhIHByb3BlcnR5IG9uIGEgc3RvcmUgYXMgbm9uLXNlcmlhbGl6YWJsZS5cbiAqXG4gKiBBdCB0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gc3RvcmUgdmFsdWVzIG9uIGEgc3RvcmUgdGhhdCBhcmUgbm9uLXNlcmlhbGl6YWJsZS4gTm9ybWFsbHkgdGhpcyBpcyBhXG4gKiBydW50aW1lIGVycm9yIGFzIFN0b3JlIHdhbnRzIHRvIGVhZ2VybHkgcmVwb3J0IHdoZW4gYSBub24tc2VyaWFsaXphYmxlIHByb3BlcnR5IGlzIGFzc2lnbmVkIHRvXG4gKiBpdC5cbiAqXG4gKiBZb3UgY2FuIHVzZSBgbm9TZXJpYWxpemUoKWAgdG8gbWFyayBhIHZhbHVlIGFzIG5vbi1zZXJpYWxpemFibGUuIFRoZSB2YWx1ZSBpcyBwZXJzaXN0ZWQgaW4gdGhlXG4gKiBTdG9yZSBidXQgZG9lcyBub3Qgc3Vydml2ZSBzZXJpYWxpemF0aW9uLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3aGVuIHlvdXIgYXBwbGljYXRpb24gaXNcbiAqIHJlc3VtZWQsIHRoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCB3aWxsIGJlIGB1bmRlZmluZWRgLiBZb3Ugd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcmVjb3ZlcmluZ1xuICogZnJvbSB0aGlzLlxuICpcbiAqIFNlZTogW25vU2VyaWFsaXplIFR1dG9yaWFsXShodHRwOi8vcXdpay5kZXYvdHV0b3JpYWwvc3RvcmUvbm8tc2VyaWFsaXplKVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IG5vU2VyaWFsaXplID0gPFQgZXh0ZW5kcyBvYmplY3QgfCB1bmRlZmluZWQ+KGlucHV0OiBUKTogTm9TZXJpYWxpemU8VD4gPT4ge1xuICAvLyBvbmx5IGFkZCBzdXBwb3J0ZWQgdmFsdWVzIHRvIHRoZSBub1NlcmlhbGl6ZVNldCwgcHJldmVudCBjb25zb2xlIGVycm9yc1xuICBpZiAoKGlzT2JqZWN0KGlucHV0KSAmJiBpbnB1dCAhPT0gbnVsbCkgfHwgdHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbm9TZXJpYWxpemVTZXQuYWRkKGlucHV0KTtcbiAgfVxuICByZXR1cm4gaW5wdXQgYXMgYW55O1xufTtcblxuLyoqXG4gKiBJZiBhbiBvYmplY3QgaGFzIHRoaXMgcHJvcGVydHksIGl0IHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFVzZSB0aGlzIG9uIHByb3RvdHlwZXMgdG8gYXZvaWQgaGF2aW5nXG4gKiB0byBjYWxsIGBub1NlcmlhbGl6ZSgpYCBvbiBldmVyeSBvYmplY3QuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgTm9TZXJpYWxpemVTeW1ib2wgPSBTeW1ib2woJ25vU2VyaWFsaXplJyk7XG4vKipcbiAqIElmIGFuIG9iamVjdCBoYXMgdGhpcyBwcm9wZXJ0eSBhcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBvYmplY3QgYW5kIHNob3VsZCByZXR1cm5cbiAqIGEgc2VyaWFsaXphYmxlIHZhbHVlLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gY2xlYW4gdXAsIGludGVncmF0ZSB3aXRoIG90aGVyIGxpYnJhcmllcywgZXRjLlxuICpcbiAqIFRoZSB0eXBlIHlvdXIgb2JqZWN0IHNob3VsZCBjb25mb3JtIHRvIGlzOlxuICpcbiAqIGBgYHRzXG4gKiB7XG4gKiAgIFtTZXJpYWxpemVyU3ltYm9sXTogKHRoaXM6IFlvdXJUeXBlLCB0b1NlcmlhbGl6ZTogWW91clR5cGUpID0+IFlvdXJTZXJpYWxpemFibGVUeXBlO1xuICogfVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXplclN5bWJvbCA9IFN5bWJvbCgnc2VyaWFsaXplJyk7XG4iXX0=","import { assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { verifySerializable } from '../shared/serdes/verify';\nimport { qDev } from '../shared/utils/qdev';\nimport { isObject } from '../shared/utils/types';\nimport { getInvokeContext, invoke } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { fromCamelToKebabCase } from '../shared/utils/event-names';\nimport { isDev } from '@qwik.dev/core/build';\n// <docs markdown=\"../readme.md#createContextId\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#createContextId instead and run `pnpm docs.sync`)\n/**\n * Create a context ID to be used in your application. The name should be written with no spaces.\n *\n * Context is a way to pass stores to the child components without prop-drilling.\n *\n * Use `createContextId()` to create a `ContextId`. A `ContextId` is just a serializable identifier\n * for the context. It is not the context value itself. See `useContextProvider()` and\n * `useContext()` for the values. Qwik needs a serializable ID for the context so that the it can\n * track context providers and consumers in a way that survives resumability.\n *\n * ### Example\n *\n * ```tsx\n * // Declare the Context type.\n * interface TodosStore {\n *   items: string[];\n * }\n * // Create a Context ID (no data is saved here.)\n * // You will use this ID to both create and retrieve the Context.\n * export const TodosContext = createContextId<TodosStore>('Todos');\n *\n * // Example of providing context to child components.\n * export const App = component$(() => {\n *   useContextProvider(\n *     TodosContext,\n *     useStore<TodosStore>({\n *       items: ['Learn Qwik', 'Build Qwik app', 'Profit'],\n *     })\n *   );\n *\n *   return <Items />;\n * });\n *\n * // Example of retrieving the context provided by a parent component.\n * export const Items = component$(() => {\n *   const todos = useContext(TodosContext);\n *   return (\n *     <ul>\n *       {todos.items.map((item) => (\n *         <li>{item}</li>\n *       ))}\n *     </ul>\n *   );\n * });\n *\n * ```\n *\n * @param name - The name of the context.\n * @public\n */\n// </docs>\nexport const createContextId = (name) => {\n    isDev &&\n        assertTrue(/^[\\w/.-]+$/.test(name), 'Context name must only contain A-Z,a-z,0-9,_,.,-', name);\n    return /*#__PURE__*/ Object.freeze({\n        id: fromCamelToKebabCase(name),\n    });\n};\n// <docs markdown=\"../readme.md#useContextProvider\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useContextProvider instead and run `pnpm docs.sync`)\n/**\n * Assign a value to a Context.\n *\n * Use `useContextProvider()` to assign a value to a context. The assignment happens in the\n * component's function. Once assigned, use `useContext()` in any child component to retrieve the\n * value.\n *\n * Context is a way to pass stores to the child components without prop-drilling. Note that scalar\n * values are allowed, but for reactivity you need signals or stores.\n *\n * ### Example\n *\n * ```tsx\n * // Declare the Context type.\n * interface TodosStore {\n *   items: string[];\n * }\n * // Create a Context ID (no data is saved here.)\n * // You will use this ID to both create and retrieve the Context.\n * export const TodosContext = createContextId<TodosStore>('Todos');\n *\n * // Example of providing context to child components.\n * export const App = component$(() => {\n *   useContextProvider(\n *     TodosContext,\n *     useStore<TodosStore>({\n *       items: ['Learn Qwik', 'Build Qwik app', 'Profit'],\n *     })\n *   );\n *\n *   return <Items />;\n * });\n *\n * // Example of retrieving the context provided by a parent component.\n * export const Items = component$(() => {\n *   const todos = useContext(TodosContext);\n *   return (\n *     <ul>\n *       {todos.items.map((item) => (\n *         <li>{item}</li>\n *       ))}\n *     </ul>\n *   );\n * });\n *\n * ```\n *\n * @param context - The context to assign a value to.\n * @param value - The value to assign to the context.\n * @public\n */\n// </docs>\nexport const useContextProvider = (context, newValue) => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val !== undefined) {\n        return;\n    }\n    if (qDev) {\n        validateContext(context);\n    }\n    if (qDev) {\n        verifySerializable(newValue);\n    }\n    iCtx.$container$.setContext(iCtx.$hostElement$, context, newValue);\n    set(1);\n};\n// <docs markdown=\"../readme.md#useContext\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useContext instead and run `pnpm docs.sync`)\n/**\n * Retrieve Context value.\n *\n * Use `useContext()` to retrieve the value of context in a component. To retrieve a value a parent\n * component needs to invoke `useContextProvider()` to assign a value.\n *\n * ### Example\n *\n * ```tsx\n * // Declare the Context type.\n * interface TodosStore {\n *   items: string[];\n * }\n * // Create a Context ID (no data is saved here.)\n * // You will use this ID to both create and retrieve the Context.\n * export const TodosContext = createContextId<TodosStore>('Todos');\n *\n * // Example of providing context to child components.\n * export const App = component$(() => {\n *   useContextProvider(\n *     TodosContext,\n *     useStore<TodosStore>({\n *       items: ['Learn Qwik', 'Build Qwik app', 'Profit'],\n *     })\n *   );\n *\n *   return <Items />;\n * });\n *\n * // Example of retrieving the context provided by a parent component.\n * export const Items = component$(() => {\n *   const todos = useContext(TodosContext);\n *   return (\n *     <ul>\n *       {todos.items.map((item) => (\n *         <li>{item}</li>\n *       ))}\n *     </ul>\n *   );\n * });\n *\n * ```\n *\n * @param context - The context to retrieve a value from.\n * @public\n */\n// </docs>\nexport const useContext = (context, defaultValue) => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val !== undefined) {\n        return val;\n    }\n    if (qDev) {\n        validateContext(context);\n    }\n    const value = iCtx.$container$.resolveContext(iCtx.$hostElement$, context);\n    if (typeof defaultValue === 'function') {\n        return set(invoke(undefined, defaultValue, value));\n    }\n    if (value !== undefined) {\n        return set(value);\n    }\n    if (defaultValue !== undefined) {\n        return set(defaultValue);\n    }\n    throw qError(8 /* QError.notFoundContext */, [context.id]);\n};\nexport const validateContext = (context) => {\n    if (!isObject(context) || typeof context.id !== 'string' || context.id.length === 0) {\n        throw qError(11 /* QError.invalidContext */, [context]);\n    }\n};\n/** @internal */\nexport const _resolveContextWithoutSequentialScope = (context) => {\n    const iCtx = getInvokeContext();\n    const hostElement = iCtx.$hostElement$;\n    if (!hostElement) {\n        return undefined;\n    }\n    return iCtx.$container$?.resolveContext(hostElement, context);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQThEN0MsaURBQWlEO0FBQ2pELHlDQUF5QztBQUN6Qyx1RUFBdUU7QUFDdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQWtCLElBQVksRUFBb0IsRUFBRTtJQUNqRixLQUFLO1FBQ0gsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsa0RBQWtELEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEcsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDO0tBQ3hCLENBQUMsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUVG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TyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydFRydWUgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IHZlcmlmeVNlcmlhbGl6YWJsZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvdmVyaWZ5JztcbmltcG9ydCB7IHFEZXYgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBnZXRJbnZva2VDb250ZXh0LCBpbnZva2UgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuaW1wb3J0IHsgZnJvbUNhbWVsVG9LZWJhYkNhc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvZXZlbnQtbmFtZXMnO1xuaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI0NvbnRleHRJZFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCNDb250ZXh0SWQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIENvbnRleHRJZCBpcyBhIHR5cGVzYWZlIElEIGZvciB5b3VyIGNvbnRleHQuXG4gKlxuICogQ29udGV4dCBpcyBhIHdheSB0byBwYXNzIHN0b3JlcyB0byB0aGUgY2hpbGQgY29tcG9uZW50cyB3aXRob3V0IHByb3AtZHJpbGxpbmcuXG4gKlxuICogVXNlIGBjcmVhdGVDb250ZXh0SWQoKWAgdG8gY3JlYXRlIGEgYENvbnRleHRJZGAuIEEgYENvbnRleHRJZGAgaXMganVzdCBhIHNlcmlhbGl6YWJsZSBpZGVudGlmaWVyXG4gKiBmb3IgdGhlIGNvbnRleHQuIEl0IGlzIG5vdCB0aGUgY29udGV4dCB2YWx1ZSBpdHNlbGYuIFNlZSBgdXNlQ29udGV4dFByb3ZpZGVyKClgIGFuZFxuICogYHVzZUNvbnRleHQoKWAgZm9yIHRoZSB2YWx1ZXMuIFF3aWsgbmVlZHMgYSBzZXJpYWxpemFibGUgSUQgZm9yIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGl0IGNhblxuICogdHJhY2sgY29udGV4dCBwcm92aWRlcnMgYW5kIGNvbnN1bWVycyBpbiBhIHdheSB0aGF0IHN1cnZpdmVzIHJlc3VtYWJpbGl0eS5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogLy8gRGVjbGFyZSB0aGUgQ29udGV4dCB0eXBlLlxuICogaW50ZXJmYWNlIFRvZG9zU3RvcmUge1xuICogICBpdGVtczogc3RyaW5nW107XG4gKiB9XG4gKiAvLyBDcmVhdGUgYSBDb250ZXh0IElEIChubyBkYXRhIGlzIHNhdmVkIGhlcmUuKVxuICogLy8gWW91IHdpbGwgdXNlIHRoaXMgSUQgdG8gYm90aCBjcmVhdGUgYW5kIHJldHJpZXZlIHRoZSBDb250ZXh0LlxuICogZXhwb3J0IGNvbnN0IFRvZG9zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHRJZDxUb2Rvc1N0b3JlPignVG9kb3MnKTtcbiAqXG4gKiAvLyBFeGFtcGxlIG9mIHByb3ZpZGluZyBjb250ZXh0IHRvIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBleHBvcnQgY29uc3QgQXBwID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHVzZUNvbnRleHRQcm92aWRlcihcbiAqICAgICBUb2Rvc0NvbnRleHQsXG4gKiAgICAgdXNlU3RvcmU8VG9kb3NTdG9yZT4oe1xuICogICAgICAgaXRlbXM6IFsnTGVhcm4gUXdpaycsICdCdWlsZCBRd2lrIGFwcCcsICdQcm9maXQnXSxcbiAqICAgICB9KVxuICogICApO1xuICpcbiAqICAgcmV0dXJuIDxJdGVtcyAvPjtcbiAqIH0pO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcmV0cmlldmluZyB0aGUgY29udGV4dCBwcm92aWRlZCBieSBhIHBhcmVudCBjb21wb25lbnQuXG4gKiBleHBvcnQgY29uc3QgSXRlbXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3QgdG9kb3MgPSB1c2VDb250ZXh0KFRvZG9zQ29udGV4dCk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPHVsPlxuICogICAgICAge3RvZG9zLml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICogICAgICAgICA8bGk+e2l0ZW19PC9saT5cbiAqICAgICAgICkpfVxuICogICAgIDwvdWw+XG4gKiAgICk7XG4gKiB9KTtcbiAqXG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dElkPFNUQVRFPiB7XG4gIC8qKiBEZXNpZ24tdGltZSBwcm9wZXJ0eSB0byBzdG9yZSB0eXBlIGluZm9ybWF0aW9uIGZvciB0aGUgY29udGV4dC4gKi9cbiAgcmVhZG9ubHkgX19icmFuZF9jb250ZXh0X3R5cGVfXzogU1RBVEU7XG4gIC8qKiBBIHVuaXF1ZSBJRCBmb3IgdGhlIGNvbnRleHQuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG59XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI2NyZWF0ZUNvbnRleHRJZFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCNjcmVhdGVDb250ZXh0SWQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIENyZWF0ZSBhIGNvbnRleHQgSUQgdG8gYmUgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUaGUgbmFtZSBzaG91bGQgYmUgd3JpdHRlbiB3aXRoIG5vIHNwYWNlcy5cbiAqXG4gKiBDb250ZXh0IGlzIGEgd2F5IHRvIHBhc3Mgc3RvcmVzIHRvIHRoZSBjaGlsZCBjb21wb25lbnRzIHdpdGhvdXQgcHJvcC1kcmlsbGluZy5cbiAqXG4gKiBVc2UgYGNyZWF0ZUNvbnRleHRJZCgpYCB0byBjcmVhdGUgYSBgQ29udGV4dElkYC4gQSBgQ29udGV4dElkYCBpcyBqdXN0IGEgc2VyaWFsaXphYmxlIGlkZW50aWZpZXJcbiAqIGZvciB0aGUgY29udGV4dC4gSXQgaXMgbm90IHRoZSBjb250ZXh0IHZhbHVlIGl0c2VsZi4gU2VlIGB1c2VDb250ZXh0UHJvdmlkZXIoKWAgYW5kXG4gKiBgdXNlQ29udGV4dCgpYCBmb3IgdGhlIHZhbHVlcy4gUXdpayBuZWVkcyBhIHNlcmlhbGl6YWJsZSBJRCBmb3IgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgaXQgY2FuXG4gKiB0cmFjayBjb250ZXh0IHByb3ZpZGVycyBhbmQgY29uc3VtZXJzIGluIGEgd2F5IHRoYXQgc3Vydml2ZXMgcmVzdW1hYmlsaXR5LlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKlxuICogYGBgdHN4XG4gKiAvLyBEZWNsYXJlIHRoZSBDb250ZXh0IHR5cGUuXG4gKiBpbnRlcmZhY2UgVG9kb3NTdG9yZSB7XG4gKiAgIGl0ZW1zOiBzdHJpbmdbXTtcbiAqIH1cbiAqIC8vIENyZWF0ZSBhIENvbnRleHQgSUQgKG5vIGRhdGEgaXMgc2F2ZWQgaGVyZS4pXG4gKiAvLyBZb3Ugd2lsbCB1c2UgdGhpcyBJRCB0byBib3RoIGNyZWF0ZSBhbmQgcmV0cmlldmUgdGhlIENvbnRleHQuXG4gKiBleHBvcnQgY29uc3QgVG9kb3NDb250ZXh0ID0gY3JlYXRlQ29udGV4dElkPFRvZG9zU3RvcmU+KCdUb2RvcycpO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcHJvdmlkaW5nIGNvbnRleHQgdG8gY2hpbGQgY29tcG9uZW50cy5cbiAqIGV4cG9ydCBjb25zdCBBcHAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlQ29udGV4dFByb3ZpZGVyKFxuICogICAgIFRvZG9zQ29udGV4dCxcbiAqICAgICB1c2VTdG9yZTxUb2Rvc1N0b3JlPih7XG4gKiAgICAgICBpdGVtczogWydMZWFybiBRd2lrJywgJ0J1aWxkIFF3aWsgYXBwJywgJ1Byb2ZpdCddLFxuICogICAgIH0pXG4gKiAgICk7XG4gKlxuICogICByZXR1cm4gPEl0ZW1zIC8+O1xuICogfSk7XG4gKlxuICogLy8gRXhhbXBsZSBvZiByZXRyaWV2aW5nIHRoZSBjb250ZXh0IHByb3ZpZGVkIGJ5IGEgcGFyZW50IGNvbXBvbmVudC5cbiAqIGV4cG9ydCBjb25zdCBJdGVtcyA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCB0b2RvcyA9IHVzZUNvbnRleHQoVG9kb3NDb250ZXh0KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8dWw+XG4gKiAgICAgICB7dG9kb3MuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gKiAgICAgICAgIDxsaT57aXRlbX08L2xpPlxuICogICAgICAgKSl9XG4gKiAgICAgPC91bD5cbiAqICAgKTtcbiAqIH0pO1xuICpcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRleHQuXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0SWQgPSA8U1RBVEUgPSB1bmtub3duPihuYW1lOiBzdHJpbmcpOiBDb250ZXh0SWQ8U1RBVEU+ID0+IHtcbiAgaXNEZXYgJiZcbiAgICBhc3NlcnRUcnVlKC9eW1xcdy8uLV0rJC8udGVzdChuYW1lKSwgJ0NvbnRleHQgbmFtZSBtdXN0IG9ubHkgY29udGFpbiBBLVosYS16LDAtOSxfLC4sLScsIG5hbWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qLyBPYmplY3QuZnJlZXplKHtcbiAgICBpZDogZnJvbUNhbWVsVG9LZWJhYkNhc2UobmFtZSksXG4gIH0gYXMgYW55KTtcbn07XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZUNvbnRleHRQcm92aWRlclwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VDb250ZXh0UHJvdmlkZXIgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIEFzc2lnbiBhIHZhbHVlIHRvIGEgQ29udGV4dC5cbiAqXG4gKiBVc2UgYHVzZUNvbnRleHRQcm92aWRlcigpYCB0byBhc3NpZ24gYSB2YWx1ZSB0byBhIGNvbnRleHQuIFRoZSBhc3NpZ25tZW50IGhhcHBlbnMgaW4gdGhlXG4gKiBjb21wb25lbnQncyBmdW5jdGlvbi4gT25jZSBhc3NpZ25lZCwgdXNlIGB1c2VDb250ZXh0KClgIGluIGFueSBjaGlsZCBjb21wb25lbnQgdG8gcmV0cmlldmUgdGhlXG4gKiB2YWx1ZS5cbiAqXG4gKiBDb250ZXh0IGlzIGEgd2F5IHRvIHBhc3Mgc3RvcmVzIHRvIHRoZSBjaGlsZCBjb21wb25lbnRzIHdpdGhvdXQgcHJvcC1kcmlsbGluZy4gTm90ZSB0aGF0IHNjYWxhclxuICogdmFsdWVzIGFyZSBhbGxvd2VkLCBidXQgZm9yIHJlYWN0aXZpdHkgeW91IG5lZWQgc2lnbmFscyBvciBzdG9yZXMuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0c3hcbiAqIC8vIERlY2xhcmUgdGhlIENvbnRleHQgdHlwZS5cbiAqIGludGVyZmFjZSBUb2Rvc1N0b3JlIHtcbiAqICAgaXRlbXM6IHN0cmluZ1tdO1xuICogfVxuICogLy8gQ3JlYXRlIGEgQ29udGV4dCBJRCAobm8gZGF0YSBpcyBzYXZlZCBoZXJlLilcbiAqIC8vIFlvdSB3aWxsIHVzZSB0aGlzIElEIHRvIGJvdGggY3JlYXRlIGFuZCByZXRyaWV2ZSB0aGUgQ29udGV4dC5cbiAqIGV4cG9ydCBjb25zdCBUb2Rvc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0SWQ8VG9kb3NTdG9yZT4oJ1RvZG9zJyk7XG4gKlxuICogLy8gRXhhbXBsZSBvZiBwcm92aWRpbmcgY29udGV4dCB0byBjaGlsZCBjb21wb25lbnRzLlxuICogZXhwb3J0IGNvbnN0IEFwcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICB1c2VDb250ZXh0UHJvdmlkZXIoXG4gKiAgICAgVG9kb3NDb250ZXh0LFxuICogICAgIHVzZVN0b3JlPFRvZG9zU3RvcmU+KHtcbiAqICAgICAgIGl0ZW1zOiBbJ0xlYXJuIFF3aWsnLCAnQnVpbGQgUXdpayBhcHAnLCAnUHJvZml0J10sXG4gKiAgICAgfSlcbiAqICAgKTtcbiAqXG4gKiAgIHJldHVybiA8SXRlbXMgLz47XG4gKiB9KTtcbiAqXG4gKiAvLyBFeGFtcGxlIG9mIHJldHJpZXZpbmcgdGhlIGNvbnRleHQgcHJvdmlkZWQgYnkgYSBwYXJlbnQgY29tcG9uZW50LlxuICogZXhwb3J0IGNvbnN0IEl0ZW1zID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIGNvbnN0IHRvZG9zID0gdXNlQ29udGV4dChUb2Rvc0NvbnRleHQpO1xuICogICByZXR1cm4gKFxuICogICAgIDx1bD5cbiAqICAgICAgIHt0b2Rvcy5pdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAqICAgICAgICAgPGxpPntpdGVtfTwvbGk+XG4gKiAgICAgICApKX1cbiAqICAgICA8L3VsPlxuICogICApO1xuICogfSk7XG4gKlxuICogYGBgXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCB0byBhc3NpZ24gYSB2YWx1ZSB0by5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGNvbnRleHQuXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VDb250ZXh0UHJvdmlkZXIgPSA8U1RBVEU+KGNvbnRleHQ6IENvbnRleHRJZDxTVEFURT4sIG5ld1ZhbHVlOiBTVEFURSkgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8MT4oKTtcbiAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChxRGV2KSB7XG4gICAgdmFsaWRhdGVDb250ZXh0KGNvbnRleHQpO1xuICB9XG4gIGlmIChxRGV2KSB7XG4gICAgdmVyaWZ5U2VyaWFsaXphYmxlKG5ld1ZhbHVlKTtcbiAgfVxuICBpQ3R4LiRjb250YWluZXIkLnNldENvbnRleHQoaUN0eC4kaG9zdEVsZW1lbnQkLCBjb250ZXh0LCBuZXdWYWx1ZSk7XG4gIHNldCgxKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ29udGV4dCB7XG4gIDxTVEFURSwgVD4oY29udGV4dDogQ29udGV4dElkPFNUQVRFPiwgdHJhbnNmb3JtZXI6ICh2YWx1ZTogU1RBVEUpID0+IFQpOiBUO1xuICA8U1RBVEUsIFQ+KGNvbnRleHQ6IENvbnRleHRJZDxTVEFURT4sIGRlZmF1bHRWYWx1ZTogVCk6IFNUQVRFIHwgVDtcbiAgPFNUQVRFPihjb250ZXh0OiBDb250ZXh0SWQ8U1RBVEU+KTogU1RBVEU7XG59XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZUNvbnRleHRcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlQ29udGV4dCBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogUmV0cmlldmUgQ29udGV4dCB2YWx1ZS5cbiAqXG4gKiBVc2UgYHVzZUNvbnRleHQoKWAgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mIGNvbnRleHQgaW4gYSBjb21wb25lbnQuIFRvIHJldHJpZXZlIGEgdmFsdWUgYSBwYXJlbnRcbiAqIGNvbXBvbmVudCBuZWVkcyB0byBpbnZva2UgYHVzZUNvbnRleHRQcm92aWRlcigpYCB0byBhc3NpZ24gYSB2YWx1ZS5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogLy8gRGVjbGFyZSB0aGUgQ29udGV4dCB0eXBlLlxuICogaW50ZXJmYWNlIFRvZG9zU3RvcmUge1xuICogICBpdGVtczogc3RyaW5nW107XG4gKiB9XG4gKiAvLyBDcmVhdGUgYSBDb250ZXh0IElEIChubyBkYXRhIGlzIHNhdmVkIGhlcmUuKVxuICogLy8gWW91IHdpbGwgdXNlIHRoaXMgSUQgdG8gYm90aCBjcmVhdGUgYW5kIHJldHJpZXZlIHRoZSBDb250ZXh0LlxuICogZXhwb3J0IGNvbnN0IFRvZG9zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHRJZDxUb2Rvc1N0b3JlPignVG9kb3MnKTtcbiAqXG4gKiAvLyBFeGFtcGxlIG9mIHByb3ZpZGluZyBjb250ZXh0IHRvIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBleHBvcnQgY29uc3QgQXBwID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHVzZUNvbnRleHRQcm92aWRlcihcbiAqICAgICBUb2Rvc0NvbnRleHQsXG4gKiAgICAgdXNlU3RvcmU8VG9kb3NTdG9yZT4oe1xuICogICAgICAgaXRlbXM6IFsnTGVhcm4gUXdpaycsICdCdWlsZCBRd2lrIGFwcCcsICdQcm9maXQnXSxcbiAqICAgICB9KVxuICogICApO1xuICpcbiAqICAgcmV0dXJuIDxJdGVtcyAvPjtcbiAqIH0pO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcmV0cmlldmluZyB0aGUgY29udGV4dCBwcm92aWRlZCBieSBhIHBhcmVudCBjb21wb25lbnQuXG4gKiBleHBvcnQgY29uc3QgSXRlbXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3QgdG9kb3MgPSB1c2VDb250ZXh0KFRvZG9zQ29udGV4dCk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPHVsPlxuICogICAgICAge3RvZG9zLml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICogICAgICAgICA8bGk+e2l0ZW19PC9saT5cbiAqICAgICAgICkpfVxuICogICAgIDwvdWw+XG4gKiAgICk7XG4gKiB9KTtcbiAqXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBjb250ZXh0IHRvIHJldHJpZXZlIGEgdmFsdWUgZnJvbS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IHVzZUNvbnRleHQ6IFVzZUNvbnRleHQgPSA8U1RBVEU+KFxuICBjb250ZXh0OiBDb250ZXh0SWQ8U1RBVEU+LFxuICBkZWZhdWx0VmFsdWU/OiBTVEFURSB8ICgoY3VycmVudDogU1RBVEUgfCB1bmRlZmluZWQpID0+IFNUQVRFKVxuKSA9PiB7XG4gIGNvbnN0IHsgdmFsLCBzZXQsIGlDdHggfSA9IHVzZVNlcXVlbnRpYWxTY29wZTxTVEFURT4oKTtcbiAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBpZiAocURldikge1xuICAgIHZhbGlkYXRlQ29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlOiBTVEFURSB8IHVuZGVmaW5lZCA9IGlDdHguJGNvbnRhaW5lciQucmVzb2x2ZUNvbnRleHQoaUN0eC4kaG9zdEVsZW1lbnQkLCBjb250ZXh0KTtcbiAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2V0KGludm9rZSh1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSBhcyBhbnksIHZhbHVlKSk7XG4gIH1cbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc2V0KHZhbHVlKTtcbiAgfVxuICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc2V0KGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgdGhyb3cgcUVycm9yKFFFcnJvci5ub3RGb3VuZENvbnRleHQsIFtjb250ZXh0LmlkXSk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDb250ZXh0ID0gKGNvbnRleHQ6IENvbnRleHRJZDxhbnk+KSA9PiB7XG4gIGlmICghaXNPYmplY3QoY29udGV4dCkgfHwgdHlwZW9mIGNvbnRleHQuaWQgIT09ICdzdHJpbmcnIHx8IGNvbnRleHQuaWQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci5pbnZhbGlkQ29udGV4dCwgW2NvbnRleHRdKTtcbiAgfVxufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9yZXNvbHZlQ29udGV4dFdpdGhvdXRTZXF1ZW50aWFsU2NvcGUgPSA8U1RBVEU+KGNvbnRleHQ6IENvbnRleHRJZDxTVEFURT4pID0+IHtcbiAgY29uc3QgaUN0eCA9IGdldEludm9rZUNvbnRleHQoKTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBpQ3R4LiRob3N0RWxlbWVudCQ7XG4gIGlmICghaG9zdEVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpQ3R4LiRjb250YWluZXIkPy5yZXNvbHZlQ29udGV4dChob3N0RWxlbWVudCwgY29udGV4dCk7XG59O1xuIl19","import { createContextId } from '../../use/use-context';\nexport const ERROR_CONTEXT = /*#__PURE__*/ createContextId('qk-error');\nexport const isRecoverable = (err) => {\n    if (err && err instanceof Error) {\n        if ('plugin' in err) {\n            return false;\n        }\n    }\n    return true;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxpbmcuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2Vycm9yL2Vycm9yLWhhbmRsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU94RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBcUIsVUFBVSxDQUFDLENBQUM7QUFFM0YsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHRJZCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29udGV4dCc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQm91bmRhcnlTdG9yZSB7XG4gIGVycm9yOiBhbnkgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05URVhUID0gLyojX19QVVJFX18qLyBjcmVhdGVDb250ZXh0SWQ8RXJyb3JCb3VuZGFyeVN0b3JlPigncWstZXJyb3InKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjb3ZlcmFibGUgPSAoZXJyOiBhbnkpID0+IHtcbiAgaWYgKGVyciAmJiBlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmICgncGx1Z2luJyBpbiBlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuIl19","/** @internal */\nexport const canRevealRegistration = (registration, isPending = (item) => item.boundary.pending.untrackedValue > 0) => {\n    if (registration === null) {\n        return true;\n    }\n    const reveal = registration.reveal;\n    const current = registration.item;\n    const items = reveal.items;\n    switch (reveal.order) {\n        case 'together':\n            for (let i = 0; i < items.length; i++) {\n                if (isPending(items[i])) {\n                    return false;\n                }\n            }\n            return true;\n        case 'sequential':\n            for (let i = 0; i < items.length; i++) {\n                const item = items[i];\n                if (item === current) {\n                    return true;\n                }\n                if (isPending(item)) {\n                    return false;\n                }\n            }\n            return true;\n        case 'reverse':\n            for (let i = items.length - 1; i >= 0; i--) {\n                const item = items[i];\n                if (item === current) {\n                    return true;\n                }\n                if (isPending(item)) {\n                    return false;\n                }\n            }\n            return true;\n        default:\n            return true;\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZWFsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9yZXZlYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxZQUFpRCxFQUNqRCxZQUFxQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLENBQUMsRUFDOUUsRUFBRTtJQUNYLElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRTNCLFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLEtBQUssVUFBVTtZQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLFlBQVk7WUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNyQixPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLFNBQVM7WUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNwQixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2Q7WUFDRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBwdWJsaWMgQGV4cGVyaW1lbnRhbCAqL1xuZXhwb3J0IHR5cGUgUmV2ZWFsT3JkZXIgPSAncGFyYWxsZWwnIHwgJ3NlcXVlbnRpYWwnIHwgJ3JldmVyc2UnIHwgJ3RvZ2V0aGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXZlYWxJdGVtTGlrZSB7XG4gIGJvdW5kYXJ5OiB7XG4gICAgcGVuZGluZzoge1xuICAgICAgdW50cmFja2VkVmFsdWU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldmVhbFJlZ2lzdHJhdGlvbkxpa2U8SVRFTSBleHRlbmRzIFJldmVhbEl0ZW1MaWtlID0gUmV2ZWFsSXRlbUxpa2U+IHtcbiAgcmV2ZWFsOiB7XG4gICAgb3JkZXI6IFJldmVhbE9yZGVyO1xuICAgIGl0ZW1zOiBJVEVNW107XG4gIH07XG4gIGl0ZW06IElURU07XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBjYW5SZXZlYWxSZWdpc3RyYXRpb24gPSA8SVRFTSBleHRlbmRzIFJldmVhbEl0ZW1MaWtlPihcbiAgcmVnaXN0cmF0aW9uOiBSZXZlYWxSZWdpc3RyYXRpb25MaWtlPElURU0+IHwgbnVsbCxcbiAgaXNQZW5kaW5nOiAoaXRlbTogSVRFTSkgPT4gYm9vbGVhbiA9IChpdGVtKSA9PiBpdGVtLmJvdW5kYXJ5LnBlbmRpbmcudW50cmFja2VkVmFsdWUgPiAwXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKHJlZ2lzdHJhdGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcmV2ZWFsID0gcmVnaXN0cmF0aW9uLnJldmVhbDtcbiAgY29uc3QgY3VycmVudCA9IHJlZ2lzdHJhdGlvbi5pdGVtO1xuICBjb25zdCBpdGVtcyA9IHJldmVhbC5pdGVtcztcblxuICBzd2l0Y2ggKHJldmVhbC5vcmRlcikge1xuICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzUGVuZGluZyhpdGVtc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ3NlcXVlbnRpYWwnOlxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGlmIChpdGVtID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUGVuZGluZyhpdGVtKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAncmV2ZXJzZSc6XG4gICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICBpZiAoaXRlbSA9PT0gY3VycmVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BlbmRpbmcoaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiJdfQ==","import { SignalImpl } from '../reactive-primitives/impl/signal-impl';\nimport { getStoreHandler, getStoreTarget } from '../reactive-primitives/impl/store';\nimport { scheduleEffects } from '../reactive-primitives/utils';\nimport { canRevealRegistration, } from '../shared/utils/reveal';\nimport { isOutOfOrderSegmentContainer } from '../shared/utils/container';\nimport { tryGetInvokeContext } from '../use/use-core';\n/** @internal */\nexport const SUSPENSE_QRL_SYMBOL = '_suC';\nconst outOfOrderRevealIds = new WeakMap();\n/** @internal */\nexport class OutOfOrderRevealCoordinator {\n    id;\n    collapsed;\n    count = 0;\n    pendingItems = new Set();\n    orderCode;\n    constructor(id, order, collapsed) {\n        this.id = id;\n        this.collapsed = collapsed;\n        this.orderCode = getOutOfOrderRevealOrderCode(order);\n    }\n    register(registration) {\n        this.pendingItems.add(registration.item);\n        const index = this.count++;\n        return {\n            attrs: ` q:g=\"${this.id}\" q:i=\"${index}\" q:o=\"${this.orderCode}\"` + (this.collapsed ? ' q:c' : ''),\n            showFallback: this.canReveal(registration) || !this.collapsed,\n            resolve: () => {\n                this.pendingItems.delete(registration.item);\n            },\n        };\n    }\n    canReveal(registration) {\n        return canRevealRegistration(registration, (item) => this.pendingItems.has(item));\n    }\n    script() {\n        return this.count === 0 ? '' : `qO.g(${this.id},${this.count},\"${this.orderCode}\");`;\n    }\n}\n/** @internal */\nexport const createOutOfOrderRevealCoordinator = (order, collapsed) => {\n    if (!isOutOfOrderStreaming()) {\n        return null;\n    }\n    const container = tryGetInvokeContext()?.$container$;\n    let id = 0;\n    if (container) {\n        id = (outOfOrderRevealIds.get(container) || 0) + 1;\n        outOfOrderRevealIds.set(container, id);\n    }\n    return new OutOfOrderRevealCoordinator(id, order, collapsed);\n};\nconst getOutOfOrderRevealOrderCode = (order) => {\n    switch (order) {\n        case 'sequential':\n            return 's';\n        case 'reverse':\n            return 'r';\n        case 'together':\n            return 't';\n        default:\n            return 'p';\n    }\n};\n/** @internal */\nexport const isOutOfOrderStreaming = () => {\n    if (!__EXPERIMENTAL__.suspense) {\n        return false;\n    }\n    const container = tryGetInvokeContext()?.$container$;\n    return container?.outOfOrderStreaming === true && !isOutOfOrderSegmentContainer(container);\n};\n/** @internal */\nexport const nextOutOfOrderSuspenseId = () => {\n    if (!__EXPERIMENTAL__.suspense) {\n        return 0;\n    }\n    const container = tryGetInvokeContext()?.$container$;\n    if (container?.outOfOrderStreaming !== true) {\n        return 0;\n    }\n    return container?.nextOutOfOrderId?.() ?? 0;\n};\n/** @internal */\nexport const applySubscriptionPatches = (container, patches) => {\n    if (!__EXPERIMENTAL__.suspense || !patches) {\n        return;\n    }\n    for (let i = 0; i < patches.length; i++) {\n        const patch = patches[i];\n        const root = container.$getObjectById$(patch.rootId);\n        const subscriptions = patch.subscriptions;\n        if (root instanceof SignalImpl) {\n            if (subscriptions instanceof Set) {\n                mergeSubscriptionSet(container, root, root, (root.$effects$ ||= new Set()), subscriptions);\n            }\n        }\n        else {\n            if (!(subscriptions instanceof Map)) {\n                continue;\n            }\n            const handler = getStoreHandler(root);\n            const target = getStoreTarget(root);\n            if (!handler || !target) {\n                continue;\n            }\n            const effectsMap = (handler.$effects$ ||= new Map());\n            for (const [storeProp, subscriptionSet] of subscriptions) {\n                let rootEffects = effectsMap.get(storeProp);\n                if (!rootEffects) {\n                    rootEffects = new Set();\n                    effectsMap.set(storeProp, rootEffects);\n                }\n                mergeSubscriptionSet(container, handler, target, rootEffects, subscriptionSet);\n            }\n        }\n    }\n};\nconst mergeSubscriptionSet = (container, producer, backRef, rootEffects, patchEffects) => {\n    let newEffects;\n    for (const effect of patchEffects) {\n        if (!rootEffects.has(effect)) {\n            rootEffects.add(effect);\n            (newEffects ||= new Set()).add(effect);\n        }\n        (effect.backRef ||= new Set()).add(backRef);\n    }\n    if (newEffects) {\n        scheduleEffects(container, producer, newEffects);\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VzcGVuc2UtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvY29udHJvbC1mbG93L3N1c3BlbnNlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxPQUFPLEVBQ0wscUJBQXFCLEdBSXRCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHdEQsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQVUxQyxNQUFNLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO0FBRTdELGdCQUFnQjtBQUNoQixNQUFNLE9BQU8sMkJBQTJCO0lBTTVCO0lBRUE7SUFQRixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFRLENBQUM7SUFDL0IsU0FBUyxDQUE0QjtJQUU3QyxZQUNVLEVBQVUsRUFDbEIsS0FBa0IsRUFDVixTQUFrQjtRQUZsQixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBRVYsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUUxQixJQUFJLENBQUMsU0FBUyxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRLENBQUMsWUFBMEM7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxH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Q0FBQyxPQUFPLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFjLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLGVBQWUsQ0FBQyxTQUFTLEVBQUUsUUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnRhaW5lciB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBTaWduYWxJbXBsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3NpZ25hbC1pbXBsJztcbmltcG9ydCB7IGdldFN0b3JlSGFuZGxlciwgZ2V0U3RvcmVUYXJnZXQgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL2ltcGwvc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBFZmZlY3RTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IHNjaGVkdWxlRWZmZWN0cyB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb25QYXRjaCB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvc3Vic2NyaXB0aW9uLXBhdGNoJztcbmltcG9ydCB7XG4gIGNhblJldmVhbFJlZ2lzdHJhdGlvbixcbiAgdHlwZSBSZXZlYWxJdGVtTGlrZSxcbiAgdHlwZSBSZXZlYWxPcmRlcixcbiAgdHlwZSBSZXZlYWxSZWdpc3RyYXRpb25MaWtlLFxufSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcmV2ZWFsJztcbmltcG9ydCB7IGlzT3V0T2ZPcmRlclNlZ21lbnRDb250YWluZXIgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvY29udGFpbmVyJztcbmltcG9ydCB7IHRyeUdldEludm9rZUNvbnRleHQgfSBmcm9tICcuLi91c2UvdXNlLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBTU1JDb250YWluZXIgfSBmcm9tICcuLi9zc3Ivc3NyLXR5cGVzJztcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFNVU1BFTlNFX1FSTF9TWU1CT0wgPSAnX3N1Qyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCB0eXBlIE91dE9mT3JkZXJSZXZlYWxCb3VuZGFyeSA9IHtcbiAgYXR0cnM6IHN0cmluZztcbiAgc2hvd0ZhbGxiYWNrOiBib29sZWFuO1xuICByZXNvbHZlOiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBPdXRPZk9yZGVyUmV2ZWFsT3JkZXJDb2RlID0gJ3AnIHwgJ3MnIHwgJ3InIHwgJ3QnO1xuY29uc3Qgb3V0T2ZPcmRlclJldmVhbElkcyA9IG5ldyBXZWFrTWFwPENvbnRhaW5lciwgbnVtYmVyPigpO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgT3V0T2ZPcmRlclJldmVhbENvb3JkaW5hdG9yPElURU0gZXh0ZW5kcyBSZXZlYWxJdGVtTGlrZSA9IFJldmVhbEl0ZW1MaWtlPiB7XG4gIHByaXZhdGUgY291bnQgPSAwO1xuICBwcml2YXRlIHBlbmRpbmdJdGVtcyA9IG5ldyBTZXQ8SVRFTT4oKTtcbiAgcHJpdmF0ZSBvcmRlckNvZGU6IE91dE9mT3JkZXJSZXZlYWxPcmRlckNvZGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpZDogbnVtYmVyLFxuICAgIG9yZGVyOiBSZXZlYWxPcmRlcixcbiAgICBwcml2YXRlIGNvbGxhcHNlZDogYm9vbGVhblxuICApIHtcbiAgICB0aGlzLm9yZGVyQ29kZSA9IGdldE91dE9mT3JkZXJSZXZlYWxPcmRlckNvZGUob3JkZXIpO1xuICB9XG5cbiAgcmVnaXN0ZXIocmVnaXN0cmF0aW9uOiBSZXZlYWxSZWdpc3RyYXRpb25MaWtlPElURU0+KTogT3V0T2ZPcmRlclJldmVhbEJvdW5kYXJ5IHtcbiAgICB0aGlzLnBlbmRpbmdJdGVtcy5hZGQocmVnaXN0cmF0aW9uLml0ZW0pO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb3VudCsrO1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczpcbiAgICAgICAgYCBxOmc9XCIke3RoaXMuaWR9XCIgcTppPVwiJHtpbmRleH1cIiBxOm89XCIke3RoaXMub3JkZXJDb2RlfVwiYCArICh0aGlzLmNvbGxhcHNlZCA/ICcgcTpjJyA6ICcnKSxcbiAgICAgIHNob3dGYWxsYmFjazogdGhpcy5jYW5SZXZlYWwocmVnaXN0cmF0aW9uKSB8fCAhdGhpcy5jb2xsYXBzZWQsXG4gICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGVuZGluZ0l0ZW1zLmRlbGV0ZShyZWdpc3RyYXRpb24uaXRlbSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjYW5SZXZlYWwocmVnaXN0cmF0aW9uOiBSZXZlYWxSZWdpc3RyYXRpb25MaWtlPElURU0+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhblJldmVhbFJlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb24sIChpdGVtKSA9PiB0aGlzLnBlbmRpbmdJdGVtcy5oYXMoaXRlbSkpO1xuICB9XG5cbiAgc2NyaXB0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY291bnQgPT09IDAgPyAnJyA6IGBxTy5nKCR7dGhpcy5pZH0sJHt0aGlzLmNvdW50fSxcIiR7dGhpcy5vcmRlckNvZGV9XCIpO2A7XG4gIH1cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU91dE9mT3JkZXJSZXZlYWxDb29yZGluYXRvciA9IDxJVEVNIGV4dGVuZHMgUmV2ZWFsSXRlbUxpa2UgPSBSZXZlYWxJdGVtTGlrZT4oXG4gIG9yZGVyOiBSZXZlYWxPcmRlcixcbiAgY29sbGFwc2VkOiBib29sZWFuXG4pOiBPdXRPZk9yZGVyUmV2ZWFsQ29vcmRpbmF0b3I8SVRFTT4gPT4ge1xuICBpZiAoIWlzT3V0T2ZPcmRlclN0cmVhbWluZygpKSB7XG4gICAgcmV0dXJuIG51bGwhO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lciA9IHRyeUdldEludm9rZUNvbnRleHQoKT8uJGNvbnRhaW5lciQ7XG4gIGxldCBpZCA9IDA7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICBpZCA9IChvdXRPZk9yZGVyUmV2ZWFsSWRzLmdldChjb250YWluZXIpIHx8IDApICsgMTtcbiAgICBvdXRPZk9yZGVyUmV2ZWFsSWRzLnNldChjb250YWluZXIsIGlkKTtcbiAgfVxuICByZXR1cm4gbmV3IE91dE9mT3JkZXJSZXZlYWxDb29yZGluYXRvcjxJVEVNPihpZCwgb3JkZXIsIGNvbGxhcHNlZCk7XG59O1xuXG5jb25zdCBnZXRPdXRPZk9yZGVyUmV2ZWFsT3JkZXJDb2RlID0gKG9yZGVyOiBSZXZlYWxPcmRlcik6IE91dE9mT3JkZXJSZXZlYWxPcmRlckNvZGUgPT4ge1xuICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgY2FzZSAnc2VxdWVudGlhbCc6XG4gICAgICByZXR1cm4gJ3MnO1xuICAgIGNhc2UgJ3JldmVyc2UnOlxuICAgICAgcmV0dXJuICdyJztcbiAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICByZXR1cm4gJ3QnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3AnO1xuICB9XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgaXNPdXRPZk9yZGVyU3RyZWFtaW5nID0gKCk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIV9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY29udGFpbmVyID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpPy4kY29udGFpbmVyJCBhc1xuICAgIHwgKHsgcmVhZG9ubHkgb3V0T2ZPcmRlclN0cmVhbWluZz86IGJvb2xlYW4gfSAmIENvbnRhaW5lcilcbiAgICB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNvbnRhaW5lcj8ub3V0T2ZPcmRlclN0cmVhbWluZyA9PT0gdHJ1ZSAmJiAhaXNPdXRPZk9yZGVyU2VnbWVudENvbnRhaW5lcihjb250YWluZXIpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IG5leHRPdXRPZk9yZGVyU3VzcGVuc2VJZCA9ICgpOiBudW1iZXIgPT4ge1xuICBpZiAoIV9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb250YWluZXIgPSB0cnlHZXRJbnZva2VDb250ZXh0KCk/LiRjb250YWluZXIkIGFzIFNTUkNvbnRhaW5lciB8IHVuZGVmaW5lZDtcbiAgaWYgKGNvbnRhaW5lcj8ub3V0T2ZPcmRlclN0cmVhbWluZyAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBjb250YWluZXI/Lm5leHRPdXRPZk9yZGVySWQ/LigpID8/IDA7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgYXBwbHlTdWJzY3JpcHRpb25QYXRjaGVzID0gKFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgcGF0Y2hlczogU3Vic2NyaXB0aW9uUGF0Y2hbXSB8IHVuZGVmaW5lZFxuKTogdm9pZCA9PiB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSB8fCAhcGF0Y2hlcykge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwYXRjaCA9IHBhdGNoZXNbaV07XG4gICAgY29uc3Qgcm9vdCA9IGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQocGF0Y2gucm9vdElkKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gcGF0Y2guc3Vic2NyaXB0aW9ucztcbiAgICBpZiAocm9vdCBpbnN0YW5jZW9mIFNpZ25hbEltcGwpIHtcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIG1lcmdlU3Vic2NyaXB0aW9uU2V0KGNvbnRhaW5lciwgcm9vdCwgcm9vdCwgKHJvb3QuJGVmZmVjdHMkIHx8PSBuZXcgU2V0KCkpLCBzdWJzY3JpcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEoc3Vic2NyaXB0aW9ucyBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYW5kbGVyID0gZ2V0U3RvcmVIYW5kbGVyKHJvb3QgYXMgYW55KTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGdldFN0b3JlVGFyZ2V0KHJvb3QgYXMgYW55KTtcbiAgICAgIGlmICghaGFuZGxlciB8fCAhdGFyZ2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZWZmZWN0c01hcCA9IChoYW5kbGVyLiRlZmZlY3RzJCB8fD0gbmV3IE1hcCgpKTtcbiAgICAgIGZvciAoY29uc3QgW3N0b3JlUHJvcCwgc3Vic2NyaXB0aW9uU2V0XSBvZiBzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIGxldCByb290RWZmZWN0cyA9IGVmZmVjdHNNYXAuZ2V0KHN0b3JlUHJvcCk7XG4gICAgICAgIGlmICghcm9vdEVmZmVjdHMpIHtcbiAgICAgICAgICByb290RWZmZWN0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBlZmZlY3RzTWFwLnNldChzdG9yZVByb3AsIHJvb3RFZmZlY3RzKTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZVN1YnNjcmlwdGlvblNldChjb250YWluZXIsIGhhbmRsZXIsIHRhcmdldCwgcm9vdEVmZmVjdHMsIHN1YnNjcmlwdGlvblNldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBtZXJnZVN1YnNjcmlwdGlvblNldCA9IChcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIHByb2R1Y2VyOiB1bmtub3duLFxuICBiYWNrUmVmOiB1bmtub3duLFxuICByb290RWZmZWN0czogU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4sXG4gIHBhdGNoRWZmZWN0czogU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj5cbik6IHZvaWQgPT4ge1xuICBsZXQgbmV3RWZmZWN0czogU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZWZmZWN0IG9mIHBhdGNoRWZmZWN0cykge1xuICAgIGlmICghcm9vdEVmZmVjdHMuaGFzKGVmZmVjdCkpIHtcbiAgICAgIHJvb3RFZmZlY3RzLmFkZChlZmZlY3QpO1xuICAgICAgKG5ld0VmZmVjdHMgfHw9IG5ldyBTZXQoKSkuYWRkKGVmZmVjdCk7XG4gICAgfVxuICAgIChlZmZlY3QuYmFja1JlZiB8fD0gbmV3IFNldCgpKS5hZGQoYmFja1JlZiBhcyBhbnkpO1xuICB9XG4gIGlmIChuZXdFZmZlY3RzKSB7XG4gICAgc2NoZWR1bGVFZmZlY3RzKGNvbnRhaW5lciwgcHJvZHVjZXIgYXMgYW55LCBuZXdFZmZlY3RzKTtcbiAgfVxufTtcbiJdfQ==","import { applySubscriptionPatches } from '../control-flow/suspense-utils';\nimport { wrapDeserializerProxy } from '../shared/serdes/deser-proxy';\nimport { preprocessState } from '../shared/serdes/index';\nimport { QStatePatchAttrSelector, QSuspenseResolved } from '../shared/utils/markers';\nimport { qDev } from '../shared/utils/qdev';\nconst processedStatePatchScripts = new WeakMap();\n/** @internal */\nexport const processSegmentStateScripts = (container, segmentId) => {\n    if (!__EXPERIMENTAL__.suspense) {\n        return;\n    }\n    const stateContainer = container;\n    const qwikStates = stateContainer.element.querySelectorAll(`${stateScriptSelector(stateContainer.$instanceHash$)}${QStatePatchAttrSelector}`);\n    const processedScripts = getProcessedStatePatchScripts(container);\n    for (let i = 0; i < qwikStates.length; i++) {\n        const stateScript = qwikStates[i];\n        if (segmentId !== undefined && stateScript.getAttribute(QSuspenseResolved) !== segmentId) {\n            continue;\n        }\n        if (processedScripts.has(stateScript)) {\n            continue;\n        }\n        processedScripts.add(stateScript);\n        processStatePatch(container, stateContainer, stateScript.textContent);\n    }\n};\nconst getProcessedStatePatchScripts = (container) => {\n    let processedScripts = processedStatePatchScripts.get(container);\n    if (!processedScripts) {\n        processedScripts = new WeakSet();\n        processedStatePatchScripts.set(container, processedScripts);\n    }\n    return processedScripts;\n};\nconst stateScriptSelector = (instanceHash) => {\n    return `script[type=\"qwik/state\"][q\\\\:instance=\"${instanceHash}\"]`;\n};\nconst processStatePatch = (container, stateContainer, textContent) => {\n    if (textContent) {\n        const [rootStart, rawStateData, forwardRefs, subscriptionPatchRootId] = JSON.parse(textContent);\n        appendStatePatchRoots(container, stateContainer, rootStart, rawStateData);\n        mergeForwardRefs(stateContainer, forwardRefs || undefined);\n        applySubscriptionPatches(container, subscriptionPatchRootId === undefined\n            ? undefined\n            : stateContainer.$getObjectById$(subscriptionPatchRootId));\n    }\n};\nconst appendStatePatchRoots = (container, stateContainer, rootStart, rawStateData) => {\n    const currentRootCount = stateContainer.$rawStateData$.length / 2;\n    if (rootStart !== currentRootCount) {\n        if (qDev) {\n            throw new Error(`Invalid Qwik state patch root start: expected ${currentRootCount}, received ${rootStart}.`);\n        }\n        return;\n    }\n    for (let i = 0; i < rawStateData.length; i++) {\n        stateContainer.$rawStateData$[rootStart * 2 + i] = rawStateData[i];\n    }\n    preprocessState(stateContainer.$rawStateData$, container, undefined, rootStart * 2);\n    stateContainer.$stateData$ = wrapDeserializerProxy(container, stateContainer.$rawStateData$);\n    stateContainer.$stateData$.length = stateContainer.$rawStateData$.length / 2;\n    stateContainer.$rootForwardRefs$ = stateContainer.$forwardRefs$;\n};\nconst mergeForwardRefs = (stateContainer, forwardRefs) => {\n    if (!forwardRefs) {\n        return;\n    }\n    const rootForwardRefs = (stateContainer.$rootForwardRefs$ ||= []);\n    for (let i = 0; i < forwardRefs.length; i++) {\n        const ref = forwardRefs[i];\n        if (ref !== undefined) {\n            rootForwardRefs.push(ref);\n        }\n    }\n    stateContainer.$forwardRefs$ = rootForwardRefs;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1zZWdtZW50LXN0YXRlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC9wcm9jZXNzLXNlZ21lbnQtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWE1QyxNQUFNLDBCQUEwQixHQUFHLElBQUksT0FBTyxFQUFrQyxDQUFDO0FBRWpGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLFNBQXVCLEVBQUUsU0FBa0IsRUFBUSxFQUFFO0lBQzlGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLFNBQTZDLENBQUM7SUFDckUsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDeEQsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsdUJBQXVCLEVBQUUsQ0FDbEYsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFD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V0FBVyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0UsY0FBYyxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixjQUFxQyxFQUNyQyxXQUErQyxFQUN6QyxFQUFFO0lBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxlQUFlLEdBQUcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUNELGNBQWMsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBQ2pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGx5U3Vic2NyaXB0aW9uUGF0Y2hlcyB9IGZyb20gJy4uL2NvbnRyb2wtZmxvdy9zdXNwZW5zZS11dGlscyc7XG5pbXBvcnQgeyB3cmFwRGVzZXJpYWxpemVyUHJveHkgfSBmcm9tICcuLi9zaGFyZWQvc2VyZGVzL2Rlc2VyLXByb3h5JztcbmltcG9ydCB7IHByZXByb2Nlc3NTdGF0ZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvaW5kZXgnO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb25QYXRjaCB9IGZyb20gJy4uL3NoYXJlZC9zZXJkZXMvc3Vic2NyaXB0aW9uLXBhdGNoJztcbmltcG9ydCB7IFFTdGF0ZVBhdGNoQXR0clNlbGVjdG9yLCBRU3VzcGVuc2VSZXNvbHZlZCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHFEZXYgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQgdHlwZSB7IERvbUNvbnRhaW5lciB9IGZyb20gJy4vZG9tLWNvbnRhaW5lcic7XG5cbnR5cGUgU2VnbWVudFN0YXRlQ29udGFpbmVyID0ge1xuICBlbGVtZW50OiBFbGVtZW50O1xuICAkaW5zdGFuY2VIYXNoJDogc3RyaW5nO1xuICAkcmF3U3RhdGVEYXRhJDogdW5rbm93bltdO1xuICAkc3RhdGVEYXRhJDogdW5rbm93bltdO1xuICAkZm9yd2FyZFJlZnMkOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+IHwgbnVsbDtcbiAgJHJvb3RGb3J3YXJkUmVmcyQ6IEFycmF5PG51bWJlciB8IHN0cmluZz4gfCBudWxsO1xuICAkZ2V0T2JqZWN0QnlJZCQ6IChpZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB1bmtub3duO1xufTtcblxuY29uc3QgcHJvY2Vzc2VkU3RhdGVQYXRjaFNjcmlwdHMgPSBuZXcgV2Vha01hcDxEb21Db250YWluZXIsIFdlYWtTZXQ8RWxlbWVudD4+KCk7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VnbWVudFN0YXRlU2NyaXB0cyA9IChjb250YWluZXI6IERvbUNvbnRhaW5lciwgc2VnbWVudElkPzogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdGF0ZUNvbnRhaW5lciA9IGNvbnRhaW5lciBhcyB1bmtub3duIGFzIFNlZ21lbnRTdGF0ZUNvbnRhaW5lcjtcbiAgY29uc3QgcXdpa1N0YXRlcyA9IHN0YXRlQ29udGFpbmVyLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICBgJHtzdGF0ZVNjcmlwdFNlbGVjdG9yKHN0YXRlQ29udGFpbmVyLiRpbnN0YW5jZUhhc2gkKX0ke1FTdGF0ZVBhdGNoQXR0clNlbGVjdG9yfWBcbiAgKTtcbiAgY29uc3QgcHJvY2Vzc2VkU2NyaXB0cyA9IGdldFByb2Nlc3NlZFN0YXRlUGF0Y2hTY3JpcHRzKGNvbnRhaW5lcik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcXdpa1N0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN0YXRlU2NyaXB0ID0gcXdpa1N0YXRlc1tpXTtcbiAgICBpZiAoc2VnbWVudElkICE9PSB1bmRlZmluZWQgJiYgc3RhdGVTY3JpcHQuZ2V0QXR0cmlidXRlKFFTdXNwZW5zZVJlc29sdmVkKSAhPT0gc2VnbWVudElkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3NlZFNjcmlwdHMuaGFzKHN0YXRlU2NyaXB0KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHByb2Nlc3NlZFNjcmlwdHMuYWRkKHN0YXRlU2NyaXB0KTtcbiAgICBwcm9jZXNzU3RhdGVQYXRjaChjb250YWluZXIsIHN0YXRlQ29udGFpbmVyLCBzdGF0ZVNjcmlwdC50ZXh0Q29udGVudCk7XG4gIH1cbn07XG5cbmNvbnN0IGdldFByb2Nlc3NlZFN0YXRlUGF0Y2hTY3JpcHRzID0gKGNvbnRhaW5lcjogRG9tQ29udGFpbmVyKTogV2Vha1NldDxFbGVtZW50PiA9PiB7XG4gIGxldCBwcm9jZXNzZWRTY3JpcHRzID0gcHJvY2Vzc2VkU3RhdGVQYXRjaFNjcmlwdHMuZ2V0KGNvbnRhaW5lcik7XG4gIGlmICghcHJvY2Vzc2VkU2NyaXB0cykge1xuICAgIHByb2Nlc3NlZFNjcmlwdHMgPSBuZXcgV2Vha1NldCgpO1xuICAgIHByb2Nlc3NlZFN0YXRlUGF0Y2hTY3JpcHRzLnNldChjb250YWluZXIsIHByb2Nlc3NlZFNjcmlwdHMpO1xuICB9XG4gIHJldHVybiBwcm9jZXNzZWRTY3JpcHRzO1xufTtcblxuY29uc3Qgc3RhdGVTY3JpcHRTZWxlY3RvciA9IChpbnN0YW5jZUhhc2g6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgc2NyaXB0W3R5cGU9XCJxd2lrL3N0YXRlXCJdW3FcXFxcOmluc3RhbmNlPVwiJHtpbnN0YW5jZUhhc2h9XCJdYDtcbn07XG5cbmNvbnN0IHByb2Nlc3NTdGF0ZVBhdGNoID0gKFxuICBjb250YWluZXI6IERvbUNvbnRhaW5lcixcbiAgc3RhdGVDb250YWluZXI6IFNlZ21lbnRTdGF0ZUNvbnRhaW5lcixcbiAgdGV4dENvbnRlbnQ6IHN0cmluZyB8IG51bGxcbik6IHZvaWQgPT4ge1xuICBpZiAodGV4dENvbnRlbnQpIHtcbiAgICBjb25zdCBbcm9vdFN0YXJ0LCByYXdTdGF0ZURhdGEsIGZvcndhcmRSZWZzLCBzdWJzY3JpcHRpb25QYXRjaFJvb3RJZF0gPSBKU09OLnBhcnNlKFxuICAgICAgdGV4dENvbnRlbnRcbiAgICApIGFzIFtudW1iZXIsIHVua25vd25bXSwgQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiB8IDAgfCB1bmRlZmluZWQsIG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZF07XG4gICAgYXBwZW5kU3RhdGVQYXRjaFJvb3RzKGNvbnRhaW5lciwgc3RhdGVDb250YWluZXIsIHJvb3RTdGFydCwgcmF3U3RhdGVEYXRhKTtcbiAgICBtZXJnZUZvcndhcmRSZWZzKHN0YXRlQ29udGFpbmVyLCBmb3J3YXJkUmVmcyB8fCB1bmRlZmluZWQpO1xuICAgIGFwcGx5U3Vic2NyaXB0aW9uUGF0Y2hlcyhcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHN1YnNjcmlwdGlvblBhdGNoUm9vdElkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiAoc3RhdGVDb250YWluZXIuJGdldE9iamVjdEJ5SWQkKHN1YnNjcmlwdGlvblBhdGNoUm9vdElkKSBhcyBTdWJzY3JpcHRpb25QYXRjaFtdKVxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGFwcGVuZFN0YXRlUGF0Y2hSb290cyA9IChcbiAgY29udGFpbmVyOiBEb21Db250YWluZXIsXG4gIHN0YXRlQ29udGFpbmVyOiBTZWdtZW50U3RhdGVDb250YWluZXIsXG4gIHJvb3RTdGFydDogbnVtYmVyLFxuICByYXdTdGF0ZURhdGE6IHVua25vd25bXVxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGN1cnJlbnRSb290Q291bnQgPSBzdGF0ZUNvbnRhaW5lci4kcmF3U3RhdGVEYXRhJC5sZW5ndGggLyAyO1xuICBpZiAocm9vdFN0YXJ0ICE9PSBjdXJyZW50Um9vdENvdW50KSB7XG4gICAgaWYgKHFEZXYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgUXdpayBzdGF0ZSBwYXRjaCByb290IHN0YXJ0OiBleHBlY3RlZCAke2N1cnJlbnRSb290Q291bnR9LCByZWNlaXZlZCAke3Jvb3RTdGFydH0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3U3RhdGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgc3RhdGVDb250YWluZXIuJHJhd1N0YXRlRGF0YSRbcm9vdFN0YXJ0ICogMiArIGldID0gcmF3U3RhdGVEYXRhW2ldO1xuICB9XG4gIHByZXByb2Nlc3NTdGF0ZShzdGF0ZUNvbnRhaW5lci4kcmF3U3RhdGVEYXRhJCwgY29udGFpbmVyLCB1bmRlZmluZWQsIHJvb3RTdGFydCAqIDIpO1xuICBzdGF0ZUNvbnRhaW5lci4kc3RhdGVEYXRhJCA9IHdyYXBEZXNlcmlhbGl6ZXJQcm94eShcbiAgICBjb250YWluZXIsXG4gICAgc3RhdGVDb250YWluZXIuJHJhd1N0YXRlRGF0YSRcbiAgKSBhcyB1bmtub3duW107XG4gIHN0YXRlQ29udGFpbmVyLiRzdGF0ZURhdGEkLmxlbmd0aCA9IHN0YXRlQ29udGFpbmVyLiRyYXdTdGF0ZURhdGEkLmxlbmd0aCAvIDI7XG4gIHN0YXRlQ29udGFpbmVyLiRyb290Rm9yd2FyZFJlZnMkID0gc3RhdGVDb250YWluZXIuJGZvcndhcmRSZWZzJDtcbn07XG5cbmNvbnN0IG1lcmdlRm9yd2FyZFJlZnMgPSAoXG4gIHN0YXRlQ29udGFpbmVyOiBTZWdtZW50U3RhdGVDb250YWluZXIsXG4gIGZvcndhcmRSZWZzOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiB2b2lkID0+IHtcbiAgaWYgKCFmb3J3YXJkUmVmcykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByb290Rm9yd2FyZFJlZnMgPSAoc3RhdGVDb250YWluZXIuJHJvb3RGb3J3YXJkUmVmcyQgfHw9IFtdKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3J3YXJkUmVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlZiA9IGZvcndhcmRSZWZzW2ldO1xuICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcm9vdEZvcndhcmRSZWZzLnB1c2gocmVmKTtcbiAgICB9XG4gIH1cbiAgc3RhdGVDb250YWluZXIuJGZvcndhcmRSZWZzJCA9IHJvb3RGb3J3YXJkUmVmcztcbn07XG4iXX0=","// NOTE: we want to move this function to qwikloader, and therefore this function should not have any external dependencies\nimport { VNodeDataChar, VNodeDataSeparator, getSegmentVNodeRefId, } from '../shared/vnode-data-types';\nexport function processOutOfOrderSegmentVNodeData(document, segmentId, contentNode) {\n    if (!__EXPERIMENTAL__.suspense || !contentNode) {\n        return;\n    }\n    const qContainerElement = contentNode.closest('[q\\\\:container]');\n    const script = qContainerElement?.querySelector(`script[type=\"qwik/vnode\"][q\\\\:r=\"${segmentId}\"]:not([q\\\\:patch])`);\n    processVNodeDataImpl(document, segmentId, qContainerElement, contentNode, script?.textContent || undefined);\n    const patches = qContainerElement?.querySelectorAll(`script[type=\"qwik/vnode\"][q\\\\:r=\"${segmentId}\"][q\\\\:patch]`);\n    for (let i = 0; patches && i < patches.length; i++) {\n        document.qProcessVNodeDataPatch?.(patches[i]);\n    }\n}\nexport function processVNodeData(document) {\n    processVNodeDataImpl(document);\n    document.qVNodeDataProcessed = true;\n}\nfunction processVNodeDataImpl(document, segmentId, segmentContainer, segmentContent, segmentVNodeData) {\n    const Q_CONTAINER = 'q:container';\n    const Q_CONTAINER_END = '/' + Q_CONTAINER;\n    const Q_PROPS_SEPARATOR = ':';\n    const Q_SHADOW_ROOT = 'q:shadowroot';\n    const Q_IGNORE = 'q:ignore';\n    const Q_IGNORE_END = '/' + Q_IGNORE;\n    const Q_CONTAINER_ISLAND = 'q:container-island';\n    const Q_CONTAINER_ISLAND_END = '/' + Q_CONTAINER_ISLAND;\n    const Q_SUSPENSE_RESOLVED = 'q:r';\n    const Q_SUSPENSE_RESULT_PARENT = 'q:rp';\n    const Q_PATCH = 'q:patch';\n    const qDocument = document;\n    const vNodeDataMap = (qDocument.qVNodeData ||= new WeakMap());\n    const prototype = document.body;\n    const getter = (prototype, name) => {\n        let getter;\n        while (prototype && !(getter = Object.getOwnPropertyDescriptor(prototype, name)?.get)) {\n            prototype = Object.getPrototypeOf(prototype);\n        }\n        return (getter ||\n            function () {\n                return this[name];\n            });\n    };\n    const getAttribute = prototype.getAttribute;\n    const hasAttribute = prototype.hasAttribute;\n    const getNodeType = getter(prototype, 'nodeType');\n    // Process all of the `qwik/vnode` script tags by attaching them to the corresponding containers.\n    const attachVnodeDataAndRefs = (element) => {\n        const scripts = element.querySelectorAll('script[type=\"qwik/vnode\"]');\n        for (let i = 0; i < scripts.length; i++) {\n            const script = scripts[i];\n            const qContainer = script.closest('[q\\\\:container]');\n            qContainer.qVNodeRefs ||= new Map();\n            if (script.hasAttribute(Q_PATCH)) {\n                qDocument.qProcessVNodeDataPatch?.(script);\n                continue;\n            }\n            const scriptContent = script.textContent;\n            const segment = __EXPERIMENTAL__.suspense && script.getAttribute(Q_SUSPENSE_RESOLVED);\n            if (segment) {\n                (qContainer.qSegmentVnodeData ||= new Map()).set(segment, scriptContent);\n            }\n            else {\n                qContainer.qVnodeData = scriptContent;\n            }\n        }\n        const shadowRoots = element.querySelectorAll('[q\\\\:shadowroot]');\n        for (let i = 0; i < shadowRoots.length; i++) {\n            const parent = shadowRoots[i];\n            const shadowRoot = parent.shadowRoot;\n            shadowRoot && attachVnodeDataAndRefs(shadowRoot);\n        }\n    };\n    /**\n     * Looks up which type of node this is in a monomorphic way which should be faster.\n     *\n     * See: https://mhevery.github.io/perf-tests/DOM-megamorphic.html\n     */\n    const getFastNodeType = (node) => {\n        const nodeType = getNodeType.call(node);\n        if (nodeType === 1 /* Node.ELEMENT_NODE */) {\n            if (getAttribute.call(node, Q_CONTAINER) !== null) {\n                return 3 /* NodeType.ELEMENT_CONTAINER */;\n            }\n            if (hasAttribute.call(node, Q_SHADOW_ROOT)) {\n                return 6 /* NodeType.ELEMENT_SHADOW_ROOT_WRAPPER */;\n            }\n            if (__EXPERIMENTAL__.suspense && getAttribute.call(node, Q_SUSPENSE_RESULT_PARENT) !== null) {\n                return 130 /* NodeType.ELEMENT_SUSPENSE_RESULT_PARENT */;\n            }\n            return hasAttribute.call(node, Q_PROPS_SEPARATOR) ? 2 /* NodeType.ELEMENT */ : 0 /* NodeType.OTHER */;\n        }\n        else if (nodeType === 8 /* Node.COMMENT_NODE */) {\n            const nodeValue = node.nodeValue || ''; // nodeValue is monomorphic so it does not need fast path\n            if (nodeValue.startsWith(Q_CONTAINER_ISLAND)) {\n                return 65 /* NodeType.COMMENT_ISLAND_START */;\n            }\n            else if (nodeValue.startsWith(Q_IGNORE)) {\n                return 16 /* NodeType.COMMENT_IGNORE_START */;\n            }\n            else if (nodeValue.startsWith(Q_CONTAINER)) {\n                return 9 /* NodeType.COMMENT_SKIP_START */;\n            }\n            else if (nodeValue.startsWith(Q_CONTAINER_ISLAND_END)) {\n                return 64 /* NodeType.COMMENT_ISLAND_END */;\n            }\n            else if (nodeValue.startsWith(Q_IGNORE_END)) {\n                return 32 /* NodeType.COMMENT_IGNORE_END */;\n            }\n            else if (nodeValue.startsWith(Q_CONTAINER_END)) {\n                return 8 /* NodeType.COMMENT_SKIP_END */;\n            }\n        }\n        return 0 /* NodeType.OTHER */;\n    };\n    const nextSibling = (node) => {\n        // eslint-disable-next-line no-empty\n        while (node && (node = node.nextSibling) && getFastNodeType(node) === 0 /* NodeType.OTHER */) { }\n        return node;\n    };\n    /**\n     * Process the container\n     *\n     * @param walker TreeWalker\n     * @param containerNode The root of container element\n     * @param exitNode The node which represents the last node and we should exit.\n     * @param qVNodeRefs Place to store the VNodeRefs\n     */\n    const walkContainer = (walker, containerNode, node, exitNode, vData, qVNodeRefs, qContainerElement, segmentId) => {\n        const isSegment = __EXPERIMENTAL__.suspense && segmentId !== undefined;\n        const vData_length = vData.length;\n        /// Stores the current element index as the TreeWalker traverses the DOM.\n        let elementIdx = 0;\n        /// Stores the current VNode index as derived from the VNodeData script tag.\n        let vNodeElementIndex = -1;\n        let vData_start = 0;\n        let vData_end = 0;\n        let ch = 0;\n        let needsToStoreRef = -1;\n        let nextNode = null;\n        /** Computes number of elements which need to be skipped to get to the next VNodeData section. */\n        const howManyElementsToSkip = () => {\n            let elementsToSkip = 0;\n            while (isSeparator((ch = vData.charCodeAt(vData_start)))) {\n                // Keep consuming the separators and incrementing the vNodeIndex\n                elementsToSkip += 1 << (ch - VNodeDataSeparator.ADVANCE_1);\n                vData_start++;\n                if (vData_start >= vData_length) {\n                    // we reached the end of the vNodeData stop.\n                    break;\n                }\n            }\n            return elementsToSkip;\n        };\n        do {\n            if (node === exitNode) {\n                return;\n            }\n            nextNode = null;\n            const nodeType = node == containerNode ? 2 /* NodeType.ELEMENT */ : getFastNodeType(node);\n            if (nodeType === 3 /* NodeType.ELEMENT_CONTAINER */) {\n                // If we are in a container, we need to skip the children.\n                const container = node;\n                let cursor = node;\n                while (cursor && !(nextNode = nextSibling(cursor))) {\n                    cursor = cursor.parentNode;\n                }\n                walkContainer(walker, container, node, nextNode, container.qVnodeData || '', container.qVNodeRefs, container);\n            }\n            else if (nodeType === 16 /* NodeType.COMMENT_IGNORE_START */) {\n                let islandNode = node;\n                do {\n                    islandNode = walker.nextNode();\n                    if (!islandNode) {\n                        throw new Error(`Island inside <!--${node?.nodeValue}--> not found!`);\n                    }\n                } while (getFastNodeType(islandNode) !== 65 /* NodeType.COMMENT_ISLAND_START */);\n            }\n            else if (nodeType === 64 /* NodeType.COMMENT_ISLAND_END */) {\n                // Walk forward to find either the next container-island or the end of the q:ignore block.\n                // This handles multiple islands within a single q:ignore block.\n                nextNode = node;\n                let nextNodeType;\n                do {\n                    nextNode = walker.nextNode();\n                    if (!nextNode) {\n                        throw new Error(`Ignore block not closed!`);\n                    }\n                    nextNodeType = getFastNodeType(nextNode);\n                } while (nextNodeType !== 32 /* NodeType.COMMENT_IGNORE_END */ &&\n                    nextNodeType !== 65 /* NodeType.COMMENT_ISLAND_START */);\n                nextNode = null;\n            }\n            else if (nodeType === 9 /* NodeType.COMMENT_SKIP_START */) {\n                // If we are in a container, we need to skip the children.\n                nextNode = node;\n                do {\n                    nextNode = nextSibling(nextNode);\n                    if (!nextNode) {\n                        throw new Error(`<!--${node?.nodeValue}--> not closed!`);\n                    }\n                } while (getFastNodeType(nextNode) !== 8 /* NodeType.COMMENT_SKIP_END */);\n                walkContainer(walker, node, node, nextNode, '', null, qContainerElement);\n            }\n            else if (nodeType === 6 /* NodeType.ELEMENT_SHADOW_ROOT_WRAPPER */) {\n                // If we are in a shadow root, we need to get the shadow root element.\n                nextNode = nextSibling(node);\n                const shadowRootContainer = node;\n                const shadowRoot = shadowRootContainer?.shadowRoot;\n                if (shadowRoot) {\n                    walkContainer(\n                    // we need to create a new walker for the shadow root\n                    document.createTreeWalker(shadowRoot, 0x1 /* NodeFilter.SHOW_ELEMENT  */ | 0x80 /*  NodeFilter.SHOW_COMMENT */), null, shadowRoot, null, '', null, null);\n                }\n            }\n            if ((nodeType & 2 /* NodeType.ELEMENT */) === 2 /* NodeType.ELEMENT */) {\n                if (isSegment && node !== containerNode) {\n                    const element = node;\n                    element._qSegment = segmentId;\n                }\n                if (vNodeElementIndex < elementIdx) {\n                    // VNodeData needs to catch up with the elementIdx\n                    if (vNodeElementIndex === -1) {\n                        vNodeElementIndex = 0;\n                    }\n                    vData_start = vData_end;\n                    if (vData_start < vData_length) {\n                        vNodeElementIndex += howManyElementsToSkip();\n                        if (ch === VNodeDataSeparator.REFERENCE) {\n                            // if we need to store the ref handle it here.\n                            needsToStoreRef = vNodeElementIndex;\n                            vData_start++;\n                            if (vData_start < vData_length) {\n                                ch = vData.charCodeAt(vData_end);\n                            }\n                            else {\n                                // assume separator on end.\n                                ch = VNodeDataSeparator.ADVANCE_1;\n                            }\n                        }\n                        vData_end = findVDataSectionEnd(vData, vData_start, vData_length);\n                    }\n                    else {\n                        vNodeElementIndex = Number.MAX_SAFE_INTEGER;\n                    }\n                }\n                const contentBoundaryId = __EXPERIMENTAL__.suspense &&\n                    !isSegment &&\n                    nodeType === 130 /* NodeType.ELEMENT_SUSPENSE_RESULT_PARENT */\n                    ? getAttribute.call(node, Q_SUSPENSE_RESULT_PARENT)\n                    : null;\n                if (elementIdx === vNodeElementIndex) {\n                    if (needsToStoreRef === elementIdx && !(isSegment && node === containerNode)) {\n                        qVNodeRefs.set(isSegment ? getSegmentVNodeRefId(segmentId, elementIdx) : elementIdx, node);\n                    }\n                    const data = vData.substring(vData_start, vData_end);\n                    if (isSegment && node === containerNode) {\n                        const existing = vNodeDataMap.get(node);\n                        if (existing === undefined || existing === '') {\n                            vNodeDataMap.set(node, data);\n                        }\n                        else if (existing.charCodeAt(0) === VNodeDataChar.SEPARATOR &&\n                            existing.charCodeAt(1) === VNodeDataChar.SEPARATOR &&\n                            !existing.endsWith(data)) {\n                            vNodeDataMap.set(node, existing + data);\n                        }\n                    }\n                    else {\n                        vNodeDataMap.set(node, data);\n                    }\n                }\n                elementIdx++;\n                if (__EXPERIMENTAL__.suspense && contentBoundaryId !== null) {\n                    processSuspenseContentSegment(qContainerElement, node, contentBoundaryId);\n                    nextNode = nextSibling(node);\n                    if (nextNode) {\n                        walker.currentNode = nextNode;\n                    }\n                }\n            }\n        } while ((node = nextNode || walker.nextNode()));\n    };\n    const processVNodeDataScope = (qContainerElement, contentNode, vData, scopeSegmentId) => {\n        qContainerElement.qVNodeRefs ||= new Map();\n        const scopeWalker = document.createTreeWalker(document, 0x1 /* NodeFilter.SHOW_ELEMENT  */ | 0x80 /*  NodeFilter.SHOW_COMMENT */);\n        scopeWalker.currentNode = contentNode;\n        walkContainer(scopeWalker, contentNode, contentNode, nextSibling(contentNode), vData, qContainerElement.qVNodeRefs, qContainerElement, scopeSegmentId);\n    };\n    const processSuspenseContentSegment = __EXPERIMENTAL__.suspense\n        ? (qContainerElement, contentNode, boundaryId, vData) => {\n            vData ||= qContainerElement?.qSegmentVnodeData?.get(boundaryId);\n            if (qContainerElement && vData) {\n                processVNodeDataScope(qContainerElement, contentNode, vData, boundaryId);\n            }\n        }\n        : null;\n    qDocument.qProcessVNodeDataPatch = (script) => {\n        const qContainerElement = script?.closest('[q\\\\:container]');\n        const patchSegment = script?.getAttribute(Q_SUSPENSE_RESOLVED);\n        const contentNode = qContainerElement &&\n            (patchSegment\n                ? qContainerElement.querySelector(`[q\\\\:rp=\"${patchSegment}\"]`)\n                : qContainerElement);\n        if (qContainerElement && contentNode) {\n            processVNodeDataScope(qContainerElement, contentNode, script.textContent, patchSegment || undefined);\n        }\n    };\n    if (__EXPERIMENTAL__.suspense && segmentId !== undefined) {\n        if (segmentContainer && segmentContent && segmentVNodeData) {\n            segmentContainer.qVNodeRefs ||= new Map();\n            processSuspenseContentSegment(segmentContainer, segmentContent, segmentId, segmentVNodeData);\n        }\n        return;\n    }\n    attachVnodeDataAndRefs(document);\n    // Walk the tree and process each `q:container` element.\n    const walker = document.createTreeWalker(document, 0x1 /* NodeFilter.SHOW_ELEMENT  */ | 0x80 /*  NodeFilter.SHOW_COMMENT */);\n    walkContainer(walker, null, walker.firstChild(), null, '', null, null);\n}\nconst isSeparator = (ch) => \n/* `!` */ VNodeDataSeparator.ADVANCE_1 <= ch && ch <= VNodeDataSeparator.ADVANCE_8192; /* `.` */\n/** Given the `vData` string, `start` index, and `end` index, find the end of the VNodeData section. */\nexport const findVDataSectionEnd = (vData, start, end) => {\n    let depth = 0;\n    while (true) {\n        // look for the end of VNodeData\n        if (start < end) {\n            const ch = vData.charCodeAt(start);\n            if (ch === 92 /* \\ */) {\n                // Backslash escape - skip both the backslash and the next character\n                start += 2;\n            }\n            else if (depth === 0 && isSeparator(ch)) {\n                break;\n            }\n            else {\n                if (ch === VNodeDataChar.OPEN) {\n                    depth++;\n                }\n                else if (ch === VNodeDataChar.CLOSE) {\n                    depth--;\n                }\n                start++;\n            }\n        }\n        else {\n            break;\n        }\n    }\n    return start;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy12bm9kZS1kYXRhLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC9wcm9jZXNzLXZub2RlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkhBQTJIO0FBQzNILE9BQU8sRUFDTCxhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLDRCQUE0QixDQUFDO0FBMERwQyxNQUFNLFVBQVUsaUNBQWlDLENBQy9DLFFBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLFdBQTJCO0lBRTNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBNEIsQ0FBQztJQUM1RixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxhQUFhLENBQzdDLG9DQUFvQyxTQUFTLHFCQUFxQixDQUNuRSxDQUFDO0lBQ0Ysb0JBQW9CLENBQ2xCLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxNQUFNLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FDakMsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLGdCQUFnQixDQUNqRCxvQ0FBb0MsU0FBUyxlQUFlLENBQzdELENBQUM7SUFDRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxRQUFzQixDQUFDLHNCQUFzQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBa0I7SUFDakQsb0JBQW9C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aEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLG9FQUFvRTtnQkFDcEUsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNiLENBQUM7aUJBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksRUFBRSxLQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDOUIsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQztxQkFBTSxJQUFJLEVBQUUsS0FBSyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3RDLEtBQUssRUFBRSxDQUFDO2dCQUNWLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE5PVEU6IHdlIHdhbnQgdG8gbW92ZSB0aGlzIGZ1bmN0aW9uIHRvIHF3aWtsb2FkZXIsIGFuZCB0aGVyZWZvcmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgVk5vZGVEYXRhQ2hhcixcbiAgVk5vZGVEYXRhU2VwYXJhdG9yLFxuICBnZXRTZWdtZW50Vk5vZGVSZWZJZCxcbn0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlLWRhdGEtdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJFbGVtZW50LCBRRG9jdW1lbnQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFZOb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL2VsZW1lbnQtdm5vZGUnO1xuaW1wb3J0IHR5cGUgeyBRRWxlbWVudCB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgVk5vZGVEYXRhIHNjcmlwdCB0YWdzIGFuZCBzdG9yZSB0aGUgVk5vZGVEYXRhIGluIHRoZSBWTm9kZURhdGFNYXAuXG4gKlxuICogVGhlIGVuZCByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGF0IGVhY2ggRE9NIGVsZW1lbnQgaGFzIHRoZSBhc3NvY2lhdGVkIGBWTm9kZURhdGFgIGF0dGFjaGVkXG4gKiB0byBpdCwgdG8gYmUgdXNlZCBsYXRlciBgVk5vZGVgIG1hdGVyaWFsaXphdGlvbi4gVGhlIFwiYXR0YWNobWVudFwiIGlzIGRvbmUgdGhyb3VnaCB0aGVcbiAqIGBWTm9kZURhdGFNYXBgLlxuICpcbiAqIFJ1biB0aGlzIGZ1bmN0aW9uIG9uIHN0YXJ0dXAgdG8gcHJvY2VzcyB0aGUgYDxzY3JpcHQgdHlwZT1cInF3aWsvdm5vZGVcIj5gIHRhZ3MuIFRoZSBkYXRhIGluIHRoZVxuICogdGFncyBuZWVkcyB0byBiZSBwYXJzZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSBET00gZWxlbWVudHMuIChXZSBkbyB0aGlzIHRocm91Z2ggYFZOb2RlRGF0YU1hcGApXG4gKiBgVk5vZGVEYXRhTWFwYCBpcyB0aGVuIHVzZWQgdG8gbGF6aWx5IG1hdGVyaWFsaXplIHRoZSBWTm9kZXMuXG4gKlxuICogT25seSBvbmUgaW52b2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCBwZXIgZG9jdW1lbnQvYnJvd3NlciBzZXNzaW9uLlxuICpcbiAqIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgdGhlIGtpbmRzIG9mIGNvbnN0cnVjdHMgd2hpY2ggbmVlZCB0byBiZSBoYW5kbGVkIHdoZW4gZGVhbGluZyB3aXRoXG4gKiBWTm9kZURhdGEgZGVzZXJpYWxpemF0aW9uLlxuICpcbiAqIGBgYFxuICogPGh0bWwgcTpjb250YWluZXI9XCJwYXVzZWRcIj5cbiAqICAgPGJvZHk+XG4gKiAgICAgPGRpdiBxOmNvbnRhaW5lcj1cInBhdXNlZFwiPlxuICogICAgICAgPHNjcmlwdCB0eXBlPVwicXdpay92bm9kZVwiPi4uLjwvc2NyaXB0PlxuICogICAgIDwvZGl2PlxuICogICAgIDxkaXYgcTpjb250YWluZXI9XCJodG1sXCI+Li4uPC9kaXY+XG4gKiAgICAgYmVmb3JlXG4gKiAgICAgPCEtLXE6Y29udGFpbmVyPUFCQy0tPlxuICogICAgIC4uLlxuICogICAgIDwhLS0vcTpjb250YWluZXItLT5cbiAqICAgICBhZnRlclxuICogICAgIDwhLS1xOmlnbm9yZT1GT08tLT5cbiAqICAgICAuLi5cbiAqICAgICAgICA8IS0tcTpjb250YWluZXItaXNsYW5kPUJBUi0tPlxuICogICAgICAgIDxkaXY+c29tZSBpbnRlcmFjdGl2ZSBpc2xhbmQ8L2Rpdj5cbiAqICAgICAgICA8IS0tL3E6Y29udGFpbmVyLWlzbGFuZC0tPlxuICogICAgIC4uLlxuICogICAgIDwhLS0vcTppZ25vcmUtLT5cbiAqICAgICA8dGV4dGFyZWEgcTpjb250YWluZXI9XCJ0ZXh0XCI+Li4uPC90ZXh0YXJlYT5cbiAqICAgICA8c2NyaXB0IHR5cGU9XCJxd2lrL3Zub2RlXCI+Li4uPC9zY3JpcHQ+XG4gKiAgIDwvYm9keT5cbiAqIDwvaHRtbD5cbiAqIGBgYFxuICpcbiAqIEVhY2ggYHF3aWsvdm5vZGVgIHNjcmlwdCBhc3N1bWVzIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSBudW1iZXJlZCBpbiBkZXB0aCBmaXJzdCBvcmRlci4gRm9yIHRoaXNcbiAqIHJlYXNvbiwgd2hlbmV2ZXIgdGhlIGBwcm9jZXNzVk5vZGVEYXRhYCBjb21lcyBhY3Jvc3MgYSBgcTpjb250YWluZXJgIGl0IG11c3QgaWdub3JlIGl0c1xuICogY2hpbGRyZW4uXG4gKlxuICogSU1QTEVNRU5UQVRJT046XG4gKlxuICogLSBTdGFjayB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGBxOmNvbnRhaW5lcmAgYmVpbmcgcHJvY2Vzc2VkLlxuICogLSBBdHRhY2ggYWxsIGBxd2lrL3Zub2RlYCBzY3JpcHRzIChub3QgdGhlIGRhdGEgY29udGFpbiB3aXRoaW4gdGhlbSkgdG8gdGhlIGBxOmNvbnRhaW5lcmAgZWxlbWVudC5cbiAqIC0gV2FsayB0aGUgdHJlZSBhbmQgcHJvY2VzcyBlYWNoIGBxOmNvbnRhaW5lcmAgZWxlbWVudC5cbiAqL1xudHlwZSBWTm9kZURhdGFTY29wZSA9IERvY3VtZW50IHwgU2hhZG93Um9vdDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NPdXRPZk9yZGVyU2VnbWVudFZOb2RlRGF0YShcbiAgZG9jdW1lbnQ6IERvY3VtZW50LFxuICBzZWdtZW50SWQ6IHN0cmluZyxcbiAgY29udGVudE5vZGU6IEVsZW1lbnQgfCBudWxsXG4pIHtcbiAgaWYgKCFfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlIHx8ICFjb250ZW50Tm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBxQ29udGFpbmVyRWxlbWVudCA9IGNvbnRlbnROb2RlLmNsb3Nlc3QoJ1txXFxcXDpjb250YWluZXJdJykgYXMgQ29udGFpbmVyRWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IHNjcmlwdCA9IHFDb250YWluZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgIGBzY3JpcHRbdHlwZT1cInF3aWsvdm5vZGVcIl1bcVxcXFw6cj1cIiR7c2VnbWVudElkfVwiXTpub3QoW3FcXFxcOnBhdGNoXSlgXG4gICk7XG4gIHByb2Nlc3NWTm9kZURhdGFJbXBsKFxuICAgIGRvY3VtZW50LFxuICAgIHNlZ21lbnRJZCxcbiAgICBxQ29udGFpbmVyRWxlbWVudCxcbiAgICBjb250ZW50Tm9kZSxcbiAgICBzY3JpcHQ/LnRleHRDb250ZW50IHx8IHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBwYXRjaGVzID0gcUNvbnRhaW5lckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgYHNjcmlwdFt0eXBlPVwicXdpay92bm9kZVwiXVtxXFxcXDpyPVwiJHtzZWdtZW50SWR9XCJdW3FcXFxcOnBhdGNoXWBcbiAgKTtcbiAgZm9yIChsZXQgaSA9IDA7IHBhdGNoZXMgJiYgaSA8IHBhdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAoZG9jdW1lbnQgYXMgUURvY3VtZW50KS5xUHJvY2Vzc1ZOb2RlRGF0YVBhdGNoPy4ocGF0Y2hlc1tpXSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NWTm9kZURhdGEoZG9jdW1lbnQ6IERvY3VtZW50KSB7XG4gIHByb2Nlc3NWTm9kZURhdGFJbXBsKGRvY3VtZW50KTtcbiAgKGRvY3VtZW50IGFzIFFEb2N1bWVudCkucVZOb2RlRGF0YVByb2Nlc3NlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NWTm9kZURhdGFJbXBsKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIHNlZ21lbnRJZD86IHN0cmluZyxcbiAgc2VnbWVudENvbnRhaW5lcj86IENvbnRhaW5lckVsZW1lbnQgfCBudWxsLFxuICBzZWdtZW50Q29udGVudD86IEVsZW1lbnQgfCBudWxsLFxuICBzZWdtZW50Vk5vZGVEYXRhPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgUV9DT05UQUlORVIgPSAncTpjb250YWluZXInO1xuICBjb25zdCBRX0NPTlRBSU5FUl9FTkQgPSAnLycgKyBRX0NPTlRBSU5FUjtcbiAgY29uc3QgUV9QUk9QU19TRVBBUkFUT1IgPSAnOic7XG4gIGNvbnN0IFFfU0hBRE9XX1JPT1QgPSAncTpzaGFkb3dyb290JztcbiAgY29uc3QgUV9JR05PUkUgPSAncTppZ25vcmUnO1xuICBjb25zdCBRX0lHTk9SRV9FTkQgPSAnLycgKyBRX0lHTk9SRTtcbiAgY29uc3QgUV9DT05UQUlORVJfSVNMQU5EID0gJ3E6Y29udGFpbmVyLWlzbGFuZCc7XG4gIGNvbnN0IFFfQ09OVEFJTkVSX0lTTEFORF9FTkQgPSAnLycgKyBRX0NPTlRBSU5FUl9JU0xBTkQ7XG4gIGNvbnN0IFFfU1VTUEVOU0VfUkVTT0xWRUQgPSAncTpyJztcbiAgY29uc3QgUV9TVVNQRU5TRV9SRVNVTFRfUEFSRU5UID0gJ3E6cnAnO1xuICBjb25zdCBRX1BBVENIID0gJ3E6cGF0Y2gnO1xuICBjb25zdCBxRG9jdW1lbnQgPSBkb2N1bWVudCBhcyBRRG9jdW1lbnQ7XG4gIGNvbnN0IHZOb2RlRGF0YU1hcCA9IChxRG9jdW1lbnQucVZOb2RlRGF0YSB8fD0gbmV3IFdlYWtNYXA8RWxlbWVudCwgc3RyaW5nPigpKTtcbiAgY29uc3QgcHJvdG90eXBlOiBhbnkgPSBkb2N1bWVudC5ib2R5O1xuICBjb25zdCBnZXR0ZXIgPSAocHJvdG90eXBlOiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGxldCBnZXR0ZXI6IGFueTtcbiAgICB3aGlsZSAocHJvdG90eXBlICYmICEoZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90b3R5cGUsIG5hbWUpPy5nZXQpKSB7XG4gICAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGdldHRlciB8fFxuICAgICAgZnVuY3Rpb24gKHRoaXM6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpc1tuYW1lXTtcbiAgICAgIH1cbiAgICApO1xuICB9O1xuICBjb25zdCBnZXRBdHRyaWJ1dGUgPSBwcm90b3R5cGUuZ2V0QXR0cmlidXRlIGFzICh0aGlzOiBOb2RlLCBuYW1lOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gIGNvbnN0IGhhc0F0dHJpYnV0ZSA9IHByb3RvdHlwZS5oYXNBdHRyaWJ1dGUgYXMgKHRoaXM6IE5vZGUsIG5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgY29uc3QgZ2V0Tm9kZVR5cGUgPSBnZXR0ZXIocHJvdG90eXBlLCAnbm9kZVR5cGUnKSBhcyAodGhpczogTm9kZSkgPT4gbnVtYmVyO1xuXG4gIC8vIFByb2Nlc3MgYWxsIG9mIHRoZSBgcXdpay92bm9kZWAgc2NyaXB0IHRhZ3MgYnkgYXR0YWNoaW5nIHRoZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29udGFpbmVycy5cbiAgY29uc3QgYXR0YWNoVm5vZGVEYXRhQW5kUmVmcyA9IChlbGVtZW50OiBWTm9kZURhdGFTY29wZSkgPT4ge1xuICAgIGNvbnN0IHNjcmlwdHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdFt0eXBlPVwicXdpay92bm9kZVwiXScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gc2NyaXB0c1tpXTtcbiAgICAgIGNvbnN0IHFDb250YWluZXIgPSBzY3JpcHQuY2xvc2VzdCgnW3FcXFxcOmNvbnRhaW5lcl0nKSBhcyBDb250YWluZXJFbGVtZW50O1xuICAgICAgcUNvbnRhaW5lci5xVk5vZGVSZWZzIHx8PSBuZXcgTWFwPG51bWJlciwgRWxlbWVudCB8IEVsZW1lbnRWTm9kZT4oKTtcbiAgICAgIGlmIChzY3JpcHQuaGFzQXR0cmlidXRlKFFfUEFUQ0gpKSB7XG4gICAgICAgIHFEb2N1bWVudC5xUHJvY2Vzc1ZOb2RlRGF0YVBhdGNoPy4oc2NyaXB0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBzY3JpcHQudGV4dENvbnRlbnQhO1xuICAgICAgY29uc3Qgc2VnbWVudCA9IF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UgJiYgc2NyaXB0LmdldEF0dHJpYnV0ZShRX1NVU1BFTlNFX1JFU09MVkVEKTtcbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIChxQ29udGFpbmVyLnFTZWdtZW50Vm5vZGVEYXRhIHx8PSBuZXcgTWFwKCkpLnNldChzZWdtZW50LCBzY3JpcHRDb250ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHFDb250YWluZXIucVZub2RlRGF0YSA9IHNjcmlwdENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcVxcXFw6c2hhZG93cm9vdF0nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYWRvd1Jvb3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBzaGFkb3dSb290c1tpXTtcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBwYXJlbnQuc2hhZG93Um9vdDtcbiAgICAgIHNoYWRvd1Jvb3QgJiYgYXR0YWNoVm5vZGVEYXRhQW5kUmVmcyhzaGFkb3dSb290KTtcbiAgICB9XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBGdW5jdGlvbnMgdG8gY29uc3VtZSB0aGUgdHJlZS5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGNvbnN0IGVudW0gTm9kZVR5cGUge1xuICAgIENPTlRBSU5FUl9NQVNLIC8qICoqKioqKioqKioqKioqKioqICovID0gMGIwMDAwMDAwMSxcbiAgICBFTEVNRU5UIC8qICoqKioqKioqKioqKioqKioqKioqKioqKiAqLyA9IDBiMDAwMDAwMTAsIC8vIHJlZ3VsYXIgZWxlbWVudFxuICAgIEVMRU1FTlRfQ09OVEFJTkVSIC8qICoqKioqKioqKioqKioqICovID0gMGIwMDAwMDAxMSwgLy8gY29udGFpbmVyIGVsZW1lbnQgbmVlZCB0byBkZXNjZW5kIGludG8gaXRcbiAgICBFTEVNRU5UX1NIQURPV19ST09UX1dSQVBQRVIgLyogKioqKiAqLyA9IDBiMDAwMDAxMTAsIC8vIHNoYWRvdyByb290IHdyYXBwZXIgZWxlbWVudCB3aXRoIHE6c2hhZG93cm9vdCBhdHRyaWJ1dGVcbiAgICBFTEVNRU5UX1NVU1BFTlNFX1JFU1VMVF9QQVJFTlQgLyogKiAqLyA9IDBiMTAwMDAwMTAsXG4gICAgQ09NTUVOVF9TS0lQX1NUQVJUIC8qICoqKioqKioqKioqKiogKi8gPSAwYjAwMDAxMDAxLCAvLyBDb21tZW50IGJ1dCBza2lwIHRoZSBjb250ZW50IHVudGlsIENPTU1FTlRfU0tJUF9FTkRcbiAgICBDT01NRU5UX1NLSVBfRU5EIC8qICoqKioqKioqKioqKioqKiAqLyA9IDBiMDAwMDEwMDAsIC8vIENvbW1lbnQgZW5kXG4gICAgQ09NTUVOVF9JR05PUkVfU1RBUlQgLyogKioqKioqKioqKiogKi8gPSAwYjAwMDEwMDAwLCAvLyBDb21tZW50IGlnbm9yZSwgZGVzY2VuZCBpbnRvIGNoaWxkcmVuIGFuZCBza2lwIHRoZSBjb250ZW50IHVudGlsIENPTU1FTlRfSVNMQU5EX1NUQVJUXG4gICAgQ09NTUVOVF9JR05PUkVfRU5EIC8qICoqKioqKioqKioqKiogKi8gPSAwYjAwMTAwMDAwLCAvLyBDb21tZW50IGlnbm9yZSBlbmRcbiAgICBDT01NRU5UX0lTTEFORF9TVEFSVCAvKiAqKioqKioqKioqKiAqLyA9IDBiMDEwMDAwMDEsIC8vIENvbW1lbnQgaXNsYW5kLCBjb3VudCBlbGVtZW50cyBmb3IgcGFyZW50IGNvbnRhaW5lciB1bnRpbCBDT01NRU5UX0lTTEFORF9FTkRcbiAgICBDT01NRU5UX0lTTEFORF9FTkQgLyogKioqKioqKioqKioqKiAqLyA9IDBiMDEwMDAwMDAsIC8vIENvbW1lbnQgaXNsYW5kIGVuZFxuICAgIE9USEVSIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqICovID0gMGIwMDAwMDAwMCxcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCB3aGljaCB0eXBlIG9mIG5vZGUgdGhpcyBpcyBpbiBhIG1vbm9tb3JwaGljIHdheSB3aGljaCBzaG91bGQgYmUgZmFzdGVyLlxuICAgKlxuICAgKiBTZWU6IGh0dHBzOi8vbWhldmVyeS5naXRodWIuaW8vcGVyZi10ZXN0cy9ET00tbWVnYW1vcnBoaWMuaHRtbFxuICAgKi9cbiAgY29uc3QgZ2V0RmFzdE5vZGVUeXBlID0gKG5vZGU6IE5vZGUpOiBOb2RlVHlwZSA9PiB7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBnZXROb2RlVHlwZS5jYWxsKG5vZGUpO1xuICAgIGlmIChub2RlVHlwZSA9PT0gMSAvKiBOb2RlLkVMRU1FTlRfTk9ERSAqLykge1xuICAgICAgaWYgKGdldEF0dHJpYnV0ZS5jYWxsKG5vZGUsIFFfQ09OVEFJTkVSKSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTm9kZVR5cGUuRUxFTUVOVF9DT05UQUlORVI7XG4gICAgICB9XG4gICAgICBpZiAoaGFzQXR0cmlidXRlLmNhbGwobm9kZSwgUV9TSEFET1dfUk9PVCkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkVMRU1FTlRfU0hBRE9XX1JPT1RfV1JBUFBFUjtcbiAgICAgIH1cbiAgICAgIGlmIChfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmIGdldEF0dHJpYnV0ZS5jYWxsKG5vZGUsIFFfU1VTUEVOU0VfUkVTVUxUX1BBUkVOVCkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkVMRU1FTlRfU1VTUEVOU0VfUkVTVUxUX1BBUkVOVDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNBdHRyaWJ1dGUuY2FsbChub2RlLCBRX1BST1BTX1NFUEFSQVRPUikgPyBOb2RlVHlwZS5FTEVNRU5UIDogTm9kZVR5cGUuT1RIRVI7XG4gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gOCAvKiBOb2RlLkNPTU1FTlRfTk9ERSAqLykge1xuICAgICAgY29uc3Qgbm9kZVZhbHVlID0gbm9kZS5ub2RlVmFsdWUgfHwgJyc7IC8vIG5vZGVWYWx1ZSBpcyBtb25vbW9ycGhpYyBzbyBpdCBkb2VzIG5vdCBuZWVkIGZhc3QgcGF0aFxuICAgICAgaWYgKG5vZGVWYWx1ZS5zdGFydHNXaXRoKFFfQ09OVEFJTkVSX0lTTEFORCkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX1NUQVJUO1xuICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWUuc3RhcnRzV2l0aChRX0lHTk9SRSkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfSUdOT1JFX1NUQVJUO1xuICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWUuc3RhcnRzV2l0aChRX0NPTlRBSU5FUikpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfU0tJUF9TVEFSVDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVZhbHVlLnN0YXJ0c1dpdGgoUV9DT05UQUlORVJfSVNMQU5EX0VORCkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX0VORDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVZhbHVlLnN0YXJ0c1dpdGgoUV9JR05PUkVfRU5EKSkge1xuICAgICAgICByZXR1cm4gTm9kZVR5cGUuQ09NTUVOVF9JR05PUkVfRU5EO1xuICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWUuc3RhcnRzV2l0aChRX0NPTlRBSU5FUl9FTkQpKSB7XG4gICAgICAgIHJldHVybiBOb2RlVHlwZS5DT01NRU5UX1NLSVBfRU5EO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gTm9kZVR5cGUuT1RIRVI7XG4gIH07XG5cbiAgY29uc3QgbmV4dFNpYmxpbmcgPSAobm9kZTogTm9kZSB8IG51bGwpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB3aGlsZSAobm9kZSAmJiAobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpICYmIGdldEZhc3ROb2RlVHlwZShub2RlKSA9PT0gTm9kZVR5cGUuT1RIRVIpIHt9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGNvbnRhaW5lclxuICAgKlxuICAgKiBAcGFyYW0gd2Fsa2VyIFRyZWVXYWxrZXJcbiAgICogQHBhcmFtIGNvbnRhaW5lck5vZGUgVGhlIHJvb3Qgb2YgY29udGFpbmVyIGVsZW1lbnRcbiAgICogQHBhcmFtIGV4aXROb2RlIFRoZSBub2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxhc3Qgbm9kZSBhbmQgd2Ugc2hvdWxkIGV4aXQuXG4gICAqIEBwYXJhbSBxVk5vZGVSZWZzIFBsYWNlIHRvIHN0b3JlIHRoZSBWTm9kZVJlZnNcbiAgICovXG4gIGNvbnN0IHdhbGtDb250YWluZXIgPSAoXG4gICAgd2Fsa2VyOiBUcmVlV2Fsa2VyLFxuICAgIGNvbnRhaW5lck5vZGU6IE5vZGUgfCBudWxsLFxuICAgIG5vZGU6IE5vZGUgfCBudWxsLFxuICAgIGV4aXROb2RlOiBOb2RlIHwgbnVsbCxcbiAgICB2RGF0YTogc3RyaW5nLFxuICAgIHFWTm9kZVJlZnM6IE1hcDxudW1iZXIsIEVsZW1lbnQgfCBFbGVtZW50Vk5vZGU+LFxuICAgIHFDb250YWluZXJFbGVtZW50OiBDb250YWluZXJFbGVtZW50IHwgbnVsbCxcbiAgICBzZWdtZW50SWQ/OiBzdHJpbmdcbiAgKSA9PiB7XG4gICAgY29uc3QgaXNTZWdtZW50ID0gX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSAmJiBzZWdtZW50SWQgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCB2RGF0YV9sZW5ndGggPSB2RGF0YS5sZW5ndGg7XG4gICAgLy8vIFN0b3JlcyB0aGUgY3VycmVudCBlbGVtZW50IGluZGV4IGFzIHRoZSBUcmVlV2Fsa2VyIHRyYXZlcnNlcyB0aGUgRE9NLlxuICAgIGxldCBlbGVtZW50SWR4ID0gMDtcbiAgICAvLy8gU3RvcmVzIHRoZSBjdXJyZW50IFZOb2RlIGluZGV4IGFzIGRlcml2ZWQgZnJvbSB0aGUgVk5vZGVEYXRhIHNjcmlwdCB0YWcuXG4gICAgbGV0IHZOb2RlRWxlbWVudEluZGV4ID0gLTE7XG4gICAgbGV0IHZEYXRhX3N0YXJ0ID0gMDtcbiAgICBsZXQgdkRhdGFfZW5kID0gMDtcbiAgICBsZXQgY2ggPSAwO1xuICAgIGxldCBuZWVkc1RvU3RvcmVSZWYgPSAtMTtcbiAgICBsZXQgbmV4dE5vZGU6IE5vZGUgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBDb21wdXRlcyBudW1iZXIgb2YgZWxlbWVudHMgd2hpY2ggbmVlZCB0byBiZSBza2lwcGVkIHRvIGdldCB0byB0aGUgbmV4dCBWTm9kZURhdGEgc2VjdGlvbi4gKi9cbiAgICBjb25zdCBob3dNYW55RWxlbWVudHNUb1NraXAgPSAoKSA9PiB7XG4gICAgICBsZXQgZWxlbWVudHNUb1NraXAgPSAwO1xuICAgICAgd2hpbGUgKGlzU2VwYXJhdG9yKChjaCA9IHZEYXRhLmNoYXJDb2RlQXQodkRhdGFfc3RhcnQpKSkpIHtcbiAgICAgICAgLy8gS2VlcCBjb25zdW1pbmcgdGhlIHNlcGFyYXRvcnMgYW5kIGluY3JlbWVudGluZyB0aGUgdk5vZGVJbmRleFxuICAgICAgICBlbGVtZW50c1RvU2tpcCArPSAxIDw8IChjaCAtIFZOb2RlRGF0YVNlcGFyYXRvci5BRFZBTkNFXzEpO1xuICAgICAgICB2RGF0YV9zdGFydCsrO1xuICAgICAgICBpZiAodkRhdGFfc3RhcnQgPj0gdkRhdGFfbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB2Tm9kZURhdGEgc3RvcC5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzVG9Ta2lwO1xuICAgIH07XG5cbiAgICBkbyB7XG4gICAgICBpZiAobm9kZSA9PT0gZXhpdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmV4dE5vZGUgPSBudWxsO1xuICAgICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlID09IGNvbnRhaW5lck5vZGUgPyBOb2RlVHlwZS5FTEVNRU5UIDogZ2V0RmFzdE5vZGVUeXBlKG5vZGUhKTtcbiAgICAgIGlmIChub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9DT05UQUlORVIpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIGEgY29udGFpbmVyLCB3ZSBuZWVkIHRvIHNraXAgdGhlIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBub2RlIGFzIENvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJzb3IgPSBub2RlO1xuICAgICAgICB3aGlsZSAoY3Vyc29yICYmICEobmV4dE5vZGUgPSBuZXh0U2libGluZyhjdXJzb3IpKSkge1xuICAgICAgICAgIGN1cnNvciA9IGN1cnNvciEucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICB3YWxrQ29udGFpbmVyKFxuICAgICAgICAgIHdhbGtlcixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBuZXh0Tm9kZSxcbiAgICAgICAgICBjb250YWluZXIucVZub2RlRGF0YSB8fCAnJyxcbiAgICAgICAgICBjb250YWluZXIucVZOb2RlUmVmcyEsXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVUeXBlID09PSBOb2RlVHlwZS5DT01NRU5UX0lHTk9SRV9TVEFSVCkge1xuICAgICAgICBsZXQgaXNsYW5kTm9kZSA9IG5vZGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpc2xhbmROb2RlID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgaWYgKCFpc2xhbmROb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElzbGFuZCBpbnNpZGUgPCEtLSR7bm9kZT8ubm9kZVZhbHVlfS0tPiBub3QgZm91bmQhYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChnZXRGYXN0Tm9kZVR5cGUoaXNsYW5kTm9kZSkgIT09IE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX1NUQVJUKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09IE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX0VORCkge1xuICAgICAgICAvLyBXYWxrIGZvcndhcmQgdG8gZmluZCBlaXRoZXIgdGhlIG5leHQgY29udGFpbmVyLWlzbGFuZCBvciB0aGUgZW5kIG9mIHRoZSBxOmlnbm9yZSBibG9jay5cbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIG11bHRpcGxlIGlzbGFuZHMgd2l0aGluIGEgc2luZ2xlIHE6aWdub3JlIGJsb2NrLlxuICAgICAgICBuZXh0Tm9kZSA9IG5vZGU7XG4gICAgICAgIGxldCBuZXh0Tm9kZVR5cGU6IE5vZGVUeXBlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbmV4dE5vZGUgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElnbm9yZSBibG9jayBub3QgY2xvc2VkIWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0Tm9kZVR5cGUgPSBnZXRGYXN0Tm9kZVR5cGUobmV4dE5vZGUpO1xuICAgICAgICB9IHdoaWxlIChcbiAgICAgICAgICBuZXh0Tm9kZVR5cGUgIT09IE5vZGVUeXBlLkNPTU1FTlRfSUdOT1JFX0VORCAmJlxuICAgICAgICAgIG5leHROb2RlVHlwZSAhPT0gTm9kZVR5cGUuQ09NTUVOVF9JU0xBTkRfU1RBUlRcbiAgICAgICAgKTtcbiAgICAgICAgbmV4dE5vZGUgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gTm9kZVR5cGUuQ09NTUVOVF9TS0lQX1NUQVJUKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBpbiBhIGNvbnRhaW5lciwgd2UgbmVlZCB0byBza2lwIHRoZSBjaGlsZHJlbi5cbiAgICAgICAgbmV4dE5vZGUgPSBub2RlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhuZXh0Tm9kZSk7XG4gICAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGA8IS0tJHtub2RlPy5ub2RlVmFsdWV9LS0+IG5vdCBjbG9zZWQhYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChnZXRGYXN0Tm9kZVR5cGUobmV4dE5vZGUpICE9PSBOb2RlVHlwZS5DT01NRU5UX1NLSVBfRU5EKTtcbiAgICAgICAgd2Fsa0NvbnRhaW5lcih3YWxrZXIsIG5vZGUsIG5vZGUsIG5leHROb2RlLCAnJywgbnVsbCEsIHFDb250YWluZXJFbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09IE5vZGVUeXBlLkVMRU1FTlRfU0hBRE9XX1JPT1RfV1JBUFBFUikge1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gYSBzaGFkb3cgcm9vdCwgd2UgbmVlZCB0byBnZXQgdGhlIHNoYWRvdyByb290IGVsZW1lbnQuXG4gICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RDb250YWluZXIgPSBub2RlIGFzIEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gc2hhZG93Um9vdENvbnRhaW5lcj8uc2hhZG93Um9vdDtcbiAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICB3YWxrQ29udGFpbmVyKFxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgd2Fsa2VyIGZvciB0aGUgc2hhZG93IHJvb3RcbiAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgICAgIHNoYWRvd1Jvb3QsXG4gICAgICAgICAgICAgIDB4MSAvKiBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCAgKi8gfCAweDgwIC8qICBOb2RlRmlsdGVyLlNIT1dfQ09NTUVOVCAqL1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBzaGFkb3dSb290LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgbnVsbCEsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKG5vZGVUeXBlICYgTm9kZVR5cGUuRUxFTUVOVCkgPT09IE5vZGVUeXBlLkVMRU1FTlQpIHtcbiAgICAgICAgaWYgKGlzU2VnbWVudCAmJiBub2RlICE9PSBjb250YWluZXJOb2RlKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IG5vZGUgYXMgUUVsZW1lbnQ7XG4gICAgICAgICAgZWxlbWVudC5fcVNlZ21lbnQgPSBzZWdtZW50SWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZOb2RlRWxlbWVudEluZGV4IDwgZWxlbWVudElkeCkge1xuICAgICAgICAgIC8vIFZOb2RlRGF0YSBuZWVkcyB0byBjYXRjaCB1cCB3aXRoIHRoZSBlbGVtZW50SWR4XG4gICAgICAgICAgaWYgKHZOb2RlRWxlbWVudEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdk5vZGVFbGVtZW50SW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2RGF0YV9zdGFydCA9IHZEYXRhX2VuZDtcbiAgICAgICAgICBpZiAodkRhdGFfc3RhcnQgPCB2RGF0YV9sZW5ndGgpIHtcbiAgICAgICAgICAgIHZOb2RlRWxlbWVudEluZGV4ICs9IGhvd01hbnlFbGVtZW50c1RvU2tpcCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSBWTm9kZURhdGFTZXBhcmF0b3IuUkVGRVJFTkNFKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHJlZiBoYW5kbGUgaXQgaGVyZS5cbiAgICAgICAgICAgICAgbmVlZHNUb1N0b3JlUmVmID0gdk5vZGVFbGVtZW50SW5kZXg7XG4gICAgICAgICAgICAgIHZEYXRhX3N0YXJ0Kys7XG4gICAgICAgICAgICAgIGlmICh2RGF0YV9zdGFydCA8IHZEYXRhX2xlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gdkRhdGEuY2hhckNvZGVBdCh2RGF0YV9lbmQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBzZXBhcmF0b3Igb24gZW5kLlxuICAgICAgICAgICAgICAgIGNoID0gVk5vZGVEYXRhU2VwYXJhdG9yLkFEVkFOQ0VfMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdkRhdGFfZW5kID0gZmluZFZEYXRhU2VjdGlvbkVuZCh2RGF0YSwgdkRhdGFfc3RhcnQsIHZEYXRhX2xlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZOb2RlRWxlbWVudEluZGV4ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRCb3VuZGFyeUlkID1cbiAgICAgICAgICBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlICYmXG4gICAgICAgICAgIWlzU2VnbWVudCAmJlxuICAgICAgICAgIG5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX1NVU1BFTlNFX1JFU1VMVF9QQVJFTlRcbiAgICAgICAgICAgID8gZ2V0QXR0cmlidXRlLmNhbGwobm9kZSEsIFFfU1VTUEVOU0VfUkVTVUxUX1BBUkVOVCkhXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChlbGVtZW50SWR4ID09PSB2Tm9kZUVsZW1lbnRJbmRleCkge1xuICAgICAgICAgIGlmIChuZWVkc1RvU3RvcmVSZWYgPT09IGVsZW1lbnRJZHggJiYgIShpc1NlZ21lbnQgJiYgbm9kZSA9PT0gY29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgIHFWTm9kZVJlZnMuc2V0KFxuICAgICAgICAgICAgICBpc1NlZ21lbnQgPyBnZXRTZWdtZW50Vk5vZGVSZWZJZChzZWdtZW50SWQsIGVsZW1lbnRJZHgpIDogZWxlbWVudElkeCxcbiAgICAgICAgICAgICAgbm9kZSBhcyBFbGVtZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYXRhID0gdkRhdGEuc3Vic3RyaW5nKHZEYXRhX3N0YXJ0LCB2RGF0YV9lbmQpO1xuICAgICAgICAgIGlmIChpc1NlZ21lbnQgJiYgbm9kZSA9PT0gY29udGFpbmVyTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB2Tm9kZURhdGFNYXAuZ2V0KG5vZGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCB8fCBleGlzdGluZyA9PT0gJycpIHtcbiAgICAgICAgICAgICAgdk5vZGVEYXRhTWFwLnNldChub2RlIGFzIEVsZW1lbnQsIGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgZXhpc3RpbmcuY2hhckNvZGVBdCgwKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVBBUkFUT1IgJiZcbiAgICAgICAgICAgICAgZXhpc3RpbmcuY2hhckNvZGVBdCgxKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVBBUkFUT1IgJiZcbiAgICAgICAgICAgICAgIWV4aXN0aW5nLmVuZHNXaXRoKGRhdGEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdk5vZGVEYXRhTWFwLnNldChub2RlIGFzIEVsZW1lbnQsIGV4aXN0aW5nICsgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZOb2RlRGF0YU1hcC5zZXQobm9kZSBhcyBFbGVtZW50LCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudElkeCsrO1xuICAgICAgICBpZiAoX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSAmJiBjb250ZW50Qm91bmRhcnlJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHByb2Nlc3NTdXNwZW5zZUNvbnRlbnRTZWdtZW50IShxQ29udGFpbmVyRWxlbWVudCwgbm9kZSBhcyBFbGVtZW50LCBjb250ZW50Qm91bmRhcnlJZCk7XG4gICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKChub2RlID0gbmV4dE5vZGUgfHwgd2Fsa2VyLm5leHROb2RlKCkpKTtcbiAgfTtcblxuICBjb25zdCBwcm9jZXNzVk5vZGVEYXRhU2NvcGUgPSAoXG4gICAgcUNvbnRhaW5lckVsZW1lbnQ6IENvbnRhaW5lckVsZW1lbnQsXG4gICAgY29udGVudE5vZGU6IEVsZW1lbnQsXG4gICAgdkRhdGE6IHN0cmluZyxcbiAgICBzY29wZVNlZ21lbnRJZD86IHN0cmluZ1xuICApID0+IHtcbiAgICBxQ29udGFpbmVyRWxlbWVudC5xVk5vZGVSZWZzIHx8PSBuZXcgTWFwPG51bWJlciwgRWxlbWVudCB8IEVsZW1lbnRWTm9kZT4oKTtcbiAgICBjb25zdCBzY29wZVdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICBkb2N1bWVudCxcbiAgICAgIDB4MSAvKiBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCAgKi8gfCAweDgwIC8qICBOb2RlRmlsdGVyLlNIT1dfQ09NTUVOVCAqL1xuICAgICk7XG4gICAgc2NvcGVXYWxrZXIuY3VycmVudE5vZGUgPSBjb250ZW50Tm9kZTtcbiAgICB3YWxrQ29udGFpbmVyKFxuICAgICAgc2NvcGVXYWxrZXIsXG4gICAgICBjb250ZW50Tm9kZSxcbiAgICAgIGNvbnRlbnROb2RlLFxuICAgICAgbmV4dFNpYmxpbmcoY29udGVudE5vZGUpLFxuICAgICAgdkRhdGEsXG4gICAgICBxQ29udGFpbmVyRWxlbWVudC5xVk5vZGVSZWZzISxcbiAgICAgIHFDb250YWluZXJFbGVtZW50LFxuICAgICAgc2NvcGVTZWdtZW50SWRcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHByb2Nlc3NTdXNwZW5zZUNvbnRlbnRTZWdtZW50ID0gX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZVxuICAgID8gKFxuICAgICAgICBxQ29udGFpbmVyRWxlbWVudDogQ29udGFpbmVyRWxlbWVudCB8IG51bGwsXG4gICAgICAgIGNvbnRlbnROb2RlOiBFbGVtZW50LFxuICAgICAgICBib3VuZGFyeUlkOiBzdHJpbmcsXG4gICAgICAgIHZEYXRhPzogc3RyaW5nXG4gICAgICApID0+IHtcbiAgICAgICAgdkRhdGEgfHw9IHFDb250YWluZXJFbGVtZW50Py5xU2VnbWVudFZub2RlRGF0YT8uZ2V0KGJvdW5kYXJ5SWQpO1xuICAgICAgICBpZiAocUNvbnRhaW5lckVsZW1lbnQgJiYgdkRhdGEpIHtcbiAgICAgICAgICBwcm9jZXNzVk5vZGVEYXRhU2NvcGUocUNvbnRhaW5lckVsZW1lbnQsIGNvbnRlbnROb2RlLCB2RGF0YSwgYm91bmRhcnlJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcURvY3VtZW50LnFQcm9jZXNzVk5vZGVEYXRhUGF0Y2ggPSAoc2NyaXB0OiBFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHFDb250YWluZXJFbGVtZW50ID0gc2NyaXB0Py5jbG9zZXN0KCdbcVxcXFw6Y29udGFpbmVyXScpIGFzIENvbnRhaW5lckVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IHBhdGNoU2VnbWVudCA9IHNjcmlwdD8uZ2V0QXR0cmlidXRlKFFfU1VTUEVOU0VfUkVTT0xWRUQpO1xuICAgIGNvbnN0IGNvbnRlbnROb2RlID1cbiAgICAgIHFDb250YWluZXJFbGVtZW50ICYmXG4gICAgICAocGF0Y2hTZWdtZW50XG4gICAgICAgID8gKHFDb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFtxXFxcXDpycD1cIiR7cGF0Y2hTZWdtZW50fVwiXWApIGFzIEVsZW1lbnQgfCBudWxsKVxuICAgICAgICA6IHFDb250YWluZXJFbGVtZW50KTtcbiAgICBpZiAocUNvbnRhaW5lckVsZW1lbnQgJiYgY29udGVudE5vZGUpIHtcbiAgICAgIHByb2Nlc3NWTm9kZURhdGFTY29wZShcbiAgICAgICAgcUNvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIGNvbnRlbnROb2RlLFxuICAgICAgICBzY3JpcHQhLnRleHRDb250ZW50ISxcbiAgICAgICAgcGF0Y2hTZWdtZW50IHx8IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UgJiYgc2VnbWVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc2VnbWVudENvbnRhaW5lciAmJiBzZWdtZW50Q29udGVudCAmJiBzZWdtZW50Vk5vZGVEYXRhKSB7XG4gICAgICBzZWdtZW50Q29udGFpbmVyLnFWTm9kZVJlZnMgfHw9IG5ldyBNYXA8bnVtYmVyLCBFbGVtZW50IHwgRWxlbWVudFZOb2RlPigpO1xuICAgICAgcHJvY2Vzc1N1c3BlbnNlQ29udGVudFNlZ21lbnQhKHNlZ21lbnRDb250YWluZXIsIHNlZ21lbnRDb250ZW50LCBzZWdtZW50SWQsIHNlZ21lbnRWTm9kZURhdGEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBhdHRhY2hWbm9kZURhdGFBbmRSZWZzKGRvY3VtZW50KTtcblxuICAvLyBXYWxrIHRoZSB0cmVlIGFuZCBwcm9jZXNzIGVhY2ggYHE6Y29udGFpbmVyYCBlbGVtZW50LlxuICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgIGRvY3VtZW50LFxuICAgIDB4MSAvKiBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCAgKi8gfCAweDgwIC8qICBOb2RlRmlsdGVyLlNIT1dfQ09NTUVOVCAqL1xuICApO1xuXG4gIHdhbGtDb250YWluZXIod2Fsa2VyLCBudWxsLCB3YWxrZXIuZmlyc3RDaGlsZCgpLCBudWxsLCAnJywgbnVsbCEsIG51bGwpO1xufVxuXG5jb25zdCBpc1NlcGFyYXRvciA9IChjaDogbnVtYmVyKSA9PlxuICAvKiBgIWAgKi8gVk5vZGVEYXRhU2VwYXJhdG9yLkFEVkFOQ0VfMSA8PSBjaCAmJiBjaCA8PSBWTm9kZURhdGFTZXBhcmF0b3IuQURWQU5DRV84MTkyOyAvKiBgLmAgKi9cblxuLyoqIEdpdmVuIHRoZSBgdkRhdGFgIHN0cmluZywgYHN0YXJ0YCBpbmRleCwgYW5kIGBlbmRgIGluZGV4LCBmaW5kIHRoZSBlbmQgb2YgdGhlIFZOb2RlRGF0YSBzZWN0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRWRGF0YVNlY3Rpb25FbmQgPSAodkRhdGE6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBsZXQgZGVwdGggPSAwO1xuICB3aGlsZSAodHJ1ZSBhcyBib29sZWFuKSB7XG4gICAgLy8gbG9vayBmb3IgdGhlIGVuZCBvZiBWTm9kZURhdGFcbiAgICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICAgIGNvbnN0IGNoID0gdkRhdGEuY2hhckNvZGVBdChzdGFydCk7XG4gICAgICBpZiAoY2ggPT09IDkyIC8qIFxcICovKSB7XG4gICAgICAgIC8vIEJhY2tzbGFzaCBlc2NhcGUgLSBza2lwIGJvdGggdGhlIGJhY2tzbGFzaCBhbmQgdGhlIG5leHQgY2hhcmFjdGVyXG4gICAgICAgIHN0YXJ0ICs9IDI7XG4gICAgICB9IGVsc2UgaWYgKGRlcHRoID09PSAwICYmIGlzU2VwYXJhdG9yKGNoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjaCA9PT0gVk5vZGVEYXRhQ2hhci5PUEVOKSB7XG4gICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gVk5vZGVEYXRhQ2hhci5DTE9TRSkge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGFydDtcbn07XG4iXX0=","/** @file Public APIs for the SSR */\nimport { isDev } from '@qwik.dev/core/build';\nimport { assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { ERROR_CONTEXT, isRecoverable } from '../shared/error/error-handling';\nimport { wrapDeserializerProxy } from '../shared/serdes/deser-proxy';\nimport { getObjectById, parseQRL, preprocessState } from '../shared/serdes/index';\nimport { _SharedContainer } from '../shared/shared-container';\nimport { EMPTY_ARRAY } from '../shared/utils/flyweight';\nimport { ELEMENT_PROPS, ELEMENT_SEQ, ELEMENT_SEQ_IDX, OnRenderProp, QBackRefs, QBaseAttr, QContainerAttr, QContainerSelector, QCursorBoundary, QCtxAttr, QInstanceAttr, QLocaleAttr, QManifestHashAttr, QScopedStyle, QStatePatchAttrSelector, QStyle, QStyleSelector, QStylesAllSelector, Q_PROPS_SEPARATOR, USE_ON_LOCAL_SEQ_IDX, getQFuncs, } from '../shared/utils/markers';\nimport { isSlotProp } from '../shared/utils/prop';\nimport { qDev, qTest } from '../shared/utils/qdev';\nimport { convertScopedStyleIdsToArray, convertStyleIdsToString, } from '../shared/utils/scoped-styles';\nimport { setErrorPayload } from '../shared/cursor/chore-execution';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { processSegmentStateScripts } from './process-segment-state';\nimport { processOutOfOrderSegmentVNodeData, processVNodeData } from './process-vnode-data';\nimport { mapArray_get, mapArray_has, mapArray_set } from './util-mapArray';\nimport { vnode_getProp, vnode_isVirtualVNode, vnode_locate, vnode_newUnMaterializedElement, vnode_setProp, } from './vnode-utils';\n/** @public */\nexport function getDomContainer(element) {\n    const qContainerElement = _getQContainerElement(element);\n    if (!qContainerElement) {\n        throw qError(24 /* QError.containerNotFound */);\n    }\n    return getDomContainerFromQContainerElement(qContainerElement);\n}\nexport function getDomContainerFromQContainerElement(qContainerElement) {\n    const qElement = qContainerElement;\n    return (qElement.qContainer ||= new DomContainer(qElement));\n}\n/** @internal */\nexport function _getQContainerElement(element) {\n    return element.closest(QContainerSelector);\n}\nexport const isDomContainer = (container) => {\n    return container instanceof DomContainer;\n};\nfunction getOutOfOrderStreamingScript(boundaryId, content) {\n    const segmentId = String(boundaryId);\n    const qContainerElement = content?.closest(QContainerSelector);\n    const qContainer = qContainerElement?.qContainer;\n    if (qContainer) {\n        processOutOfOrderSegmentVNodeData(qContainer.element.ownerDocument, segmentId, content);\n        processSegmentStateScripts(qContainer, segmentId);\n    }\n}\n/** @internal */\nexport class DomContainer extends _SharedContainer {\n    element;\n    qContainer;\n    qManifestHash;\n    rootVNode;\n    document;\n    $storeProxyMap$ = new WeakMap();\n    $qFuncs$;\n    $instanceHash$;\n    $forwardRefs$ = null;\n    vNodeLocate = (id) => vnode_locate(this.rootVNode, id);\n    $rawStateData$;\n    $stateData$;\n    $rootForwardRefs$ = null;\n    $styleIds$ = null;\n    constructor(element) {\n        super({}, element.getAttribute(QLocaleAttr));\n        this.qContainer = element.getAttribute(QContainerAttr);\n        if (!this.qContainer) {\n            throw qError(25 /* QError.elementWithoutContainer */);\n        }\n        this.document = element.ownerDocument;\n        this.element = element;\n        this.$buildBase$ = element.getAttribute(QBaseAttr);\n        this.$instanceHash$ = element.getAttribute(QInstanceAttr);\n        this.qManifestHash = element.getAttribute(QManifestHashAttr);\n        this.rootVNode = vnode_newUnMaterializedElement(this.element);\n        this.$rawStateData$ = [];\n        this.$stateData$ = [];\n        const document = this.element.ownerDocument;\n        if (!document.qVNodeDataProcessed) {\n            processVNodeData(document);\n        }\n        if (__EXPERIMENTAL__.suspense && document.querySelector('template[q\\\\:r]')) {\n            document.qProcessOOOS ||= getOutOfOrderStreamingScript;\n        }\n        this.$qFuncs$ = getQFuncs(document, this.$instanceHash$) || EMPTY_ARRAY;\n        this.$setServerData$();\n        element.setAttribute(QContainerAttr, \"resumed\" /* QContainerValue.RESUMED */);\n        element.qContainer = this;\n        element.qDestroy = () => this.$destroy$();\n        this.$processRootStateScript$();\n        if (__EXPERIMENTAL__.suspense) {\n            processSegmentStateScripts(this);\n        }\n        this.$hoistStyles$();\n        if (!qTest && element.isConnected) {\n            element.dispatchEvent(new CustomEvent('qresume', { bubbles: true }));\n        }\n    }\n    /** Tear down this container so stale references fail gracefully. */\n    $destroy$() {\n        this.vNodeLocate = () => null;\n        this.$rawStateData$.length = 0;\n        this.$stateData$.length = 0;\n        this.$getObjectById$ = () => undefined;\n        const el = this.element;\n        el.qContainer = undefined;\n        el.qVnodeData = undefined;\n        el.qVNodeRefs = undefined;\n        if (__EXPERIMENTAL__.suspense) {\n            el.qSegmentVnodeData = undefined;\n        }\n        el.removeAttribute(QContainerAttr);\n        const document = el.ownerDocument;\n        const hasContainers = document.querySelector(QContainerSelector) !== null;\n        if (!hasContainers) {\n            document.qVNodeData = undefined;\n            document.qVNodeDataProcessed = undefined;\n            document.qProcessVNodeDataPatch = undefined;\n        }\n        if (__EXPERIMENTAL__.suspense) {\n            if (!hasContainers) {\n                document.qProcessOOOS = undefined;\n            }\n        }\n    }\n    $processRootStateScript$() {\n        const rootState = this.element.querySelector(`${this.$stateScriptSelector$()}:not(${QStatePatchAttrSelector})`);\n        if (rootState) {\n            this.$rawStateData$ = JSON.parse(rootState.textContent);\n            preprocessState(this.$rawStateData$, this);\n            this.$rootForwardRefs$ = this.$forwardRefs$;\n            this.$stateData$ = wrapDeserializerProxy(this, this.$rawStateData$);\n        }\n    }\n    $stateScriptSelector$() {\n        return `script[type=\"qwik/state\"][q\\\\:instance=\"${this.$instanceHash$}\"]`;\n    }\n    /**\n     * The first time we render we need to hoist the styles. (Meaning we need to move all styles from\n     * component inline to <head>)\n     *\n     * We bulk move all of the styles, because the expensive part is for the browser to recompute the\n     * styles, (not the actual DOM manipulation.) By moving all of them at once we can minimize the\n     * reflow.\n     */\n    $hoistStyles$() {\n        const document = this.element.ownerDocument;\n        const head = document.head;\n        const styles = document.body.querySelectorAll(QStylesAllSelector);\n        const styleTagCount = styles.length;\n        if (styleTagCount) {\n            const fragment = document.createDocumentFragment();\n            for (let i = 0; i < styleTagCount; i++) {\n                fragment.appendChild(styles[i]);\n            }\n            head.appendChild(fragment);\n        }\n    }\n    $setRawState$(id, vParent) {\n        this.$stateData$[id] = vParent;\n    }\n    parseQRL(qrlStr) {\n        const qrl = parseQRL(qrlStr, this);\n        return qrl;\n    }\n    handleError(err, host) {\n        if (qDev && host) {\n            if (typeof document !== 'undefined') {\n                setErrorPayload(host, err);\n                markVNodeDirty(this, host, 512 /* ChoreBits.ERROR_WRAP */);\n            }\n            if (err && err instanceof Error) {\n                if (!('hostElement' in err)) {\n                    err['hostElement'] = String(host);\n                }\n            }\n            if (!isRecoverable(err)) {\n                throw err;\n            }\n        }\n        const errorStore = host && this.resolveContext(host, ERROR_CONTEXT);\n        if (!errorStore) {\n            throw err;\n        }\n        errorStore.error = err;\n    }\n    setContext(host, context, value) {\n        let ctx = this.getHostProp(host, QCtxAttr);\n        if (ctx == null) {\n            this.setHostProp(host, QCtxAttr, (ctx = []));\n        }\n        mapArray_set(ctx, context.id, value, 0, true);\n    }\n    resolveContext(host, contextId) {\n        while (host) {\n            const ctx = this.getHostProp(host, QCtxAttr);\n            if (ctx != null && mapArray_has(ctx, contextId.id, 0)) {\n                return mapArray_get(ctx, contextId.id, 0);\n            }\n            host = this.getParentHost(host);\n        }\n        return undefined;\n    }\n    getParentHost(host) {\n        let vNode = host.parent;\n        while (vNode) {\n            if (vnode_isVirtualVNode(vNode)) {\n                if (vnode_getProp(vNode, OnRenderProp, null) !== null) {\n                    return vNode;\n                }\n                vNode =\n                    vNode.parent ||\n                        // If virtual node, than it could be a slot so we need to read its parent.\n                        vNode.slotParent;\n            }\n            else {\n                vNode = vNode.parent;\n            }\n        }\n        return null;\n    }\n    setHostProp(host, name, value) {\n        const vNode = host;\n        vnode_setProp(vNode, name, value);\n    }\n    getHostProp(host, name) {\n        const vNode = host;\n        let getObjectById = null;\n        switch (name) {\n            case ELEMENT_SEQ:\n            case ELEMENT_PROPS:\n            case OnRenderProp:\n            case QCtxAttr:\n            case QBackRefs:\n            case QCursorBoundary:\n                getObjectById = this.$getObjectById$;\n                break;\n            case ELEMENT_SEQ_IDX:\n            case USE_ON_LOCAL_SEQ_IDX:\n                getObjectById = parseInt;\n                break;\n        }\n        return vnode_getProp(vNode, name, getObjectById);\n    }\n    ensureProjectionResolved(vNode) {\n        if ((vNode.flags & 16 /* VNodeFlags.Resolved */) === 0) {\n            vNode.flags |= 16 /* VNodeFlags.Resolved */;\n            const props = vNode.props;\n            if (props) {\n                const propKeys = Object.keys(props);\n                for (let i = 0; i < propKeys.length; i++) {\n                    const prop = propKeys[i];\n                    if (isSlotProp(prop)) {\n                        const value = props[prop];\n                        if (typeof value == 'string') {\n                            const projection = this.vNodeLocate(value);\n                            props[prop] = projection;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    $getObjectById$ = (id) => {\n        return getObjectById(id, this.$stateData$);\n    };\n    $getForwardRef$(id) {\n        return this.$rootForwardRefs$?.[id];\n    }\n    getSyncFn(id) {\n        const fn = this.$qFuncs$[id];\n        isDev && assertTrue(typeof fn === 'function', 'Invalid reference: ' + id);\n        return fn;\n    }\n    $appendStyle$(content, styleId, host, scoped) {\n        if (scoped) {\n            const scopedStyleIdsString = this.getHostProp(host, QScopedStyle);\n            const scopedStyleIds = new Set(convertScopedStyleIdsToArray(scopedStyleIdsString));\n            scopedStyleIds.add(styleId);\n            this.setHostProp(host, QScopedStyle, convertStyleIdsToString(scopedStyleIds));\n        }\n        if (this.$styleIds$ == null) {\n            this.$styleIds$ = new Set();\n            const styleElements = this.document.querySelectorAll(QStyleSelector);\n            for (let i = 0; i < styleElements.length; i++) {\n                const style = styleElements[i];\n                this.$styleIds$.add(style.getAttribute(QStyle));\n            }\n        }\n        if (!this.$styleIds$.has(styleId)) {\n            this.$styleIds$.add(styleId);\n            const styleElement = this.document.createElement('style');\n            styleElement.setAttribute(QStyle, styleId);\n            styleElement.textContent = content;\n            this.document.head.appendChild(styleElement);\n        }\n    }\n    // TODO: should be moved to the Qwik Router?\n    /** Set the server data for the Qwik Router. */\n    $setServerData$() {\n        const containerAttributes = {};\n        const attrs = this.element.attributes;\n        if (attrs) {\n            for (let index = 0; index < attrs.length; index++) {\n                const attr = attrs[index];\n                if (attr.name === Q_PROPS_SEPARATOR) {\n                    continue;\n                }\n                containerAttributes[attr.name] = attr.value;\n            }\n        }\n        this.$serverData$ = { containerAttributes };\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvZG9tLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUNMLGFBQWEsRUFDYixXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFFBQVEsRUFDUixhQUFhLEVBQ2IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLE1BQU0sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxF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QUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO29CQUNwQyxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGZpbGUgUHVibGljIEFQSXMgZm9yIHRoZSBTU1IgKi9cblxuaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vLi4vc2VydmVyL3F3aWstdHlwZXMnO1xuaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgRVJST1JfQ09OVEVYVCwgaXNSZWNvdmVyYWJsZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9lcnJvci1oYW5kbGluZyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyB3cmFwRGVzZXJpYWxpemVyUHJveHkgfSBmcm9tICcuLi9zaGFyZWQvc2VyZGVzL2Rlc2VyLXByb3h5JztcbmltcG9ydCB7IGdldE9iamVjdEJ5SWQsIHBhcnNlUVJMLCBwcmVwcm9jZXNzU3RhdGUgfSBmcm9tICcuLi9zaGFyZWQvc2VyZGVzL2luZGV4JztcbmltcG9ydCB7IF9TaGFyZWRDb250YWluZXIgfSBmcm9tICcuLi9zaGFyZWQvc2hhcmVkLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBRQ29udGFpbmVyVmFsdWUsIHR5cGUgSG9zdEVsZW1lbnQsIHR5cGUgT2JqVG9Qcm94eU1hcCB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBFTVBUWV9BUlJBWSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9mbHl3ZWlnaHQnO1xuaW1wb3J0IHtcbiAgRUxFTUVOVF9QUk9QUyxcbiAgRUxFTUVOVF9TRVEsXG4gIEVMRU1FTlRfU0VRX0lEWCxcbiAgT25SZW5kZXJQcm9wLFxuICBRQmFja1JlZnMsXG4gIFFCYXNlQXR0cixcbiAgUUNvbnRhaW5lckF0dHIsXG4gIFFDb250YWluZXJTZWxlY3RvcixcbiAgUUN1cnNvckJvdW5kYXJ5LFxuICBRQ3R4QXR0cixcbiAgUUluc3RhbmNlQXR0cixcbiAgUUxvY2FsZUF0dHIsXG4gIFFNYW5pZmVzdEhhc2hBdHRyLFxuICBRU2NvcGVkU3R5bGUsXG4gIFFTdGF0ZVBhdGNoQXR0clNlbGVjdG9yLFxuICBRU3R5bGUsXG4gIFFTdHlsZVNlbGVjdG9yLFxuICBRU3R5bGVzQWxsU2VsZWN0b3IsXG4gIFFfUFJPUFNfU0VQQVJBVE9SLFxuICBVU0VfT05fTE9DQUxfU0VRX0lEWCxcbiAgZ2V0UUZ1bmNzLFxufSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBpc1Nsb3RQcm9wIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Byb3AnO1xuaW1wb3J0IHsgcURldiwgcVRlc3QgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQge1xuICBjb252ZXJ0U2NvcGVkU3R5bGVJZHNUb0FycmF5LFxuICBjb252ZXJ0U3R5bGVJZHNUb1N0cmluZyxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXMnO1xuaW1wb3J0IHsgc2V0RXJyb3JQYXlsb2FkIH0gZnJvbSAnLi4vc2hhcmVkL2N1cnNvci9jaG9yZS1leGVjdXRpb24nO1xuaW1wb3J0IHsgQ2hvcmVCaXRzIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL2VudW1zL2Nob3JlLWJpdHMuZW51bSc7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS9lbGVtZW50LXZub2RlJztcbmltcG9ydCB7IG1hcmtWTm9kZURpcnR5IH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlLWRpcnR5JztcbmltcG9ydCB0eXBlIHsgVmlydHVhbFZOb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3ZpcnR1YWwtdm5vZGUnO1xuaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS92bm9kZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRJZCB9IGZyb20gJy4uL3VzZS91c2UtY29udGV4dCc7XG5pbXBvcnQgeyBwcm9jZXNzU2VnbWVudFN0YXRlU2NyaXB0cyB9IGZyb20gJy4vcHJvY2Vzcy1zZWdtZW50LXN0YXRlJztcbmltcG9ydCB7IHByb2Nlc3NPdXRPZk9yZGVyU2VnbWVudFZOb2RlRGF0YSwgcHJvY2Vzc1ZOb2RlRGF0YSB9IGZyb20gJy4vcHJvY2Vzcy12bm9kZS1kYXRhJztcbmltcG9ydCB7XG4gIFZOb2RlRmxhZ3MsXG4gIHR5cGUgQ29udGFpbmVyRWxlbWVudCxcbiAgdHlwZSBDbGllbnRDb250YWluZXIgYXMgSUNsaWVudENvbnRhaW5lcixcbiAgdHlwZSBRRG9jdW1lbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFwQXJyYXlfZ2V0LCBtYXBBcnJheV9oYXMsIG1hcEFycmF5X3NldCB9IGZyb20gJy4vdXRpbC1tYXBBcnJheSc7XG5pbXBvcnQge1xuICB2bm9kZV9nZXRQcm9wLFxuICB2bm9kZV9pc1ZpcnR1YWxWTm9kZSxcbiAgdm5vZGVfbG9jYXRlLFxuICB2bm9kZV9uZXdVbk1hdGVyaWFsaXplZEVsZW1lbnQsXG4gIHZub2RlX3NldFByb3AsXG59IGZyb20gJy4vdm5vZGUtdXRpbHMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbUNvbnRhaW5lcihlbGVtZW50OiBFbGVtZW50KTogSUNsaWVudENvbnRhaW5lciB7XG4gIGNvbnN0IHFDb250YWluZXJFbGVtZW50ID0gX2dldFFDb250YWluZXJFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIXFDb250YWluZXJFbGVtZW50KSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci5jb250YWluZXJOb3RGb3VuZCk7XG4gIH1cbiAgcmV0dXJuIGdldERvbUNvbnRhaW5lckZyb21RQ29udGFpbmVyRWxlbWVudChxQ29udGFpbmVyRWxlbWVudCEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9tQ29udGFpbmVyRnJvbVFDb250YWluZXJFbGVtZW50KHFDb250YWluZXJFbGVtZW50OiBFbGVtZW50KTogSUNsaWVudENvbnRhaW5lciB7XG4gIGNvbnN0IHFFbGVtZW50ID0gcUNvbnRhaW5lckVsZW1lbnQgYXMgQ29udGFpbmVyRWxlbWVudDtcbiAgcmV0dXJuIChxRWxlbWVudC5xQ29udGFpbmVyIHx8PSBuZXcgRG9tQ29udGFpbmVyKHFFbGVtZW50KSk7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0UUNvbnRhaW5lckVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgcmV0dXJuIGVsZW1lbnQuY2xvc2VzdChRQ29udGFpbmVyU2VsZWN0b3IpO1xufVxuXG5leHBvcnQgY29uc3QgaXNEb21Db250YWluZXIgPSAoY29udGFpbmVyOiBhbnkpOiBjb250YWluZXIgaXMgRG9tQ29udGFpbmVyID0+IHtcbiAgcmV0dXJuIGNvbnRhaW5lciBpbnN0YW5jZW9mIERvbUNvbnRhaW5lcjtcbn07XG5cbmZ1bmN0aW9uIGdldE91dE9mT3JkZXJTdHJlYW1pbmdTY3JpcHQoYm91bmRhcnlJZDogbnVtYmVyLCBjb250ZW50OiBFbGVtZW50IHwgbnVsbCkge1xuICBjb25zdCBzZWdtZW50SWQgPSBTdHJpbmcoYm91bmRhcnlJZCk7XG4gIGNvbnN0IHFDb250YWluZXJFbGVtZW50ID0gY29udGVudD8uY2xvc2VzdChRQ29udGFpbmVyU2VsZWN0b3IpIGFzIENvbnRhaW5lckVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBxQ29udGFpbmVyID0gcUNvbnRhaW5lckVsZW1lbnQ/LnFDb250YWluZXIgYXMgRG9tQ29udGFpbmVyIHwgdW5kZWZpbmVkO1xuICBpZiAocUNvbnRhaW5lcikge1xuICAgIHByb2Nlc3NPdXRPZk9yZGVyU2VnbWVudFZOb2RlRGF0YShxQ29udGFpbmVyLmVsZW1lbnQub3duZXJEb2N1bWVudCwgc2VnbWVudElkLCBjb250ZW50KTtcbiAgICBwcm9jZXNzU2VnbWVudFN0YXRlU2NyaXB0cyhxQ29udGFpbmVyLCBzZWdtZW50SWQpO1xuICB9XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjbGFzcyBEb21Db250YWluZXIgZXh0ZW5kcyBfU2hhcmVkQ29udGFpbmVyIGltcGxlbWVudHMgSUNsaWVudENvbnRhaW5lciB7XG4gIHB1YmxpYyBlbGVtZW50OiBDb250YWluZXJFbGVtZW50O1xuICBwdWJsaWMgcUNvbnRhaW5lcjogc3RyaW5nO1xuICBwdWJsaWMgcU1hbmlmZXN0SGFzaDogc3RyaW5nO1xuICBwdWJsaWMgcm9vdFZOb2RlOiBFbGVtZW50Vk5vZGU7XG4gIHB1YmxpYyBkb2N1bWVudDogUURvY3VtZW50O1xuICBwdWJsaWMgJHN0b3JlUHJveHlNYXAkOiBPYmpUb1Byb3h5TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgcHVibGljICRxRnVuY3MkOiBBcnJheTwoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPjtcbiAgcHVibGljICRpbnN0YW5jZUhhc2gkOiBzdHJpbmc7XG4gIHB1YmxpYyAkZm9yd2FyZFJlZnMkOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB2Tm9kZUxvY2F0ZTogKGlkOiBzdHJpbmcgfCBFbGVtZW50KSA9PiBWTm9kZSA9IChpZCkgPT4gdm5vZGVfbG9jYXRlKHRoaXMucm9vdFZOb2RlLCBpZCk7XG5cbiAgcHJpdmF0ZSAkcmF3U3RhdGVEYXRhJDogdW5rbm93bltdO1xuICBwcml2YXRlICRzdGF0ZURhdGEkOiB1bmtub3duW107XG4gIHByaXZhdGUgJHJvb3RGb3J3YXJkUmVmcyQ6IEFycmF5PG51bWJlciB8IHN0cmluZz4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSAkc3R5bGVJZHMkOiBTZXQ8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICBzdXBlcih7fSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoUUxvY2FsZUF0dHIpISk7XG4gICAgdGhpcy5xQ29udGFpbmVyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUUNvbnRhaW5lckF0dHIpITtcbiAgICBpZiAoIXRoaXMucUNvbnRhaW5lcikge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5lbGVtZW50V2l0aG91dENvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgYXMgUURvY3VtZW50O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy4kYnVpbGRCYXNlJCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFFCYXNlQXR0cikhO1xuICAgIHRoaXMuJGluc3RhbmNlSGFzaCQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShRSW5zdGFuY2VBdHRyKSE7XG4gICAgdGhpcy5xTWFuaWZlc3RIYXNoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUU1hbmlmZXN0SGFzaEF0dHIpITtcbiAgICB0aGlzLnJvb3RWTm9kZSA9IHZub2RlX25ld1VuTWF0ZXJpYWxpemVkRWxlbWVudCh0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMuJHJhd1N0YXRlRGF0YSQgPSBbXTtcbiAgICB0aGlzLiRzdGF0ZURhdGEkID0gW107XG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudCBhcyBRRG9jdW1lbnQ7XG4gICAgaWYgKCFkb2N1bWVudC5xVk5vZGVEYXRhUHJvY2Vzc2VkKSB7XG4gICAgICBwcm9jZXNzVk5vZGVEYXRhKGRvY3VtZW50KTtcbiAgICB9XG4gICAgaWYgKF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGVtcGxhdGVbcVxcXFw6cl0nKSkge1xuICAgICAgZG9jdW1lbnQucVByb2Nlc3NPT09TIHx8PSBnZXRPdXRPZk9yZGVyU3RyZWFtaW5nU2NyaXB0O1xuICAgIH1cbiAgICB0aGlzLiRxRnVuY3MkID0gZ2V0UUZ1bmNzKGRvY3VtZW50LCB0aGlzLiRpbnN0YW5jZUhhc2gkKSB8fCBFTVBUWV9BUlJBWTtcbiAgICB0aGlzLiRzZXRTZXJ2ZXJEYXRhJCgpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFFDb250YWluZXJBdHRyLCBRQ29udGFpbmVyVmFsdWUuUkVTVU1FRCk7XG4gICAgZWxlbWVudC5xQ29udGFpbmVyID0gdGhpcztcbiAgICAoZWxlbWVudCBhcyBhbnkpLnFEZXN0cm95ID0gKCkgPT4gdGhpcy4kZGVzdHJveSQoKTtcbiAgICB0aGlzLiRwcm9jZXNzUm9vdFN0YXRlU2NyaXB0JCgpO1xuICAgIGlmIChfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlKSB7XG4gICAgICBwcm9jZXNzU2VnbWVudFN0YXRlU2NyaXB0cyh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy4kaG9pc3RTdHlsZXMkKCk7XG4gICAgaWYgKCFxVGVzdCAmJiBlbGVtZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdxcmVzdW1lJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGVhciBkb3duIHRoaXMgY29udGFpbmVyIHNvIHN0YWxlIHJlZmVyZW5jZXMgZmFpbCBncmFjZWZ1bGx5LiAqL1xuICAkZGVzdHJveSQoKTogdm9pZCB7XG4gICAgdGhpcy52Tm9kZUxvY2F0ZSA9ICgpID0+IG51bGwgYXMgYW55O1xuICAgIHRoaXMuJHJhd1N0YXRlRGF0YSQubGVuZ3RoID0gMDtcbiAgICB0aGlzLiRzdGF0ZURhdGEkLmxlbmd0aCA9IDA7XG4gICAgdGhpcy4kZ2V0T2JqZWN0QnlJZCQgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgZWwucUNvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICBlbC5xVm5vZGVEYXRhID0gdW5kZWZpbmVkO1xuICAgIGVsLnFWTm9kZVJlZnMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICAgIGVsLnFTZWdtZW50Vm5vZGVEYXRhID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUUNvbnRhaW5lckF0dHIpO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudCBhcyBRRG9jdW1lbnQ7XG4gICAgY29uc3QgaGFzQ29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoUUNvbnRhaW5lclNlbGVjdG9yKSAhPT0gbnVsbDtcbiAgICBpZiAoIWhhc0NvbnRhaW5lcnMpIHtcbiAgICAgIGRvY3VtZW50LnFWTm9kZURhdGEgPSB1bmRlZmluZWQhO1xuICAgICAgZG9jdW1lbnQucVZOb2RlRGF0YVByb2Nlc3NlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGRvY3VtZW50LnFQcm9jZXNzVk5vZGVEYXRhUGF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlKSB7XG4gICAgICBpZiAoIWhhc0NvbnRhaW5lcnMpIHtcbiAgICAgICAgZG9jdW1lbnQucVByb2Nlc3NPT09TID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgJHByb2Nlc3NSb290U3RhdGVTY3JpcHQkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3RTdGF0ZSA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYCR7dGhpcy4kc3RhdGVTY3JpcHRTZWxlY3RvciQoKX06bm90KCR7UVN0YXRlUGF0Y2hBdHRyU2VsZWN0b3J9KWBcbiAgICApO1xuICAgIGlmIChyb290U3RhdGUpIHtcbiAgICAgIHRoaXMuJHJhd1N0YXRlRGF0YSQgPSBKU09OLnBhcnNlKHJvb3RTdGF0ZS50ZXh0Q29udGVudCEpO1xuICAgICAgcHJlcHJvY2Vzc1N0YXRlKHRoaXMuJHJhd1N0YXRlRGF0YSQsIHRoaXMpO1xuICAgICAgdGhpcy4kcm9vdEZvcndhcmRSZWZzJCA9IHRoaXMuJGZvcndhcmRSZWZzJDtcbiAgICAgIHRoaXMuJHN0YXRlRGF0YSQgPSB3cmFwRGVzZXJpYWxpemVyUHJveHkodGhpcywgdGhpcy4kcmF3U3RhdGVEYXRhJCkgYXMgdW5rbm93bltdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgJHN0YXRlU2NyaXB0U2VsZWN0b3IkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBzY3JpcHRbdHlwZT1cInF3aWsvc3RhdGVcIl1bcVxcXFw6aW5zdGFuY2U9XCIke3RoaXMuJGluc3RhbmNlSGFzaCR9XCJdYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgdGltZSB3ZSByZW5kZXIgd2UgbmVlZCB0byBob2lzdCB0aGUgc3R5bGVzLiAoTWVhbmluZyB3ZSBuZWVkIHRvIG1vdmUgYWxsIHN0eWxlcyBmcm9tXG4gICAqIGNvbXBvbmVudCBpbmxpbmUgdG8gPGhlYWQ+KVxuICAgKlxuICAgKiBXZSBidWxrIG1vdmUgYWxsIG9mIHRoZSBzdHlsZXMsIGJlY2F1c2UgdGhlIGV4cGVuc2l2ZSBwYXJ0IGlzIGZvciB0aGUgYnJvd3NlciB0byByZWNvbXB1dGUgdGhlXG4gICAqIHN0eWxlcywgKG5vdCB0aGUgYWN0dWFsIERPTSBtYW5pcHVsYXRpb24uKSBCeSBtb3ZpbmcgYWxsIG9mIHRoZW0gYXQgb25jZSB3ZSBjYW4gbWluaW1pemUgdGhlXG4gICAqIHJlZmxvdy5cbiAgICovXG4gICRob2lzdFN0eWxlcyQoKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuaGVhZDtcbiAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoUVN0eWxlc0FsbFNlbGVjdG9yKTtcbiAgICBjb25zdCBzdHlsZVRhZ0NvdW50ID0gc3R5bGVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGVUYWdDb3VudCkge1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0eWxlVGFnQ291bnQ7IGkrKykge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzdHlsZXNbaV0pO1xuICAgICAgfVxuICAgICAgaGVhZC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgJHNldFJhd1N0YXRlJChpZDogbnVtYmVyLCB2UGFyZW50OiBWTm9kZSk6IHZvaWQge1xuICAgIHRoaXMuJHN0YXRlRGF0YSRbaWRdID0gdlBhcmVudDtcbiAgfVxuXG4gIHBhcnNlUVJMPFQgPSB1bmtub3duPihxcmxTdHI6IHN0cmluZyk6IFFSTDxUPiB7XG4gICAgY29uc3QgcXJsID0gcGFyc2VRUkwocXJsU3RyLCB0aGlzKSBhcyBRUkxJbnRlcm5hbDxUPjtcbiAgICByZXR1cm4gcXJsO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyOiBhbnksIGhvc3Q6IFZOb2RlIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChxRGV2ICYmIGhvc3QpIHtcbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNldEVycm9yUGF5bG9hZChob3N0LCBlcnIpO1xuICAgICAgICBtYXJrVk5vZGVEaXJ0eSh0aGlzLCBob3N0LCBDaG9yZUJpdHMuRVJST1JfV1JBUCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnIgJiYgZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgaWYgKCEoJ2hvc3RFbGVtZW50JyBpbiBlcnIpKSB7XG4gICAgICAgICAgKGVyciBhcyBhbnkpWydob3N0RWxlbWVudCddID0gU3RyaW5nKGhvc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzUmVjb3ZlcmFibGUoZXJyKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGVycm9yU3RvcmUgPSBob3N0ICYmIHRoaXMucmVzb2x2ZUNvbnRleHQoaG9zdCwgRVJST1JfQ09OVEVYVCk7XG4gICAgaWYgKCFlcnJvclN0b3JlKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGVycm9yU3RvcmUuZXJyb3IgPSBlcnI7XG4gIH1cblxuICBzZXRDb250ZXh0PFQ+KGhvc3Q6IFZOb2RlLCBjb250ZXh0OiBDb250ZXh0SWQ8VD4sIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgbGV0IGN0eCA9IHRoaXMuZ2V0SG9zdFByb3A8QXJyYXk8c3RyaW5nIHwgdW5rbm93bj4+KGhvc3QsIFFDdHhBdHRyKTtcbiAgICBpZiAoY3R4ID09IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0SG9zdFByb3AoaG9zdCwgUUN0eEF0dHIsIChjdHggPSBbXSkpO1xuICAgIH1cbiAgICBtYXBBcnJheV9zZXQoY3R4LCBjb250ZXh0LmlkLCB2YWx1ZSwgMCwgdHJ1ZSk7XG4gIH1cblxuICByZXNvbHZlQ29udGV4dDxUPihob3N0OiBWTm9kZSwgY29udGV4dElkOiBDb250ZXh0SWQ8VD4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICB3aGlsZSAoaG9zdCkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5nZXRIb3N0UHJvcDxBcnJheTxzdHJpbmcgfCB1bmtub3duPj4oaG9zdCwgUUN0eEF0dHIpO1xuICAgICAgaWYgKGN0eCAhPSBudWxsICYmIG1hcEFycmF5X2hhcyhjdHgsIGNvbnRleHRJZC5pZCwgMCkpIHtcbiAgICAgICAgcmV0dXJuIG1hcEFycmF5X2dldChjdHgsIGNvbnRleHRJZC5pZCwgMCkgYXMgVDtcbiAgICAgIH1cbiAgICAgIGhvc3QgPSB0aGlzLmdldFBhcmVudEhvc3QoaG9zdCkhO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UGFyZW50SG9zdChob3N0OiBWTm9kZSk6IFZOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHZOb2RlOiBWTm9kZSB8IG51bGwgPSBob3N0LnBhcmVudDtcbiAgICB3aGlsZSAodk5vZGUpIHtcbiAgICAgIGlmICh2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2Tm9kZSkpIHtcbiAgICAgICAgaWYgKHZub2RlX2dldFByb3Aodk5vZGUsIE9uUmVuZGVyUHJvcCwgbnVsbCkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdk5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdk5vZGUgPVxuICAgICAgICAgIHZOb2RlLnBhcmVudCB8fFxuICAgICAgICAgIC8vIElmIHZpcnR1YWwgbm9kZSwgdGhhbiBpdCBjb3VsZCBiZSBhIHNsb3Qgc28gd2UgbmVlZCB0byByZWFkIGl0cyBwYXJlbnQuXG4gICAgICAgICAgdk5vZGUuc2xvdFBhcmVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZOb2RlID0gdk5vZGUucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldEhvc3RQcm9wPFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgY29uc3Qgdk5vZGU6IFZpcnR1YWxWTm9kZSA9IGhvc3QgYXMgYW55O1xuICAgIHZub2RlX3NldFByb3Aodk5vZGUsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGdldEhvc3RQcm9wPFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgY29uc3Qgdk5vZGU6IFZpcnR1YWxWTm9kZSA9IGhvc3QgYXMgYW55O1xuICAgIGxldCBnZXRPYmplY3RCeUlkOiAoKGlkOiBzdHJpbmcpID0+IGFueSkgfCBudWxsID0gbnVsbDtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgRUxFTUVOVF9TRVE6XG4gICAgICBjYXNlIEVMRU1FTlRfUFJPUFM6XG4gICAgICBjYXNlIE9uUmVuZGVyUHJvcDpcbiAgICAgIGNhc2UgUUN0eEF0dHI6XG4gICAgICBjYXNlIFFCYWNrUmVmczpcbiAgICAgIGNhc2UgUUN1cnNvckJvdW5kYXJ5OlxuICAgICAgICBnZXRPYmplY3RCeUlkID0gdGhpcy4kZ2V0T2JqZWN0QnlJZCQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFTEVNRU5UX1NFUV9JRFg6XG4gICAgICBjYXNlIFVTRV9PTl9MT0NBTF9TRVFfSURYOlxuICAgICAgICBnZXRPYmplY3RCeUlkID0gcGFyc2VJbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdm5vZGVfZ2V0UHJvcCh2Tm9kZSwgbmFtZSwgZ2V0T2JqZWN0QnlJZCk7XG4gIH1cblxuICBlbnN1cmVQcm9qZWN0aW9uUmVzb2x2ZWQodk5vZGU6IFZpcnR1YWxWTm9kZSk6IHZvaWQge1xuICAgIGlmICgodk5vZGUuZmxhZ3MgJiBWTm9kZUZsYWdzLlJlc29sdmVkKSA9PT0gMCkge1xuICAgICAgdk5vZGUuZmxhZ3MgfD0gVk5vZGVGbGFncy5SZXNvbHZlZDtcbiAgICAgIGNvbnN0IHByb3BzID0gdk5vZGUucHJvcHM7XG4gICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgY29uc3QgcHJvcEtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcEtleXNbaV07XG4gICAgICAgICAgaWYgKGlzU2xvdFByb3AocHJvcCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNbcHJvcF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLnZOb2RlTG9jYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgcHJvcHNbcHJvcF0gPSBwcm9qZWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICRnZXRPYmplY3RCeUlkJCA9IChpZDogbnVtYmVyIHwgc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgcmV0dXJuIGdldE9iamVjdEJ5SWQoaWQsIHRoaXMuJHN0YXRlRGF0YSQpO1xuICB9O1xuXG4gICRnZXRGb3J3YXJkUmVmJChpZDogbnVtYmVyKTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4kcm9vdEZvcndhcmRSZWZzJD8uW2lkXTtcbiAgfVxuXG4gIGdldFN5bmNGbihpZDogbnVtYmVyKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biB7XG4gICAgY29uc3QgZm4gPSB0aGlzLiRxRnVuY3MkW2lkXTtcbiAgICBpc0RldiAmJiBhc3NlcnRUcnVlKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJywgJ0ludmFsaWQgcmVmZXJlbmNlOiAnICsgaWQpO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gICRhcHBlbmRTdHlsZSQoY29udGVudDogc3RyaW5nLCBzdHlsZUlkOiBzdHJpbmcsIGhvc3Q6IFZpcnR1YWxWTm9kZSwgc2NvcGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHNjb3BlZCkge1xuICAgICAgY29uc3Qgc2NvcGVkU3R5bGVJZHNTdHJpbmcgPSB0aGlzLmdldEhvc3RQcm9wPHN0cmluZz4oaG9zdCwgUVNjb3BlZFN0eWxlKTtcbiAgICAgIGNvbnN0IHNjb3BlZFN0eWxlSWRzID0gbmV3IFNldChjb252ZXJ0U2NvcGVkU3R5bGVJZHNUb0FycmF5KHNjb3BlZFN0eWxlSWRzU3RyaW5nKSk7XG4gICAgICBzY29wZWRTdHlsZUlkcy5hZGQoc3R5bGVJZCk7XG4gICAgICB0aGlzLnNldEhvc3RQcm9wKGhvc3QsIFFTY29wZWRTdHlsZSwgY29udmVydFN0eWxlSWRzVG9TdHJpbmcoc2NvcGVkU3R5bGVJZHMpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4kc3R5bGVJZHMkID09IG51bGwpIHtcbiAgICAgIHRoaXMuJHN0eWxlSWRzJCA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IHN0eWxlRWxlbWVudHMgPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoUVN0eWxlU2VsZWN0b3IpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHlsZUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVFbGVtZW50c1tpXTtcbiAgICAgICAgdGhpcy4kc3R5bGVJZHMkLmFkZChzdHlsZS5nZXRBdHRyaWJ1dGUoUVN0eWxlKSEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuJHN0eWxlSWRzJC5oYXMoc3R5bGVJZCkpIHtcbiAgICAgIHRoaXMuJHN0eWxlSWRzJC5hZGQoc3R5bGVJZCk7XG4gICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFFTdHlsZSwgc3R5bGVJZCk7XG4gICAgICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBRd2lrIFJvdXRlcj9cbiAgLyoqIFNldCB0aGUgc2VydmVyIGRhdGEgZm9yIHRoZSBRd2lrIFJvdXRlci4gKi9cbiAgcHJpdmF0ZSAkc2V0U2VydmVyRGF0YSQoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5lbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgaWYgKGF0dHJzKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXR0cnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyc1tpbmRleF07XG4gICAgICAgIGlmIChhdHRyLm5hbWUgPT09IFFfUFJPUFNfU0VQQVJBVE9SKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyQXR0cmlidXRlc1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy4kc2VydmVyRGF0YSQgPSB7IGNvbnRhaW5lckF0dHJpYnV0ZXMgfTtcbiAgfVxufVxuIl19","import { tryGetInvokeContext } from './use-core';\nimport { getAsyncLocalStorage } from '../shared/platform/async-local-storage';\nimport { isServer } from '@qwik.dev/core/build';\nlet _locale = undefined;\nlet localAsyncStore;\nif (isServer) {\n    const AsyncLocalStorage = getAsyncLocalStorage();\n    if (AsyncLocalStorage) {\n        localAsyncStore = new AsyncLocalStorage();\n    }\n}\n/**\n * Retrieve the current locale.\n *\n * If no current locale and there is no `defaultLocale` the function throws an error.\n *\n * @returns The locale.\n * @public\n */\nexport function getLocale(defaultLocale) {\n    // Prefer per-request locale from local AsyncLocalStorage if available (server-side)\n    if (localAsyncStore) {\n        const locale = localAsyncStore.getStore();\n        if (locale) {\n            return locale;\n        }\n    }\n    if (_locale === undefined) {\n        const ctx = tryGetInvokeContext();\n        if (ctx && ctx.$locale$) {\n            return ctx.$locale$;\n        }\n        if (defaultLocale !== undefined) {\n            return defaultLocale;\n        }\n        throw new Error('Reading `locale` outside of context.');\n    }\n    return _locale;\n}\n/**\n * Override the `getLocale` with `lang` within the `fn` execution.\n *\n * @public\n */\nexport function withLocale(locale, fn) {\n    if (localAsyncStore) {\n        return localAsyncStore.run(locale, fn);\n    }\n    const previousLang = _locale;\n    try {\n        _locale = locale;\n        return fn();\n    }\n    finally {\n        _locale = previousLang;\n    }\n}\n/**\n * Globally set a lang.\n *\n * This can be used only in browser. Server execution requires that each request could potentially\n * be a different lang, therefore setting a global lang would produce incorrect responses.\n *\n * @public\n */\nexport function setLocale(locale) {\n    if (localAsyncStore) {\n        localAsyncStore.enterWith(locale);\n        return;\n    }\n    _locale = locale;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLWxvY2FsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2hELElBQUksT0FBTyxHQUF1QixTQUFTLENBQUM7QUFFNUMsSUFBSSxlQUFzRCxDQUFDO0FBRTNELElBQUksUUFBUSxFQUFFLENBQUM7SUFDYixNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixFQUFFLENBQUM7SUFDakQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLGVBQWUsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxhQUFzQjtJQUM5QyxvRkFBb0Y7SUFDcEYsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUksTUFBYyxFQUFFLEVBQVc7SUFDdkQsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDN0IsSUFBSSxDQUFDO1FBQ0gsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ2QsQ0FBQztZQUFTLENBQUM7UUFDVCxPQUFPLEdBQUcsWUFBWSxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBYztJQUN0QyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsT0FBTztJQUNULENBQUM7SUFDRCxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cnlHZXRJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5pbXBvcnQgeyBnZXRBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJy4uL3NoYXJlZC9wbGF0Zm9ybS9hc3luYy1sb2NhbC1zdG9yYWdlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJ25vZGU6YXN5bmNfaG9va3MnO1xuXG5sZXQgX2xvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5sZXQgbG9jYWxBc3luY1N0b3JlOiBBc3luY0xvY2FsU3RvcmFnZTxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG5pZiAoaXNTZXJ2ZXIpIHtcbiAgY29uc3QgQXN5bmNMb2NhbFN0b3JhZ2UgPSBnZXRBc3luY0xvY2FsU3RvcmFnZSgpO1xuICBpZiAoQXN5bmNMb2NhbFN0b3JhZ2UpIHtcbiAgICBsb2NhbEFzeW5jU3RvcmUgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGxvY2FsZS5cbiAqXG4gKiBJZiBubyBjdXJyZW50IGxvY2FsZSBhbmQgdGhlcmUgaXMgbm8gYGRlZmF1bHRMb2NhbGVgIHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gZXJyb3IuXG4gKlxuICogQHJldHVybnMgVGhlIGxvY2FsZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZShkZWZhdWx0TG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUHJlZmVyIHBlci1yZXF1ZXN0IGxvY2FsZSBmcm9tIGxvY2FsIEFzeW5jTG9jYWxTdG9yYWdlIGlmIGF2YWlsYWJsZSAoc2VydmVyLXNpZGUpXG4gIGlmIChsb2NhbEFzeW5jU3RvcmUpIHtcbiAgICBjb25zdCBsb2NhbGUgPSBsb2NhbEFzeW5jU3RvcmUuZ2V0U3RvcmUoKTtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICByZXR1cm4gbG9jYWxlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChfbG9jYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgaWYgKGN0eCAmJiBjdHguJGxvY2FsZSQpIHtcbiAgICAgIHJldHVybiBjdHguJGxvY2FsZSQ7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0TG9jYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0TG9jYWxlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWRpbmcgYGxvY2FsZWAgb3V0c2lkZSBvZiBjb250ZXh0LicpO1xuICB9XG4gIHJldHVybiBfbG9jYWxlO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlIHRoZSBgZ2V0TG9jYWxlYCB3aXRoIGBsYW5nYCB3aXRoaW4gdGhlIGBmbmAgZXhlY3V0aW9uLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMb2NhbGU8VD4obG9jYWxlOiBzdHJpbmcsIGZuOiAoKSA9PiBUKTogVCB7XG4gIGlmIChsb2NhbEFzeW5jU3RvcmUpIHtcbiAgICByZXR1cm4gbG9jYWxBc3luY1N0b3JlLnJ1bihsb2NhbGUsIGZuKTtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzTGFuZyA9IF9sb2NhbGU7XG4gIHRyeSB7XG4gICAgX2xvY2FsZSA9IGxvY2FsZTtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfbG9jYWxlID0gcHJldmlvdXNMYW5nO1xuICB9XG59XG5cbi8qKlxuICogR2xvYmFsbHkgc2V0IGEgbGFuZy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIG9ubHkgaW4gYnJvd3Nlci4gU2VydmVyIGV4ZWN1dGlvbiByZXF1aXJlcyB0aGF0IGVhY2ggcmVxdWVzdCBjb3VsZCBwb3RlbnRpYWxseVxuICogYmUgYSBkaWZmZXJlbnQgbGFuZywgdGhlcmVmb3JlIHNldHRpbmcgYSBnbG9iYWwgbGFuZyB3b3VsZCBwcm9kdWNlIGluY29ycmVjdCByZXNwb25zZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9jYWxlKGxvY2FsZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChsb2NhbEFzeW5jU3RvcmUpIHtcbiAgICBsb2NhbEFzeW5jU3RvcmUuZW50ZXJXaXRoKGxvY2FsZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9sb2NhbGUgPSBsb2NhbGU7XG59XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { getDomContainer } from '../client/dom-container';\nimport { vnode_locate } from '../client/vnode-utils';\nimport { unwrapStore } from '../reactive-primitives/impl/store';\nimport { WrappedSignalImpl } from '../reactive-primitives/impl/wrapped-signal-impl';\nimport { isSignal } from '../reactive-primitives/signal.public';\nimport { getSubscriber } from '../reactive-primitives/subscriber';\nimport { assertDefined } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { RenderEvent } from '../shared/utils/markers';\nimport { seal } from '../shared/utils/qdev';\nimport { isObject } from '../shared/utils/types';\nimport { setLocale } from './use-locale';\nlet _context;\nexport const tryGetInvokeContext = () => {\n    return _context;\n};\nexport const getInvokeContext = () => {\n    const ctx = tryGetInvokeContext();\n    if (!ctx) {\n        throw qError(9 /* QError.useMethodOutsideContext */);\n    }\n    return ctx;\n};\n/** @internal */\nexport const useInvokeContext = () => {\n    const ctx = tryGetInvokeContext();\n    if (!ctx || ctx.$event$ !== RenderEvent) {\n        throw qError(10 /* QError.useInvokeContext */);\n    }\n    isDev && assertDefined(ctx.$hostElement$, `invoke: $hostElement$ must be defined`, ctx);\n    isDev && assertDefined(ctx.$effectSubscriber$, `invoke: $effectSubscriber$ must be defined`, ctx);\n    return ctx;\n};\nexport function useBindInvokeContext(fn) {\n    if (fn == null) {\n        return fn;\n    }\n    const ctx = getInvokeContext();\n    return function (...args) {\n        return invokeApply.call(this, ctx, fn, args);\n    };\n}\n/** Call a function with the given InvokeContext and given arguments. */\nexport function invoke(context, fn, ...args) {\n    return invokeApply.call(this, context, fn, args);\n}\n/** Call a function with the given InvokeContext and array of arguments. */\nexport function invokeApply(context, fn, args) {\n    const previousContext = _context;\n    try {\n        _context = context;\n        return fn.apply(this, args);\n    }\n    finally {\n        _context = previousContext;\n    }\n}\nexport const newInvokeContextFromDOM = (event, element) => {\n    const domContainer = getDomContainer(element);\n    const hostElement = vnode_locate(domContainer.rootVNode, element);\n    const locale = domContainer.$locale$;\n    locale && setLocale(locale);\n    const context = newInvokeContext(locale, hostElement, event);\n    context.$container$ = domContainer;\n    return context;\n};\nexport function newRenderInvokeContext(locale, hostElement, container) {\n    const ctx = {\n        $hostElement$: hostElement,\n        $event$: RenderEvent,\n        $effectSubscriber$: undefined,\n        $locale$: locale,\n        $container$: container,\n        $waitOn$: undefined,\n    };\n    seal(ctx);\n    return ctx;\n}\n// TODO how about putting url and locale (and event/custom?) in to a \"static\" object\nexport function newInvokeContext(locale, hostElement, event) {\n    // ServerRequestEvent has .locale, but it's not always defined.\n    const $locale$ = locale || (event && isObject(event) && 'locale' in event ? event.locale : undefined);\n    const ctx = {\n        $hostElement$: hostElement,\n        $event$: event,\n        $effectSubscriber$: undefined,\n        $locale$,\n        $container$: undefined,\n    };\n    seal(ctx);\n    return ctx;\n}\n/**\n * Get the value of the expression without tracking listeners. A function will be invoked, signals\n * will return their value, and stores will be unwrapped (they return the backing object).\n *\n * When you pass a function, you can also pass additional arguments that the function will receive.\n *\n * Note that stores are not unwrapped recursively.\n *\n * @param expr - The function or object to evaluate without tracking.\n * @param args - Additional arguments to pass when `expr` is a function.\n * @public\n */\nexport const untrack = (expr, ...args) => {\n    if (typeof expr === 'function') {\n        if (_context) {\n            const sub = _context.$effectSubscriber$;\n            try {\n                _context.$effectSubscriber$ = undefined;\n                return expr(...args);\n            }\n            finally {\n                _context.$effectSubscriber$ = sub;\n            }\n        }\n        else {\n            return expr(...args);\n        }\n    }\n    if (isSignal(expr)) {\n        return expr.untrackedValue;\n    }\n    return unwrapStore(expr);\n};\nconst trackInvocation = /*#__PURE__*/ newRenderInvokeContext(undefined, undefined, undefined);\n/**\n * @param fn\n * @param subscriber\n * @param property `true` - subscriber is component `false` - subscriber is VNode `string` -\n *   subscriber is property\n * @param container\n * @param data - Additional subscription data\n * @returns\n */\nexport const trackSignal = (fn, subscriber, property, container, data) => {\n    const previousSubscriber = trackInvocation.$effectSubscriber$;\n    const previousContainer = trackInvocation.$container$;\n    try {\n        trackInvocation.$effectSubscriber$ = getSubscriber(subscriber, property, data);\n        trackInvocation.$container$ = container;\n        return invokeApply(trackInvocation, fn);\n    }\n    finally {\n        trackInvocation.$effectSubscriber$ = previousSubscriber;\n        trackInvocation.$container$ = previousContainer;\n    }\n};\nexport const trackSignalAndAssignHost = (value, host, property, container, data) => {\n    if (value instanceof WrappedSignalImpl && value.$hostElement$ !== host && host) {\n        value.$hostElement$ = host;\n    }\n    return trackSignal(() => value.value, host, property, container, data);\n};\n/** @internal */\nexport const _getContextHostElement = () => {\n    return tryGetInvokeContext()?.$hostElement$;\n};\n/** @internal */\nexport const _getContextEvent = () => {\n    const iCtx = tryGetInvokeContext();\n    if (iCtx) {\n        return iCtx.$event$;\n    }\n};\n/** @internal */\nexport const _getContextContainer = () => {\n    const iCtx = tryGetInvokeContext();\n    if (iCtx) {\n        return iCtx.$container$;\n    }\n};\n/**\n * @deprecated\n * @internal\n * No longer used since v2\n */\nexport const _jsxBranch = (input) => {\n    return input;\n};\n/** @internal */\nexport const _waitUntilRendered = (container) => {\n    return container.$renderPromise$ || Promise.resolve();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvcmUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsUUFBUSxFQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWtDekMsSUFBSSxRQUFtQyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQThCLEVBQUU7SUFDakUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBa0IsRUFBRTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sTUFBTSx3Q0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBd0IsRUFBRTtJQUN4RCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxNQUFNLE1BQU0sa0NBQXlCLENBQUM7SUFDeEMsQ0FBQztJQUNELEtBQUssSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSx1Q0FBdUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4RixLQUFLLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVsRyxPQUFPLEdBQTBCLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLG9CQUFvQixDQUVsQyxFQUFrQjtJQUVsQixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsT0FBTyxVQUF5QixHQUFHLElBQW9CO1FBQ3JELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFPLENBQUM7QUFDVixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sVUFBVSxNQUFNLENBRXBCLE9BQWtDLEVBQ2xDLEVBQU0sRUFDTixHQUFHLElBQW9CO0lBRXZCLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLE1BQU0sVUFBVSxXQUFXLENBRXpCLE9BQWtDLEVBQ2xDLEVBQU0sRUFDTixJQUFxQjtJQUVyQixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxDQUFDO1FBQ0gsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7WUFBUyxDQUFDO1FBQ1QsUUFBUSxHQUFHLGVBQWUsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBWSxFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUN4RSxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNyQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsT0FBTyxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUM7SUFDbkMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxNQUEwQixFQUMxQixXQUF3QixFQUN4QixTQUFvQjtJQUVwQixNQUFNLEdBQUcsR0FBd0I7UUFDL0IsYUFBYSxFQUFFLFdBQVc7UUFDMUIsT0FBTyxFQUFFLFdBQVc7UUFDcEIsa0JBQWtCLEVBQUUsU0FBUztRQUM3QixRQUFRLEVBQUUsTUFBTTtRQUNoQixXQUFXLEVBQUUsU0FBUztRQUN0QixRQUFRLEVBQUUsU0FBUztLQUNwQixDQUFDO0lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsTUFBZSxFQUNmLFdBQXlCLEVBQ3pCLEtBQW1EO0lBRW5ELCtEQUErRDtJQUMvRCxNQUFNLFFBQVEsR0FDWixNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sR0FBRyxHQUFrQjtRQUN6QixhQUFhLEVBQUUsV0FBVztRQUMxQixPQUFPLEVBQUUsS0FBSztRQUNkLGtCQUFrQixFQUFFLFNBQVM7UUFDN0IsUUFBUTtRQUNSLFdBQVcsRUFBRSxTQUFTO0tBQ3ZCLENBQUM7SUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixJQUF5QyxFQUN6QyxHQUFHLElBQU8sRUFDUCxFQUFFO0lBQ0wsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMvQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1lBQ3hDLElBQUksQ0FBQztnQkFDSCxRQUFRLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO2dCQUN4QyxPQUFRLElBQTBCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5QyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsUUFBUSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFRLElBQTBCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBUSxJQUFzQixDQUFDLGNBQWMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxTQUFVLEVBQUUsU0FBVSxDQUFDLENBQUM7QUFFaEc7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FDekIsRUFBVyxFQUNYLFVBQW9CLEVBQ3BCLFFBQWlDLEVBQ2pDLFNBQW9CLEVBQ3BCLElBQXVCLEVBQ3BCLEVBQUU7SUFDTCxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztJQUM5RCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDdEQsSUFBSSxDQUFDO1FBQ0gsZUFBZSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9FLGVBQWUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLE9BQU8sV0FBVyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO1lBQVMsQ0FBQztRQUNULGVBQWUsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUN4RCxlQUFlLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBQ2xELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUN0QyxLQUFhLEVBQ2IsSUFBaUIsRUFDakIsUUFBaUMsRUFDakMsU0FBb0IsRUFDcEIsSUFBdUIsRUFDdkIsRUFBRTtJQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9FLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLEVBQUU7SUFDekMsT0FBTyxtQkFBbUIsRUFBRSxFQUFFLGFBQWEsQ0FBQztBQUM5QyxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBWSxFQUFFO0lBQzVDLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDbkMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQTBCLEVBQUU7SUFDOUQsTUFBTSxJQUFJLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUNuQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBd0IsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFJLEtBQVMsRUFBRSxFQUFFO0lBQ3pDLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsU0FBb0IsRUFBaUIsRUFBRTtJQUN4RSxPQUFPLFNBQVMsQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBTaWduYWxJbXBsIH0gZnJvbSAncGFja2FnZXMvcXdpay9zcmMvc2VydmVyL3F3aWstdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgdm5vZGVfbG9jYXRlIH0gZnJvbSAnLi4vY2xpZW50L3Zub2RlLXV0aWxzJztcbmltcG9ydCB7IHVud3JhcFN0b3JlIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlJztcbmltcG9ydCB7IFdyYXBwZWRTaWduYWxJbXBsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3dyYXBwZWQtc2lnbmFsLWltcGwnO1xuaW1wb3J0IHsgaXNTaWduYWwsIHR5cGUgU2lnbmFsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmltcG9ydCB7IGdldFN1YnNjcmliZXIgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3N1YnNjcmliZXInO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb25EYXRhIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zdWJzY3JpcHRpb24tZGF0YSc7XG5pbXBvcnQgdHlwZSB7IENvbnN1bWVyLCBFZmZlY3RQcm9wZXJ0eSwgRWZmZWN0U3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9lcnJvcic7XG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lciwgSG9zdEVsZW1lbnQgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgUmVuZGVyRXZlbnQsIFRhc2tFdmVudCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHNlYWwgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBzZXRMb2NhbGUgfSBmcm9tICcuL3VzZS1sb2NhbGUnO1xuXG4vLyBTaW1wbGlmaWVkIHZlcnNpb24gb2YgYFNlcnZlclJlcXVlc3RFdmVudGAgZnJvbSBgQHF3aWsuZGV2L3JvdXRlcmAgcGFja2FnZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxpZmllZFNlcnZlclJlcXVlc3RFdmVudDxUID0gdW5rbm93bj4ge1xuICB1cmw6IFVSTDtcbiAgbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG59XG5cbmV4cG9ydCB0eXBlIFBvc3NpYmxlRXZlbnRzID1cbiAgfCBFdmVudFxuICB8IFNpbXBsaWZpZWRTZXJ2ZXJSZXF1ZXN0RXZlbnRcbiAgfCB0eXBlb2YgVGFza0V2ZW50XG4gIHwgdHlwZW9mIFJlbmRlckV2ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckludm9rZUNvbnRleHQgZXh0ZW5kcyBJbnZva2VDb250ZXh0IHtcbiAgLy8gVGhlIGJlbG93IGFyZSBqdXN0IGFsd2F5cy1kZWZpbmVkIGF0dHJpYnV0ZXMgb2YgSW52b2tlQ29udGV4dC5cbiAgJGhvc3RFbGVtZW50JDogSG9zdEVsZW1lbnQ7XG4gICRldmVudCQ6IHR5cGVvZiBSZW5kZXJFdmVudDtcbiAgJHdhaXRPbiQ6IFByb21pc2U8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICRjb250YWluZXIkOiBDb250YWluZXI7XG59XG5cbi8qKiBUaGUgc2hhcmVkIHN0YXRlIGR1cmluZyBhbiBpbnZva2UoKSBjYWxsICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZUNvbnRleHQge1xuICAvKiogVGhlIFZpcnR1YWwgcGFyZW50IGNvbXBvbmVudCBmb3IgdGhlIGN1cnJlbnQgY29tcG9uZW50IGNvZGUgKi9cbiAgJGhvc3RFbGVtZW50JDogSG9zdEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIC8qKiBUaGUgZXZlbnQgd2UncmUgY3VycmVudGx5IGhhbmRsaW5nICovXG4gICRldmVudCQ6IFBvc3NpYmxlRXZlbnRzIHwgdW5kZWZpbmVkO1xuICAkZWZmZWN0U3Vic2NyaWJlciQ6IEVmZmVjdFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgJGxvY2FsZSQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgJGNvbnRhaW5lciQ6IENvbnRhaW5lciB8IHVuZGVmaW5lZDtcbn1cblxubGV0IF9jb250ZXh0OiBJbnZva2VDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgdHJ5R2V0SW52b2tlQ29udGV4dCA9ICgpOiBJbnZva2VDb250ZXh0IHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIF9jb250ZXh0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEludm9rZUNvbnRleHQgPSAoKTogSW52b2tlQ29udGV4dCA9PiB7XG4gIGNvbnN0IGN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgaWYgKCFjdHgpIHtcbiAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnVzZU1ldGhvZE91dHNpZGVDb250ZXh0KTtcbiAgfVxuICByZXR1cm4gY3R4O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZUludm9rZUNvbnRleHQgPSAoKTogUmVuZGVySW52b2tlQ29udGV4dCA9PiB7XG4gIGNvbnN0IGN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgaWYgKCFjdHggfHwgY3R4LiRldmVudCQgIT09IFJlbmRlckV2ZW50KSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci51c2VJbnZva2VDb250ZXh0KTtcbiAgfVxuICBpc0RldiAmJiBhc3NlcnREZWZpbmVkKGN0eC4kaG9zdEVsZW1lbnQkLCBgaW52b2tlOiAkaG9zdEVsZW1lbnQkIG11c3QgYmUgZGVmaW5lZGAsIGN0eCk7XG4gIGlzRGV2ICYmIGFzc2VydERlZmluZWQoY3R4LiRlZmZlY3RTdWJzY3JpYmVyJCwgYGludm9rZTogJGVmZmVjdFN1YnNjcmliZXIkIG11c3QgYmUgZGVmaW5lZGAsIGN0eCk7XG5cbiAgcmV0dXJuIGN0eCBhcyBSZW5kZXJJbnZva2VDb250ZXh0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUJpbmRJbnZva2VDb250ZXh0PEZOIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55PihcbiAgdGhpczogdW5rbm93bixcbiAgZm46IEZOIHwgdW5kZWZpbmVkXG4pOiB0eXBlb2YgZm4ge1xuICBpZiAoZm4gPT0gbnVsbCkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuICBjb25zdCBjdHggPSBnZXRJbnZva2VDb250ZXh0KCk7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogdW5rbm93biwgLi4uYXJnczogUGFyYW1ldGVyczxGTj4pIHtcbiAgICByZXR1cm4gaW52b2tlQXBwbHkuY2FsbCh0aGlzLCBjdHgsIGZuISwgYXJncyk7XG4gIH0gYXMgRk47XG59XG5cbi8qKiBDYWxsIGEgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSW52b2tlQ29udGV4dCBhbmQgZ2l2ZW4gYXJndW1lbnRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZTxGTiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbiAgdGhpczogdW5rbm93bixcbiAgY29udGV4dDogSW52b2tlQ29udGV4dCB8IHVuZGVmaW5lZCxcbiAgZm46IEZOLFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPEZOPlxuKTogUmV0dXJuVHlwZTxGTj4ge1xuICByZXR1cm4gaW52b2tlQXBwbHkuY2FsbCh0aGlzLCBjb250ZXh0LCBmbiwgYXJncyk7XG59XG5cbi8qKiBDYWxsIGEgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSW52b2tlQ29udGV4dCBhbmQgYXJyYXkgb2YgYXJndW1lbnRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFwcGx5PEZOIGV4dGVuZHMgKHRoaXM6IFRISVMsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIFRISVM+KFxuICB0aGlzOiBUSElTLFxuICBjb250ZXh0OiBJbnZva2VDb250ZXh0IHwgdW5kZWZpbmVkLFxuICBmbjogRk4sXG4gIGFyZ3M/OiBQYXJhbWV0ZXJzPEZOPlxuKTogUmV0dXJuVHlwZTxGTj4ge1xuICBjb25zdCBwcmV2aW91c0NvbnRleHQgPSBfY29udGV4dDtcbiAgdHJ5IHtcbiAgICBfY29udGV4dCA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfY29udGV4dCA9IHByZXZpb3VzQ29udGV4dDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbmV3SW52b2tlQ29udGV4dEZyb21ET00gPSAoZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gIGNvbnN0IGRvbUNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihlbGVtZW50KTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSB2bm9kZV9sb2NhdGUoZG9tQ29udGFpbmVyLnJvb3RWTm9kZSwgZWxlbWVudCk7XG4gIGNvbnN0IGxvY2FsZSA9IGRvbUNvbnRhaW5lci4kbG9jYWxlJDtcbiAgbG9jYWxlICYmIHNldExvY2FsZShsb2NhbGUpO1xuICBjb25zdCBjb250ZXh0ID0gbmV3SW52b2tlQ29udGV4dChsb2NhbGUsIGhvc3RFbGVtZW50LCBldmVudCk7XG4gIGNvbnRleHQuJGNvbnRhaW5lciQgPSBkb21Db250YWluZXI7XG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5ld1JlbmRlckludm9rZUNvbnRleHQoXG4gIGxvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBob3N0RWxlbWVudDogSG9zdEVsZW1lbnQsXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyXG4pOiBSZW5kZXJJbnZva2VDb250ZXh0IHtcbiAgY29uc3QgY3R4OiBSZW5kZXJJbnZva2VDb250ZXh0ID0ge1xuICAgICRob3N0RWxlbWVudCQ6IGhvc3RFbGVtZW50LFxuICAgICRldmVudCQ6IFJlbmRlckV2ZW50LFxuICAgICRlZmZlY3RTdWJzY3JpYmVyJDogdW5kZWZpbmVkLFxuICAgICRsb2NhbGUkOiBsb2NhbGUsXG4gICAgJGNvbnRhaW5lciQ6IGNvbnRhaW5lcixcbiAgICAkd2FpdE9uJDogdW5kZWZpbmVkLFxuICB9O1xuICBzZWFsKGN0eCk7XG4gIHJldHVybiBjdHg7XG59XG5cbi8vIFRPRE8gaG93IGFib3V0IHB1dHRpbmcgdXJsIGFuZCBsb2NhbGUgKGFuZCBldmVudC9jdXN0b20/KSBpbiB0byBhIFwic3RhdGljXCIgb2JqZWN0XG5leHBvcnQgZnVuY3Rpb24gbmV3SW52b2tlQ29udGV4dChcbiAgbG9jYWxlPzogc3RyaW5nLFxuICBob3N0RWxlbWVudD86IEhvc3RFbGVtZW50LFxuICBldmVudD86IEV4Y2x1ZGU8UG9zc2libGVFdmVudHMsIHR5cGVvZiBSZW5kZXJFdmVudD5cbik6IEludm9rZUNvbnRleHQge1xuICAvLyBTZXJ2ZXJSZXF1ZXN0RXZlbnQgaGFzIC5sb2NhbGUsIGJ1dCBpdCdzIG5vdCBhbHdheXMgZGVmaW5lZC5cbiAgY29uc3QgJGxvY2FsZSQgPVxuICAgIGxvY2FsZSB8fCAoZXZlbnQgJiYgaXNPYmplY3QoZXZlbnQpICYmICdsb2NhbGUnIGluIGV2ZW50ID8gZXZlbnQubG9jYWxlIDogdW5kZWZpbmVkKTtcbiAgY29uc3QgY3R4OiBJbnZva2VDb250ZXh0ID0ge1xuICAgICRob3N0RWxlbWVudCQ6IGhvc3RFbGVtZW50LFxuICAgICRldmVudCQ6IGV2ZW50LFxuICAgICRlZmZlY3RTdWJzY3JpYmVyJDogdW5kZWZpbmVkLFxuICAgICRsb2NhbGUkLFxuICAgICRjb250YWluZXIkOiB1bmRlZmluZWQsXG4gIH07XG4gIHNlYWwoY3R4KTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHdpdGhvdXQgdHJhY2tpbmcgbGlzdGVuZXJzLiBBIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCwgc2lnbmFsc1xuICogd2lsbCByZXR1cm4gdGhlaXIgdmFsdWUsIGFuZCBzdG9yZXMgd2lsbCBiZSB1bndyYXBwZWQgKHRoZXkgcmV0dXJuIHRoZSBiYWNraW5nIG9iamVjdCkuXG4gKlxuICogV2hlbiB5b3UgcGFzcyBhIGZ1bmN0aW9uLCB5b3UgY2FuIGFsc28gcGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIHJlY2VpdmUuXG4gKlxuICogTm90ZSB0aGF0IHN0b3JlcyBhcmUgbm90IHVud3JhcHBlZCByZWN1cnNpdmVseS5cbiAqXG4gKiBAcGFyYW0gZXhwciAtIFRoZSBmdW5jdGlvbiBvciBvYmplY3QgdG8gZXZhbHVhdGUgd2l0aG91dCB0cmFja2luZy5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB3aGVuIGBleHByYCBpcyBhIGZ1bmN0aW9uLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdW50cmFjayA9IDxULCBBIGV4dGVuZHMgYW55W10+KFxuICBleHByOiAoKC4uLmFyZ3M6IEEpID0+IFQpIHwgU2lnbmFsPFQ+IHwgVCxcbiAgLi4uYXJnczogQVxuKTogVCA9PiB7XG4gIGlmICh0eXBlb2YgZXhwciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChfY29udGV4dCkge1xuICAgICAgY29uc3Qgc3ViID0gX2NvbnRleHQuJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgX2NvbnRleHQuJGVmZmVjdFN1YnNjcmliZXIkID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gKGV4cHIgYXMgKC4uLmFyZ3M6IEEpID0+IFQpKC4uLmFyZ3MpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2NvbnRleHQuJGVmZmVjdFN1YnNjcmliZXIkID0gc3ViO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKGV4cHIgYXMgKC4uLmFyZ3M6IEEpID0+IFQpKC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNTaWduYWwoZXhwcikpIHtcbiAgICByZXR1cm4gKGV4cHIgYXMgU2lnbmFsSW1wbDxUPikudW50cmFja2VkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVud3JhcFN0b3JlKGV4cHIpO1xufTtcblxuY29uc3QgdHJhY2tJbnZvY2F0aW9uID0gLyojX19QVVJFX18qLyBuZXdSZW5kZXJJbnZva2VDb250ZXh0KHVuZGVmaW5lZCwgdW5kZWZpbmVkISwgdW5kZWZpbmVkISk7XG5cbi8qKlxuICogQHBhcmFtIGZuXG4gKiBAcGFyYW0gc3Vic2NyaWJlclxuICogQHBhcmFtIHByb3BlcnR5IGB0cnVlYCAtIHN1YnNjcmliZXIgaXMgY29tcG9uZW50IGBmYWxzZWAgLSBzdWJzY3JpYmVyIGlzIFZOb2RlIGBzdHJpbmdgIC1cbiAqICAgc3Vic2NyaWJlciBpcyBwcm9wZXJ0eVxuICogQHBhcmFtIGNvbnRhaW5lclxuICogQHBhcmFtIGRhdGEgLSBBZGRpdGlvbmFsIHN1YnNjcmlwdGlvbiBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdHJhY2tTaWduYWwgPSA8VD4oXG4gIGZuOiAoKSA9PiBULFxuICBzdWJzY3JpYmVyOiBDb25zdW1lcixcbiAgcHJvcGVydHk6IEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgZGF0YT86IFN1YnNjcmlwdGlvbkRhdGFcbik6IFQgPT4ge1xuICBjb25zdCBwcmV2aW91c1N1YnNjcmliZXIgPSB0cmFja0ludm9jYXRpb24uJGVmZmVjdFN1YnNjcmliZXIkO1xuICBjb25zdCBwcmV2aW91c0NvbnRhaW5lciA9IHRyYWNrSW52b2NhdGlvbi4kY29udGFpbmVyJDtcbiAgdHJ5IHtcbiAgICB0cmFja0ludm9jYXRpb24uJGVmZmVjdFN1YnNjcmliZXIkID0gZ2V0U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBwcm9wZXJ0eSwgZGF0YSk7XG4gICAgdHJhY2tJbnZvY2F0aW9uLiRjb250YWluZXIkID0gY29udGFpbmVyO1xuICAgIHJldHVybiBpbnZva2VBcHBseSh0cmFja0ludm9jYXRpb24sIGZuKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cmFja0ludm9jYXRpb24uJGVmZmVjdFN1YnNjcmliZXIkID0gcHJldmlvdXNTdWJzY3JpYmVyO1xuICAgIHRyYWNrSW52b2NhdGlvbi4kY29udGFpbmVyJCA9IHByZXZpb3VzQ29udGFpbmVyO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0ID0gKFxuICB2YWx1ZTogU2lnbmFsLFxuICBob3N0OiBIb3N0RWxlbWVudCxcbiAgcHJvcGVydHk6IEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgZGF0YT86IFN1YnNjcmlwdGlvbkRhdGFcbikgPT4ge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsSW1wbCAmJiB2YWx1ZS4kaG9zdEVsZW1lbnQkICE9PSBob3N0ICYmIGhvc3QpIHtcbiAgICB2YWx1ZS4kaG9zdEVsZW1lbnQkID0gaG9zdDtcbiAgfVxuICByZXR1cm4gdHJhY2tTaWduYWwoKCkgPT4gdmFsdWUudmFsdWUsIGhvc3QsIHByb3BlcnR5LCBjb250YWluZXIsIGRhdGEpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9nZXRDb250ZXh0SG9zdEVsZW1lbnQgPSAoKSA9PiB7XG4gIHJldHVybiB0cnlHZXRJbnZva2VDb250ZXh0KCk/LiRob3N0RWxlbWVudCQ7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2dldENvbnRleHRFdmVudCA9ICgpOiB1bmtub3duID0+IHtcbiAgY29uc3QgaUN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgaWYgKGlDdHgpIHtcbiAgICByZXR1cm4gaUN0eC4kZXZlbnQkO1xuICB9XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2dldENvbnRleHRDb250YWluZXIgPSAoKTogQ29udGFpbmVyIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgaUN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgaWYgKGlDdHgpIHtcbiAgICByZXR1cm4gaUN0eC4kY29udGFpbmVyJCBhcyBDb250YWluZXI7XG4gIH1cbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIEBpbnRlcm5hbFxuICogTm8gbG9uZ2VyIHVzZWQgc2luY2UgdjJcbiAqL1xuZXhwb3J0IGNvbnN0IF9qc3hCcmFuY2ggPSA8VD4oaW5wdXQ/OiBUKSA9PiB7XG4gIHJldHVybiBpbnB1dDtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfd2FpdFVudGlsUmVuZGVyZWQgPSAoY29udGFpbmVyOiBDb250YWluZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGNvbnRhaW5lci4kcmVuZGVyUHJvbWlzZSQgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuIl19","/**\n * Dev-only code for qrl-class.ts: HMR support, capture validation, and dev property initialization.\n * This file is always imported but all code paths are guarded by `qDev` or `isBrowser &&\n * import.meta.hot`.\n */\nimport { isBrowser } from '@qwik.dev/core/build';\nimport { verifySerializable } from '../serdes/verify';\n/** Initialize dev properties on a LazyRef instance. */\nexport const initLazyRefDev = (lazy) => {\n    lazy.dev = null;\n    if (typeof document !== 'undefined') {\n        lazy.qrls = new Set();\n    }\n};\n/** Validate captured scope and register WeakRef tracking on a QRLClass instance. */\nexport const initQrlClassDev = (lazy, captures, qrl) => {\n    if (captures && typeof captures === 'object') {\n        for (let i = 0; i < captures.length; i++) {\n            const item = captures[i];\n            verifySerializable(item, 'Captured variable in the closure can not be serialized');\n        }\n    }\n    if (lazy.qrls) {\n        lazy.qrls.add(new WeakRef(qrl));\n    }\n};\n/** Set up HMR support: cache LazyRefs and invalidate on file changes. */\nexport const setupHmr = (LazyRefClass, setGetLazyRef) => {\n    if (!(isBrowser && import.meta.hot)) {\n        return;\n    }\n    const allLazyRefs = new Map();\n    setGetLazyRef((chunk, symbol, symbolFn, ref, container) => {\n        let lazyRef = allLazyRefs.get(symbol);\n        if (!lazyRef) {\n            lazyRef = new LazyRefClass(chunk, symbol, symbolFn, ref, container);\n            // Ignore sync QRLs\n            if (chunk !== '') {\n                allLazyRefs.set(symbol, lazyRef);\n            }\n        }\n        return lazyRef;\n    });\n    /** Replace or add `?t=<timestamp>` to a URL, preserving other query params. */\n    const bustTimestamp = (url, t) => {\n        const [path, query] = url.split('?', 2);\n        if (!query) {\n            return `${path}?t=${t}`;\n        }\n        const params = query.split('&').filter((p) => !p.startsWith('t='));\n        params.push(`t=${t}`);\n        return `${path}?${params.join('&')}`;\n    };\n    document.addEventListener('qHmr', (ev) => {\n        const files = ev.detail.files;\n        const t = ev.detail.t || document.__hmrT || Date.now();\n        let didReload = false;\n        for (const lazy of allLazyRefs.values()) {\n            const devFile = lazy.dev?.file || lazy.$chunk$;\n            if (!devFile || !files.some((file) => devFile.startsWith(file))) {\n                continue;\n            }\n            const chunk = lazy.$chunk$;\n            if (chunk) {\n                lazy.$chunk$ = bustTimestamp(chunk, t);\n                didReload = true;\n            }\n            const fnStr = lazy.$symbolFn$?.toString();\n            if (fnStr) {\n                const newStr = fnStr.replace(/import\\((['\"])(.+?)\\1\\)/, (match, p1, p2) => {\n                    const newPath = bustTimestamp(p2, t);\n                    return `import(${p1}${newPath}${p1})`;\n                });\n                if (newStr !== fnStr) {\n                    try {\n                        // eslint-disable-next-line no-new-func\n                        lazy.$symbolFn$ = new Function(`return (${newStr})`)();\n                        didReload = true;\n                    }\n                    catch (err) {\n                        console.error(`Failed to update symbolFn for ${lazy.$symbol$}`, err);\n                    }\n                }\n                else {\n                    console.warn(`Couldn't find import() in symbolFn for ${lazy.$symbol$}, cannot update it for HMR`, fnStr);\n                }\n            }\n            if (didReload) {\n                lazy.$ref$ = undefined;\n                document.__hmrDone = document.__hmrT;\n                if (lazy.qrls) {\n                    for (const qrlRef of lazy.qrls) {\n                        const qrl = qrlRef.deref();\n                        if (qrl) {\n                            if (qrl.resolved) {\n                                qrl.resolved = undefined;\n                            }\n                        }\n                        else {\n                            lazy.qrls.delete(qrlRef);\n                        }\n                    }\n                }\n            }\n        }\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLWNsYXNzLWRldi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcXJsL3FybC1jbGFzcy1kZXYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd0RCx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBYSxFQUFRLEVBQUU7SUFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsSUFBYSxFQUNiLFFBQXlELEVBQ3pELEdBQWtCLEVBQ1osRUFBRTtJQUNSLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLGtCQUFrQixDQUFDLElBQUksRUFBRSx3REFBd0QsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lB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SUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQzNCLElBQUksR0FBRyxFQUFFLENBQUM7NEJBQ1IsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ2pCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDOzRCQUMzQixDQUFDO3dCQUNILENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsSUFBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXYtb25seSBjb2RlIGZvciBxcmwtY2xhc3MudHM6IEhNUiBzdXBwb3J0LCBjYXB0dXJlIHZhbGlkYXRpb24sIGFuZCBkZXYgcHJvcGVydHkgaW5pdGlhbGl6YXRpb24uXG4gKiBUaGlzIGZpbGUgaXMgYWx3YXlzIGltcG9ydGVkIGJ1dCBhbGwgY29kZSBwYXRocyBhcmUgZ3VhcmRlZCBieSBgcURldmAgb3IgYGlzQnJvd3NlciAmJlxuICogaW1wb3J0Lm1ldGEuaG90YC5cbiAqL1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgdmVyaWZ5U2VyaWFsaXphYmxlIH0gZnJvbSAnLi4vc2VyZGVzL3ZlcmlmeSc7XG5pbXBvcnQgdHlwZSB7IExhenlSZWYsIFFSTENsYXNzIH0gZnJvbSAnLi9xcmwtY2xhc3MnO1xuXG4vKiogSW5pdGlhbGl6ZSBkZXYgcHJvcGVydGllcyBvbiBhIExhenlSZWYgaW5zdGFuY2UuICovXG5leHBvcnQgY29uc3QgaW5pdExhenlSZWZEZXYgPSAobGF6eTogTGF6eVJlZik6IHZvaWQgPT4ge1xuICBsYXp5LmRldiA9IG51bGw7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbGF6eS5xcmxzID0gbmV3IFNldCgpO1xuICB9XG59O1xuXG4vKiogVmFsaWRhdGUgY2FwdHVyZWQgc2NvcGUgYW5kIHJlZ2lzdGVyIFdlYWtSZWYgdHJhY2tpbmcgb24gYSBRUkxDbGFzcyBpbnN0YW5jZS4gKi9cbmV4cG9ydCBjb25zdCBpbml0UXJsQ2xhc3NEZXYgPSAoXG4gIGxhenk6IExhenlSZWYsXG4gIGNhcHR1cmVzOiBSZWFkb25seTx1bmtub3duW10+IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcXJsOiBRUkxDbGFzczxhbnk+XG4pOiB2b2lkID0+IHtcbiAgaWYgKGNhcHR1cmVzICYmIHR5cGVvZiBjYXB0dXJlcyA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhcHR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gY2FwdHVyZXNbaV07XG4gICAgICB2ZXJpZnlTZXJpYWxpemFibGUoaXRlbSwgJ0NhcHR1cmVkIHZhcmlhYmxlIGluIHRoZSBjbG9zdXJlIGNhbiBub3QgYmUgc2VyaWFsaXplZCcpO1xuICAgIH1cbiAgfVxuICBpZiAobGF6eS5xcmxzKSB7XG4gICAgbGF6eS5xcmxzLmFkZChuZXcgV2Vha1JlZihxcmwpKTtcbiAgfVxufTtcblxuLyoqIFNldCB1cCBITVIgc3VwcG9ydDogY2FjaGUgTGF6eVJlZnMgYW5kIGludmFsaWRhdGUgb24gZmlsZSBjaGFuZ2VzLiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwSG1yID0gKFxuICBMYXp5UmVmQ2xhc3M6IHR5cGVvZiBMYXp5UmVmLFxuICBzZXRHZXRMYXp5UmVmOiAoXG4gICAgZm46IDxUWVBFPihcbiAgICAgIGNodW5rOiBzdHJpbmcgfCBudWxsLFxuICAgICAgc3ltYm9sOiBzdHJpbmcsXG4gICAgICBzeW1ib2xGbjogbnVsbCB8ICgoKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFRZUEU+PiksXG4gICAgICByZWY6IGltcG9ydCgnLi4vdXRpbHMvdHlwZXMnKS5WYWx1ZU9yUHJvbWlzZTxUWVBFPiB8IHVuZGVmaW5lZCxcbiAgICAgIGNvbnRhaW5lcjogaW1wb3J0KCcuLi90eXBlcycpLkNvbnRhaW5lciB8IHVuZGVmaW5lZFxuICAgICkgPT4gTGF6eVJlZjxUWVBFPlxuICApID0+IHZvaWRcbik6IHZvaWQgPT4ge1xuICBpZiAoIShpc0Jyb3dzZXIgJiYgaW1wb3J0Lm1ldGEuaG90KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFsbExhenlSZWZzID0gbmV3IE1hcDxzdHJpbmcsIExhenlSZWY8YW55Pj4oKTtcblxuICBzZXRHZXRMYXp5UmVmKChjaHVuaywgc3ltYm9sLCBzeW1ib2xGbiwgcmVmLCBjb250YWluZXIpID0+IHtcbiAgICBsZXQgbGF6eVJlZiA9IGFsbExhenlSZWZzLmdldChzeW1ib2wpO1xuICAgIGlmICghbGF6eVJlZikge1xuICAgICAgbGF6eVJlZiA9IG5ldyBMYXp5UmVmQ2xhc3MoY2h1bmssIHN5bWJvbCwgc3ltYm9sRm4sIHJlZiwgY29udGFpbmVyKTtcbiAgICAgIC8vIElnbm9yZSBzeW5jIFFSTHNcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYWxsTGF6eVJlZnMuc2V0KHN5bWJvbCwgbGF6eVJlZik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXp5UmVmO1xuICB9KTtcblxuICAvKiogUmVwbGFjZSBvciBhZGQgYD90PTx0aW1lc3RhbXA+YCB0byBhIFVSTCwgcHJlc2VydmluZyBvdGhlciBxdWVyeSBwYXJhbXMuICovXG4gIGNvbnN0IGJ1c3RUaW1lc3RhbXAgPSAodXJsOiBzdHJpbmcsIHQ6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHVybC5zcGxpdCgnPycsIDIpO1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBgJHtwYXRofT90PSR7dH1gO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXMgPSBxdWVyeS5zcGxpdCgnJicpLmZpbHRlcigocCkgPT4gIXAuc3RhcnRzV2l0aCgndD0nKSk7XG4gICAgcGFyYW1zLnB1c2goYHQ9JHt0fWApO1xuICAgIHJldHVybiBgJHtwYXRofT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgfTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdxSG1yJyBhcyBhbnksIChldjogQ3VzdG9tRXZlbnQ8eyBmaWxlczogc3RyaW5nW107IHQ6IG51bWJlciB9PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZXYuZGV0YWlsLmZpbGVzO1xuICAgIGNvbnN0IHQgPSBldi5kZXRhaWwudCB8fCAoZG9jdW1lbnQgYXMgYW55KS5fX2htclQgfHwgRGF0ZS5ub3coKTtcbiAgICBsZXQgZGlkUmVsb2FkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBsYXp5IG9mIGFsbExhenlSZWZzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBkZXZGaWxlID0gbGF6eS5kZXY/LmZpbGUgfHwgbGF6eS4kY2h1bmskO1xuICAgICAgaWYgKCFkZXZGaWxlIHx8ICFmaWxlcy5zb21lKChmaWxlKSA9PiBkZXZGaWxlLnN0YXJ0c1dpdGgoZmlsZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2h1bmsgPSBsYXp5LiRjaHVuayQ7XG4gICAgICBpZiAoY2h1bmspIHtcbiAgICAgICAgKGxhenkgYXMgYW55KS4kY2h1bmskID0gYnVzdFRpbWVzdGFtcChjaHVuaywgdCk7XG4gICAgICAgIGRpZFJlbG9hZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBmblN0ciA9IGxhenkuJHN5bWJvbEZuJD8udG9TdHJpbmcoKTtcbiAgICAgIGlmIChmblN0cikge1xuICAgICAgICBjb25zdCBuZXdTdHIgPSBmblN0ci5yZXBsYWNlKC9pbXBvcnRcXCgoWydcIl0pKC4rPylcXDFcXCkvLCAobWF0Y2gsIHAxLCBwMikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBidXN0VGltZXN0YW1wKHAyLCB0KTtcbiAgICAgICAgICByZXR1cm4gYGltcG9ydCgke3AxfSR7bmV3UGF0aH0ke3AxfSlgO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5ld1N0ciAhPT0gZm5TdHIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAgICAgICAobGF6eSBhcyBhbnkpLiRzeW1ib2xGbiQgPSBuZXcgRnVuY3Rpb24oYHJldHVybiAoJHtuZXdTdHJ9KWApKCkgYXMgKCkgPT4gUHJvbWlzZTxcbiAgICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICAgICAgICAgPjtcbiAgICAgICAgICAgIGRpZFJlbG9hZCA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIHN5bWJvbEZuIGZvciAke2xhenkuJHN5bWJvbCR9YCwgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYENvdWxkbid0IGZpbmQgaW1wb3J0KCkgaW4gc3ltYm9sRm4gZm9yICR7bGF6eS4kc3ltYm9sJH0sIGNhbm5vdCB1cGRhdGUgaXQgZm9yIEhNUmAsXG4gICAgICAgICAgICBmblN0clxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaWRSZWxvYWQpIHtcbiAgICAgICAgbGF6eS4kcmVmJCA9IHVuZGVmaW5lZDtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkuX19obXJEb25lID0gKGRvY3VtZW50IGFzIGFueSkuX19obXJUO1xuICAgICAgICBpZiAobGF6eS5xcmxzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBxcmxSZWYgb2YgbGF6eS5xcmxzKSB7XG4gICAgICAgICAgICBjb25zdCBxcmwgPSBxcmxSZWYuZGVyZWYoKTtcbiAgICAgICAgICAgIGlmIChxcmwpIHtcbiAgICAgICAgICAgICAgaWYgKHFybC5yZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHFybC5yZXNvbHZlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGF6eS5xcmxzIS5kZWxldGUocXJsUmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcbiJdfQ==","// keep these imports above the rest to prevent circular dep issues\nimport { getPlatform, isServerPlatform } from '../platform/platform';\n// ^^^ keep these imports above the rest to prevent circular dep issues\nimport { isBrowser, isDev } from '@qwik.dev/core/build';\nimport { invokeApply, tryGetInvokeContext } from '../../use/use-core';\nimport { assertDefined } from '../error/assert';\nimport { qError } from '../error/error';\nimport { getQFuncs } from '../utils/markers';\nimport { isPromise, maybeThen } from '../utils/promises';\nimport { qDev, qTest } from '../utils/qdev';\nimport { isFunction } from '../utils/types';\nimport { initLazyRefDev, initQrlClassDev, setupHmr } from './qrl-class-dev';\nimport { getSymbolHash } from './qrl-utils';\n// @ts-expect-error we don't have types for the preloader\nimport { p as preload } from '@qwik.dev/core/preloader';\nimport { loading } from '../serdes/inflate';\nimport { ElementVNode } from '../vnode/element-vnode';\nlet getLazyRef = (chunk, symbol, symbolFn, ref, container) => {\n    return new LazyRef(chunk, symbol, symbolFn, ref, container);\n};\n/**\n * Shared lazy-loading reference that holds module loading metadata. Multiple QRLs pointing to the\n * same chunk+symbol can share a single LazyRef, differing only in their captured scope.\n */\nexport class LazyRef {\n    $chunk$;\n    $symbol$;\n    $symbolFn$;\n    $ref$;\n    $container$;\n    constructor($chunk$, $symbol$, $symbolFn$, $ref$, container) {\n        this.$chunk$ = $chunk$;\n        this.$symbol$ = $symbol$;\n        this.$symbolFn$ = $symbolFn$;\n        this.$ref$ = $ref$;\n        if ($ref$) {\n            this.$setRef$($ref$);\n        }\n        if (container && !$ref$ && typeof $chunk$ === 'string' && !$symbolFn$) {\n            // We only store the container if we're going to import the chunk\n            // Note that this container is not necessarily the same one as from the captures\n            this.$container$ = container;\n        }\n        qDev && initLazyRefDev(this);\n        /** Preload the chunk with somewhat lower probability when we create the QRL. */\n        if (isBrowser && $chunk$) {\n            preload($chunk$, 0.8);\n        }\n    }\n    /** We don't read hash very often so let's not allocate a string for every QRL */\n    get $hash$() {\n        return getSymbolHash(this.$symbol$);\n    }\n    $setRef$(ref) {\n        this.$ref$ = ref;\n        if (isPromise(ref)) {\n            ref.then((r) => (this.$ref$ = r), (err) => {\n                console.error(`qrl ${this.$symbol$} failed to load`, err);\n                // We shouldn't cache rejections, we can try again later\n                this.$ref$ = null;\n            });\n        }\n    }\n    /** Load the raw module export without capture binding. */\n    $load$() {\n        if (this.$ref$ != null) {\n            return this.$ref$;\n        }\n        if (this.$chunk$ === '') {\n            // Sync QRL\n            isDev && assertDefined(this.$container$, 'Sync QRL must have container element');\n            const hash = this.$container$.$instanceHash$;\n            const doc = this.$container$.element?.ownerDocument || document;\n            const qFuncs = getQFuncs(doc, hash);\n            return (this.$ref$ = qFuncs[Number(this.$symbol$)]);\n        }\n        if (isBrowser && this.$chunk$) {\n            /** We will run the QRL, so now the probability of the chunk is 100% */\n            preload(this.$chunk$, 1);\n        }\n        const symbol = this.$symbol$;\n        const importP = this.$symbolFn$\n            ? this.$symbolFn$().then((module) => module[symbol])\n            : getPlatform().importSymbol(this.$container$?.element, this.$chunk$, symbol);\n        this.$setRef$(importP);\n        return this.$ref$;\n    }\n}\nisBrowser &&\n    import.meta.hot &&\n    setupHmr(LazyRef, (fn) => {\n        getLazyRef = fn;\n    });\nconst QRL_STATE = Symbol('qrl-state');\n/**\n * QRL methods may run with `this` set either to the callable wrapper or directly to the backing\n * state object. This helper normalizes both cases to the shared backing state.\n */\nconst getInstance = (instance) => {\n    return instance?.[QRL_STATE] ?? instance;\n};\n/**\n * QRL state lives in a plain object. The callable wrapper stores that state under a symbol and uses\n * a shared prototype derived from Function.prototype for methods/getters. This keeps QRLs callable\n * without using a unique state object as each function's prototype.\n */\nexport class QRLClass {\n    $lazy$;\n    resolved = undefined;\n    // This is defined or undefined for the lifetime of the QRL, so we set it lazily\n    $captures$;\n    $container$;\n    constructor($lazy$, $captures$, container) {\n        this.$lazy$ = $lazy$;\n        if (qDev) {\n            initQrlClassDev($lazy$, $captures$, this);\n        }\n        if ($captures$) {\n            this.$captures$ = $captures$;\n            if (typeof $captures$ === 'string') {\n                // We cannot rely on the container of the lazy ref, it may be missing or different\n                this.$container$ = container;\n            }\n        }\n        // If it is plain value with deserialized or missing captures, resolve it immediately\n        // Otherwise we keep using the async path so we can wait for qrls to load\n        if ($lazy$.$ref$ != null && typeof this.$captures$ !== 'string' && !isPromise($lazy$.$ref$)) {\n            this.resolved = bindCaptures(this, $lazy$.$ref$);\n        }\n    }\n}\nconst qrlCallFn = function (withThis, ...args) {\n    const qrl = getInstance(this);\n    if (qrl.resolved) {\n        return qrl.resolved.apply(withThis, args);\n    }\n    // Not resolved yet: we'll return a promise\n    // grab the context while we are sync\n    const ctx = tryGetInvokeContext();\n    return qrlResolve\n        .call(qrl, ctx?.$container$)\n        .then(() => invokeApply.call(withThis, ctx, qrl.resolved, args));\n};\nconst qrlWithCaptures = function (captures) {\n    const qrl = getInstance(this);\n    const newQrl = new QRLClass(qrl.$lazy$, captures, qrl.$captures$ ? qrl.$container$ : undefined);\n    return makeQrlFn(newQrl);\n};\nconst qrlSetRef = function (ref) {\n    const qrl = getInstance(this);\n    qrl.$lazy$.$setRef$(ref);\n    qrl.resolved = bindCaptures(qrl, ref);\n};\nconst qrlResolve = async function (container) {\n    const qrl = getInstance(this);\n    return maybeThen($resolve$(qrl, container), () => qrl.resolved);\n};\nconst qrlGetSymbol = function () {\n    return getInstance(this).$lazy$.$symbol$;\n};\nconst qrlGetHash = function () {\n    return getInstance(this).$lazy$.$hash$;\n};\nconst qrlGetCaptured = function () {\n    const qrl = getInstance(this);\n    ensureQrlCaptures(qrl);\n    return qrl.$captures$;\n};\nconst qrlGetFn = function (currentCtx, beforeFn) {\n    const qrl = getInstance(this);\n    const bound = (...args) => {\n        if (!qrl.resolved) {\n            return qrlResolve.call(qrl).then((fn) => {\n                if (qDev && !isFunction(fn)) {\n                    throw qError(5 /* QError.qrlIsNotFunction */);\n                }\n                return bound(...args);\n            });\n        }\n        if (beforeFn && beforeFn() === false) {\n            return undefined;\n        }\n        return invokeApply(currentCtx, qrl.resolved, args);\n    };\n    return bound;\n};\nconst QRL_FUNCTION_PROTO = Object.create(Function.prototype, {\n    resolved: {\n        get() {\n            return this[QRL_STATE].resolved;\n        },\n        set(value) {\n            this[QRL_STATE].resolved = value;\n        },\n    },\n    $captures$: {\n        get() {\n            return this[QRL_STATE].$captures$;\n        },\n        set(value) {\n            this[QRL_STATE].$captures$ = value;\n        },\n    },\n    $container$: {\n        get() {\n            return this[QRL_STATE].$container$;\n        },\n        set(value) {\n            this[QRL_STATE].$container$ = value;\n        },\n    },\n    $lazy$: {\n        get() {\n            return this[QRL_STATE].$lazy$;\n        },\n    },\n    $chunk$: {\n        get() {\n            return this[QRL_STATE].$lazy$.$chunk$;\n        },\n    },\n    $symbol$: {\n        get() {\n            return this[QRL_STATE].$lazy$.$symbol$;\n        },\n    },\n    $hash$: {\n        get() {\n            return this[QRL_STATE].$lazy$.$hash$;\n        },\n    },\n    dev: {\n        get() {\n            return this[QRL_STATE].$lazy$.dev;\n        },\n    },\n    ...(qDev\n        ? {\n            $setDev$: {\n                value(dev) {\n                    this[QRL_STATE].$lazy$.dev = dev;\n                },\n            },\n        }\n        : undefined),\n    $callFn$: {\n        value: qrlCallFn,\n    },\n    w: {\n        value: qrlWithCaptures,\n    },\n    s: {\n        value: qrlSetRef,\n    },\n    resolve: {\n        value: qrlResolve,\n    },\n    getSymbol: {\n        value: qrlGetSymbol,\n    },\n    getHash: {\n        value: qrlGetHash,\n    },\n    getCaptured: {\n        value: qrlGetCaptured,\n    },\n    getFn: {\n        value: qrlGetFn,\n    },\n});\n/**\n * The current captured scope during QRL invocation. This is used to provide the lexical scope for\n * QRL functions. It is used one time per invocation, synchronously, so it is safe to store it in\n * module scope.\n *\n * @internal\n */\nexport let _captures = null;\nexport const setCaptures = (captures) => {\n    _captures = captures;\n};\nexport const deserializeCaptures = (container, captures) => {\n    const refs = [];\n    const captureIds = captures.split(' ');\n    for (let i = 0; i < captureIds.length; i++) {\n        const id = captureIds[i];\n        refs.push(container.$getObjectById$(id));\n    }\n    return refs;\n};\n/** Puts the qrl captures into `_captures`, and returns a Promise that should be awaited if possible */\nconst ensureQrlCaptures = (qrl) => {\n    // We read the captures once, synchronously, so no need to keep previous\n    _captures = qrl.$captures$;\n    const container = qrl.$container$;\n    if (typeof _captures === 'string') {\n        if (!container) {\n            throw qError(13 /* QError.qrlMissingContainer */);\n        }\n        const prevLoading = loading;\n        _captures = qrl.$captures$ = deserializeCaptures(container, _captures);\n        if (loading !== prevLoading) {\n            // return the loading promise so callers can await it\n            return loading;\n        }\n    }\n};\n// Wrap functions to provide their lexical scope\nconst bindCaptures = (qrl, ref) => {\n    if (typeof ref !== 'function' || !qrl.$captures$) {\n        return ref;\n    }\n    return function boundCaptures(...args) {\n        ensureQrlCaptures(qrl);\n        return ref.apply(this, args);\n    };\n};\nconst $resolve$ = (qrl, container) => {\n    const lazy = qrl.$lazy$;\n    const shouldDeserialize = typeof qrl.$captures$ === 'string';\n    if (shouldDeserialize && !qrl.$container$) {\n        if (container) {\n            qrl.$container$ = container;\n        }\n        else {\n            qrl.$container$ = tryGetInvokeContext()?.$container$;\n        }\n    }\n    if (qrl.resolved) {\n        return;\n    }\n    // Capture context while still sync\n    const start = now();\n    const ctx = tryGetInvokeContext();\n    // Load raw value via LazyRef - may be sync (e.g. sync QRLs) or async\n    const rawOrPromise = lazy.$load$();\n    const maybePromise = maybeThen(rawOrPromise, (raw) => {\n        qrl.resolved = bindCaptures(qrl, raw);\n    });\n    if (maybePromise) {\n        // We're importing; emit symbol usage event\n        const symbol = lazy.$symbol$;\n        emitUsedSymbol(symbol, ctx?.$hostElement$ instanceof ElementVNode ? ctx?.$hostElement$.node : undefined, start);\n    }\n    const capturedPromise = shouldDeserialize && qrl.$container$ && ensureQrlCaptures(qrl);\n    if (capturedPromise) {\n        return capturedPromise.then(() => maybePromise);\n    }\n    return maybePromise;\n};\n/**\n * Creates a QRL instance to represent a lazily loaded value. Normally this is a function, but it\n * can be any value.\n *\n * When the value is a function, calling the returned qrl will load the underlying code when\n * invoked, and call it with the captured scope. This always returns a promise since the code may\n * not be loaded yet.\n *\n * To get the underlying function without invoking it, await `qrl.resolve()` and then `qrl.resolved`\n * holds the loaded function, wrapped with the captured scope.\n *\n * @internal\n */\nexport const createQRL = (chunk, symbol, symbolRef, symbolFn, captures, container) => {\n    const lazy = getLazyRef(chunk, symbol, symbolFn, symbolRef, container);\n    const qrl = new QRLClass(lazy, captures, container);\n    return makeQrlFn(qrl);\n};\nconst makeQrlFn = (qrl) => {\n    // The QRL has to be callable, so we create a function and attach the per-instance state to it.\n    const qrlFn = async function (...args) {\n        return qrlCallFn.call(qrlFn, this, ...args);\n    };\n    qrlFn[QRL_STATE] = qrl;\n    Object.setPrototypeOf(qrlFn, QRL_FUNCTION_PROTO);\n    return qrlFn;\n};\nconst EMITTED = /*#__PURE__*/ new Set();\nexport const emitUsedSymbol = (symbol, element, reqTime) => {\n    if (!EMITTED.has(symbol)) {\n        EMITTED.add(symbol);\n        emitEvent('qsymbol', {\n            symbol,\n            element,\n            reqTime,\n        });\n    }\n};\nexport const emitEvent = (eventName, detail) => {\n    if (!qTest && !isServerPlatform() && typeof document === 'object') {\n        document.dispatchEvent(new CustomEvent(eventName, {\n            bubbles: false,\n            detail,\n        }));\n    }\n};\nconst now = () => {\n    if (qTest || isServerPlatform()) {\n        return 0;\n    }\n    if (typeof performance === 'object') {\n        return performance.now();\n    }\n    return 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLWNsYXNzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvcXJsLWNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1FQUFtRTtBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsdUVBQXVFO0FBRXZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQXVCLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBWSxNQUFNLGFBQWEsQ0FBQztBQUV0RCx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNER0RCxJQUFJLFVBQVUsR0FNTyxDQUFDLEtBQUssRUFBRSxNQUFN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c0NvbnRlbnQiOlsiLy8ga2VlcCB0aGVzZSBpbXBvcnRzIGFib3ZlIHRoZSByZXN0IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwIGlzc3Vlc1xuaW1wb3J0IHsgZ2V0UGxhdGZvcm0sIGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG4vLyBeXl4ga2VlcCB0aGVzZSBpbXBvcnRzIGFib3ZlIHRoZSByZXN0IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwIGlzc3Vlc1xuXG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgaW52b2tlQXBwbHksIHRyeUdldEludm9rZUNvbnRleHQsIHR5cGUgSW52b2tlQ29udGV4dCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkIH0gZnJvbSAnLi4vZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgZ2V0UUZ1bmNzIH0gZnJvbSAnLi4vdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBpc1Byb21pc2UsIG1heWJlVGhlbiB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IHFEZXYsIHFUZXN0IH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCB0eXBlIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBRUkxEZXYgfSBmcm9tICcuL3FybCc7XG5pbXBvcnQgeyBpbml0TGF6eVJlZkRldiwgaW5pdFFybENsYXNzRGV2LCBzZXR1cEhtciB9IGZyb20gJy4vcXJsLWNsYXNzLWRldic7XG5pbXBvcnQgeyBnZXRTeW1ib2xIYXNoLCBTWU5DX1FSTCB9IGZyb20gJy4vcXJsLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgUVJMLCBRcmxBcmdzLCBRcmxSZXR1cm4gfSBmcm9tICcuL3FybC5wdWJsaWMnO1xuLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSBkb24ndCBoYXZlIHR5cGVzIGZvciB0aGUgcHJlbG9hZGVyXG5pbXBvcnQgeyBwIGFzIHByZWxvYWQgfSBmcm9tICdAcXdpay5kZXYvY29yZS9wcmVsb2FkZXInO1xuaW1wb3J0IHsgRG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgbG9hZGluZyB9IGZyb20gJy4uL3NlcmRlcy9pbmZsYXRlJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRWxlbWVudFZOb2RlIH0gZnJvbSAnLi4vdm5vZGUvZWxlbWVudC12bm9kZSc7XG5cbmludGVyZmFjZSBTeW5jUVJMU3ltYm9sIHtcbiAgJHN5bWJvbCQ6IHR5cGVvZiBTWU5DX1FSTDtcbn1cblxuZXhwb3J0IHR5cGUgU3luY1FSTEludGVybmFsID0gUVJMSW50ZXJuYWwgJiBTeW5jUVJMU3ltYm9sO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHR5cGUgUVJMSW50ZXJuYWw8VFlQRSA9IHVua25vd24+ID0gUVJMPFRZUEU+ICYgUVJMSW50ZXJuYWxNZXRob2RzPFRZUEU+O1xuXG5leHBvcnQgdHlwZSBRUkxJbnRlcm5hbE1ldGhvZHM8VFlQRT4gPSB7XG4gIHJlYWRvbmx5ICRjaHVuayQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5ICRzeW1ib2wkOiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRoYXNoJDogc3RyaW5nO1xuXG4gIC8qKiBJZiBpdCdzIGEgc3RyaW5nIGl0J3Mgc2VyaWFsaXplZCAqL1xuICByZWFkb25seSAkY2FwdHVyZXMkPzogUmVhZG9ubHk8dW5rbm93bltdPiB8IHN0cmluZyB8IG51bGw7XG4gIGRldj86IFFSTERldiB8IG51bGw7XG5cbiAgcmVzb2x2ZShjb250YWluZXI/OiBDb250YWluZXIpOiBQcm9taXNlPFRZUEU+O1xuICByZXNvbHZlZDogdW5kZWZpbmVkIHwgVFlQRTtcblxuICBnZXRTeW1ib2woKTogc3RyaW5nO1xuICBnZXRIYXNoKCk6IHN0cmluZztcbiAgZ2V0Q2FwdHVyZWQoKTogdW5rbm93bltdIHwgbnVsbDtcbiAgZ2V0Rm4oXG4gICAgY3VycmVudEN0eD86IEludm9rZUNvbnRleHQsXG4gICAgLyoqIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlIGZ1bmN0aW9uIGV4ZWN1dGlvbiB3aWxsIGJlIHNraXBwZWQgKi9cbiAgICBiZWZvcmVGbj86ICgpID0+IHZvaWQgfCBmYWxzZVxuICApOiBUWVBFIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55XG4gICAgPyAoLi4uYXJnczogUGFyYW1ldGVyczxUWVBFPikgPT4gVmFsdWVPclByb21pc2U8UmV0dXJuVHlwZTxUWVBFPiB8IHVuZGVmaW5lZD5cbiAgICA6IC8vIHVua25vd24gaW5zdGVhZCBvZiBuZXZlciBzbyB3ZSBhbGxvdyBhc3NpZ25pbmcgZnVuY3Rpb24gUVJMcyB0byBhbnlcbiAgICAgIHVua25vd247XG5cbiAgJGNhbGxGbiQod2l0aFRoaXM6IHVua25vd24sIC4uLmFyZ3M6IFFybEFyZ3M8VFlQRT4pOiBWYWx1ZU9yUHJvbWlzZTxRcmxSZXR1cm48VFlQRT4+O1xuICAkc2V0RGV2JChkZXY6IFFSTERldiB8IG51bGwpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBcIndpdGggY2FwdHVyZXNcIiAtIEdldCBhIG5ldyBRUkwgZm9yIHRoZXNlIGNhcHR1cmVzLCByZXVzaW5nIHRoZSBsYXp5IHJlZi4gSXQncyBhbiBpbnRlcm5hbFxuICAgKiBtZXRob2QgYnV0IHdlIG5lZWQgdG8gaGF2ZSBhIHN0YWJsZSBuYW1lIGJlY2F1c2UgaXQgZ2V0cyBjYWxsZWQgaW4gdXNlciBjb2RlIGJ5IHRoZSBvcHRpbWl6ZXIsXG4gICAqIGFmdGVyIHRoZSAkbmFtZSQgcHJvcHMgYXJlIG1hbmdsZWRcbiAgICovXG4gIHcoY2FwdHVyZXM6IFJlYWRvbmx5PHVua25vd25bXT4gfCBzdHJpbmcgfCBudWxsKTogUVJMSW50ZXJuYWw8VFlQRT47XG5cbiAgLyoqXG4gICAqIFwic2V0IHJlZlwiIC0gU2V0IHRoZSByZWYgb2YgdGhlIFFSTC4gSXQncyBhbiBpbnRlcm5hbCBtZXRob2QgYnV0IHdlIG5lZWQgdG8gaGF2ZSBhIHN0YWJsZSBuYW1lXG4gICAqIGJlY2F1c2UgaXQgZ2V0cyBjYWxsZWQgaW4gdXNlciBjb2RlIGJ5IHRoZSBvcHRpbWl6ZXIsIGFmdGVyIHRoZSAkbmFtZSQgcHJvcHMgYXJlIG1hbmdsZWRcbiAgICovXG4gIHMocmVmOiBWYWx1ZU9yUHJvbWlzZTxUWVBFPik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE5lZWRlZCBmb3IgZGVzZXJpYWxpemF0aW9uIGFuZCBpbXBvcnRpbmcuIFdlIGRvbid0IGFsd2F5cyBoYXZlIHRoZSBjb250YWluZXIgd2hpbGUgY3JlYXRpbmdcbiAgICogcXJscyBpbiBhc3luYyBzZWN0aW9ucyBvZiBjb2RlXG4gICAqL1xuICByZWFkb25seSAkY29udGFpbmVyJD86IENvbnRhaW5lciB8IG51bGw7XG5cbiAgLyoqIFRoZSBzaGFyZWQgbGF6eS1sb2FkaW5nIHJlZmVyZW5jZSAqL1xuICByZWFkb25seSAkbGF6eSQ6IExhenlSZWY8VFlQRT47XG59O1xuXG5sZXQgZ2V0TGF6eVJlZjogPFRZUEU+KFxuICBjaHVuazogc3RyaW5nIHwgbnVsbCxcbiAgc3ltYm9sOiBzdHJpbmcsXG4gIHN5bWJvbEZuOiBudWxsIHwgKCgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgVFlQRT4+KSxcbiAgcmVmOiBWYWx1ZU9yUHJvbWlzZTxUWVBFPiB8IHVuZGVmaW5lZCxcbiAgY29udGFpbmVyOiBDb250YWluZXIgfCB1bmRlZmluZWRcbikgPT4gTGF6eVJlZjxUWVBFPiA9IChjaHVuaywgc3ltYm9sLCBzeW1ib2xGbiwgcmVmLCBjb250YWluZXIpID0+IHtcbiAgcmV0dXJuIG5ldyBMYXp5UmVmKGNodW5rLCBzeW1ib2wsIHN5bWJvbEZuLCByZWYsIGNvbnRhaW5lcik7XG59O1xuXG4vKipcbiAqIFNoYXJlZCBsYXp5LWxvYWRpbmcgcmVmZXJlbmNlIHRoYXQgaG9sZHMgbW9kdWxlIGxvYWRpbmcgbWV0YWRhdGEuIE11bHRpcGxlIFFSTHMgcG9pbnRpbmcgdG8gdGhlXG4gKiBzYW1lIGNodW5rK3N5bWJvbCBjYW4gc2hhcmUgYSBzaW5nbGUgTGF6eVJlZiwgZGlmZmVyaW5nIG9ubHkgaW4gdGhlaXIgY2FwdHVyZWQgc2NvcGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXp5UmVmPFRZUEUgPSB1bmtub3duPiB7XG4gICRjb250YWluZXIkOiBDb250YWluZXIgfCB1bmRlZmluZWQ7XG4gIC8vIERvbid0IGFsbG9jYXRlIGRldiBwcm9wZXJ0eSBpbW1lZGlhdGVseSBzbyB0aGF0IGluIHByb2Qgd2UgZG9uJ3QgaGF2ZSB0aGlzIHByb3BlcnR5XG4gIGRlY2xhcmUgZGV2PzogUVJMRGV2IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgLy8gZG9jdW1lbnRlciBmYWlscyBvbiBXZWFrUmVmXG4gIGRlY2xhcmUgcXJscz86IFNldDxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5ICRjaHVuayQ6IHN0cmluZyB8IG51bGwsXG4gICAgcmVhZG9ubHkgJHN5bWJvbCQ6IHN0cmluZyxcbiAgICByZWFkb25seSAkc3ltYm9sRm4kOiB1bmRlZmluZWQgfCBudWxsIHwgKCgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgVFlQRT4+KSxcbiAgICBwdWJsaWMgJHJlZiQ/OiBudWxsIHwgVmFsdWVPclByb21pc2U8VFlQRT4sXG4gICAgY29udGFpbmVyPzogQ29udGFpbmVyIHwgbnVsbFxuICApIHtcbiAgICBpZiAoJHJlZiQpIHtcbiAgICAgIHRoaXMuJHNldFJlZiQoJHJlZiQpO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyICYmICEkcmVmJCAmJiB0eXBlb2YgJGNodW5rJCA9PT0gJ3N0cmluZycgJiYgISRzeW1ib2xGbiQpIHtcbiAgICAgIC8vIFdlIG9ubHkgc3RvcmUgdGhlIGNvbnRhaW5lciBpZiB3ZSdyZSBnb2luZyB0byBpbXBvcnQgdGhlIGNodW5rXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBjb250YWluZXIgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9uZSBhcyBmcm9tIHRoZSBjYXB0dXJlc1xuICAgICAgdGhpcy4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgICB9XG4gICAgcURldiAmJiBpbml0TGF6eVJlZkRldih0aGlzKTtcblxuICAgIC8qKiBQcmVsb2FkIHRoZSBjaHVuayB3aXRoIHNvbWV3aGF0IGxvd2VyIHByb2JhYmlsaXR5IHdoZW4gd2UgY3JlYXRlIHRoZSBRUkwuICovXG4gICAgaWYgKGlzQnJvd3NlciAmJiAkY2h1bmskKSB7XG4gICAgICBwcmVsb2FkKCRjaHVuayQsIDAuOCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdlIGRvbid0IHJlYWQgaGFzaCB2ZXJ5IG9mdGVuIHNvIGxldCdzIG5vdCBhbGxvY2F0ZSBhIHN0cmluZyBmb3IgZXZlcnkgUVJMICovXG4gIGdldCAkaGFzaCQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0U3ltYm9sSGFzaCh0aGlzLiRzeW1ib2wkKTtcbiAgfVxuXG4gICRzZXRSZWYkKHJlZjogVmFsdWVPclByb21pc2U8VFlQRT4pIHtcbiAgICB0aGlzLiRyZWYkID0gcmVmO1xuICAgIGlmIChpc1Byb21pc2UocmVmKSkge1xuICAgICAgcmVmLnRoZW4oXG4gICAgICAgIChyKSA9PiAodGhpcy4kcmVmJCA9IHIpLFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgcXJsICR7dGhpcy4kc3ltYm9sJH0gZmFpbGVkIHRvIGxvYWRgLCBlcnIpO1xuICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBjYWNoZSByZWplY3Rpb25zLCB3ZSBjYW4gdHJ5IGFnYWluIGxhdGVyXG4gICAgICAgICAgdGhpcy4kcmVmJCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIExvYWQgdGhlIHJhdyBtb2R1bGUgZXhwb3J0IHdpdGhvdXQgY2FwdHVyZSBiaW5kaW5nLiAqL1xuICAkbG9hZCQoKTogVmFsdWVPclByb21pc2U8VFlQRT4ge1xuICAgIGlmICh0aGlzLiRyZWYkICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWYkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRjaHVuayQgPT09ICcnKSB7XG4gICAgICAvLyBTeW5jIFFSTFxuICAgICAgaXNEZXYgJiYgYXNzZXJ0RGVmaW5lZCh0aGlzLiRjb250YWluZXIkLCAnU3luYyBRUkwgbXVzdCBoYXZlIGNvbnRhaW5lciBlbGVtZW50Jyk7XG4gICAgICBjb25zdCBoYXNoID0gKHRoaXMuJGNvbnRhaW5lciQgYXMgRG9tQ29udGFpbmVyKS4kaW5zdGFuY2VIYXNoJDtcbiAgICAgIGNvbnN0IGRvYyA9ICh0aGlzLiRjb250YWluZXIkIGFzIERvbUNvbnRhaW5lcikuZWxlbWVudD8ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHFGdW5jcyA9IGdldFFGdW5jcyhkb2MsIGhhc2gpO1xuICAgICAgcmV0dXJuICh0aGlzLiRyZWYkID0gcUZ1bmNzW051bWJlcih0aGlzLiRzeW1ib2wkKV0gYXMgVFlQRSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQnJvd3NlciAmJiB0aGlzLiRjaHVuayQpIHtcbiAgICAgIC8qKiBXZSB3aWxsIHJ1biB0aGUgUVJMLCBzbyBub3cgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBjaHVuayBpcyAxMDAlICovXG4gICAgICBwcmVsb2FkKHRoaXMuJGNodW5rJCwgMSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ltYm9sID0gdGhpcy4kc3ltYm9sJDtcbiAgICBjb25zdCBpbXBvcnRQOiBQcm9taXNlPFRZUEU+ID0gdGhpcy4kc3ltYm9sRm4kXG4gICAgICA/IHRoaXMuJHN5bWJvbEZuJCgpLnRoZW4oKG1vZHVsZSkgPT4gbW9kdWxlW3N5bWJvbF0gYXMgVFlQRSlcbiAgICAgIDogKGdldFBsYXRmb3JtKCkuaW1wb3J0U3ltYm9sKFxuICAgICAgICAgICh0aGlzLiRjb250YWluZXIkIGFzIERvbUNvbnRhaW5lciB8IG51bGwpPy5lbGVtZW50LFxuICAgICAgICAgIHRoaXMuJGNodW5rJCxcbiAgICAgICAgICBzeW1ib2xcbiAgICAgICAgKSBhcyBQcm9taXNlPFRZUEU+KTtcblxuICAgIHRoaXMuJHNldFJlZiQoaW1wb3J0UCk7XG5cbiAgICByZXR1cm4gdGhpcy4kcmVmJCBhcyBUWVBFO1xuICB9XG59XG5cbmlzQnJvd3NlciAmJlxuICBpbXBvcnQubWV0YS5ob3QgJiZcbiAgc2V0dXBIbXIoTGF6eVJlZiwgKGZuKSA9PiB7XG4gICAgZ2V0TGF6eVJlZiA9IGZuO1xuICB9KTtcblxuY29uc3QgUVJMX1NUQVRFID0gU3ltYm9sKCdxcmwtc3RhdGUnKTtcblxudHlwZSBRUkxDYWxsYWJsZTxUWVBFID0gdW5rbm93bj4gPSBRUkxJbnRlcm5hbDxUWVBFPiAmIHtcbiAgW1FSTF9TVEFURV06IFFSTENsYXNzPFRZUEU+O1xufTtcblxuLyoqXG4gKiBRUkwgbWV0aG9kcyBtYXkgcnVuIHdpdGggYHRoaXNgIHNldCBlaXRoZXIgdG8gdGhlIGNhbGxhYmxlIHdyYXBwZXIgb3IgZGlyZWN0bHkgdG8gdGhlIGJhY2tpbmdcbiAqIHN0YXRlIG9iamVjdC4gVGhpcyBoZWxwZXIgbm9ybWFsaXplcyBib3RoIGNhc2VzIHRvIHRoZSBzaGFyZWQgYmFja2luZyBzdGF0ZS5cbiAqL1xuY29uc3QgZ2V0SW5zdGFuY2UgPSA8VFlQRT4oaW5zdGFuY2U6IGFueSk6IFFSTENsYXNzPFRZUEU+ID0+IHtcbiAgcmV0dXJuIChpbnN0YW5jZT8uW1FSTF9TVEFURV0gYXMgUVJMQ2xhc3M8VFlQRT4gfCB1bmRlZmluZWQpID8/IGluc3RhbmNlO1xufTtcblxuLyoqXG4gKiBRUkwgc3RhdGUgbGl2ZXMgaW4gYSBwbGFpbiBvYmplY3QuIFRoZSBjYWxsYWJsZSB3cmFwcGVyIHN0b3JlcyB0aGF0IHN0YXRlIHVuZGVyIGEgc3ltYm9sIGFuZCB1c2VzXG4gKiBhIHNoYXJlZCBwcm90b3R5cGUgZGVyaXZlZCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSBmb3IgbWV0aG9kcy9nZXR0ZXJzLiBUaGlzIGtlZXBzIFFSTHMgY2FsbGFibGVcbiAqIHdpdGhvdXQgdXNpbmcgYSB1bmlxdWUgc3RhdGUgb2JqZWN0IGFzIGVhY2ggZnVuY3Rpb24ncyBwcm90b3R5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRUkxDbGFzczxUWVBFPiB7XG4gIHJlc29sdmVkOiB1bmRlZmluZWQgfCBUWVBFID0gdW5kZWZpbmVkO1xuICAvLyBUaGlzIGlzIGRlZmluZWQgb3IgdW5kZWZpbmVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIFFSTCwgc28gd2Ugc2V0IGl0IGxhemlseVxuICAkY2FwdHVyZXMkPzogUmVhZG9ubHk8dW5rbm93bltdPiB8IHN0cmluZyB8IG51bGw7XG4gICRjb250YWluZXIkPzogQ29udGFpbmVyIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSAkbGF6eSQ6IExhenlSZWY8VFlQRT4sXG4gICAgJGNhcHR1cmVzJD86IFJlYWRvbmx5PHVua25vd25bXT4gfCBzdHJpbmcgfCBudWxsLFxuICAgIGNvbnRhaW5lcj86IENvbnRhaW5lciB8IG51bGxcbiAgKSB7XG4gICAgaWYgKHFEZXYpIHtcbiAgICAgIGluaXRRcmxDbGFzc0RldigkbGF6eSQsICRjYXB0dXJlcyQsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAoJGNhcHR1cmVzJCkge1xuICAgICAgdGhpcy4kY2FwdHVyZXMkID0gJGNhcHR1cmVzJDtcbiAgICAgIGlmICh0eXBlb2YgJGNhcHR1cmVzJCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gV2UgY2Fubm90IHJlbHkgb24gdGhlIGNvbnRhaW5lciBvZiB0aGUgbGF6eSByZWYsIGl0IG1heSBiZSBtaXNzaW5nIG9yIGRpZmZlcmVudFxuICAgICAgICB0aGlzLiRjb250YWluZXIkID0gY29udGFpbmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGl0IGlzIHBsYWluIHZhbHVlIHdpdGggZGVzZXJpYWxpemVkIG9yIG1pc3NpbmcgY2FwdHVyZXMsIHJlc29sdmUgaXQgaW1tZWRpYXRlbHlcbiAgICAvLyBPdGhlcndpc2Ugd2Uga2VlcCB1c2luZyB0aGUgYXN5bmMgcGF0aCBzbyB3ZSBjYW4gd2FpdCBmb3IgcXJscyB0byBsb2FkXG4gICAgaWYgKCRsYXp5JC4kcmVmJCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLiRjYXB0dXJlcyQgIT09ICdzdHJpbmcnICYmICFpc1Byb21pc2UoJGxhenkkLiRyZWYkKSkge1xuICAgICAgdGhpcy5yZXNvbHZlZCA9IGJpbmRDYXB0dXJlcyh0aGlzLCAkbGF6eSQuJHJlZiQgYXMgVFlQRSk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHFybENhbGxGbiA9IGZ1bmN0aW9uIDxUWVBFPihcbiAgdGhpczogUVJMQ2xhc3M8VFlQRT4gfCBRUkxDYWxsYWJsZTxUWVBFPixcbiAgd2l0aFRoaXM6IHVua25vd24sXG4gIC4uLmFyZ3M6IFFybEFyZ3M8VFlQRT5cbik6IFZhbHVlT3JQcm9taXNlPFFybFJldHVybjxUWVBFPj4ge1xuICBjb25zdCBxcmwgPSBnZXRJbnN0YW5jZTxUWVBFPih0aGlzKTtcbiAgaWYgKHFybC5yZXNvbHZlZCkge1xuICAgIHJldHVybiAocXJsLnJlc29sdmVkIGFzIGFueSkuYXBwbHkod2l0aFRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgLy8gTm90IHJlc29sdmVkIHlldDogd2UnbGwgcmV0dXJuIGEgcHJvbWlzZVxuXG4gIC8vIGdyYWIgdGhlIGNvbnRleHQgd2hpbGUgd2UgYXJlIHN5bmNcbiAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuXG4gIHJldHVybiBxcmxSZXNvbHZlXG4gICAgLmNhbGwocXJsLCBjdHg/LiRjb250YWluZXIkKVxuICAgIC50aGVuKCgpID0+IGludm9rZUFwcGx5LmNhbGwod2l0aFRoaXMsIGN0eCwgcXJsLnJlc29sdmVkIGFzIGFueSwgYXJncykpO1xufTtcblxuY29uc3QgcXJsV2l0aENhcHR1cmVzID0gZnVuY3Rpb24gPFRZUEU+KFxuICB0aGlzOiBRUkxDbGFzczxUWVBFPiB8IFFSTENhbGxhYmxlPFRZUEU+LFxuICBjYXB0dXJlczogUmVhZG9ubHk8dW5rbm93bltdPiB8IHN0cmluZyB8IG51bGxcbik6IFFSTEludGVybmFsPFRZUEU+IHtcbiAgY29uc3QgcXJsID0gZ2V0SW5zdGFuY2U8VFlQRT4odGhpcyk7XG4gIGNvbnN0IG5ld1FybCA9IG5ldyBRUkxDbGFzczxUWVBFPihcbiAgICBxcmwuJGxhenkkLFxuICAgIGNhcHR1cmVzISxcbiAgICBxcmwuJGNhcHR1cmVzJCA/IHFybC4kY29udGFpbmVyJCA6IHVuZGVmaW5lZFxuICApO1xuICByZXR1cm4gbWFrZVFybEZuKG5ld1FybCk7XG59O1xuXG5jb25zdCBxcmxTZXRSZWYgPSBmdW5jdGlvbiA8VFlQRT4oXG4gIHRoaXM6IFFSTENsYXNzPFRZUEU+IHwgUVJMQ2FsbGFibGU8VFlQRT4sXG4gIHJlZjogVmFsdWVPclByb21pc2U8VFlQRT5cbikge1xuICBjb25zdCBxcmwgPSBnZXRJbnN0YW5jZTxUWVBFPih0aGlzKTtcbiAgcXJsLiRsYXp5JC4kc2V0UmVmJChyZWYpO1xuICBxcmwucmVzb2x2ZWQgPSBiaW5kQ2FwdHVyZXMocXJsLCByZWYgYXMgVFlQRSk7XG59O1xuXG5jb25zdCBxcmxSZXNvbHZlID0gYXN5bmMgZnVuY3Rpb24gPFRZUEU+KFxuICB0aGlzOiBRUkxDbGFzczxUWVBFPiB8IFFSTENhbGxhYmxlPFRZUEU+LFxuICBjb250YWluZXI/OiBDb250YWluZXJcbik6IFByb21pc2U8VFlQRT4ge1xuICBjb25zdCBxcmwgPSBnZXRJbnN0YW5jZTxUWVBFPih0aGlzKTtcbiAgcmV0dXJuIG1heWJlVGhlbigkcmVzb2x2ZSQocXJsLCBjb250YWluZXIpLCAoKSA9PiBxcmwucmVzb2x2ZWQhKTtcbn07XG5cbmNvbnN0IHFybEdldFN5bWJvbCA9IGZ1bmN0aW9uIDxUWVBFPih0aGlzOiBRUkxDbGFzczxUWVBFPiB8IFFSTENhbGxhYmxlPFRZUEU+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEluc3RhbmNlPFRZUEU+KHRoaXMpLiRsYXp5JC4kc3ltYm9sJDtcbn07XG5cbmNvbnN0IHFybEdldEhhc2ggPSBmdW5jdGlvbiA8VFlQRT4odGhpczogUVJMQ2xhc3M8VFlQRT4gfCBRUkxDYWxsYWJsZTxUWVBFPik6IHN0cmluZyB7XG4gIHJldHVybiBnZXRJbnN0YW5jZTxUWVBFPih0aGlzKS4kbGF6eSQuJGhhc2gkO1xufTtcblxuY29uc3QgcXJsR2V0Q2FwdHVyZWQgPSBmdW5jdGlvbiA8VFlQRT4odGhpczogUVJMQ2xhc3M8VFlQRT4gfCBRUkxDYWxsYWJsZTxUWVBFPik6IHVua25vd25bXSB8IG51bGwge1xuICBjb25zdCBxcmwgPSBnZXRJbnN0YW5jZTxUWVBFPih0aGlzKTtcbiAgZW5zdXJlUXJsQ2FwdHVyZXMocXJsKTtcbiAgcmV0dXJuIHFybC4kY2FwdHVyZXMkIGFzIHVua25vd25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBxcmxHZXRGbiA9IGZ1bmN0aW9uIDxUWVBFPihcbiAgdGhpczogUVJMQ2xhc3M8VFlQRT4gfCBRUkxDYWxsYWJsZTxUWVBFPixcbiAgY3VycmVudEN0eD86IEludm9rZUNvbnRleHQsXG4gIGJlZm9yZUZuPzogKCkgPT4gdm9pZCB8IGZhbHNlXG4pOiBUWVBFIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55XG4gID8gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VFlQRT4pID0+IFZhbHVlT3JQcm9taXNlPFJldHVyblR5cGU8VFlQRT4gfCB1bmRlZmluZWQ+XG4gIDogLy8gdW5rbm93biBpbnN0ZWFkIG9mIG5ldmVyIHNvIHdlIGFsbG93IGFzc2lnbmluZyBmdW5jdGlvbiBRUkxzIHRvIGFueVxuICAgIHVua25vd24ge1xuICBjb25zdCBxcmwgPSBnZXRJbnN0YW5jZTxUWVBFPih0aGlzKTtcbiAgY29uc3QgYm91bmQgPSAoLi4uYXJnczogUXJsQXJnczxUWVBFPik6IHVua25vd24gPT4ge1xuICAgIGlmICghcXJsLnJlc29sdmVkKSB7XG4gICAgICByZXR1cm4gcXJsUmVzb2x2ZS5jYWxsKHFybCkudGhlbigoZm4pID0+IHtcbiAgICAgICAgaWYgKHFEZXYgJiYgIWlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5xcmxJc05vdEZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm91bmQoLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGJlZm9yZUZuICYmIGJlZm9yZUZuKCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gaW52b2tlQXBwbHkoY3VycmVudEN0eCwgcXJsLnJlc29sdmVkIGFzIGFueSwgYXJncyk7XG4gIH07XG4gIHJldHVybiBib3VuZCBhcyBhbnk7XG59O1xuXG5jb25zdCBRUkxfRlVOQ1RJT05fUFJPVE86IFFSTEludGVybmFsTWV0aG9kczxhbnk+ID0gT2JqZWN0LmNyZWF0ZShGdW5jdGlvbi5wcm90b3R5cGUsIHtcbiAgcmVzb2x2ZWQ6IHtcbiAgICBnZXQodGhpczogUVJMQ2FsbGFibGU8YW55Pikge1xuICAgICAgcmV0dXJuIHRoaXNbUVJMX1NUQVRFXS5yZXNvbHZlZDtcbiAgICB9LFxuICAgIHNldCh0aGlzOiBRUkxDYWxsYWJsZTxhbnk+LCB2YWx1ZTogdW5rbm93bikge1xuICAgICAgdGhpc1tRUkxfU1RBVEVdLnJlc29sdmVkID0gdmFsdWU7XG4gICAgfSxcbiAgfSxcbiAgJGNhcHR1cmVzJDoge1xuICAgIGdldCh0aGlzOiBRUkxDYWxsYWJsZTxhbnk+KSB7XG4gICAgICByZXR1cm4gdGhpc1tRUkxfU1RBVEVdLiRjYXB0dXJlcyQ7XG4gICAgfSxcbiAgICBzZXQodGhpczogUVJMQ2FsbGFibGU8YW55PiwgdmFsdWU6IFJlYWRvbmx5PHVua25vd25bXT4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzW1FSTF9TVEFURV0uJGNhcHR1cmVzJCA9IHZhbHVlO1xuICAgIH0sXG4gIH0sXG4gICRjb250YWluZXIkOiB7XG4gICAgZ2V0KHRoaXM6IFFSTENhbGxhYmxlPGFueT4pIHtcbiAgICAgIHJldHVybiB0aGlzW1FSTF9TVEFURV0uJGNvbnRhaW5lciQ7XG4gICAgfSxcbiAgICBzZXQodGhpczogUVJMQ2FsbGFibGU8YW55PiwgdmFsdWU6IENvbnRhaW5lciB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXNbUVJMX1NUQVRFXS4kY29udGFpbmVyJCA9IHZhbHVlO1xuICAgIH0sXG4gIH0sXG4gICRsYXp5JDoge1xuICAgIGdldCh0aGlzOiBRUkxDYWxsYWJsZTxhbnk+KSB7XG4gICAgICByZXR1cm4gdGhpc1tRUkxfU1RBVEVdLiRsYXp5JDtcbiAgICB9LFxuICB9LFxuICAkY2h1bmskOiB7XG4gICAgZ2V0KHRoaXM6IFFSTENhbGxhYmxlPGFueT4pIHtcbiAgICAgIHJldHVybiB0aGlzW1FSTF9TVEFURV0uJGxhenkkLiRjaHVuayQ7XG4gICAgfSxcbiAgfSxcbiAgJHN5bWJvbCQ6IHtcbiAgICBnZXQodGhpczogUVJMQ2FsbGFibGU8YW55Pikge1xuICAgICAgcmV0dXJuIHRoaXNbUVJMX1NUQVRFXS4kbGF6eSQuJHN5bWJvbCQ7XG4gICAgfSxcbiAgfSxcbiAgJGhhc2gkOiB7XG4gICAgZ2V0KHRoaXM6IFFSTENhbGxhYmxlPGFueT4pIHtcbiAgICAgIHJldHVybiB0aGlzW1FSTF9TVEFURV0uJGxhenkkLiRoYXNoJDtcbiAgICB9LFxuICB9LFxuICBkZXY6IHtcbiAgICBnZXQodGhpczogUVJMQ2FsbGFibGU8YW55Pikge1xuICAgICAgcmV0dXJuIHRoaXNbUVJMX1NUQVRFXS4kbGF6eSQuZGV2O1xuICAgIH0sXG4gIH0sXG4gIC4uLihxRGV2XG4gICAgPyB7XG4gICAgICAgICRzZXREZXYkOiB7XG4gICAgICAgICAgdmFsdWUodGhpczogUVJMQ2FsbGFibGU8YW55PiwgZGV2OiBRUkxEZXYgfCBudWxsKSB7XG4gICAgICAgICAgICB0aGlzW1FSTF9TVEFURV0uJGxhenkkLmRldiA9IGRldjtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkKSxcbiAgJGNhbGxGbiQ6IHtcbiAgICB2YWx1ZTogcXJsQ2FsbEZuLFxuICB9LFxuICB3OiB7XG4gICAgdmFsdWU6IHFybFdpdGhDYXB0dXJlcyxcbiAgfSxcbiAgczoge1xuICAgIHZhbHVlOiBxcmxTZXRSZWYsXG4gIH0sXG4gIHJlc29sdmU6IHtcbiAgICB2YWx1ZTogcXJsUmVzb2x2ZSxcbiAgfSxcbiAgZ2V0U3ltYm9sOiB7XG4gICAgdmFsdWU6IHFybEdldFN5bWJvbCxcbiAgfSxcbiAgZ2V0SGFzaDoge1xuICAgIHZhbHVlOiBxcmxHZXRIYXNoLFxuICB9LFxuICBnZXRDYXB0dXJlZDoge1xuICAgIHZhbHVlOiBxcmxHZXRDYXB0dXJlZCxcbiAgfSxcbiAgZ2V0Rm46IHtcbiAgICB2YWx1ZTogcXJsR2V0Rm4sXG4gIH0sXG59KTtcblxuLyoqXG4gKiBUaGUgY3VycmVudCBjYXB0dXJlZCBzY29wZSBkdXJpbmcgUVJMIGludm9jYXRpb24uIFRoaXMgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBsZXhpY2FsIHNjb3BlIGZvclxuICogUVJMIGZ1bmN0aW9ucy4gSXQgaXMgdXNlZCBvbmUgdGltZSBwZXIgaW52b2NhdGlvbiwgc3luY2hyb25vdXNseSwgc28gaXQgaXMgc2FmZSB0byBzdG9yZSBpdCBpblxuICogbW9kdWxlIHNjb3BlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgbGV0IF9jYXB0dXJlczogUmVhZG9ubHk8dW5rbm93bltdPiB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGNvbnN0IHNldENhcHR1cmVzID0gKGNhcHR1cmVzOiBSZWFkb25seTx1bmtub3duW10+IHwgbnVsbCkgPT4ge1xuICBfY2FwdHVyZXMgPSBjYXB0dXJlcztcbn07XG5cbmV4cG9ydCBjb25zdCBkZXNlcmlhbGl6ZUNhcHR1cmVzID0gKGNvbnRhaW5lcjogQ29udGFpbmVyLCBjYXB0dXJlczogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHJlZnMgPSBbXTtcbiAgY29uc3QgY2FwdHVyZUlkcyA9IGNhcHR1cmVzLnNwbGl0KCcgJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2FwdHVyZUlkcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGlkID0gY2FwdHVyZUlkc1tpXTtcbiAgICByZWZzLnB1c2goY29udGFpbmVyLiRnZXRPYmplY3RCeUlkJChpZCkpO1xuICB9XG4gIHJldHVybiByZWZzO1xufTtcblxuLyoqIFB1dHMgdGhlIHFybCBjYXB0dXJlcyBpbnRvIGBfY2FwdHVyZXNgLCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCBzaG91bGQgYmUgYXdhaXRlZCBpZiBwb3NzaWJsZSAqL1xuY29uc3QgZW5zdXJlUXJsQ2FwdHVyZXMgPSAocXJsOiBRUkxDbGFzczx1bmtub3duPikgPT4ge1xuICAvLyBXZSByZWFkIHRoZSBjYXB0dXJlcyBvbmNlLCBzeW5jaHJvbm91c2x5LCBzbyBubyBuZWVkIHRvIGtlZXAgcHJldmlvdXNcbiAgX2NhcHR1cmVzID0gcXJsLiRjYXB0dXJlcyQgYXMgYW55O1xuICBjb25zdCBjb250YWluZXIgPSBxcmwuJGNvbnRhaW5lciQ7XG4gIGlmICh0eXBlb2YgX2NhcHR1cmVzID09PSAnc3RyaW5nJykge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnFybE1pc3NpbmdDb250YWluZXIpO1xuICAgIH1cbiAgICBjb25zdCBwcmV2TG9hZGluZyA9IGxvYWRpbmc7XG4gICAgX2NhcHR1cmVzID0gcXJsLiRjYXB0dXJlcyQgPSBkZXNlcmlhbGl6ZUNhcHR1cmVzKGNvbnRhaW5lciwgX2NhcHR1cmVzKTtcbiAgICBpZiAobG9hZGluZyAhPT0gcHJldkxvYWRpbmcpIHtcbiAgICAgIC8vIHJldHVybiB0aGUgbG9hZGluZyBwcm9taXNlIHNvIGNhbGxlcnMgY2FuIGF3YWl0IGl0XG4gICAgICByZXR1cm4gbG9hZGluZztcbiAgICB9XG4gIH1cbn07XG5cbi8vIFdyYXAgZnVuY3Rpb25zIHRvIHByb3ZpZGUgdGhlaXIgbGV4aWNhbCBzY29wZVxuY29uc3QgYmluZENhcHR1cmVzID0gPFRZUEU+KHFybDogUVJMQ2xhc3M8dW5rbm93bj4sIHJlZjogVFlQRSk6IFRZUEUgPT4ge1xuICBpZiAodHlwZW9mIHJlZiAhPT0gJ2Z1bmN0aW9uJyB8fCAhcXJsLiRjYXB0dXJlcyQpIHtcbiAgICByZXR1cm4gcmVmO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZENhcHR1cmVzKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IFFybEFyZ3M8VFlQRT4pIHtcbiAgICBlbnN1cmVRcmxDYXB0dXJlcyhxcmwpO1xuICAgIHJldHVybiByZWYuYXBwbHkodGhpcywgYXJncyk7XG4gIH0gYXMgVFlQRTtcbn07XG5cbmNvbnN0ICRyZXNvbHZlJCA9IDxUWVBFPihcbiAgcXJsOiBRUkxDbGFzczxUWVBFPixcbiAgY29udGFpbmVyPzogQ29udGFpbmVyIHwgbnVsbFxuKTogVmFsdWVPclByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBsYXp5ID0gcXJsLiRsYXp5JDtcblxuICBjb25zdCBzaG91bGREZXNlcmlhbGl6ZSA9IHR5cGVvZiBxcmwuJGNhcHR1cmVzJCA9PT0gJ3N0cmluZyc7XG4gIGlmIChzaG91bGREZXNlcmlhbGl6ZSAmJiAhcXJsLiRjb250YWluZXIkKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgcXJsLiRjb250YWluZXIkID0gY29udGFpbmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBxcmwuJGNvbnRhaW5lciQgPSB0cnlHZXRJbnZva2VDb250ZXh0KCk/LiRjb250YWluZXIkIGFzIENvbnRhaW5lcjtcbiAgICB9XG4gIH1cblxuICBpZiAocXJsLnJlc29sdmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2FwdHVyZSBjb250ZXh0IHdoaWxlIHN0aWxsIHN5bmNcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcbiAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuXG4gIC8vIExvYWQgcmF3IHZhbHVlIHZpYSBMYXp5UmVmIC0gbWF5IGJlIHN5bmMgKGUuZy4gc3luYyBRUkxzKSBvciBhc3luY1xuICBjb25zdCByYXdPclByb21pc2UgPSBsYXp5LiRsb2FkJCgpO1xuXG4gIGNvbnN0IG1heWJlUHJvbWlzZSA9IG1heWJlVGhlbihyYXdPclByb21pc2UsIChyYXcpID0+IHtcbiAgICBxcmwucmVzb2x2ZWQgPSBiaW5kQ2FwdHVyZXMocXJsLCByYXcpO1xuICB9KTtcblxuICBpZiAobWF5YmVQcm9taXNlKSB7XG4gICAgLy8gV2UncmUgaW1wb3J0aW5nOyBlbWl0IHN5bWJvbCB1c2FnZSBldmVudFxuICAgIGNvbnN0IHN5bWJvbCA9IGxhenkuJHN5bWJvbCQ7XG4gICAgZW1pdFVzZWRTeW1ib2woXG4gICAgICBzeW1ib2wsXG4gICAgICBjdHg/LiRob3N0RWxlbWVudCQgaW5zdGFuY2VvZiBFbGVtZW50Vk5vZGUgPyBjdHg/LiRob3N0RWxlbWVudCQubm9kZSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YXJ0XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNhcHR1cmVkUHJvbWlzZSA9IHNob3VsZERlc2VyaWFsaXplICYmIHFybC4kY29udGFpbmVyJCAmJiBlbnN1cmVRcmxDYXB0dXJlcyhxcmwpO1xuXG4gIGlmIChjYXB0dXJlZFByb21pc2UpIHtcbiAgICByZXR1cm4gY2FwdHVyZWRQcm9taXNlLnRoZW4oKCkgPT4gbWF5YmVQcm9taXNlKTtcbiAgfVxuICByZXR1cm4gbWF5YmVQcm9taXNlO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUVJMIGluc3RhbmNlIHRvIHJlcHJlc2VudCBhIGxhemlseSBsb2FkZWQgdmFsdWUuIE5vcm1hbGx5IHRoaXMgaXMgYSBmdW5jdGlvbiwgYnV0IGl0XG4gKiBjYW4gYmUgYW55IHZhbHVlLlxuICpcbiAqIFdoZW4gdGhlIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGNhbGxpbmcgdGhlIHJldHVybmVkIHFybCB3aWxsIGxvYWQgdGhlIHVuZGVybHlpbmcgY29kZSB3aGVuXG4gKiBpbnZva2VkLCBhbmQgY2FsbCBpdCB3aXRoIHRoZSBjYXB0dXJlZCBzY29wZS4gVGhpcyBhbHdheXMgcmV0dXJucyBhIHByb21pc2Ugc2luY2UgdGhlIGNvZGUgbWF5XG4gKiBub3QgYmUgbG9hZGVkIHlldC5cbiAqXG4gKiBUbyBnZXQgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gd2l0aG91dCBpbnZva2luZyBpdCwgYXdhaXQgYHFybC5yZXNvbHZlKClgIGFuZCB0aGVuIGBxcmwucmVzb2x2ZWRgXG4gKiBob2xkcyB0aGUgbG9hZGVkIGZ1bmN0aW9uLCB3cmFwcGVkIHdpdGggdGhlIGNhcHR1cmVkIHNjb3BlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUVJMID0gPFRZUEU+KFxuICBjaHVuazogc3RyaW5nIHwgbnVsbCxcbiAgc3ltYm9sOiBzdHJpbmcsXG4gIHN5bWJvbFJlZj86IG51bGwgfCBWYWx1ZU9yUHJvbWlzZTxUWVBFPixcbiAgc3ltYm9sRm4/OiBudWxsIHwgKCgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgVFlQRT4+KSxcbiAgY2FwdHVyZXM/OiBSZWFkb25seTx1bmtub3duW10+IHwgc3RyaW5nIHwgbnVsbCxcbiAgY29udGFpbmVyPzogQ29udGFpbmVyXG4pOiBRUkxJbnRlcm5hbDxUWVBFPiA9PiB7XG4gIGNvbnN0IGxhenkgPSBnZXRMYXp5UmVmPFRZUEU+KGNodW5rLCBzeW1ib2wsIHN5bWJvbEZuISwgc3ltYm9sUmVmISwgY29udGFpbmVyKTtcbiAgY29uc3QgcXJsID0gbmV3IFFSTENsYXNzPFRZUEU+KGxhenksIGNhcHR1cmVzISwgY29udGFpbmVyKTtcblxuICByZXR1cm4gbWFrZVFybEZuKHFybCk7XG59O1xuXG5jb25zdCBtYWtlUXJsRm4gPSA8VFlQRT4ocXJsOiBRUkxDbGFzczxUWVBFPik6IFFSTEludGVybmFsPFRZUEU+ID0+IHtcbiAgLy8gVGhlIFFSTCBoYXMgdG8gYmUgY2FsbGFibGUsIHNvIHdlIGNyZWF0ZSBhIGZ1bmN0aW9uIGFuZCBhdHRhY2ggdGhlIHBlci1pbnN0YW5jZSBzdGF0ZSB0byBpdC5cbiAgY29uc3QgcXJsRm4gPSBhc3luYyBmdW5jdGlvbiAodGhpczogdW5rbm93biwgLi4uYXJnczogUXJsQXJnczxUWVBFPikge1xuICAgIHJldHVybiBxcmxDYWxsRm4uY2FsbChxcmxGbiBhcyBRUkxDYWxsYWJsZTxUWVBFPiwgdGhpcywgLi4uYXJncyk7XG4gIH0gYXMgUVJMQ2FsbGFibGU8VFlQRT47XG4gIHFybEZuW1FSTF9TVEFURV0gPSBxcmw7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihxcmxGbiwgUVJMX0ZVTkNUSU9OX1BST1RPKTtcbiAgcmV0dXJuIHFybEZuO1xufTtcblxuY29uc3QgRU1JVFRFRCA9IC8qI19fUFVSRV9fKi8gbmV3IFNldCgpO1xuXG5leHBvcnQgY29uc3QgZW1pdFVzZWRTeW1ib2wgPSAoc3ltYm9sOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQsIHJlcVRpbWU6IG51bWJlcikgPT4ge1xuICBpZiAoIUVNSVRURUQuaGFzKHN5bWJvbCkpIHtcbiAgICBFTUlUVEVELmFkZChzeW1ib2wpO1xuICAgIGVtaXRFdmVudCgncXN5bWJvbCcsIHtcbiAgICAgIHN5bWJvbCxcbiAgICAgIGVsZW1lbnQsXG4gICAgICByZXFUaW1lLFxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZW1pdEV2ZW50ID0gPFQgZXh0ZW5kcyBDdXN0b21FdmVudCA9IGFueT4oZXZlbnROYW1lOiBzdHJpbmcsIGRldGFpbDogVFsnZGV0YWlsJ10pID0+IHtcbiAgaWYgKCFxVGVzdCAmJiAhaXNTZXJ2ZXJQbGF0Zm9ybSgpICYmIHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwge1xuICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgZGV0YWlsLFxuICAgICAgfSkgYXMgVFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IG5vdyA9ICgpID0+IHtcbiAgaWYgKHFUZXN0IHx8IGlzU2VydmVyUGxhdGZvcm0oKSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xuICB9XG4gIHJldHVybiAwO1xufTtcbiJdfQ==","import { qDev, qRuntimeQrl } from '../utils/qdev';\nimport { createQRL } from './qrl-class';\nimport { SYNC_QRL } from './qrl-utils';\nlet runtimeSymbolId = 0;\n// <docs markdown=\"../../readme.md#$\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#$ instead and run `pnpm docs.sync`)\n/**\n * Qwik Optimizer marker function.\n *\n * Use `$(...)` to tell Qwik Optimizer to extract the expression in `$(...)` into a lazy-loadable\n * resource referenced by `QRL`.\n *\n * @param expression - Expression which should be lazy loaded\n * @public\n * @see `implicit$FirstArg` for additional `____$(...)` rules.\n *\n * In this example, `$(...)` is used to capture the callback function of `onmousemove` into a\n * lazy-loadable reference. This allows the code to refer to the function without actually\n * loading the function. In this example, the callback function does not get loaded until\n * `mousemove` event fires.\n *\n * ```tsx\n * useOnDocument(\n *   'mousemove',\n *   $((event) => console.log('mousemove', event))\n * );\n * ```\n *\n * In this code, the Qwik Optimizer detects `$(...)` and transforms the code into:\n *\n * ```tsx\n * // FILE: <current file>\n * useOnDocument('mousemove', qrl('./chunk-abc.js', 'onMousemove'));\n *\n * // FILE: chunk-abc.js\n * export const onMousemove = () => console.log('mousemove');\n * ```\n *\n * ## Special Rules\n *\n * The Qwik Optimizer places special rules on functions that can be lazy-loaded.\n *\n * 1. The expression of the `$(expression)` function must be importable by the system.\n * (expression shows up in `import` or has `export`)\n * 2. If inlined function, then all lexically captured values must be:\n *    - importable (vars show up in `import`s or `export`s)\n *    - const (The capturing process differs from JS capturing in that writing to captured\n * variables does not update them, and therefore writes are forbidden. The best practice is that\n * all captured variables are constants.)\n *    - Must be runtime serializable.\n *\n * ```tsx\n *\n * import { createContextId, useContext, useContextProvider } from './use/use-context';\n * import { Resource } from './use/use-resource';\n * import { useResource$ } from './use/use-resource-dollar';\n * import { useSignal } from './use/use-signal';\n *\n * export const greet = () => console.log('greet');\n * function topLevelFn() {}\n *\n * function myCode() {\n *   const store = useStore({});\n *   function localFn() {}\n *   // Valid Examples\n *   $(greet); // greet is importable\n *   $(() => greet()); // greet is importable;\n *   $(() => console.log(store)); // store is serializable.\n *\n *   // Compile time errors\n *   $(topLevelFn); // ERROR: `topLevelFn` not importable\n *   $(() => topLevelFn()); // ERROR: `topLevelFn` not importable\n *\n *   // Runtime errors\n *   $(localFn); // ERROR: `localFn` fails serialization\n *   $(() => localFn()); // ERROR: `localFn` fails serialization\n * }\n *\n * ```\n */\n// </docs>\nexport const $ = (expression) => {\n    if (!qRuntimeQrl && qDev) {\n        throw new Error('Optimizer should replace all usages of $() with some special syntax. If you need to create a QRL manually, use inlinedQrl() instead.');\n    }\n    return createQRL(null, 's' + runtimeSymbolId++, expression, null, null);\n};\n/** @private Use To avoid optimizer replacement */\nexport const dollar = $;\n/** @internal */\nexport const eventQrl = (qrl) => {\n    return qrl;\n};\n/**\n * Extract function into a synchronously loadable QRL.\n *\n * NOTE: Synchronous QRLs functions can't close over any variables, including exports.\n *\n * @param fn - Function to extract.\n * @returns\n * @public\n */\nexport const sync$ = (fn) => {\n    if (!qRuntimeQrl && qDev) {\n        throw new Error('Optimizer should replace all usages of sync$() with some special syntax. If you need to create a QRL manually, use inlinedSyncQrl() instead.');\n    }\n    if (qDev) {\n        // To make sure that in dev mode we don't accidentally capture context in `sync$()` we serialize and deserialize the function.\n        // eslint-disable-next-line no-new-func\n        fn = new Function('return ' + fn.toString())();\n    }\n    return createQRL('', SYNC_QRL, fn, null, null);\n};\n/**\n * Extract function into a synchronously loadable QRL.\n *\n * NOTE: Synchronous QRLs functions can't close over any variables, including exports.\n *\n * @param fn - Extracted function\n * @param serializedFn - Serialized function in string form.\n * @returns\n * @internal\n */\nexport const _qrlSync = function (fn, serializedFn) {\n    if (serializedFn === undefined) {\n        serializedFn = fn.toString();\n    }\n    fn.serialized = serializedFn;\n    return createQRL('', SYNC_QRL, fn, null, null);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcXJsL3FybC5wdWJsaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBK0p2QyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFTeEIsc0NBQXNDO0FBQ3RDLHlDQUF5QztBQUN6Qyw0REFBNEQ7QUFDNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RUc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUksVUFBYSxFQUFVLEVBQUU7SUFDNUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLHNJQUFzSSxDQUN2SSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RSxDQUFDLENBQUM7QUFDRixrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUV4QixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUksR0FBVyxFQUFVLEVBQUU7SUFDakQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFVRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFxQixFQUFLLEVBQWMsRUFBRTtJQUM3RCxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOElBQThJLENBQy9JLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULDhIQUE4SDtRQUM5SCx1Q0FBdUM7UUFDdkMsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBUyxDQUFDO0lBQ3hELENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFRLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFVBQ3RCLEVBQVEsRUFDUixZQUFxQjtJQUVyQixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixZQUFZLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDQSxFQUFVLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztJQUN0QyxPQUFPLFNBQVMsQ0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFRLENBQUM7QUFDOUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcURldiwgcVJ1bnRpbWVRcmwgfSBmcm9tICcuLi91dGlscy9xZGV2JztcbmltcG9ydCB0eXBlIHsgUVJMRGV2IH0gZnJvbSAnLi9xcmwnO1xuaW1wb3J0IHsgY3JlYXRlUVJMIH0gZnJvbSAnLi9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgU1lOQ19RUkwgfSBmcm9tICcuL3FybC11dGlscyc7XG5cbi8vIFdlIHVzZSBgdW5rbm93bmAgaW5zdGVhZCBvZiBgbmV2ZXJgIHdoZW4gaXQncyBub3QgYSBmdW5jdGlvbiBzbyB3ZSBhbGxvdyBhc3NpZ25pbmcgUVJMPGZ1bmN0aW9uPiB0byBRUkw8YW55PlxuZXhwb3J0IHR5cGUgUXJsQXJnczxUPiA9IFQgZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgQVJHUykgPT4gYW55ID8gQVJHUyA6IHVua25vd25bXTtcbmV4cG9ydCB0eXBlIFFybFJldHVybjxUPiA9IFQgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBpbmZlciBSID8gQXdhaXRlZDxSPiA6IHVua25vd247XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vLi4vcmVhZG1lLm1kI1FSTFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uLy4uL3JlYWRtZS5tZCNRUkwgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFRoZSBgUVJMYCB0eXBlIHJlcHJlc2VudHMgYSBsYXp5LWxvYWRhYmxlIEFORCBzZXJpYWxpemFibGUgcmVzb3VyY2UuXG4gKlxuICogUVJMIHN0YW5kcyBmb3IgUXdpayBVUkwuXG4gKlxuICogVXNlIGBRUkxgIHdoZW4geW91IHdhbnQgdG8gcmVmZXIgdG8gYSBsYXp5LWxvYWRlZCByZXNvdXJjZS4gYFFSTGBzIGFyZSBtb3N0IG9mdGVuIHVzZWQgZm9yIGNvZGVcbiAqIChmdW5jdGlvbnMpIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGZvciBvdGhlciByZXNvdXJjZXMgc3VjaCBhcyBgc3RyaW5nYHMgaW4gdGhlIGNhc2Ugb2Ygc3R5bGVzLlxuICpcbiAqIGBRUkxgIGlzIGFuIG9wYXF1ZSB0b2tlbiB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgUXdpayBPcHRpbWl6ZXIuIChEbyBub3QgcmVseSBvbiBhbnkgcHJvcGVydGllc1xuICogaW4gYFFSTGAgYXMgaXQgbWF5IGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zLilcbiAqXG4gKiAjIyBDcmVhdGluZyBgUVJMYCByZWZlcmVuY2VzXG4gKlxuICogQ3JlYXRpbmcgYFFSTGAgaXMgZG9uZSB1c2luZyBgJCguLi4pYCBmdW5jdGlvbi4gYCQoLi4uKWAgaXMgYSBzcGVjaWFsIG1hcmtlciBmb3IgdGhlIFF3aWtcbiAqIE9wdGltaXplciB0aGF0IG1hcmtzIHRoYXQgdGhlIGNvZGUgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIGEgbGF6eS1sb2FkZWQgc3ltYm9sLlxuICpcbiAqIGBgYHRzeFxuICogdXNlT25Eb2N1bWVudChcbiAqICAgJ21vdXNlbW92ZScsXG4gKiAgICQoKGV2ZW50KSA9PiBjb25zb2xlLmxvZygnbW91c2Vtb3ZlJywgZXZlbnQpKVxuICogKTtcbiAqIGBgYFxuICpcbiAqIEluIHRoZSBhYm92ZSBjb2RlLCB0aGUgUXdpayBPcHRpbWl6ZXIgZGV0ZWN0cyBgJCguLi4pYCBhbmQgdHJhbnNmb3JtcyB0aGUgY29kZSBhcyBzaG93biBiZWxvdzpcbiAqXG4gKiBgYGB0c3hcbiAqIC8vIEZJTEU6IDxjdXJyZW50IGZpbGU+XG4gKiB1c2VPbkRvY3VtZW50KCdtb3VzZW1vdmUnLCBxcmwoJy4vY2h1bmstYWJjLmpzJywgJ29uTW91c2Vtb3ZlJykpO1xuICpcbiAqIC8vIEZJTEU6IGNodW5rLWFiYy5qc1xuICogZXhwb3J0IGNvbnN0IG9uTW91c2Vtb3ZlID0gKCkgPT4gY29uc29sZS5sb2coJ21vdXNlbW92ZScpO1xuICogYGBgXG4gKlxuICogTk9URTogYHFybCguLi4pYCBpcyBhIHJlc3VsdCBvZiBRd2lrIE9wdGltaXplciB0cmFuc2Zvcm1hdGlvbi4gWW91IHNob3VsZCBuZXZlciBoYXZlIHRvIGludm9rZVxuICogdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUaGUgYHFybCguLi4pYCBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZCBvbmx5IGFmdGVyXG4gKiB0aGUgUXdpayBPcHRpbWl6ZXIgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogIyMgVXNpbmcgYFFSTGBzXG4gKlxuICogVXNlIGBRUkxgIHR5cGUgaW4geW91ciBhcHBsaWNhdGlvbiB3aGVuIHlvdSB3YW50IHRvIGdldCBhIGxhenktbG9hZGFibGUgcmVmZXJlbmNlIHRvIGEgcmVzb3VyY2VcbiAqIChtb3N0IGxpa2VseSBhIGZ1bmN0aW9uKS5cbiAqXG4gKiBgYGB0c3hcbiAqIC8vIEV4YW1wbGUgb2YgZGVjbGFyaW5nIGEgY3VzdG9tIGZ1bmN0aW9ucyB3aGljaCB0YWtlcyBjYWxsYmFjayBhcyBRUkwuXG4gKiBleHBvcnQgZnVuY3Rpb24gdXNlTXlGdW5jdGlvbihjYWxsYmFjazogUVJMPCgpID0+IHZvaWQ+KSB7XG4gKiAgIGRvRXh0cmFTdHVmZigpO1xuICogICAvLyBUaGUgY2FsbGJhY2sgcGFzc2VkIHRvIGBvbkRvY3VtZW50YCByZXF1aXJlcyBgUVJMYC5cbiAqICAgdXNlT25Eb2N1bWVudCgnbW91c2Vtb3ZlJywgY2FsbGJhY2spO1xuICogfVxuICogYGBgXG4gKlxuICogSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSB3YXkgdG8gdGhpbmsgYWJvdXQgdGhlIGNvZGUgaXMgdGhhdCB5b3UgYXJlIG5vdCBhc2tpbmcgZm9yIGEgY2FsbGJhY2tcbiAqIGZ1bmN0aW9uIGJ1dCByYXRoZXIgYSByZWZlcmVuY2UgdG8gYSBsYXp5LWxvYWRhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvblxuICogbG9hZGluZyBzaG91bGQgYmUgZGVsYXllZCB1bnRpbCBpdCBpcyBhY3R1YWxseSBuZWVkZWQuIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgZnVuY3Rpb24gd291bGRcbiAqIG5vdCBsb2FkIHVudGlsIGFmdGVyIGEgYG1vdXNlbW92ZWAgZXZlbnQgb24gYGRvY3VtZW50YCBmaXJlcy5cbiAqXG4gKiAjIyBSZXNvbHZpbmcgYFFSTGAgcmVmZXJlbmNlc1xuICpcbiAqIEF0IHRpbWVzIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmVzb2x2ZSBhIGBRUkxgIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIHZhbHVlLiBUaGlzIGNhbiBiZVxuICogcGVyZm9ybWVkIHVzaW5nIGBRUkwucmVzb2x2ZSguLilgIGZ1bmN0aW9uLlxuICpcbiAqIGBgYHRzeFxuICogLy8gQXNzdW1lIHlvdSBoYXZlIFFSTCByZWZlcmVuY2UgdG8gYSBncmVldCBmdW5jdGlvblxuICogY29uc3QgbGF6eUdyZWV0OiBRUkw8KCkgPT4gdm9pZD4gPSAkKCgpID0+IGNvbnNvbGUubG9nKCdIZWxsbyBXb3JsZCEnKSk7XG4gKlxuICogLy8gVXNlIGBxcmxJbXBvcnRgIHRvIGxvYWQgLyByZXNvbHZlIHRoZSByZWZlcmVuY2UuXG4gKiBjb25zdCBncmVldDogKCkgPT4gdm9pZCA9IGF3YWl0IGxhenlHcmVldC5yZXNvbHZlKCk7XG4gKlxuICogLy8gIEludm9rZSBpdFxuICogZ3JlZXQoKTtcbiAqIGBgYFxuICpcbiAqIE5PVEU6IGBlbGVtZW50YCBpcyBuZWVkZWQgYmVjYXVzZSBgUVJMYHMgYXJlIHJlbGF0aXZlIGFuZCBuZWVkIGEgYmFzZSBsb2NhdGlvbiB0byByZXNvbHZlXG4gKiBhZ2FpbnN0LiBUaGUgYmFzZSBsb2NhdGlvbiBpcyBlbmNvZGVkIGluIHRoZSBIVE1MIGluIHRoZSBmb3JtIG9mIGA8ZGl2IHE6YmFzZT1cIi91cmxcIj5gLlxuICpcbiAqICMjIGBRUkwucmVzb2x2ZWRgXG4gKlxuICogT25jZSBgUVJMLnJlc29sdmUoKWAgcmV0dXJucywgdGhlIHZhbHVlIGlzIHN0b3JlZCB1bmRlciBgUVJMLnJlc29sdmVkYC4gVGhpcyBhbGxvd3MgdGhlIHZhbHVlIHRvXG4gKiBiZSB1c2VkIHdpdGhvdXQgaGF2aW5nIHRvIGF3YWl0IGBRUkwucmVzb2x2ZSgpYCBhZ2Fpbi5cbiAqXG4gKiAjIyBRdWVzdGlvbjogV2h5IG5vdCBqdXN0IHVzZSBgaW1wb3J0KClgP1xuICpcbiAqIEF0IGZpcnN0IGdsYW5jZSwgYFFSTGAgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgYGltcG9ydCgpYC4gSG93ZXZlciwgdGhlcmUgYXJlIHRocmVlIHN1YnRsZVxuICogZGlmZmVyZW5jZXMgdGhhdCBuZWVkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudC5cbiAqXG4gKiAxLiBgUVJMYHMgbXVzdCBiZSBzZXJpYWxpemFibGUgaW50byBIVE1MLlxuICogMi4gYFFSTGBzIG11c3QgYmUgcmVzb2x2ZWQgYnkgZnJhbWV3b3JrIHJlbGF0aXZlIHRvIGBxOmJhc2VgLlxuICogMy4gYFFSTGBzIG11c3QgYmUgYWJsZSB0byBjYXB0dXJlIGxleGljYWxseSBzY29wZWQgdmFyaWFibGVzLlxuICogNC4gYFFSTGBzIGVuY2Fwc3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcnVubmluZyB3aXRoIGFuZCB3aXRob3V0IFF3aWsgT3B0aW1pemVyLlxuICogNS4gYFFSTGBzIGFsbG93IGV4cHJlc3NpbmcgbGF6eS1sb2FkZWQgYm91bmRhcmllcyB3aXRob3V0IHRoaW5raW5nIGFib3V0IGNodW5rIGFuZCBzeW1ib2wgbmFtZXMuXG4gKlxuICogTGV0J3MgYXNzdW1lIHRoYXQgeW91IGludGVuZCB0byB3cml0ZSBjb2RlIHN1Y2ggYXMgdGhpczpcbiAqXG4gKiBgYGB0c3hcbiAqIHJldHVybiA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IChhd2FpdCBpbXBvcnQoJy4vY2h1bmstYWJjLmpzJykpLm9uQ2xpY2t9PlxuICogYGBgXG4gKlxuICogVGhlIGFib3ZlIGNvZGUgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCBpbnRvIERPTSBzdWNoIGFzOlxuICpcbiAqIGBgYFxuICogPGRpdiBxOmJhc2U9XCIvYnVpbGQvXCI+XG4gKiAgIDxidXR0b24gcS1lOmNsaWNrPVwiLi9jaHVuay1hYmMuanMjb25DbGlja1wiPi4uLjwvYnV0dG9uPlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiAxLiBOb3RpY2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZXh0cmFjdCBjaHVuayAoYC4vY2h1bmstYWJjLmpzYCkgYW5kIHN5bWJvbCAoYG9uQ2xpY2tgKSBpbnRvIEhUTUwuXG4gKiAyLiBOb3RpY2UgdGhhdCBldmVuIGlmIHlvdSBjb3VsZCBleHRyYWN0IGl0LCB0aGUgYGltcG9ydCgnLi9jaHVuay1hYmMuanMnKWAgd291bGQgYmVjb21lIHJlbGF0aXZlIHRvXG4gKiAgICB3aGVyZSB0aGUgYGltcG9ydCgpYCBmaWxlIGlzIGRlY2xhcmVkLiBCZWNhdXNlIGl0IGlzIG91ciBmcmFtZXdvcmsgZG9pbmcgdGhlIGxvYWQsIHRoZVxuICogICAgYC4vY2h1bmstYWJjLmpzYCB3b3VsZCBiZWNvbWUgcmVsYXRpdmUgdG8gdGhlIGZyYW1ld29yayBmaWxlLiBUaGlzIGlzIG5vdCBjb3JyZWN0LCBhcyBpdFxuICogICAgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbCBmaWxlIGdlbmVyYXRlZCBieSB0aGUgYnVuZGxlci5cbiAqIDMuIE5leHQsIHRoZSBmcmFtZXdvcmsgbmVlZHMgdG8gcmVzb2x2ZSB0aGUgYC4vY2h1bmstYWJjLmpzYCBhbmQgbmVlZHMgYSBiYXNlIGxvY2F0aW9uIHRoYXQgaXNcbiAqICAgIGVuY29kZWQgaW4gdGhlIEhUTUwuXG4gKiA0LiBUaGUgUVJMIG5lZWRzIHRvIGJlIGFibGUgdG8gY2FwdHVyZSBsZXhpY2FsbHkgc2NvcGVkIHZhcmlhYmxlcy4gKGBpbXBvcnQoKWAgb25seSBhbGxvd3MgbG9hZGluZ1xuICogICAgdG9wLWxldmVsIHN5bWJvbHMgd2hpY2ggZG9uJ3QgY2FwdHVyZSB2YXJpYWJsZXMuKVxuICogNS4gQXMgYSBkZXZlbG9wZXIsIHlvdSBkb24ndCB3YW50IHRvIHRoaW5rIGFib3V0IGBpbXBvcnRgIGFuZCBuYW1pbmcgdGhlIGNodW5rcyBhbmQgc3ltYm9scy4gWW91XG4gKiAgICBqdXN0IHdhbnQgdG8gc2F5OiBcInRoaXMgc2hvdWxkIGJlIGxhenkuXCJcbiAqXG4gKiBUaGVzZSBhcmUgdGhlIG1haW4gcmVhc29ucyB3aHkgUXdpayBpbnRyb2R1Y2VzIGl0cyBvd24gY29uY2VwdCBvZiBgUVJMYC5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGAkYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgdHlwZSBRUkw8VFlQRSA9IHVua25vd24+ID0ge1xuICAvLyBTcGVjaWFsIHR5cGUgYnJhbmQgdG8gbGV0IGVzbGludCB0aGF0IHRoZSBUeXBlIGlzIHNlcmlhbGl6YWJsZVxuICBfX3F3aWtfc2VyaWFsaXphYmxlX18/OiBhbnk7XG4gIF9fYnJhbmRfX1FSTF9fPzogVFlQRTtcblxuICAvKiogUmVzb2x2ZSB0aGUgUVJMIGFuZCByZXR1cm4gdGhlIGFjdHVhbCB2YWx1ZS4gKi9cbiAgcmVzb2x2ZSgpOiBQcm9taXNlPFRZUEU+O1xuICAvKiogVGhlIHJlc29sdmVkIHZhbHVlLCBvbmNlIGByZXNvbHZlKClgIHJldHVybnMuICovXG4gIHJlc29sdmVkOiB1bmRlZmluZWQgfCBUWVBFO1xuXG4gIGdldENhcHR1cmVkKCk6IHVua25vd25bXSB8IG51bGw7XG4gIGdldFN5bWJvbCgpOiBzdHJpbmc7XG4gIGdldEhhc2goKTogc3RyaW5nO1xuICBkZXY/OiBRUkxEZXYgfCBudWxsO1xufSAmIEJpdmFyaWFudFFybEZuPFFybEFyZ3M8VFlQRT4sIFFybFJldHVybjxUWVBFPj47XG5cbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUyNjY3OTU5L3doYXQtaXMtdGhlLXB1cnBvc2Utb2YtYml2YXJpYW5jZWhhY2staW4tdHlwZXNjcmlwdC10eXBlcy81MjY2ODEzMyM1MjY2ODEzM1xudHlwZSBCaXZhcmlhbnRRcmxGbjxBUkdTIGV4dGVuZHMgYW55W10sIFJFVFVSTj4gPSB7XG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBRUkwgb2YgY2xvc3VyZSBhbmQgaW52b2tlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gYXJncyAtIENsb3N1cmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2xvc3VyZS5cbiAgICovXG4gIGJpdmFyaWFuY2VIYWNrKC4uLmFyZ3M6IEFSR1MpOiBQcm9taXNlPFJFVFVSTj47XG59WydiaXZhcmlhbmNlSGFjayddO1xuXG5sZXQgcnVudGltZVN5bWJvbElkID0gMDtcblxuLyoqXG4gKiBBbGlhcyBmb3IgYFFSTDxUPmAuIE9mIGhpc3RvcmljIHJlbGV2YW5jZSBvbmx5LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUHJvcEZ1bmN0aW9uPFQ+ID0gUVJMPFQ+O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uLy4uL3JlYWRtZS5tZCMkXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vLi4vcmVhZG1lLm1kIyQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFF3aWsgT3B0aW1pemVyIG1hcmtlciBmdW5jdGlvbi5cbiAqXG4gKiBVc2UgYCQoLi4uKWAgdG8gdGVsbCBRd2lrIE9wdGltaXplciB0byBleHRyYWN0IHRoZSBleHByZXNzaW9uIGluIGAkKC4uLilgIGludG8gYSBsYXp5LWxvYWRhYmxlXG4gKiByZXNvdXJjZSByZWZlcmVuY2VkIGJ5IGBRUkxgLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB3aGljaCBzaG91bGQgYmUgbGF6eSBsb2FkZWRcbiAqIEBwdWJsaWNcbiAqIEBzZWUgYGltcGxpY2l0JEZpcnN0QXJnYCBmb3IgYWRkaXRpb25hbCBgX19fXyQoLi4uKWAgcnVsZXMuXG4gKlxuICogSW4gdGhpcyBleGFtcGxlLCBgJCguLi4pYCBpcyB1c2VkIHRvIGNhcHR1cmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIGBvbm1vdXNlbW92ZWAgaW50byBhXG4gKiBsYXp5LWxvYWRhYmxlIHJlZmVyZW5jZS4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gcmVmZXIgdG8gdGhlIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsbHlcbiAqIGxvYWRpbmcgdGhlIGZ1bmN0aW9uLiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBkb2VzIG5vdCBnZXQgbG9hZGVkIHVudGlsXG4gKiBgbW91c2Vtb3ZlYCBldmVudCBmaXJlcy5cbiAqXG4gKiBgYGB0c3hcbiAqIHVzZU9uRG9jdW1lbnQoXG4gKiAgICdtb3VzZW1vdmUnLFxuICogICAkKChldmVudCkgPT4gY29uc29sZS5sb2coJ21vdXNlbW92ZScsIGV2ZW50KSlcbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBJbiB0aGlzIGNvZGUsIHRoZSBRd2lrIE9wdGltaXplciBkZXRlY3RzIGAkKC4uLilgIGFuZCB0cmFuc2Zvcm1zIHRoZSBjb2RlIGludG86XG4gKlxuICogYGBgdHN4XG4gKiAvLyBGSUxFOiA8Y3VycmVudCBmaWxlPlxuICogdXNlT25Eb2N1bWVudCgnbW91c2Vtb3ZlJywgcXJsKCcuL2NodW5rLWFiYy5qcycsICdvbk1vdXNlbW92ZScpKTtcbiAqXG4gKiAvLyBGSUxFOiBjaHVuay1hYmMuanNcbiAqIGV4cG9ydCBjb25zdCBvbk1vdXNlbW92ZSA9ICgpID0+IGNvbnNvbGUubG9nKCdtb3VzZW1vdmUnKTtcbiAqIGBgYFxuICpcbiAqICMjIFNwZWNpYWwgUnVsZXNcbiAqXG4gKiBUaGUgUXdpayBPcHRpbWl6ZXIgcGxhY2VzIHNwZWNpYWwgcnVsZXMgb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGxhenktbG9hZGVkLlxuICpcbiAqIDEuIFRoZSBleHByZXNzaW9uIG9mIHRoZSBgJChleHByZXNzaW9uKWAgZnVuY3Rpb24gbXVzdCBiZSBpbXBvcnRhYmxlIGJ5IHRoZSBzeXN0ZW0uXG4gKiAoZXhwcmVzc2lvbiBzaG93cyB1cCBpbiBgaW1wb3J0YCBvciBoYXMgYGV4cG9ydGApXG4gKiAyLiBJZiBpbmxpbmVkIGZ1bmN0aW9uLCB0aGVuIGFsbCBsZXhpY2FsbHkgY2FwdHVyZWQgdmFsdWVzIG11c3QgYmU6XG4gKiAgICAtIGltcG9ydGFibGUgKHZhcnMgc2hvdyB1cCBpbiBgaW1wb3J0YHMgb3IgYGV4cG9ydGBzKVxuICogICAgLSBjb25zdCAoVGhlIGNhcHR1cmluZyBwcm9jZXNzIGRpZmZlcnMgZnJvbSBKUyBjYXB0dXJpbmcgaW4gdGhhdCB3cml0aW5nIHRvIGNhcHR1cmVkXG4gKiB2YXJpYWJsZXMgZG9lcyBub3QgdXBkYXRlIHRoZW0sIGFuZCB0aGVyZWZvcmUgd3JpdGVzIGFyZSBmb3JiaWRkZW4uIFRoZSBiZXN0IHByYWN0aWNlIGlzIHRoYXRcbiAqIGFsbCBjYXB0dXJlZCB2YXJpYWJsZXMgYXJlIGNvbnN0YW50cy4pXG4gKiAgICAtIE11c3QgYmUgcnVudGltZSBzZXJpYWxpemFibGUuXG4gKlxuICogYGBgdHN4XG4gKlxuICogaW1wb3J0IHsgY3JlYXRlQ29udGV4dElkLCB1c2VDb250ZXh0LCB1c2VDb250ZXh0UHJvdmlkZXIgfSBmcm9tICcuL3VzZS91c2UtY29udGV4dCc7XG4gKiBpbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4vdXNlL3VzZS1yZXNvdXJjZSc7XG4gKiBpbXBvcnQgeyB1c2VSZXNvdXJjZSQgfSBmcm9tICcuL3VzZS91c2UtcmVzb3VyY2UtZG9sbGFyJztcbiAqIGltcG9ydCB7IHVzZVNpZ25hbCB9IGZyb20gJy4vdXNlL3VzZS1zaWduYWwnO1xuICpcbiAqIGV4cG9ydCBjb25zdCBncmVldCA9ICgpID0+IGNvbnNvbGUubG9nKCdncmVldCcpO1xuICogZnVuY3Rpb24gdG9wTGV2ZWxGbigpIHt9XG4gKlxuICogZnVuY3Rpb24gbXlDb2RlKCkge1xuICogICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKHt9KTtcbiAqICAgZnVuY3Rpb24gbG9jYWxGbigpIHt9XG4gKiAgIC8vIFZhbGlkIEV4YW1wbGVzXG4gKiAgICQoZ3JlZXQpOyAvLyBncmVldCBpcyBpbXBvcnRhYmxlXG4gKiAgICQoKCkgPT4gZ3JlZXQoKSk7IC8vIGdyZWV0IGlzIGltcG9ydGFibGU7XG4gKiAgICQoKCkgPT4gY29uc29sZS5sb2coc3RvcmUpKTsgLy8gc3RvcmUgaXMgc2VyaWFsaXphYmxlLlxuICpcbiAqICAgLy8gQ29tcGlsZSB0aW1lIGVycm9yc1xuICogICAkKHRvcExldmVsRm4pOyAvLyBFUlJPUjogYHRvcExldmVsRm5gIG5vdCBpbXBvcnRhYmxlXG4gKiAgICQoKCkgPT4gdG9wTGV2ZWxGbigpKTsgLy8gRVJST1I6IGB0b3BMZXZlbEZuYCBub3QgaW1wb3J0YWJsZVxuICpcbiAqICAgLy8gUnVudGltZSBlcnJvcnNcbiAqICAgJChsb2NhbEZuKTsgLy8gRVJST1I6IGBsb2NhbEZuYCBmYWlscyBzZXJpYWxpemF0aW9uXG4gKiAgICQoKCkgPT4gbG9jYWxGbigpKTsgLy8gRVJST1I6IGBsb2NhbEZuYCBmYWlscyBzZXJpYWxpemF0aW9uXG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCAkID0gPFQ+KGV4cHJlc3Npb246IFQpOiBRUkw8VD4gPT4ge1xuICBpZiAoIXFSdW50aW1lUXJsICYmIHFEZXYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT3B0aW1pemVyIHNob3VsZCByZXBsYWNlIGFsbCB1c2FnZXMgb2YgJCgpIHdpdGggc29tZSBzcGVjaWFsIHN5bnRheC4gSWYgeW91IG5lZWQgdG8gY3JlYXRlIGEgUVJMIG1hbnVhbGx5LCB1c2UgaW5saW5lZFFybCgpIGluc3RlYWQuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUVJMPFQ+KG51bGwsICdzJyArIHJ1bnRpbWVTeW1ib2xJZCsrLCBleHByZXNzaW9uLCBudWxsLCBudWxsKTtcbn07XG4vKiogQHByaXZhdGUgVXNlIFRvIGF2b2lkIG9wdGltaXplciByZXBsYWNlbWVudCAqL1xuZXhwb3J0IGNvbnN0IGRvbGxhciA9ICQ7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBldmVudFFybCA9IDxUPihxcmw6IFFSTDxUPik6IFFSTDxUPiA9PiB7XG4gIHJldHVybiBxcmw7XG59O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgU3luY1FSTDxUWVBFIGV4dGVuZHMgRnVuY3Rpb24+ID0gUVJMPFRZUEU+ICYge1xuICBfX2JyYW5kX19TeW5jUVJMX186IFRZUEU7XG5cbiAgcmVzb2x2ZWQ6IFRZUEU7XG4gIGRldj86IFFSTERldiB8IG51bGw7XG59ICYgQml2YXJpYW50UXJsRm48UXJsQXJnczxUWVBFPiwgUXJsUmV0dXJuPFRZUEU+PjtcblxuLyoqXG4gKiBFeHRyYWN0IGZ1bmN0aW9uIGludG8gYSBzeW5jaHJvbm91c2x5IGxvYWRhYmxlIFFSTC5cbiAqXG4gKiBOT1RFOiBTeW5jaHJvbm91cyBRUkxzIGZ1bmN0aW9ucyBjYW4ndCBjbG9zZSBvdmVyIGFueSB2YXJpYWJsZXMsIGluY2x1ZGluZyBleHBvcnRzLlxuICpcbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGV4dHJhY3QuXG4gKiBAcmV0dXJuc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3luYyQgPSA8VCBleHRlbmRzIEZ1bmN0aW9uPihmbjogVCk6IFN5bmNRUkw8VD4gPT4ge1xuICBpZiAoIXFSdW50aW1lUXJsICYmIHFEZXYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT3B0aW1pemVyIHNob3VsZCByZXBsYWNlIGFsbCB1c2FnZXMgb2Ygc3luYyQoKSB3aXRoIHNvbWUgc3BlY2lhbCBzeW50YXguIElmIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIFFSTCBtYW51YWxseSwgdXNlIGlubGluZWRTeW5jUXJsKCkgaW5zdGVhZC4nXG4gICAgKTtcbiAgfVxuICBpZiAocURldikge1xuICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGluIGRldiBtb2RlIHdlIGRvbid0IGFjY2lkZW50YWxseSBjYXB0dXJlIGNvbnRleHQgaW4gYHN5bmMkKClgIHdlIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIGZ1bmN0aW9uLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZuID0gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gJyArIGZuLnRvU3RyaW5nKCkpKCkgYXMgYW55O1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVFSTDxUPignJywgU1lOQ19RUkwsIGZuLCBudWxsLCBudWxsKSBhcyBhbnk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3QgZnVuY3Rpb24gaW50byBhIHN5bmNocm9ub3VzbHkgbG9hZGFibGUgUVJMLlxuICpcbiAqIE5PVEU6IFN5bmNocm9ub3VzIFFSTHMgZnVuY3Rpb25zIGNhbid0IGNsb3NlIG92ZXIgYW55IHZhcmlhYmxlcywgaW5jbHVkaW5nIGV4cG9ydHMuXG4gKlxuICogQHBhcmFtIGZuIC0gRXh0cmFjdGVkIGZ1bmN0aW9uXG4gKiBAcGFyYW0gc2VyaWFsaXplZEZuIC0gU2VyaWFsaXplZCBmdW5jdGlvbiBpbiBzdHJpbmcgZm9ybS5cbiAqIEByZXR1cm5zXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IF9xcmxTeW5jID0gZnVuY3Rpb24gPFRZUEUgZXh0ZW5kcyBGdW5jdGlvbj4oXG4gIGZuOiBUWVBFLFxuICBzZXJpYWxpemVkRm4/OiBzdHJpbmdcbik6IFN5bmNRUkw8VFlQRT4ge1xuICBpZiAoc2VyaWFsaXplZEZuID09PSB1bmRlZmluZWQpIHtcbiAgICBzZXJpYWxpemVkRm4gPSBmbi50b1N0cmluZygpO1xuICB9XG4gIChmbiBhcyBhbnkpLnNlcmlhbGl6ZWQgPSBzZXJpYWxpemVkRm47XG4gIHJldHVybiBjcmVhdGVRUkw8VFlQRT4oJycsIFNZTkNfUVJMLCBmbiwgbnVsbCwgbnVsbCkgYXMgYW55O1xufTtcbiJdfQ==","import { dollar } from './qrl/qrl.public';\nimport { _jsxSplit } from '../internal';\nimport { assertNumber } from './error/assert';\nimport { qTest } from './utils/qdev';\nimport { assertQrl } from './qrl/qrl-utils';\nimport { isDev } from '@qwik.dev/core/build';\n/** @internal */\nexport const componentQrl = (componentQrl) => {\n    // Return a QComponent Factory function.\n    function QwikComponent(props, key, flags = 0) {\n        isDev && assertQrl(componentQrl);\n        isDev && assertNumber(flags, 'The Qwik Component was not invoked correctly');\n        const hash = qTest ? 'sX' : componentQrl.$hash$.slice(0, 4);\n        const finalKey = hash + ':' + (key ? key : '');\n        const InnerCmp = () => { };\n        InnerCmp[SERIALIZABLE_STATE] = [componentQrl];\n        return _jsxSplit(InnerCmp, props, null, props.children, flags, finalKey);\n    }\n    QwikComponent[SERIALIZABLE_STATE] = [componentQrl];\n    return QwikComponent;\n};\n/** @internal */\nexport const SERIALIZABLE_STATE = Symbol('serializable-data');\nexport const isQwikComponent = (component) => {\n    return typeof component == 'function' && component[SERIALIZABLE_STATE] !== undefined;\n};\n// <docs markdown=\"../readme.md#component\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#component instead and run `pnpm docs.sync`)\n/**\n * Declare a Qwik component that can be used to create UI.\n *\n * Use `component$` to declare a Qwik component. A Qwik component is a special kind of component\n * that allows the Qwik framework to lazy load and execute the component independently of other Qwik\n * components as well as lazy load the component's life-cycle hooks and event handlers.\n *\n * Side note: You can also declare regular (standard JSX) components that will have standard\n * synchronous behavior.\n *\n * Qwik component is a facade that describes how the component should be used without forcing the\n * implementation of the component to be eagerly loaded. A minimum Qwik definition consists of:\n *\n * ### Example\n *\n * An example showing how to create a counter component:\n *\n * ```tsx\n * export interface CounterProps {\n *   initialValue?: number;\n *   step?: number;\n * }\n * export const Counter = component$((props: CounterProps) => {\n *   const state = useSignal(props.initialValue || 0);\n *   return (\n *     <div>\n *       <span>{state.value}</span>\n *       <button onClick$={() => (state.value += props.step || 1)}>+</button>\n *     </div>\n *   );\n * });\n * ```\n *\n * - `component$` is how a component gets declared.\n * - `{ value?: number; step?: number }` declares the public (props) interface of the component.\n * - `{ count: number }` declares the private (state) interface of the component.\n *\n * The above can then be used like so:\n *\n * ```tsx\n * export const OtherComponent = component$(() => {\n *   return <Counter initialValue={100} />;\n * });\n * ```\n *\n * See also: `component`, `useCleanup`, `onResume`, `onPause`, `useOn`, `useOnDocument`,\n * `useOnWindow`, `useStyles`\n *\n * @public\n */\n// </docs>\nexport const component$ = (onMount) => {\n    return componentQrl(dollar(onMount));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvY29tcG9uZW50LnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFTcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBa0g3QyxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLFlBQW9DLEVBQ2xCLEVBQUU7SUFDcEIsd0NBQXdDO0lBQ3hDLFNBQVMsYUFBYSxDQUNwQixLQUF5QixFQUN6QixHQUFrQixFQUNsQixRQUFnQixDQUFDO1FBRWpCLEtBQUssSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsOENBQThDLENBQUMsQ0FBQztRQUM3RSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsWUFBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUN6QixRQUFnQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxPQUFPLFNBQVMsQ0FBQyxRQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0EsYUFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUQsT0FBTyxhQUFvQixDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBMkIsU0FBa0IsRUFBa0IsRUFBRTtJQUM5RixPQUFPLE9BQU8sU0FBUyxJQUFJLFVBQVUsSUFBSyxTQUFpQixDQUFDLGtCQUFrQixDQUFDLEtBQUssU0FBUyxDQUFDO0FBQ2hHLENBQUMsQ0FBQztBQUVGLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsaUVBQWlFO0FBQ2pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaURHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFrQixPQUEwQixFQUFvQixFQUFFO0lBQzFGLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvbGxhciwgdHlwZSBRUkwgfSBmcm9tICcuL3FybC9xcmwucHVibGljJztcbmltcG9ydCB0eXBlIHsgSlNYTm9kZUludGVybmFsLCBKU1hPdXRwdXQgfSBmcm9tICcuL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbXBvbmVudEJhc2VQcm9wcyxcbiAgRXZlbnRIYW5kbGVyLFxuICBKU1hDaGlsZHJlbixcbiAgUVJMRXZlbnRIYW5kbGVyTXVsdGksXG59IGZyb20gJy4vanN4L3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuaW1wb3J0IHR5cGUgeyBGdW5jdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vanN4L3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB7IF9qc3hTcGxpdCB9IGZyb20gJy4uL2ludGVybmFsJztcbmltcG9ydCB0eXBlIHsgUXdpa0ludHJpbnNpY0VsZW1lbnRzIH0gZnJvbSAnLi9qc3gvdHlwZXMvanN4LXF3aWstZWxlbWVudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TnVtYmVyIH0gZnJvbSAnLi9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgcVRlc3QgfSBmcm9tICcuL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4vcXJsL3FybC1jbGFzcyc7XG5cbi8vIFRTIHdheSB0byBjaGVjayBmb3IgYW55XG50eXBlIElzQW55PFQ+ID0gMCBleHRlbmRzIFQgJiAxID8gdHJ1ZSA6IGZhbHNlO1xuXG50eXBlIE9iamVjdFByb3BzPFQ+ID1cbiAgSXNBbnk8VD4gZXh0ZW5kcyB0cnVlXG4gICAgPyBhbnlcbiAgICA6IC8vIHVua25vd24gbWVhbnMgd2UgZG9uJ3QgYWNjZXB0IGFueSBwcm9wc1xuICAgICAgdW5rbm93biBleHRlbmRzIFRcbiAgICAgID8gbmV2ZXJcbiAgICAgIDogVCBleHRlbmRzIFJlY29yZDxhbnksIGFueT5cbiAgICAgICAgPyBUXG4gICAgICAgIDogbmV2ZXI7XG5cbi8qKlxuICogSW5mZXJzIGBQcm9wc2AgZnJvbSB0aGUgY29tcG9uZW50IG9yIHRhZy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogY29uc3QgRGVzYyA9IGNvbXBvbmVudCQoKHtkZXNjLCAuLi5wcm9wc306IHsgZGVzYzogc3RyaW5nIH0gJiBQcm9wc09mPCdkaXYnPikgPT4ge1xuICogIHJldHVybiA8ZGl2IHsuLi5wcm9wc30+e2Rlc2N9PC9kaXY+O1xuICogfSk7XG4gKlxuICogY29uc3QgVGl0bGVCb3ggPSBjb21wb25lbnQkKCh7dGl0bGUsIC4uLnByb3BzfTogeyB0aXRsZTogc3RyaW5nIH0gJiBQcm9wc09mPEJveD4pID0+IHtcbiAqICAgcmV0dXJuIDxCb3ggey4uLnByb3BzfT48aDE+e3RpdGxlfTwvaDE+PC9Cb3g+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCB0eXBlIFByb3BzT2Y8Q09NUD4gPSBDT01QIGV4dGVuZHMgc3RyaW5nXG4gID8gQ09NUCBleHRlbmRzIGtleW9mIFF3aWtJbnRyaW5zaWNFbGVtZW50c1xuICAgID8gUXdpa0ludHJpbnNpY0VsZW1lbnRzW0NPTVBdXG4gICAgOiAvLyBgPHNwYW4vPmAgaGFzIG5vIHNwZWNpYWwgYXR0cmlidXRlc1xuICAgICAgUXdpa0ludHJpbnNpY0VsZW1lbnRzWydzcGFuJ11cbiAgOiBOb25OdWxsYWJsZTxDT01QPiBleHRlbmRzIG5ldmVyXG4gICAgPyBuZXZlclxuICAgIDogQ09NUCBleHRlbmRzIEZ1bmN0aW9uQ29tcG9uZW50PGluZmVyIFBST1BTPlxuICAgICAgPyBQUk9QUyBleHRlbmRzIFJlY29yZDxhbnksIGluZmVyIFY+XG4gICAgICAgID8gSXNBbnk8Vj4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyAvLyB3ZSBjb3VsZG4ndCBmaWd1cmUgaXQgb3V0XG4gICAgICAgICAgICBuZXZlclxuICAgICAgICAgIDogT2JqZWN0UHJvcHM8UFJPUFM+XG4gICAgICAgIDogQ09NUCBleHRlbmRzIENvbXBvbmVudDxpbmZlciBPcmlnUHJvcHM+XG4gICAgICAgICAgPyBPYmplY3RQcm9wczxPcmlnUHJvcHM+XG4gICAgICAgICAgOiAvLyBzb21ldGhpbmcgY29tcGxleCwganVzdCByZXR1cm4gYXMtaXNcbiAgICAgICAgICAgIFBST1BTXG4gICAgICA6IG5ldmVyO1xuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBRd2lrIGNvbXBvbmVudC5cbiAqXG4gKiBgQ29tcG9uZW50YCBpcyB0aGUgdHlwZSByZXR1cm5lZCBieSBpbnZva2luZyBgY29tcG9uZW50JGAuXG4gKlxuICogYGBgdHN4XG4gKiBpbnRlcmZhY2UgTXlDb21wb25lbnRQcm9wcyB7XG4gKiAgIHNvbWVQcm9wOiBzdHJpbmc7XG4gKiB9XG4gKiBjb25zdCBNeUNvbXBvbmVudDogQ29tcG9uZW50PE15Q29tcG9uZW50UHJvcHM+ID0gY29tcG9uZW50JCgocHJvcHM6IE15Q29tcG9uZW50UHJvcHMpID0+IHtcbiAqICAgcmV0dXJuIDxzcGFuPntwcm9wcy5zb21lUHJvcH08L3NwYW4+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIEluIHJlYWxpdHksIENvbXBvbmVudCBpcyBhIFFSTCBidXQgdGhhdCBtYWtlcyB0aGUgdHlwZXMgdG9vIGNvbXBsZXhcbmV4cG9ydCB0eXBlIENvbXBvbmVudDxQUk9QUyA9IHVua25vd24+ID0gRnVuY3Rpb25Db21wb25lbnQ8UHVibGljUHJvcHM8UFJPUFM+PjtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW48UFJPUFM+ID0gUFJPUFMgZXh0ZW5kcyB7XG4gIGNoaWxkcmVuOiBhbnk7XG59XG4gID8gbmV2ZXJcbiAgOiB7IGNoaWxkcmVuPzogSlNYQ2hpbGRyZW4gfTtcbi8qKlxuICogRXh0ZW5kcyB0aGUgZGVmaW5lZCBjb21wb25lbnQgUFJPUFMsIGFkZGluZyB0aGUgZGVmYXVsdCBvbmVzIChjaGlsZHJlbiBhbmQgcTpzbG90KSBhbmQgYWxsb3dpbmdcbiAqIHBsYWluIGZ1bmN0aW9ucyB0byBRUkwgYXJndW1lbnRzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUHVibGljUHJvcHM8UFJPUFM+ID1cbiAgLy8gVXNlIE9taXQgKyBfT25seSQgc28gdGhhdCBpbmZlcnJpbmcgcG9seW1vcnBpYyBjb21wb25lbnRzIHdvcmtzXG4gIC8vIE1hcHBpbmcgdGhlIGVudGlyZSBQUk9QUyBkb2Vzbid0IHdvcmssIG1heWJlIFRTIGRvZXNuJ3QgbGlrZSBpbmZlcnJpbmcgdGhyb3VnaCBjb25kaXRpb25hbCB0eXBlc1xuICAoUFJPUFMgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+XG4gICAgPyBPbWl0PFBST1BTLCBgJHtzdHJpbmd9JGA+ICYgX09ubHkkPFBST1BTPlxuICAgIDogdW5rbm93biBleHRlbmRzIFBST1BTXG4gICAgICA/IHt9XG4gICAgICA6IFBST1BTKSAmXG4gICAgQ29tcG9uZW50QmFzZVByb3BzICZcbiAgICBDb21wb25lbnRDaGlsZHJlbjxQUk9QUz47XG5cbnR5cGUgX0FsbG93UGxhaW5Rcmw8UT4gPVxuICAvLyBRUkxFdmVudEhhbmRsZXJNdWx0aSBnZXRzIGEgc3BlY2lhbCBjYXNlIHRvIHNpbXBsaWZ5IHRoZSByZXN1bHRcbiAgLy8gSXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkgYmVjYXVzZSBpdCBtYXRjaGVzIHJlZ3VsYXIgZnVuY3Rpb25zIHRvb1xuICBRUkxFdmVudEhhbmRsZXJNdWx0aTxhbnksIGFueT4gZXh0ZW5kcyBRXG4gICAgPyBRIGV4dGVuZHMgUVJMRXZlbnRIYW5kbGVyTXVsdGk8aW5mZXIgRVYsIGluZmVyIEVMPlxuICAgICAgP1xuICAgICAgICAgIHwgUVxuICAgICAgICAgIC8vIEl0IGNhbiBpbmZlciB1bmtub3duIGFuZCB0aGF0IGJyZWFrcyB0aGluZ3NcbiAgICAgICAgICB8IChFTCBleHRlbmRzIEVsZW1lbnQgPyBFdmVudEhhbmRsZXI8RVYsIEVMPiA6IG5ldmVyKVxuICAgICAgOiBRXG4gICAgOiBRIGV4dGVuZHMgUVJMPGluZmVyIFU+XG4gICAgICA/IFEgfCBVXG4gICAgICA6IE5vbk51bGxhYmxlPFE+IGV4dGVuZHMgbmV2ZXJcbiAgICAgICAgPyBRXG4gICAgICAgIDogUVJMPFE+IHwgUTtcblxudHlwZSBfT25seSQ8UD4gPSB7XG4gIFtLIGluIGtleW9mIFAgYXMgSyBleHRlbmRzIGAke3N0cmluZ30kYCA/IEsgOiBuZXZlcl06IF9BbGxvd1BsYWluUXJsPFBbS10+O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNvbXBvbmVudFFybCA9IDxQUk9QUyBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+KFxuICBjb21wb25lbnRRcmw6IFFSTDxPblJlbmRlckZuPFBST1BTPj5cbik6IENvbXBvbmVudDxQUk9QUz4gPT4ge1xuICAvLyBSZXR1cm4gYSBRQ29tcG9uZW50IEZhY3RvcnkgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIFF3aWtDb21wb25lbnQoXG4gICAgcHJvcHM6IFB1YmxpY1Byb3BzPFBST1BTPixcbiAgICBrZXk6IHN0cmluZyB8IG51bGwsXG4gICAgZmxhZ3M6IG51bWJlciA9IDBcbiAgKTogSlNYTm9kZUludGVybmFsIHtcbiAgICBpc0RldiAmJiBhc3NlcnRRcmwoY29tcG9uZW50UXJsKTtcbiAgICBpc0RldiAmJiBhc3NlcnROdW1iZXIoZmxhZ3MsICdUaGUgUXdpayBDb21wb25lbnQgd2FzIG5vdCBpbnZva2VkIGNvcnJlY3RseScpO1xuICAgIGNvbnN0IGhhc2ggPSBxVGVzdCA/ICdzWCcgOiAoY29tcG9uZW50UXJsIGFzIFFSTEludGVybmFsKS4kaGFzaCQuc2xpY2UoMCwgNCk7XG4gICAgY29uc3QgZmluYWxLZXkgPSBoYXNoICsgJzonICsgKGtleSA/IGtleSA6ICcnKTtcbiAgICBjb25zdCBJbm5lckNtcCA9ICgpID0+IHt9O1xuICAgIChJbm5lckNtcCBhcyBhbnkpW1NFUklBTElaQUJMRV9TVEFURV0gPSBbY29tcG9uZW50UXJsXTtcbiAgICByZXR1cm4gX2pzeFNwbGl0KElubmVyQ21wIGFzIGFueSwgcHJvcHMsIG51bGwsIHByb3BzLmNoaWxkcmVuLCBmbGFncywgZmluYWxLZXkpO1xuICB9XG4gIChRd2lrQ29tcG9uZW50IGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXSA9IFtjb21wb25lbnRRcmxdO1xuICByZXR1cm4gUXdpa0NvbXBvbmVudCBhcyBhbnk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgU0VSSUFMSVpBQkxFX1NUQVRFID0gU3ltYm9sKCdzZXJpYWxpemFibGUtZGF0YScpO1xuXG5leHBvcnQgY29uc3QgaXNRd2lrQ29tcG9uZW50ID0gPFQgZXh0ZW5kcyBDb21wb25lbnQ8YW55Pj4oY29tcG9uZW50OiB1bmtub3duKTogY29tcG9uZW50IGlzIFQgPT4ge1xuICByZXR1cm4gdHlwZW9mIGNvbXBvbmVudCA9PSAnZnVuY3Rpb24nICYmIChjb21wb25lbnQgYXMgYW55KVtTRVJJQUxJWkFCTEVfU1RBVEVdICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCNjb21wb25lbnRcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjY29tcG9uZW50IGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBEZWNsYXJlIGEgUXdpayBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgVUkuXG4gKlxuICogVXNlIGBjb21wb25lbnQkYCB0byBkZWNsYXJlIGEgUXdpayBjb21wb25lbnQuIEEgUXdpayBjb21wb25lbnQgaXMgYSBzcGVjaWFsIGtpbmQgb2YgY29tcG9uZW50XG4gKiB0aGF0IGFsbG93cyB0aGUgUXdpayBmcmFtZXdvcmsgdG8gbGF6eSBsb2FkIGFuZCBleGVjdXRlIHRoZSBjb21wb25lbnQgaW5kZXBlbmRlbnRseSBvZiBvdGhlciBRd2lrXG4gKiBjb21wb25lbnRzIGFzIHdlbGwgYXMgbGF6eSBsb2FkIHRoZSBjb21wb25lbnQncyBsaWZlLWN5Y2xlIGhvb2tzIGFuZCBldmVudCBoYW5kbGVycy5cbiAqXG4gKiBTaWRlIG5vdGU6IFlvdSBjYW4gYWxzbyBkZWNsYXJlIHJlZ3VsYXIgKHN0YW5kYXJkIEpTWCkgY29tcG9uZW50cyB0aGF0IHdpbGwgaGF2ZSBzdGFuZGFyZFxuICogc3luY2hyb25vdXMgYmVoYXZpb3IuXG4gKlxuICogUXdpayBjb21wb25lbnQgaXMgYSBmYWNhZGUgdGhhdCBkZXNjcmliZXMgaG93IHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVzZWQgd2l0aG91dCBmb3JjaW5nIHRoZVxuICogaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXBvbmVudCB0byBiZSBlYWdlcmx5IGxvYWRlZC4gQSBtaW5pbXVtIFF3aWsgZGVmaW5pdGlvbiBjb25zaXN0cyBvZjpcbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIEFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gY3JlYXRlIGEgY291bnRlciBjb21wb25lbnQ6XG4gKlxuICogYGBgdHN4XG4gKiBleHBvcnQgaW50ZXJmYWNlIENvdW50ZXJQcm9wcyB7XG4gKiAgIGluaXRpYWxWYWx1ZT86IG51bWJlcjtcbiAqICAgc3RlcD86IG51bWJlcjtcbiAqIH1cbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyID0gY29tcG9uZW50JCgocHJvcHM6IENvdW50ZXJQcm9wcykgPT4ge1xuICogICBjb25zdCBzdGF0ZSA9IHVzZVNpZ25hbChwcm9wcy5pbml0aWFsVmFsdWUgfHwgMCk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxzcGFuPntzdGF0ZS52YWx1ZX08L3NwYW4+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2skPXsoKSA9PiAoc3RhdGUudmFsdWUgKz0gcHJvcHMuc3RlcCB8fCAxKX0+KzwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiAtIGBjb21wb25lbnQkYCBpcyBob3cgYSBjb21wb25lbnQgZ2V0cyBkZWNsYXJlZC5cbiAqIC0gYHsgdmFsdWU/OiBudW1iZXI7IHN0ZXA/OiBudW1iZXIgfWAgZGVjbGFyZXMgdGhlIHB1YmxpYyAocHJvcHMpIGludGVyZmFjZSBvZiB0aGUgY29tcG9uZW50LlxuICogLSBgeyBjb3VudDogbnVtYmVyIH1gIGRlY2xhcmVzIHRoZSBwcml2YXRlIChzdGF0ZSkgaW50ZXJmYWNlIG9mIHRoZSBjb21wb25lbnQuXG4gKlxuICogVGhlIGFib3ZlIGNhbiB0aGVuIGJlIHVzZWQgbGlrZSBzbzpcbiAqXG4gKiBgYGB0c3hcbiAqIGV4cG9ydCBjb25zdCBPdGhlckNvbXBvbmVudCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICByZXR1cm4gPENvdW50ZXIgaW5pdGlhbFZhbHVlPXsxMDB9IC8+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBTZWUgYWxzbzogYGNvbXBvbmVudGAsIGB1c2VDbGVhbnVwYCwgYG9uUmVzdW1lYCwgYG9uUGF1c2VgLCBgdXNlT25gLCBgdXNlT25Eb2N1bWVudGAsXG4gKiBgdXNlT25XaW5kb3dgLCBgdXNlU3R5bGVzYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IGNvbXBvbmVudCQgPSA8UFJPUFMgPSB1bmtub3duPihvbk1vdW50OiBPblJlbmRlckZuPFBST1BTPik6IENvbXBvbmVudDxQUk9QUz4gPT4ge1xuICByZXR1cm4gY29tcG9uZW50UXJsKGRvbGxhcihvbk1vdW50KSk7XG59O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgT25SZW5kZXJGbjxQUk9QUz4gPSAocHJvcHM6IFBST1BTKSA9PiBKU1hPdXRwdXQ7XG4iXX0=","import { eventQrl } from './qrl.public';\nimport { implicit$FirstArg } from './implicit_dollar';\n/** @public */\nexport const event$ = implicit$FirstArg(eventQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLnB1YmxpYy5kb2xsYXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3FybC9xcmwucHVibGljLmRvbGxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBldmVudFFybCB9IGZyb20gJy4vcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBpbXBsaWNpdCRGaXJzdEFyZyB9IGZyb20gJy4vaW1wbGljaXRfZG9sbGFyJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBldmVudCQgPSBpbXBsaWNpdCRGaXJzdEFyZyhldmVudFFybCk7XG4iXX0=","/**\n * Returns the client build manifest, which includes the mappings from symbols to bundles, the\n * bundlegraph etc.\n *\n * @public\n */\nexport const getClientManifest = () => {\n    // Keep this first because the magic-string first replaces the `!...` version and it can't replace after that.\n    const manifest = globalThis.__QWIK_MANIFEST__;\n    /**\n     * Keep as-is, this is replaced verbatim with `false` by the qwikVite plugin, so this function\n     * only throws if the build was not done correctly + no manifest was provided on globalThis.\n     */\n    if (!globalThis.__QWIK_MANIFEST__) {\n        throw new Error(`Client manifest is not available. It should have been automatically injected during the build process. Make sure that @qwik.dev/core is internal to the build.`);\n    }\n    return manifest;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNsaWVudC1tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvZ2V0LWNsaWVudC1tYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQW1DLEVBQUU7SUFDcEUsOEdBQThHO0lBQzlHLE1BQU0sUUFBUSxHQUFJLFVBQWtCLENBQUMsaUJBQW1ELENBQUM7SUFDekY7OztPQUdHO0lBQ0gsSUFBSSxDQUFFLFVBQWtCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksS0FBSyxDQUNiLGdLQUFnSyxDQUNqSyxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VydmVyUXdpa01hbmlmZXN0IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvb3B0aW1pemVyJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjbGllbnQgYnVpbGQgbWFuaWZlc3QsIHdoaWNoIGluY2x1ZGVzIHRoZSBtYXBwaW5ncyBmcm9tIHN5bWJvbHMgdG8gYnVuZGxlcywgdGhlXG4gKiBidW5kbGVncmFwaCBldGMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZ2V0Q2xpZW50TWFuaWZlc3QgPSAoKTogU2VydmVyUXdpa01hbmlmZXN0IHwgdW5kZWZpbmVkID0+IHtcbiAgLy8gS2VlcCB0aGlzIGZpcnN0IGJlY2F1c2UgdGhlIG1hZ2ljLXN0cmluZyBmaXJzdCByZXBsYWNlcyB0aGUgYCEuLi5gIHZlcnNpb24gYW5kIGl0IGNhbid0IHJlcGxhY2UgYWZ0ZXIgdGhhdC5cbiAgY29uc3QgbWFuaWZlc3QgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fUVdJS19NQU5JRkVTVF9fIGFzIFNlcnZlclF3aWtNYW5pZmVzdCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEtlZXAgYXMtaXMsIHRoaXMgaXMgcmVwbGFjZWQgdmVyYmF0aW0gd2l0aCBgZmFsc2VgIGJ5IHRoZSBxd2lrVml0ZSBwbHVnaW4sIHNvIHRoaXMgZnVuY3Rpb25cbiAgICogb25seSB0aHJvd3MgaWYgdGhlIGJ1aWxkIHdhcyBub3QgZG9uZSBjb3JyZWN0bHkgKyBubyBtYW5pZmVzdCB3YXMgcHJvdmlkZWQgb24gZ2xvYmFsVGhpcy5cbiAgICovXG4gIGlmICghKGdsb2JhbFRoaXMgYXMgYW55KS5fX1FXSUtfTUFOSUZFU1RfXykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDbGllbnQgbWFuaWZlc3QgaXMgbm90IGF2YWlsYWJsZS4gSXQgc2hvdWxkIGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gTWFrZSBzdXJlIHRoYXQgQHF3aWsuZGV2L2NvcmUgaXMgaW50ZXJuYWwgdG8gdGhlIGJ1aWxkLmBcbiAgICApO1xuICB9XG4gIHJldHVybiBtYW5pZmVzdDtcbn07XG4iXX0=","import { isDocument, isElement } from '../shared/utils/element';\nimport { getDomContainer } from './dom-container';\nimport { cleanup } from './vnode-diff';\nimport { QContainerAttr } from '../shared/utils/markers';\nimport { qDev } from '../shared/utils/qdev';\nimport { qError } from '../shared/error/error';\nimport { vnode_setProp } from './vnode-utils';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { NODE_DIFF_DATA_KEY } from '../shared/cursor/cursor-props';\n/**\n * Render JSX.\n *\n * Use this method to render JSX. This function does reconciling which means it always tries to\n * reuse what is already in the DOM (rather then destroy and recreate content.) It returns a cleanup\n * function you could use for cleaning up subscriptions.\n *\n * @param parent - Element which will act as a parent to `jsxNode`. When possible the rendering will\n *   try to reuse existing nodes.\n * @param jsxNode - JSX to render\n * @returns An object containing a cleanup function.\n * @public\n */\nexport const render = async (parent, jsxNode, opts = {}) => {\n    if (isDocument(parent)) {\n        let child = parent.firstChild;\n        while (child && !isElement(child)) {\n            child = child.nextSibling;\n        }\n        parent = child;\n    }\n    if (qDev && parent.hasAttribute(QContainerAttr)) {\n        throw qError(4 /* QError.cannotRenderOverExistingContainer */, [parent]);\n    }\n    parent.setAttribute(QContainerAttr, \"resumed\" /* QContainerValue.RESUMED */);\n    const container = getDomContainer(parent);\n    container.$serverData$ = opts.serverData || {};\n    const host = container.rootVNode;\n    vnode_setProp(host, NODE_DIFF_DATA_KEY, jsxNode);\n    markVNodeDirty(container, host, 2 /* ChoreBits.NODE_DIFF */);\n    await container.$renderPromise$;\n    return {\n        cleanup: () => {\n            /**\n             * This can lead to cleaning up projection vnodes via the journal, but since we're cleaning up\n             * they don't matter so we ignore the journal\n             */\n            cleanup(container, [], container.rootVNode);\n        },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXJlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvZG9tLXJlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUN6QixNQUEwQixFQUMxQixPQUEyQyxFQUMzQyxPQUFzQixFQUFFLEVBQ0QsRUFBRTtJQUN6QixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFnQixNQUFNLENBQUMsVUFBVSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sR0FBRyxLQUFnQixDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsTUFBTSxNQUFNLG1EQUEyQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNBLE1BQWtCLENBQUMsWUFBWSxDQUFDLGNBQWMsMENBQTBCLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQXFCLENBQWlCLENBQUM7SUFDekUsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2pDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLDhCQUFzQixDQUFDO0lBQ3JELE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaOzs7ZUFHRztZQUNILE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRnVuY3Rpb25Db21wb25lbnQsIEpTWE91dHB1dCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHsgaXNEb2N1bWVudCwgaXNFbGVtZW50IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUUNvbnRhaW5lclZhbHVlIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IERvbUNvbnRhaW5lciwgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi9kb20tY29udGFpbmVyJztcbmltcG9ydCB7IGNsZWFudXAgfSBmcm9tICcuL3Zub2RlLWRpZmYnO1xuaW1wb3J0IHsgUUNvbnRhaW5lckF0dHIgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMsIFJlbmRlclJlc3VsdCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgcURldiB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IHZub2RlX3NldFByb3AgfSBmcm9tICcuL3Zub2RlLXV0aWxzJztcbmltcG9ydCB7IG1hcmtWTm9kZURpcnR5IH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlLWRpcnR5JztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS9lbnVtcy9jaG9yZS1iaXRzLmVudW0nO1xuaW1wb3J0IHsgTk9ERV9ESUZGX0RBVEFfS0VZIH0gZnJvbSAnLi4vc2hhcmVkL2N1cnNvci9jdXJzb3ItcHJvcHMnO1xuXG4vKipcbiAqIFJlbmRlciBKU1guXG4gKlxuICogVXNlIHRoaXMgbWV0aG9kIHRvIHJlbmRlciBKU1guIFRoaXMgZnVuY3Rpb24gZG9lcyByZWNvbmNpbGluZyB3aGljaCBtZWFucyBpdCBhbHdheXMgdHJpZXMgdG9cbiAqIHJldXNlIHdoYXQgaXMgYWxyZWFkeSBpbiB0aGUgRE9NIChyYXRoZXIgdGhlbiBkZXN0cm95IGFuZCByZWNyZWF0ZSBjb250ZW50LikgSXQgcmV0dXJucyBhIGNsZWFudXBcbiAqIGZ1bmN0aW9uIHlvdSBjb3VsZCB1c2UgZm9yIGNsZWFuaW5nIHVwIHN1YnNjcmlwdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhcmVudCAtIEVsZW1lbnQgd2hpY2ggd2lsbCBhY3QgYXMgYSBwYXJlbnQgdG8gYGpzeE5vZGVgLiBXaGVuIHBvc3NpYmxlIHRoZSByZW5kZXJpbmcgd2lsbFxuICogICB0cnkgdG8gcmV1c2UgZXhpc3Rpbmcgbm9kZXMuXG4gKiBAcGFyYW0ganN4Tm9kZSAtIEpTWCB0byByZW5kZXJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGEgY2xlYW51cCBmdW5jdGlvbi5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbmRlciA9IGFzeW5jIChcbiAgcGFyZW50OiBFbGVtZW50IHwgRG9jdW1lbnQsXG4gIGpzeE5vZGU6IEpTWE91dHB1dCB8IEZ1bmN0aW9uQ29tcG9uZW50PGFueT4sXG4gIG9wdHM6IFJlbmRlck9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxSZW5kZXJSZXN1bHQ+ID0+IHtcbiAgaWYgKGlzRG9jdW1lbnQocGFyZW50KSkge1xuICAgIGxldCBjaGlsZDogTm9kZSB8IG51bGwgPSBwYXJlbnQuZmlyc3RDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQgJiYgIWlzRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgfVxuICAgIHBhcmVudCA9IGNoaWxkIGFzIEVsZW1lbnQ7XG4gIH1cbiAgaWYgKHFEZXYgJiYgcGFyZW50Lmhhc0F0dHJpYnV0ZShRQ29udGFpbmVyQXR0cikpIHtcbiAgICB0aHJvdyBxRXJyb3IoUUVycm9yLmNhbm5vdFJlbmRlck92ZXJFeGlzdGluZ0NvbnRhaW5lciwgW3BhcmVudF0pO1xuICB9XG4gIChwYXJlbnQgYXMgRWxlbWVudCkuc2V0QXR0cmlidXRlKFFDb250YWluZXJBdHRyLCBRQ29udGFpbmVyVmFsdWUuUkVTVU1FRCk7XG5cbiAgY29uc3QgY29udGFpbmVyID0gZ2V0RG9tQ29udGFpbmVyKHBhcmVudCBhcyBIVE1MRWxlbWVudCkgYXMgRG9tQ29udGFpbmVyO1xuICBjb250YWluZXIuJHNlcnZlckRhdGEkID0gb3B0cy5zZXJ2ZXJEYXRhIHx8IHt9O1xuICBjb25zdCBob3N0ID0gY29udGFpbmVyLnJvb3RWTm9kZTtcbiAgdm5vZGVfc2V0UHJvcChob3N0LCBOT0RFX0RJRkZfREFUQV9LRVksIGpzeE5vZGUpO1xuICBtYXJrVk5vZGVEaXJ0eShjb250YWluZXIsIGhvc3QsIENob3JlQml0cy5OT0RFX0RJRkYpO1xuICBhd2FpdCBjb250YWluZXIuJHJlbmRlclByb21pc2UkO1xuICByZXR1cm4ge1xuICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBjYW4gbGVhZCB0byBjbGVhbmluZyB1cCBwcm9qZWN0aW9uIHZub2RlcyB2aWEgdGhlIGpvdXJuYWwsIGJ1dCBzaW5jZSB3ZSdyZSBjbGVhbmluZyB1cFxuICAgICAgICogdGhleSBkb24ndCBtYXR0ZXIgc28gd2UgaWdub3JlIHRoZSBqb3VybmFsXG4gICAgICAgKi9cbiAgICAgIGNsZWFudXAoY29udGFpbmVyLCBbXSwgY29udGFpbmVyLnJvb3RWTm9kZSk7XG4gICAgfSxcbiAgfTtcbn07XG4iXX0=","import { isFunction } from '../shared/utils/types';\nimport { getOrCreateStore } from '../reactive-primitives/impl/store';\nimport { invoke } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\nexport { unwrapStore, forceStoreEffects } from '../reactive-primitives/impl/store';\n// <docs markdown=\"../readme.md#useStore\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useStore instead and run `pnpm docs.sync`)\n/**\n * Creates a reactive object that Qwik can track across serialization.\n *\n * Use it to create state for your application. The returned object is a Proxy that tracks reads and\n * writes. When any of the properties change, the functions that read those properties will re-run.\n *\n * `Store`s are deep by default, meaning that any objects assigned to properties will also become\n * `Store`s. This includes arrays.\n *\n * Prefer `useSignal` over `useStore` when possible, as it is more efficient.\n *\n * ### Example\n *\n * Example showing how `useStore` is used in Counter example to keep track of the count.\n *\n * ```tsx\n * const Stores = component$(() => {\n *   const counter = useCounter(1);\n *\n *   // Reactivity happens even for nested objects and arrays\n *   const userData = useStore({\n *     name: 'Manu',\n *     address: {\n *       address: '',\n *       city: '',\n *     },\n *     orgs: [],\n *   });\n *\n *   // useStore() can also accept a function to calculate the initial value\n *   const state = useStore(() => {\n *     return {\n *       value: expensiveInitialValue(),\n *     };\n *   });\n *\n *   return (\n *     <div>\n *       <div>Counter: {counter.value}</div>\n *       <Child userData={userData} state={state} />\n *     </div>\n *   );\n * });\n *\n * function useCounter(step: number) {\n *   // Multiple stores can be created in custom hooks for convenience and composability\n *   const counterStore = useStore({\n *     value: 0,\n *   });\n *   useVisibleTask$(() => {\n *     // Only runs in the client\n *     const timer = setInterval(() => {\n *       counterStore.value += step;\n *     }, 500);\n *     return () => {\n *       clearInterval(timer);\n *     };\n *   });\n *   return counterStore;\n * }\n * ```\n *\n * @public\n */\n// </docs>\nexport const useStore = (initialState, opts) => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    const value = isFunction(initialState) ? invoke(undefined, initialState) : initialState;\n    if (opts?.reactive === false) {\n        set(value);\n        return value;\n    }\n    else {\n        const containerState = iCtx.$container$;\n        const recursive = opts?.deep ?? true;\n        const flags = recursive ? 1 /* StoreFlags.RECURSIVE */ : 0 /* StoreFlags.NONE */;\n        const newStore = getOrCreateStore(value, flags, containerState);\n        set(newStore);\n        return newStore;\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN0b3JlLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXN0b3JlLnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFXbkYsMENBQTBDO0FBQzFDLHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStERztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsWUFBbUMsRUFDbkMsSUFBc0IsRUFDZixFQUFFO0lBQ1QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsa0JBQWtCLEVBQVMsQ0FBQztJQUN2RCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN4RixJQUFJLElBQUksRUFBRSxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDN0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsOEJBQXNCLENBQUMsd0JBQWdCLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNoRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDZCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZVN0b3JlIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9pbXBsL3N0b3JlJztcbmltcG9ydCB7IFN0b3JlRmxhZ3MgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3R5cGVzJztcbmltcG9ydCB7IGludm9rZSB9IGZyb20gJy4vdXNlLWNvcmUnO1xuaW1wb3J0IHsgdXNlU2VxdWVudGlhbFNjb3BlIH0gZnJvbSAnLi91c2Utc2VxdWVudGlhbC1zY29wZSc7XG5cbmV4cG9ydCB7IHVud3JhcFN0b3JlLCBmb3JjZVN0b3JlRWZmZWN0cyB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW1wbC9zdG9yZSc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZVN0b3JlT3B0aW9ucyB7XG4gIC8qKiBJZiBgdHJ1ZWAgdGhlbiBhbGwgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyB3aWxsIGJlIHRyYWNrZWQgYXMgd2VsbC4gRGVmYXVsdCBpcyBgdHJ1ZWAuICovXG4gIGRlZXA/OiBib29sZWFuO1xuXG4gIC8qKiBJZiBgZmFsc2VgIHRoZW4gdGhlIG9iamVjdCB3aWxsIG5vdCBiZSB0cmFja2VkIGZvciBjaGFuZ2VzLiBEZWZhdWx0IGlzIGB0cnVlYC4gKi9cbiAgcmVhY3RpdmU/OiBib29sZWFuO1xufVxuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VTdG9yZVwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VTdG9yZSBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogQ3JlYXRlcyBhIHJlYWN0aXZlIG9iamVjdCB0aGF0IFF3aWsgY2FuIHRyYWNrIGFjcm9zcyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIFVzZSBpdCB0byBjcmVhdGUgc3RhdGUgZm9yIHlvdXIgYXBwbGljYXRpb24uIFRoZSByZXR1cm5lZCBvYmplY3QgaXMgYSBQcm94eSB0aGF0IHRyYWNrcyByZWFkcyBhbmRcbiAqIHdyaXRlcy4gV2hlbiBhbnkgb2YgdGhlIHByb3BlcnRpZXMgY2hhbmdlLCB0aGUgZnVuY3Rpb25zIHRoYXQgcmVhZCB0aG9zZSBwcm9wZXJ0aWVzIHdpbGwgcmUtcnVuLlxuICpcbiAqIGBTdG9yZWBzIGFyZSBkZWVwIGJ5IGRlZmF1bHQsIG1lYW5pbmcgdGhhdCBhbnkgb2JqZWN0cyBhc3NpZ25lZCB0byBwcm9wZXJ0aWVzIHdpbGwgYWxzbyBiZWNvbWVcbiAqIGBTdG9yZWBzLiBUaGlzIGluY2x1ZGVzIGFycmF5cy5cbiAqXG4gKiBQcmVmZXIgYHVzZVNpZ25hbGAgb3ZlciBgdXNlU3RvcmVgIHdoZW4gcG9zc2libGUsIGFzIGl0IGlzIG1vcmUgZWZmaWNpZW50LlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKlxuICogRXhhbXBsZSBzaG93aW5nIGhvdyBgdXNlU3RvcmVgIGlzIHVzZWQgaW4gQ291bnRlciBleGFtcGxlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvdW50LlxuICpcbiAqIGBgYHRzeFxuICogY29uc3QgU3RvcmVzID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIGNvbnN0IGNvdW50ZXIgPSB1c2VDb3VudGVyKDEpO1xuICpcbiAqICAgLy8gUmVhY3Rpdml0eSBoYXBwZW5zIGV2ZW4gZm9yIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXNcbiAqICAgY29uc3QgdXNlckRhdGEgPSB1c2VTdG9yZSh7XG4gKiAgICAgbmFtZTogJ01hbnUnLFxuICogICAgIGFkZHJlc3M6IHtcbiAqICAgICAgIGFkZHJlc3M6ICcnLFxuICogICAgICAgY2l0eTogJycsXG4gKiAgICAgfSxcbiAqICAgICBvcmdzOiBbXSxcbiAqICAgfSk7XG4gKlxuICogICAvLyB1c2VTdG9yZSgpIGNhbiBhbHNvIGFjY2VwdCBhIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgaW5pdGlhbCB2YWx1ZVxuICogICBjb25zdCBzdGF0ZSA9IHVzZVN0b3JlKCgpID0+IHtcbiAqICAgICByZXR1cm4ge1xuICogICAgICAgdmFsdWU6IGV4cGVuc2l2ZUluaXRpYWxWYWx1ZSgpLFxuICogICAgIH07XG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPGRpdj5Db3VudGVyOiB7Y291bnRlci52YWx1ZX08L2Rpdj5cbiAqICAgICAgIDxDaGlsZCB1c2VyRGF0YT17dXNlckRhdGF9IHN0YXRlPXtzdGF0ZX0gLz5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH0pO1xuICpcbiAqIGZ1bmN0aW9uIHVzZUNvdW50ZXIoc3RlcDogbnVtYmVyKSB7XG4gKiAgIC8vIE11bHRpcGxlIHN0b3JlcyBjYW4gYmUgY3JlYXRlZCBpbiBjdXN0b20gaG9va3MgZm9yIGNvbnZlbmllbmNlIGFuZCBjb21wb3NhYmlsaXR5XG4gKiAgIGNvbnN0IGNvdW50ZXJTdG9yZSA9IHVzZVN0b3JlKHtcbiAqICAgICB2YWx1ZTogMCxcbiAqICAgfSk7XG4gKiAgIHVzZVZpc2libGVUYXNrJCgoKSA9PiB7XG4gKiAgICAgLy8gT25seSBydW5zIGluIHRoZSBjbGllbnRcbiAqICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAqICAgICAgIGNvdW50ZXJTdG9yZS52YWx1ZSArPSBzdGVwO1xuICogICAgIH0sIDUwMCk7XG4gKiAgICAgcmV0dXJuICgpID0+IHtcbiAqICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICogICAgIH07XG4gKiAgIH0pO1xuICogICByZXR1cm4gY291bnRlclN0b3JlO1xuICogfVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlU3RvcmUgPSA8U1RBVEUgZXh0ZW5kcyBvYmplY3Q+KFxuICBpbml0aWFsU3RhdGU6IFNUQVRFIHwgKCgpID0+IFNUQVRFKSxcbiAgb3B0cz86IFVzZVN0b3JlT3B0aW9uc1xuKTogU1RBVEUgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8U1RBVEU+KCk7XG4gIGlmICh2YWwgIT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBpc0Z1bmN0aW9uKGluaXRpYWxTdGF0ZSkgPyBpbnZva2UodW5kZWZpbmVkLCBpbml0aWFsU3RhdGUpIDogaW5pdGlhbFN0YXRlO1xuICBpZiAob3B0cz8ucmVhY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgc2V0KHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29udGFpbmVyU3RhdGUgPSBpQ3R4LiRjb250YWluZXIkO1xuICAgIGNvbnN0IHJlY3Vyc2l2ZSA9IG9wdHM/LmRlZXAgPz8gdHJ1ZTtcbiAgICBjb25zdCBmbGFncyA9IHJlY3Vyc2l2ZSA/IFN0b3JlRmxhZ3MuUkVDVVJTSVZFIDogU3RvcmVGbGFncy5OT05FO1xuICAgIGNvbnN0IG5ld1N0b3JlID0gZ2V0T3JDcmVhdGVTdG9yZSh2YWx1ZSwgZmxhZ3MsIGNvbnRhaW5lclN0YXRlKTtcbiAgICBzZXQobmV3U3RvcmUpO1xuICAgIHJldHVybiBuZXdTdG9yZTtcbiAgfVxufTtcbiJdfQ==","import { getRootContainer } from './container';\nexport const intToStr = (nu) => {\n    return nu.toString(36);\n};\nexport const getNextUniqueIndex = (container) => {\n    const rootContainer = getRootContainer(container);\n    return intToStr(rootContainer.$currentUniqueId$++);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLWluZGV4LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvdW5pcXVlLWluZGV4LWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUU7SUFDckMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsU0FBb0IsRUFBRSxFQUFFO0lBQ3pELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb250YWluZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRSb290Q29udGFpbmVyIH0gZnJvbSAnLi9jb250YWluZXInO1xuXG5leHBvcnQgY29uc3QgaW50VG9TdHIgPSAobnU6IG51bWJlcikgPT4ge1xuICByZXR1cm4gbnUudG9TdHJpbmcoMzYpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5leHRVbmlxdWVJbmRleCA9IChjb250YWluZXI6IENvbnRhaW5lcikgPT4ge1xuICBjb25zdCByb290Q29udGFpbmVyID0gZ2V0Um9vdENvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gaW50VG9TdHIocm9vdENvbnRhaW5lci4kY3VycmVudFVuaXF1ZUlkJCsrKTtcbn07XG4iXX0=","import { hashCode } from '../shared/utils/hash_code';\nimport { OnRenderProp } from '../shared/utils/markers';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { getNextUniqueIndex } from '../shared/utils/unique-index-generator';\n/** @public */\nexport const useId = () => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    const containerBase = iCtx.$container$.$buildBase$ || '';\n    const base = containerBase ? hashCode(containerBase).substring(0, 3) : '';\n    const componentQrl = iCtx.$container$.getHostProp(iCtx.$hostElement$, OnRenderProp);\n    const hash = componentQrl?.getHash().substring(0, 3) || '';\n    const counter = getNextUniqueIndex(iCtx.$container$) || '';\n    let id = `${base}${hash}${counter}`;\n    let firstChar = id.charCodeAt(0);\n    // convert first char to letter if starts with a number, because CSS does not allow class names to start with a number\n    if (firstChar >= 48 /* 0 */ && firstChar <= 57 /* 9 */) {\n        // 48 is char code for '0', 65 is char code for 'A'\n        // 65 - 48 = 17, so we add 17 to the char code of the first char to convert it to a letter\n        firstChar += 17;\n        id = String.fromCharCode(firstChar) + id.substring(1);\n    }\n    return set(id);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWlkLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU1RSxjQUFjO0FBQ2QsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQVcsRUFBRTtJQUNoQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsRUFBVSxDQUFDO0lBQ3hELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN6RCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN6RixNQUFNLElBQUksR0FBRyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0QsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzRCxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFFcEMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxzSEFBc0g7SUFDdEgsSUFBSSxTQUFTLElBQUksRUFBRSxDQUFDLE9BQU8sSUFBSSxTQUFTLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELG1EQUFtRDtRQUNuRCwwRkFBMEY7UUFDMUYsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNoQixFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uJztcbmltcG9ydCB7IGhhc2hDb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2hhc2hfY29kZSc7XG5pbXBvcnQgeyBPblJlbmRlclByb3AgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyB1c2VTZXF1ZW50aWFsU2NvcGUgfSBmcm9tICcuL3VzZS1zZXF1ZW50aWFsLXNjb3BlJztcbmltcG9ydCB7IGdldE5leHRVbmlxdWVJbmRleCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy91bmlxdWUtaW5kZXgtZ2VuZXJhdG9yJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCB1c2VJZCA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8c3RyaW5nPigpO1xuICBpZiAodmFsICE9IG51bGwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lckJhc2UgPSBpQ3R4LiRjb250YWluZXIkLiRidWlsZEJhc2UkIHx8ICcnO1xuICBjb25zdCBiYXNlID0gY29udGFpbmVyQmFzZSA/IGhhc2hDb2RlKGNvbnRhaW5lckJhc2UpLnN1YnN0cmluZygwLCAzKSA6ICcnO1xuICBjb25zdCBjb21wb25lbnRRcmwgPSBpQ3R4LiRjb250YWluZXIkLmdldEhvc3RQcm9wPFFSTD4oaUN0eC4kaG9zdEVsZW1lbnQkLCBPblJlbmRlclByb3ApO1xuICBjb25zdCBoYXNoID0gY29tcG9uZW50UXJsPy5nZXRIYXNoKCkuc3Vic3RyaW5nKDAsIDMpIHx8ICcnO1xuICBjb25zdCBjb3VudGVyID0gZ2V0TmV4dFVuaXF1ZUluZGV4KGlDdHguJGNvbnRhaW5lciQpIHx8ICcnO1xuICBsZXQgaWQgPSBgJHtiYXNlfSR7aGFzaH0ke2NvdW50ZXJ9YDtcblxuICBsZXQgZmlyc3RDaGFyID0gaWQuY2hhckNvZGVBdCgwKTtcbiAgLy8gY29udmVydCBmaXJzdCBjaGFyIHRvIGxldHRlciBpZiBzdGFydHMgd2l0aCBhIG51bWJlciwgYmVjYXVzZSBDU1MgZG9lcyBub3QgYWxsb3cgY2xhc3MgbmFtZXMgdG8gc3RhcnQgd2l0aCBhIG51bWJlclxuICBpZiAoZmlyc3RDaGFyID49IDQ4IC8qIDAgKi8gJiYgZmlyc3RDaGFyIDw9IDU3IC8qIDkgKi8pIHtcbiAgICAvLyA0OCBpcyBjaGFyIGNvZGUgZm9yICcwJywgNjUgaXMgY2hhciBjb2RlIGZvciAnQSdcbiAgICAvLyA2NSAtIDQ4ID0gMTcsIHNvIHdlIGFkZCAxNyB0byB0aGUgY2hhciBjb2RlIG9mIHRoZSBmaXJzdCBjaGFyIHRvIGNvbnZlcnQgaXQgdG8gYSBsZXR0ZXJcbiAgICBmaXJzdENoYXIgKz0gMTc7XG4gICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZpcnN0Q2hhcikgKyBpZC5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIHNldChpZCk7XG59O1xuIl19","import { tryGetInvokeContext } from './use-core';\n/** @public */\nexport function useServerData(key, defaultValue) {\n    const ctx = tryGetInvokeContext();\n    return ctx?.$container$?.$serverData$[key] ?? defaultValue;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWVudi1kYXRhLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtZW52LWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUWpELGNBQWM7QUFDZCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVcsRUFBRSxZQUFrQjtJQUMzRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cnlHZXRJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VydmVyRGF0YTxUPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQ7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VydmVyRGF0YTxULCBCID0gVD4oa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogQik6IFQgfCBCO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlcnZlckRhdGEoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSkge1xuICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gIHJldHVybiBjdHg/LiRjb250YWluZXIkPy4kc2VydmVyRGF0YSRba2V5XSA/PyBkZWZhdWx0VmFsdWU7XG59XG4iXX0=","/* eslint-disable no-console */\nimport { ComponentStylesPrefixContent } from './markers';\nimport { qDev } from './qdev';\n// Make sure this is always set to `false` in production, but it is useful to set for `true` in development for debugging.\nconst DEBUG = false;\nexport const STYLE_CACHE = /*#__PURE__*/ new Map();\nexport const getScopedStyles = (css, scopeId) => {\n    if (qDev) {\n        return scopeStylesheet(css, scopeId);\n    }\n    let styleCss = STYLE_CACHE.get(scopeId);\n    if (!styleCss) {\n        STYLE_CACHE.set(scopeId, (styleCss = scopeStylesheet(css, scopeId)));\n    }\n    return styleCss;\n};\nexport const scopeStylesheet = (css, scopeId) => {\n    const end = css.length;\n    const out = [];\n    const stack = [];\n    let idx = 0;\n    let lastIdx = idx;\n    let mode = rule;\n    let lastCh = 0;\n    DEBUG && console.log('--------------------------');\n    while (idx < end) {\n        DEBUG && console.log(css);\n        DEBUG && console.log(new Array(idx).fill(' ').join('') + '^');\n        DEBUG && console.log('MODE', ...stack.map(modeToString), modeToString(mode));\n        const chIdx = idx;\n        let ch = css.charCodeAt(idx++);\n        if (ch === BACKSLASH) {\n            idx++;\n            ch = A; // Pretend it's a letter\n        }\n        const arcs = STATE_MACHINE[mode];\n        for (let i = 0; i < arcs.length; i++) {\n            const arc = arcs[i];\n            const [expectLastCh, expectCh, newMode] = arc;\n            if (expectLastCh === lastCh ||\n                expectLastCh === ANY ||\n                (expectLastCh === IDENT && isIdent(lastCh)) ||\n                (expectLastCh === WHITESPACE && isWhiteSpace(lastCh))) {\n                if (expectCh === ch ||\n                    expectCh === ANY ||\n                    (expectCh === IDENT && isIdent(ch)) ||\n                    (expectCh === NOT_IDENT && !isIdent(ch) && ch !== DOT) ||\n                    (expectCh === WHITESPACE && isWhiteSpace(ch))) {\n                    if (arc.length == 3 || lookAhead(arc)) {\n                        if (arc.length > 3) {\n                            // If matched on lookAhead than we we have to update current `ch`\n                            ch = css.charCodeAt(idx - 1);\n                        }\n                        DEBUG &&\n                            console.log('MATCH', charToString(expectLastCh), charToString(expectCh), modeToString(newMode));\n                        // We found a match!\n                        if (newMode === EXIT || newMode == EXIT_INSERT_SCOPE) {\n                            if (newMode === EXIT_INSERT_SCOPE) {\n                                if (mode === starSelector && !shouldNotInsertScoping()) {\n                                    // Replace `*` with the scoping elementClassIdSelector.\n                                    if (isChainedSelector(ch)) {\n                                        // *foo\n                                        flush(idx - 2);\n                                    }\n                                    else {\n                                        // * (by itself)\n                                        insertScopingSelector(idx - 2);\n                                    }\n                                    lastIdx++;\n                                }\n                                else {\n                                    if (!isChainedSelector(ch)) {\n                                        // We are exiting one of the Selector so we may need to\n                                        const offset = expectCh == NOT_IDENT ? 1 : expectCh == CLOSE_PARENTHESIS ? 2 : 0;\n                                        insertScopingSelector(idx - offset);\n                                    }\n                                }\n                            }\n                            if (expectCh === NOT_IDENT) {\n                                // NOT_IDENT is not a real character more like lack of what we expected.\n                                // if pseudoGlobal we need to give it a chance to exit as well.\n                                // For this reason we need to reparse the last character again.\n                                idx--;\n                                ch = lastCh;\n                            }\n                            do {\n                                mode = stack.pop() || rule;\n                                if (mode === pseudoGlobal) {\n                                    // Skip over the `)` in `:global(...)`.\n                                    flush(idx - 1);\n                                    lastIdx++;\n                                }\n                            } while (isSelfClosingRule(mode));\n                        }\n                        else {\n                            stack.push(mode);\n                            if (mode === pseudoGlobal && newMode === rule) {\n                                flush(idx - 8); // `:global(`.length\n                                lastIdx = idx; // skip over \":global(\"\n                            }\n                            else if (newMode === pseudoElement) {\n                                // We are entering pseudoElement `::foo`; insert scoping in front of it.\n                                insertScopingSelector(chIdx);\n                            }\n                            mode = newMode;\n                            ch == SPACE; // Pretend not an identifier so that we don't flush again on elementClassIdSelector\n                        }\n                        break; // get out of the for loop as we found a match\n                    }\n                }\n            }\n        }\n        lastCh = ch;\n    }\n    flush(idx);\n    return out.join('');\n    function flush(idx) {\n        out.push(css.substring(lastIdx, idx));\n        DEBUG && console.log('FLUSH', out.join(''));\n        lastIdx = idx;\n    }\n    function insertScopingSelector(idx) {\n        if (mode === pseudoGlobal || shouldNotInsertScoping()) {\n            return;\n        }\n        flush(idx);\n        out.push('.', ComponentStylesPrefixContent, scopeId);\n        DEBUG && console.log('INSERT', out.join(''));\n    }\n    function lookAhead(arc) {\n        let prefix = 0; // Ignore vendor prefixes such as `-webkit-`.\n        if (css.charCodeAt(idx) === DASH) {\n            for (let i = 1; i < 10; i++) {\n                // give up after 10 characters\n                if (css.charCodeAt(idx + i) === DASH) {\n                    prefix = i + 1;\n                    break;\n                }\n            }\n        }\n        words: for (let arcIndx = 3; arcIndx < arc.length; arcIndx++) {\n            const txt = arc[arcIndx];\n            for (let i = 0; i < txt.length; i++) {\n                if ((css.charCodeAt(idx + i + prefix) | LOWERCASE) !== txt.charCodeAt(i)) {\n                    continue words;\n                }\n            }\n            // we found a match;\n            idx += txt.length + prefix;\n            return true;\n        }\n        return false;\n    }\n    function shouldNotInsertScoping() {\n        return stack.indexOf(pseudoGlobal) !== -1 || stack.indexOf(atRuleSelector) !== -1;\n    }\n};\nconst isIdent = (ch) => {\n    return ((ch >= _0 && ch <= _9) ||\n        (ch >= A && ch <= Z) ||\n        (ch >= a && ch <= z) ||\n        ch >= 0x80 ||\n        ch === UNDERSCORE ||\n        ch === DASH);\n};\nconst isChainedSelector = (ch) => {\n    return ch === COLON || ch === DOT || ch === OPEN_BRACKET || ch === HASH || isIdent(ch);\n};\nconst isSelfClosingRule = (mode) => {\n    return (mode === atRuleBlock || mode === atRuleSelector || mode === atRuleInert || mode === pseudoGlobal);\n};\nconst isWhiteSpace = (ch) => {\n    return ch === SPACE || ch === TAB || ch === NEWLINE || ch === CARRIAGE_RETURN;\n};\nconst modeToString = (mode) => {\n    return [\n        'rule',\n        'elementClassIdSelector',\n        'starSelector',\n        'pseudoClassWithSelector',\n        'pseudoClass',\n        'pseudoGlobal',\n        'pseudoElement',\n        'attrSelector',\n        'inertParenthesis',\n        'inertBlock',\n        'atRuleSelector',\n        'atRuleBlock',\n        'atInert',\n        'body',\n        'stringSingle',\n        'stringDouble',\n        'commentMultiline',\n        'EXIT',\n        'EXIT_INSERT_SCOPE',\n    ][mode];\n};\nconst charToString = (ch) => {\n    return ['ANY', 'IDENT', 'NOT_IDENT', 'WHITESPACE'][ch] || String.fromCharCode(ch);\n};\nconst rule = 0; // top level initial space.\nconst elementClassIdSelector = 1; // .elementClassIdSelector {}\nconst starSelector = 2; // * {}\nconst pseudoClassWithSelector = 3; // :pseudoClass(elementClassIdSelector) {}\nconst pseudoClass = 4; // :pseudoClass {}\nconst pseudoGlobal = 5; // :global(elementClassIdSelector)\nconst pseudoElement = 6; // ::pseudoElement {}\nconst attrSelector = 7; // [attr] {}\nconst inertParenthesis = 8; // (ignored)\nconst inertBlock = 9; // {ignored}\nconst atRuleSelector = 10; // @keyframe elementClassIdSelector {}\nconst atRuleBlock = 11; // @media {elementClassIdSelector {}}\nconst atRuleInert = 12; // @atRule something;\nconst body = 13; // .elementClassIdSelector {body}\nconst stringSingle = 14; // 'text'\nconst stringDouble = 15; // 'text'\nconst commentMultiline = 16; // /* ... */\n// NOT REAL MODES\nconst EXIT = 17; // Exit the mode\nconst EXIT_INSERT_SCOPE = 18; // Exit the mode INSERT SCOPE\nconst ANY = 0;\nconst IDENT = 1;\nconst NOT_IDENT = 2;\nconst WHITESPACE = 3;\nconst TAB = 9; // `\\t`.charCodeAt(0);\nconst NEWLINE = 10; // `\\n`.charCodeAt(0);\nconst CARRIAGE_RETURN = 13; // `\\r`.charCodeAt(0);\nconst SPACE = 32; // ` `.charCodeAt(0);\nconst DOUBLE_QUOTE = 34; // `\"`.charCodeAt(0);\nconst HASH = 35; // `#`.charCodeAt(0);\nconst SINGLE_QUOTE = 39; // `'`.charCodeAt(0);\nconst OPEN_PARENTHESIS = 40; // `(`.charCodeAt(0);\nconst CLOSE_PARENTHESIS = 41; // `)`.charCodeAt(0);\nconst STAR = 42; // `*`.charCodeAt(0);\n// const COMMA = 44; // `,`.charCodeAt(0);\nconst DASH = 45; // `-`.charCodeAt(0);\nconst DOT = 46; // `.`.charCodeAt(0);\nconst FORWARD_SLASH = 47; // `/`.charCodeAt(0);\nconst _0 = 48; // `0`.charCodeAt(0);\nconst _9 = 57; // `9`.charCodeAt(0);\nconst COLON = 58; // `:`.charCodeAt(0);\nconst SEMICOLON = 59; // `;`.charCodeAt(0);\n// const LESS_THAN = 60; // `<`.charCodeAt(0);\nconst AT = 64; // `@`.charCodeAt(0);\nconst A = 65; // `A`.charCodeAt(0);\nconst Z = 90; // `Z`.charCodeAt(0);\nconst OPEN_BRACKET = 91; // `[`.charCodeAt(0);\nconst CLOSE_BRACKET = 93; // `]`.charCodeAt(0);\nconst BACKSLASH = 92; // `\\\\`.charCodeAt(0);\nconst UNDERSCORE = 95; // `_`.charCodeAt(0);\nconst LOWERCASE = 0x20; // `a`.charCodeAt(0);\nconst a = 97; // `a`.charCodeAt(0);\n// const d = 100; // `d`.charCodeAt(0);\n// const g = 103; // 'g'.charCodeAt(0);\n// const h = 104; // `h`.charCodeAt(0);\n// const i = 105; // `i`.charCodeAt(0);\n// const l = 108; // `l`.charCodeAt(0);\n// const t = 116; // `t`.charCodeAt(0);\nconst z = 122; // `z`.charCodeAt(0);\nconst OPEN_BRACE = 123; // `{`.charCodeAt(0);\nconst CLOSE_BRACE = 125; // `}`.charCodeAt(0);\nconst STRINGS_COMMENTS = /*@__PURE__*/ (() => [\n    [ANY, SINGLE_QUOTE, stringSingle],\n    [ANY, DOUBLE_QUOTE, stringDouble],\n    [ANY, FORWARD_SLASH, commentMultiline, '*'],\n])();\nconst STATE_MACHINE = /*@__PURE__*/ (() => [\n    [\n        /// rule\n        [ANY, STAR, starSelector],\n        [ANY, OPEN_BRACKET, attrSelector],\n        [ANY, COLON, pseudoElement, ':', 'before', 'after', 'first-letter', 'first-line'],\n        [ANY, COLON, pseudoGlobal, 'global'],\n        [\n            ANY,\n            COLON,\n            pseudoClassWithSelector,\n            'has',\n            'host-context',\n            'not',\n            'where',\n            'is',\n            'matches',\n            'any',\n        ],\n        [ANY, COLON, pseudoClass],\n        [ANY, IDENT, elementClassIdSelector],\n        [ANY, DOT, elementClassIdSelector],\n        [ANY, HASH, elementClassIdSelector],\n        [ANY, AT, atRuleSelector, 'keyframe'],\n        [ANY, AT, atRuleBlock, 'media', 'supports', 'container'],\n        [ANY, AT, atRuleInert],\n        [ANY, OPEN_BRACE, body],\n        [FORWARD_SLASH, STAR, commentMultiline],\n        [ANY, SEMICOLON, EXIT],\n        [ANY, CLOSE_BRACE, EXIT],\n        [ANY, CLOSE_PARENTHESIS, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// elementClassIdSelector\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// starSelector\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// pseudoClassWithSelector\n        [ANY, OPEN_PARENTHESIS, rule],\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// pseudoClass\n        [ANY, OPEN_PARENTHESIS, inertParenthesis],\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// pseudoGlobal\n        [ANY, OPEN_PARENTHESIS, rule],\n        [ANY, NOT_IDENT, EXIT],\n    ],\n    [\n        /// pseudoElement\n        [ANY, NOT_IDENT, EXIT],\n    ],\n    [\n        /// attrSelector\n        [ANY, CLOSE_BRACKET, EXIT_INSERT_SCOPE],\n        [ANY, SINGLE_QUOTE, stringSingle],\n        [ANY, DOUBLE_QUOTE, stringDouble],\n    ],\n    [\n        /// inertParenthesis\n        [ANY, CLOSE_PARENTHESIS, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// inertBlock\n        [ANY, CLOSE_BRACE, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// atRuleSelector\n        [ANY, CLOSE_BRACE, EXIT],\n        [WHITESPACE, IDENT, elementClassIdSelector],\n        [ANY, COLON, pseudoGlobal, 'global'],\n        [ANY, OPEN_BRACE, body],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// atRuleBlock\n        [ANY, OPEN_BRACE, rule],\n        [ANY, SEMICOLON, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// atRuleInert\n        [ANY, SEMICOLON, EXIT],\n        [ANY, OPEN_BRACE, inertBlock],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// body\n        [ANY, CLOSE_BRACE, EXIT],\n        [ANY, OPEN_BRACE, body],\n        [ANY, OPEN_PARENTHESIS, inertParenthesis],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// stringSingle\n        [ANY, SINGLE_QUOTE, EXIT],\n    ],\n    [\n        /// stringDouble\n        [ANY, DOUBLE_QUOTE, EXIT],\n    ],\n    [\n        /// commentMultiline\n        [STAR, FORWARD_SLASH, EXIT],\n    ],\n])();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLXN0eWxlc2hlZXQuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXNoZWV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QiwwSEFBMEg7QUFDMUgsTUFBTSxLQUFLLEdBQVksS0FBSyxDQUFDO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFVLEVBQUU7SUFDdEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBVSxFQUFFO0lBQ3RFLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJ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QUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQztRQUN0QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQzdCLEdBQUcsZ0JBQWdCO0tBQ3BCO0lBQ0Q7UUFDRSxRQUFRO1FBQ1IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQztRQUN4QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQ3ZCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO1FBQ3pDLEdBQUcsZ0JBQWdCO0tBQ3BCO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQztLQUMxQjtJQUNEO1FBQ0UsZ0JBQWdCO1FBQ2hCLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUM7S0FDMUI7SUFDRDtRQUNFLG9CQUFvQjtRQUNwQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO0tBQzVCO0NBQ0YsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBDb21wb25lbnRTdHlsZXNQcmVmaXhDb250ZW50IH0gZnJvbSAnLi9tYXJrZXJzJztcbmltcG9ydCB7IHFEZXYgfSBmcm9tICcuL3FkZXYnO1xuXG4vLyBNYWtlIHN1cmUgdGhpcyBpcyBhbHdheXMgc2V0IHRvIGBmYWxzZWAgaW4gcHJvZHVjdGlvbiwgYnV0IGl0IGlzIHVzZWZ1bCB0byBzZXQgZm9yIGB0cnVlYCBpbiBkZXZlbG9wbWVudCBmb3IgZGVidWdnaW5nLlxuY29uc3QgREVCVUc6IGJvb2xlYW4gPSBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IFNUWUxFX0NBQ0hFID0gLyojX19QVVJFX18qLyBuZXcgTWFwKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRTY29wZWRTdHlsZXMgPSAoY3NzOiBzdHJpbmcsIHNjb3BlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmIChxRGV2KSB7XG4gICAgcmV0dXJuIHNjb3BlU3R5bGVzaGVldChjc3MsIHNjb3BlSWQpO1xuICB9XG4gIGxldCBzdHlsZUNzcyA9IFNUWUxFX0NBQ0hFLmdldChzY29wZUlkKTtcbiAgaWYgKCFzdHlsZUNzcykge1xuICAgIFNUWUxFX0NBQ0hFLnNldChzY29wZUlkLCAoc3R5bGVDc3MgPSBzY29wZVN0eWxlc2hlZXQoY3NzLCBzY29wZUlkKSkpO1xuICB9XG4gIHJldHVybiBzdHlsZUNzcztcbn07XG5cbmV4cG9ydCBjb25zdCBzY29wZVN0eWxlc2hlZXQgPSAoY3NzOiBzdHJpbmcsIHNjb3BlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGVuZCA9IGNzcy5sZW5ndGg7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3RhY2s6IG51bWJlcltdID0gW107XG4gIGxldCBpZHggPSAwO1xuICBsZXQgbGFzdElkeCA9IGlkeDtcbiAgbGV0IG1vZGU6IG51bWJlciA9IHJ1bGU7XG4gIGxldCBsYXN0Q2ggPSAwO1xuICBERUJVRyAmJiBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgd2hpbGUgKGlkeCA8IGVuZCkge1xuICAgIERFQlVHICYmIGNvbnNvbGUubG9nKGNzcyk7XG4gICAgREVCVUcgJiYgY29uc29sZS5sb2cobmV3IEFycmF5KGlkeCkuZmlsbCgnICcpLmpvaW4oJycpICsgJ14nKTtcbiAgICBERUJVRyAmJiBjb25zb2xlLmxvZygnTU9ERScsIC4uLnN0YWNrLm1hcChtb2RlVG9TdHJpbmcpLCBtb2RlVG9TdHJpbmcobW9kZSkpO1xuICAgIGNvbnN0IGNoSWR4ID0gaWR4O1xuICAgIGxldCBjaCA9IGNzcy5jaGFyQ29kZUF0KGlkeCsrKTtcbiAgICBpZiAoY2ggPT09IEJBQ0tTTEFTSCkge1xuICAgICAgaWR4Kys7XG4gICAgICBjaCA9IEE7IC8vIFByZXRlbmQgaXQncyBhIGxldHRlclxuICAgIH1cbiAgICBjb25zdCBhcmNzID0gU1RBVEVfTUFDSElORVttb2RlXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGFyYyA9IGFyY3NbaV07XG4gICAgICBjb25zdCBbZXhwZWN0TGFzdENoLCBleHBlY3RDaCwgbmV3TW9kZV0gPSBhcmM7XG4gICAgICBpZiAoXG4gICAgICAgIGV4cGVjdExhc3RDaCA9PT0gbGFzdENoIHx8XG4gICAgICAgIGV4cGVjdExhc3RDaCA9PT0gQU5ZIHx8XG4gICAgICAgIChleHBlY3RMYXN0Q2ggPT09IElERU5UICYmIGlzSWRlbnQobGFzdENoKSkgfHxcbiAgICAgICAgKGV4cGVjdExhc3RDaCA9PT0gV0hJVEVTUEFDRSAmJiBpc1doaXRlU3BhY2UobGFzdENoKSlcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXhwZWN0Q2ggPT09IGNoIHx8XG4gICAgICAgICAgZXhwZWN0Q2ggPT09IEFOWSB8fFxuICAgICAgICAgIChleHBlY3RDaCA9PT0gSURFTlQgJiYgaXNJZGVudChjaCkpIHx8XG4gICAgICAgICAgKGV4cGVjdENoID09PSBOT1RfSURFTlQgJiYgIWlzSWRlbnQoY2gpICYmIGNoICE9PSBET1QpIHx8XG4gICAgICAgICAgKGV4cGVjdENoID09PSBXSElURVNQQUNFICYmIGlzV2hpdGVTcGFjZShjaCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChhcmMubGVuZ3RoID09IDMgfHwgbG9va0FoZWFkKGFyYykpIHtcbiAgICAgICAgICAgIGlmIChhcmMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAvLyBJZiBtYXRjaGVkIG9uIGxvb2tBaGVhZCB0aGFuIHdlIHdlIGhhdmUgdG8gdXBkYXRlIGN1cnJlbnQgYGNoYFxuICAgICAgICAgICAgICBjaCA9IGNzcy5jaGFyQ29kZUF0KGlkeCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgREVCVUcgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ01BVENIJyxcbiAgICAgICAgICAgICAgICBjaGFyVG9TdHJpbmcoZXhwZWN0TGFzdENoKSxcbiAgICAgICAgICAgICAgICBjaGFyVG9TdHJpbmcoZXhwZWN0Q2gpLFxuICAgICAgICAgICAgICAgIG1vZGVUb1N0cmluZyhuZXdNb2RlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaCFcbiAgICAgICAgICAgIGlmIChuZXdNb2RlID09PSBFWElUIHx8IG5ld01vZGUgPT0gRVhJVF9JTlNFUlRfU0NPUEUpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld01vZGUgPT09IEVYSVRfSU5TRVJUX1NDT1BFKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IHN0YXJTZWxlY3RvciAmJiAhc2hvdWxkTm90SW5zZXJ0U2NvcGluZygpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGAqYCB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnRDbGFzc0lkU2VsZWN0b3IuXG4gICAgICAgICAgICAgICAgICBpZiAoaXNDaGFpbmVkU2VsZWN0b3IoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmb29cbiAgICAgICAgICAgICAgICAgICAgZmx1c2goaWR4IC0gMik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAqIChieSBpdHNlbGYpXG4gICAgICAgICAgICAgICAgICAgIGluc2VydFNjb3BpbmdTZWxlY3RvcihpZHggLSAyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGxhc3RJZHgrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpc0NoYWluZWRTZWxlY3RvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGV4aXRpbmcgb25lIG9mIHRoZSBTZWxlY3RvciBzbyB3ZSBtYXkgbmVlZCB0b1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdENoID09IE5PVF9JREVOVCA/IDEgOiBleHBlY3RDaCA9PSBDTE9TRV9QQVJFTlRIRVNJUyA/IDIgOiAwO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTY29waW5nU2VsZWN0b3IoaWR4IC0gb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGV4cGVjdENoID09PSBOT1RfSURFTlQpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RfSURFTlQgaXMgbm90IGEgcmVhbCBjaGFyYWN0ZXIgbW9yZSBsaWtlIGxhY2sgb2Ygd2hhdCB3ZSBleHBlY3RlZC5cbiAgICAgICAgICAgICAgICAvLyBpZiBwc2V1ZG9HbG9iYWwgd2UgbmVlZCB0byBnaXZlIGl0IGEgY2hhbmNlIHRvIGV4aXQgYXMgd2VsbC5cbiAgICAgICAgICAgICAgICAvLyBGb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byByZXBhcnNlIHRoZSBsYXN0IGNoYXJhY3RlciBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBpZHgtLTtcbiAgICAgICAgICAgICAgICBjaCA9IGxhc3RDaDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IHN0YWNrLnBvcCgpIHx8IHJ1bGU7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IHBzZXVkb0dsb2JhbCkge1xuICAgICAgICAgICAgICAgICAgLy8gU2tpcCBvdmVyIHRoZSBgKWAgaW4gYDpnbG9iYWwoLi4uKWAuXG4gICAgICAgICAgICAgICAgICBmbHVzaChpZHggLSAxKTtcbiAgICAgICAgICAgICAgICAgIGxhc3RJZHgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGlzU2VsZkNsb3NpbmdSdWxlKG1vZGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2gobW9kZSk7XG4gICAgICAgICAgICAgIGlmIChtb2RlID09PSBwc2V1ZG9HbG9iYWwgJiYgbmV3TW9kZSA9PT0gcnVsZSkge1xuICAgICAgICAgICAgICAgIGZsdXNoKGlkeCAtIDgpOyAvLyBgOmdsb2JhbChgLmxlbmd0aFxuICAgICAgICAgICAgICAgIGxhc3RJZHggPSBpZHg7IC8vIHNraXAgb3ZlciBcIjpnbG9iYWwoXCJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdNb2RlID09PSBwc2V1ZG9FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGVudGVyaW5nIHBzZXVkb0VsZW1lbnQgYDo6Zm9vYDsgaW5zZXJ0IHNjb3BpbmcgaW4gZnJvbnQgb2YgaXQuXG4gICAgICAgICAgICAgICAgaW5zZXJ0U2NvcGluZ1NlbGVjdG9yKGNoSWR4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBtb2RlID0gbmV3TW9kZTtcbiAgICAgICAgICAgICAgY2ggPT0gU1BBQ0U7IC8vIFByZXRlbmQgbm90IGFuIGlkZW50aWZpZXIgc28gdGhhdCB3ZSBkb24ndCBmbHVzaCBhZ2FpbiBvbiBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhazsgLy8gZ2V0IG91dCBvZiB0aGUgZm9yIGxvb3AgYXMgd2UgZm91bmQgYSBtYXRjaFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0Q2ggPSBjaDtcbiAgfVxuICBmbHVzaChpZHgpO1xuICByZXR1cm4gb3V0LmpvaW4oJycpO1xuXG4gIGZ1bmN0aW9uIGZsdXNoKGlkeDogbnVtYmVyKSB7XG4gICAgb3V0LnB1c2goY3NzLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpKTtcbiAgICBERUJVRyAmJiBjb25zb2xlLmxvZygnRkxVU0gnLCBvdXQuam9pbignJykpO1xuICAgIGxhc3RJZHggPSBpZHg7XG4gIH1cbiAgZnVuY3Rpb24gaW5zZXJ0U2NvcGluZ1NlbGVjdG9yKGlkeDogbnVtYmVyKSB7XG4gICAgaWYgKG1vZGUgPT09IHBzZXVkb0dsb2JhbCB8fCBzaG91bGROb3RJbnNlcnRTY29waW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaChpZHgpO1xuICAgIG91dC5wdXNoKCcuJywgQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCwgc2NvcGVJZCk7XG4gICAgREVCVUcgJiYgY29uc29sZS5sb2coJ0lOU0VSVCcsIG91dC5qb2luKCcnKSk7XG4gIH1cbiAgZnVuY3Rpb24gbG9va0FoZWFkKGFyYzogU3RhdGVBcmMpOiBib29sZWFuIHtcbiAgICBsZXQgcHJlZml4ID0gMDsgLy8gSWdub3JlIHZlbmRvciBwcmVmaXhlcyBzdWNoIGFzIGAtd2Via2l0LWAuXG4gICAgaWYgKGNzcy5jaGFyQ29kZUF0KGlkeCkgPT09IERBU0gpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgICAgICAvLyBnaXZlIHVwIGFmdGVyIDEwIGNoYXJhY3RlcnNcbiAgICAgICAgaWYgKGNzcy5jaGFyQ29kZUF0KGlkeCArIGkpID09PSBEQVNIKSB7XG4gICAgICAgICAgcHJlZml4ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgd29yZHM6IGZvciAobGV0IGFyY0luZHggPSAzOyBhcmNJbmR4IDwgYXJjLmxlbmd0aDsgYXJjSW5keCsrKSB7XG4gICAgICBjb25zdCB0eHQgPSBhcmNbYXJjSW5keF0gYXMgc3RyaW5nO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKChjc3MuY2hhckNvZGVBdChpZHggKyBpICsgcHJlZml4KSB8IExPV0VSQ0FTRSkgIT09IHR4dC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICAgICAgY29udGludWUgd29yZHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHdlIGZvdW5kIGEgbWF0Y2g7XG4gICAgICBpZHggKz0gdHh0Lmxlbmd0aCArIHByZWZpeDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGROb3RJbnNlcnRTY29waW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGFjay5pbmRleE9mKHBzZXVkb0dsb2JhbCkgIT09IC0xIHx8IHN0YWNrLmluZGV4T2YoYXRSdWxlU2VsZWN0b3IpICE9PSAtMTtcbiAgfVxufTtcblxuY29uc3QgaXNJZGVudCA9IChjaDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgKGNoID49IF8wICYmIGNoIDw9IF85KSB8fFxuICAgIChjaCA+PSBBICYmIGNoIDw9IFopIHx8XG4gICAgKGNoID49IGEgJiYgY2ggPD0geikgfHxcbiAgICBjaCA+PSAweDgwIHx8XG4gICAgY2ggPT09IFVOREVSU0NPUkUgfHxcbiAgICBjaCA9PT0gREFTSFxuICApO1xufTtcblxuY29uc3QgaXNDaGFpbmVkU2VsZWN0b3IgPSAoY2g6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gY2ggPT09IENPTE9OIHx8IGNoID09PSBET1QgfHwgY2ggPT09IE9QRU5fQlJBQ0tFVCB8fCBjaCA9PT0gSEFTSCB8fCBpc0lkZW50KGNoKTtcbn07XG5cbmNvbnN0IGlzU2VsZkNsb3NpbmdSdWxlID0gKG1vZGU6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIG1vZGUgPT09IGF0UnVsZUJsb2NrIHx8IG1vZGUgPT09IGF0UnVsZVNlbGVjdG9yIHx8IG1vZGUgPT09IGF0UnVsZUluZXJ0IHx8IG1vZGUgPT09IHBzZXVkb0dsb2JhbFxuICApO1xufTtcblxuY29uc3QgaXNXaGl0ZVNwYWNlID0gKGNoOiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGNoID09PSBTUEFDRSB8fCBjaCA9PT0gVEFCIHx8IGNoID09PSBORVdMSU5FIHx8IGNoID09PSBDQVJSSUFHRV9SRVRVUk47XG59O1xuXG5jb25zdCBtb2RlVG9TdHJpbmcgPSAobW9kZTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIFtcbiAgICAncnVsZScsXG4gICAgJ2VsZW1lbnRDbGFzc0lkU2VsZWN0b3InLFxuICAgICdzdGFyU2VsZWN0b3InLFxuICAgICdwc2V1ZG9DbGFzc1dpdGhTZWxlY3RvcicsXG4gICAgJ3BzZXVkb0NsYXNzJyxcbiAgICAncHNldWRvR2xvYmFsJyxcbiAgICAncHNldWRvRWxlbWVudCcsXG4gICAgJ2F0dHJTZWxlY3RvcicsXG4gICAgJ2luZXJ0UGFyZW50aGVzaXMnLFxuICAgICdpbmVydEJsb2NrJyxcbiAgICAnYXRSdWxlU2VsZWN0b3InLFxuICAgICdhdFJ1bGVCbG9jaycsXG4gICAgJ2F0SW5lcnQnLFxuICAgICdib2R5JyxcbiAgICAnc3RyaW5nU2luZ2xlJyxcbiAgICAnc3RyaW5nRG91YmxlJyxcbiAgICAnY29tbWVudE11bHRpbGluZScsXG4gICAgJ0VYSVQnLFxuICAgICdFWElUX0lOU0VSVF9TQ09QRScsXG4gIF1bbW9kZV07XG59O1xuXG5jb25zdCBjaGFyVG9TdHJpbmcgPSAoY2g6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBbJ0FOWScsICdJREVOVCcsICdOT1RfSURFTlQnLCAnV0hJVEVTUEFDRSddW2NoXSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbn07XG5cbmNvbnN0IHJ1bGUgPSAwOyAvLyB0b3AgbGV2ZWwgaW5pdGlhbCBzcGFjZS5cbmNvbnN0IGVsZW1lbnRDbGFzc0lkU2VsZWN0b3IgPSAxOyAvLyAuZWxlbWVudENsYXNzSWRTZWxlY3RvciB7fVxuY29uc3Qgc3RhclNlbGVjdG9yID0gMjsgLy8gKiB7fVxuY29uc3QgcHNldWRvQ2xhc3NXaXRoU2VsZWN0b3IgPSAzOyAvLyA6cHNldWRvQ2xhc3MoZWxlbWVudENsYXNzSWRTZWxlY3Rvcikge31cbmNvbnN0IHBzZXVkb0NsYXNzID0gNDsgLy8gOnBzZXVkb0NsYXNzIHt9XG5jb25zdCBwc2V1ZG9HbG9iYWwgPSA1OyAvLyA6Z2xvYmFsKGVsZW1lbnRDbGFzc0lkU2VsZWN0b3IpXG5jb25zdCBwc2V1ZG9FbGVtZW50ID0gNjsgLy8gOjpwc2V1ZG9FbGVtZW50IHt9XG5jb25zdCBhdHRyU2VsZWN0b3IgPSA3OyAvLyBbYXR0cl0ge31cbmNvbnN0IGluZXJ0UGFyZW50aGVzaXMgPSA4OyAvLyAoaWdub3JlZClcbmNvbnN0IGluZXJ0QmxvY2sgPSA5OyAvLyB7aWdub3JlZH1cbmNvbnN0IGF0UnVsZVNlbGVjdG9yID0gMTA7IC8vIEBrZXlmcmFtZSBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yIHt9XG5jb25zdCBhdFJ1bGVCbG9jayA9IDExOyAvLyBAbWVkaWEge2VsZW1lbnRDbGFzc0lkU2VsZWN0b3Ige319XG5jb25zdCBhdFJ1bGVJbmVydCA9IDEyOyAvLyBAYXRSdWxlIHNvbWV0aGluZztcbmNvbnN0IGJvZHkgPSAxMzsgLy8gLmVsZW1lbnRDbGFzc0lkU2VsZWN0b3Ige2JvZHl9XG5jb25zdCBzdHJpbmdTaW5nbGUgPSAxNDsgLy8gJ3RleHQnXG5jb25zdCBzdHJpbmdEb3VibGUgPSAxNTsgLy8gJ3RleHQnXG5jb25zdCBjb21tZW50TXVsdGlsaW5lID0gMTY7IC8vIC8qIC4uLiAqL1xuLy8gTk9UIFJFQUwgTU9ERVNcbmNvbnN0IEVYSVQgPSAxNzsgLy8gRXhpdCB0aGUgbW9kZVxuY29uc3QgRVhJVF9JTlNFUlRfU0NPUEUgPSAxODsgLy8gRXhpdCB0aGUgbW9kZSBJTlNFUlQgU0NPUEVcblxuY29uc3QgQU5ZID0gMDtcbmNvbnN0IElERU5UID0gMTtcbmNvbnN0IE5PVF9JREVOVCA9IDI7XG5jb25zdCBXSElURVNQQUNFID0gMztcbmNvbnN0IFRBQiA9IDk7IC8vIGBcXHRgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBORVdMSU5FID0gMTA7IC8vIGBcXG5gLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDQVJSSUFHRV9SRVRVUk4gPSAxMzsgLy8gYFxccmAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFNQQUNFID0gMzI7IC8vIGAgYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgRE9VQkxFX1FVT1RFID0gMzQ7IC8vIGBcImAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IEhBU0ggPSAzNTsgLy8gYCNgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBTSU5HTEVfUVVPVEUgPSAzOTsgLy8gYCdgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBPUEVOX1BBUkVOVEhFU0lTID0gNDA7IC8vIGAoYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgQ0xPU0VfUEFSRU5USEVTSVMgPSA0MTsgLy8gYClgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBTVEFSID0gNDI7IC8vIGAqYC5jaGFyQ29kZUF0KDApO1xuLy8gY29uc3QgQ09NTUEgPSA0NDsgLy8gYCxgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIID0gNDU7IC8vIGAtYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgRE9UID0gNDY7IC8vIGAuYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgRk9SV0FSRF9TTEFTSCA9IDQ3OyAvLyBgL2AuY2hhckNvZGVBdCgwKTtcbmNvbnN0IF8wID0gNDg7IC8vIGAwYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgXzkgPSA1NzsgLy8gYDlgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDT0xPTiA9IDU4OyAvLyBgOmAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFNFTUlDT0xPTiA9IDU5OyAvLyBgO2AuY2hhckNvZGVBdCgwKTtcbi8vIGNvbnN0IExFU1NfVEhBTiA9IDYwOyAvLyBgPGAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IEFUID0gNjQ7IC8vIGBAYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgQSA9IDY1OyAvLyBgQWAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFogPSA5MDsgLy8gYFpgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBPUEVOX0JSQUNLRVQgPSA5MTsgLy8gYFtgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDTE9TRV9CUkFDS0VUID0gOTM7IC8vIGBdYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgQkFDS1NMQVNIID0gOTI7IC8vIGBcXFxcYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgVU5ERVJTQ09SRSA9IDk1OyAvLyBgX2AuY2hhckNvZGVBdCgwKTtcbmNvbnN0IExPV0VSQ0FTRSA9IDB4MjA7IC8vIGBhYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgYSA9IDk3OyAvLyBgYWAuY2hhckNvZGVBdCgwKTtcbi8vIGNvbnN0IGQgPSAxMDA7IC8vIGBkYC5jaGFyQ29kZUF0KDApO1xuLy8gY29uc3QgZyA9IDEwMzsgLy8gJ2cnLmNoYXJDb2RlQXQoMCk7XG4vLyBjb25zdCBoID0gMTA0OyAvLyBgaGAuY2hhckNvZGVBdCgwKTtcbi8vIGNvbnN0IGkgPSAxMDU7IC8vIGBpYC5jaGFyQ29kZUF0KDApO1xuLy8gY29uc3QgbCA9IDEwODsgLy8gYGxgLmNoYXJDb2RlQXQoMCk7XG4vLyBjb25zdCB0ID0gMTE2OyAvLyBgdGAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IHogPSAxMjI7IC8vIGB6YC5jaGFyQ29kZUF0KDApO1xuY29uc3QgT1BFTl9CUkFDRSA9IDEyMzsgLy8gYHtgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDTE9TRV9CUkFDRSA9IDEyNTsgLy8gYH1gLmNoYXJDb2RlQXQoMCk7XG5cbnR5cGUgU3RhdGVBcmMgPSBbXG4gIC8vLyBJZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgdGhpczpcbiAgbnVtYmVyLFxuICAvLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIHRoaXM6XG4gIG51bWJlcixcbiAgLy8vIFRoZW4gdHJhbnNpdGlvbiB0byB0aGlzIHN0YXRlOlxuICBudW1iZXIsXG4gIC8vLyBPcHRpb25hbCBsb29rIGFoZWFkIHN0cmluZ3NcbiAgLi4uc3RyaW5nW10sXG5dO1xuXG5jb25zdCBTVFJJTkdTX0NPTU1FTlRTOiBTdGF0ZUFyY1tdID0gLypAX19QVVJFX18qLyAoKCkgPT4gW1xuICBbQU5ZLCBTSU5HTEVfUVVPVEUsIHN0cmluZ1NpbmdsZV0sXG4gIFtBTlksIERPVUJMRV9RVU9URSwgc3RyaW5nRG91YmxlXSxcbiAgW0FOWSwgRk9SV0FSRF9TTEFTSCwgY29tbWVudE11bHRpbGluZSwgJyonXSxcbl0pKCk7XG5cbmNvbnN0IFNUQVRFX01BQ0hJTkU6IFN0YXRlQXJjW11bXSA9IC8qQF9fUFVSRV9fKi8gKCgpID0+IFtcbiAgW1xuICAgIC8vLyBydWxlXG4gICAgW0FOWSwgU1RBUiwgc3RhclNlbGVjdG9yXSxcbiAgICBbQU5ZLCBPUEVOX0JSQUNLRVQsIGF0dHJTZWxlY3Rvcl0sXG4gICAgW0FOWSwgQ09MT04sIHBzZXVkb0VsZW1lbnQsICc6JywgJ2JlZm9yZScsICdhZnRlcicsICdmaXJzdC1sZXR0ZXInLCAnZmlyc3QtbGluZSddLFxuICAgIFtBTlksIENPTE9OLCBwc2V1ZG9HbG9iYWwsICdnbG9iYWwnXSxcbiAgICBbXG4gICAgICBBTlksXG4gICAgICBDT0xPTixcbiAgICAgIHBzZXVkb0NsYXNzV2l0aFNlbGVjdG9yLFxuICAgICAgJ2hhcycsXG4gICAgICAnaG9zdC1jb250ZXh0JyxcbiAgICAgICdub3QnLFxuICAgICAgJ3doZXJlJyxcbiAgICAgICdpcycsXG4gICAgICAnbWF0Y2hlcycsXG4gICAgICAnYW55JyxcbiAgICBdLFxuICAgIFtBTlksIENPTE9OLCBwc2V1ZG9DbGFzc10sXG4gICAgW0FOWSwgSURFTlQsIGVsZW1lbnRDbGFzc0lkU2VsZWN0b3JdLFxuICAgIFtBTlksIERPVCwgZWxlbWVudENsYXNzSWRTZWxlY3Rvcl0sXG4gICAgW0FOWSwgSEFTSCwgZWxlbWVudENsYXNzSWRTZWxlY3Rvcl0sXG4gICAgW0FOWSwgQVQsIGF0UnVsZVNlbGVjdG9yLCAna2V5ZnJhbWUnXSxcbiAgICBbQU5ZLCBBVCwgYXRSdWxlQmxvY2ssICdtZWRpYScsICdzdXBwb3J0cycsICdjb250YWluZXInXSxcbiAgICBbQU5ZLCBBVCwgYXRSdWxlSW5lcnRdLFxuICAgIFtBTlksIE9QRU5fQlJBQ0UsIGJvZHldLFxuICAgIFtGT1JXQVJEX1NMQVNILCBTVEFSLCBjb21tZW50TXVsdGlsaW5lXSxcbiAgICBbQU5ZLCBTRU1JQ09MT04sIEVYSVRdLFxuICAgIFtBTlksIENMT1NFX0JSQUNFLCBFWElUXSxcbiAgICBbQU5ZLCBDTE9TRV9QQVJFTlRIRVNJUywgRVhJVF0sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yXG4gICAgW0FOWSwgTk9UX0lERU5ULCBFWElUX0lOU0VSVF9TQ09QRV0sXG4gIF0sXG4gIFtcbiAgICAvLy8gc3RhclNlbGVjdG9yXG4gICAgW0FOWSwgTk9UX0lERU5ULCBFWElUX0lOU0VSVF9TQ09QRV0sXG4gIF0sXG4gIFtcbiAgICAvLy8gcHNldWRvQ2xhc3NXaXRoU2VsZWN0b3JcbiAgICBbQU5ZLCBPUEVOX1BBUkVOVEhFU0lTLCBydWxlXSxcbiAgICBbQU5ZLCBOT1RfSURFTlQsIEVYSVRfSU5TRVJUX1NDT1BFXSxcbiAgXSxcbiAgW1xuICAgIC8vLyBwc2V1ZG9DbGFzc1xuICAgIFtBTlksIE9QRU5fUEFSRU5USEVTSVMsIGluZXJ0UGFyZW50aGVzaXNdLFxuICAgIFtBTlksIE5PVF9JREVOVCwgRVhJVF9JTlNFUlRfU0NPUEVdLFxuICBdLFxuICBbXG4gICAgLy8vIHBzZXVkb0dsb2JhbFxuICAgIFtBTlksIE9QRU5fUEFSRU5USEVTSVMsIHJ1bGVdLFxuICAgIFtBTlksIE5PVF9JREVOVCwgRVhJVF0sXG4gIF0sXG4gIFtcbiAgICAvLy8gcHNldWRvRWxlbWVudFxuICAgIFtBTlksIE5PVF9JREVOVCwgRVhJVF0sXG4gIF0sXG4gIFtcbiAgICAvLy8gYXR0clNlbGVjdG9yXG4gICAgW0FOWSwgQ0xPU0VfQlJBQ0tFVCwgRVhJVF9JTlNFUlRfU0NPUEVdLFxuICAgIFtBTlksIFNJTkdMRV9RVU9URSwgc3RyaW5nU2luZ2xlXSxcbiAgICBbQU5ZLCBET1VCTEVfUVVPVEUsIHN0cmluZ0RvdWJsZV0sXG4gIF0sXG4gIFtcbiAgICAvLy8gaW5lcnRQYXJlbnRoZXNpc1xuICAgIFtBTlksIENMT1NFX1BBUkVOVEhFU0lTLCBFWElUXSxcbiAgICAuLi5TVFJJTkdTX0NPTU1FTlRTLFxuICBdLFxuICBbXG4gICAgLy8vIGluZXJ0QmxvY2tcbiAgICBbQU5ZLCBDTE9TRV9CUkFDRSwgRVhJVF0sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBhdFJ1bGVTZWxlY3RvclxuICAgIFtBTlksIENMT1NFX0JSQUNFLCBFWElUXSxcbiAgICBbV0hJVEVTUEFDRSwgSURFTlQsIGVsZW1lbnRDbGFzc0lkU2VsZWN0b3JdLFxuICAgIFtBTlksIENPTE9OLCBwc2V1ZG9HbG9iYWwsICdnbG9iYWwnXSxcbiAgICBbQU5ZLCBPUEVOX0JSQUNFLCBib2R5XSxcbiAgICAuLi5TVFJJTkdTX0NPTU1FTlRTLFxuICBdLFxuICBbXG4gICAgLy8vIGF0UnVsZUJsb2NrXG4gICAgW0FOWSwgT1BFTl9CUkFDRSwgcnVsZV0sXG4gICAgW0FOWSwgU0VNSUNPTE9OLCBFWElUXSxcbiAgICAuLi5TVFJJTkdTX0NPTU1FTlRTLFxuICBdLFxuICBbXG4gICAgLy8vIGF0UnVsZUluZXJ0XG4gICAgW0FOWSwgU0VNSUNPTE9OLCBFWElUXSxcbiAgICBbQU5ZLCBPUEVOX0JSQUNFLCBpbmVydEJsb2NrXSxcbiAgICAuLi5TVFJJTkdTX0NPTU1FTlRTLFxuICBdLFxuICBbXG4gICAgLy8vIGJvZHlcbiAgICBbQU5ZLCBDTE9TRV9CUkFDRSwgRVhJVF0sXG4gICAgW0FOWSwgT1BFTl9CUkFDRSwgYm9keV0sXG4gICAgW0FOWSwgT1BFTl9QQVJFTlRIRVNJUywgaW5lcnRQYXJlbnRoZXNpc10sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBzdHJpbmdTaW5nbGVcbiAgICBbQU5ZLCBTSU5HTEVfUVVPVEUsIEVYSVRdLFxuICBdLFxuICBbXG4gICAgLy8vIHN0cmluZ0RvdWJsZVxuICAgIFtBTlksIERPVUJMRV9RVU9URSwgRVhJVF0sXG4gIF0sXG4gIFtcbiAgICAvLy8gY29tbWVudE11bHRpbGluZVxuICAgIFtTVEFSLCBGT1JXQVJEX1NMQVNILCBFWElUXSxcbiAgXSxcbl0pKCk7XG4iXX0=","import { qTest } from '../shared/utils/qdev';\nimport { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { getScopedStyles } from '../shared/utils/scoped-stylesheet';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { ComponentStylesPrefixContent } from '../shared/utils/markers';\nimport { styleKey } from '../shared/utils/styles';\nimport { isDev } from '@qwik.dev/core/build';\n/** @internal */\nexport const useStylesQrl = (styles) => {\n    return {\n        styleId: _useStyles(styles, (str) => str, false),\n    };\n};\n// <docs markdown=\"../readme.md#useStyles\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useStyles instead and run `pnpm docs.sync`)\n/**\n * A lazy-loadable reference to a component's styles.\n *\n * Component styles allow Qwik to lazy load the style information for the component only when\n * needed. (And avoid double loading it in case of SSR hydration.)\n *\n * ```tsx\n * import styles from './code-block.css?inline';\n *\n * export const CmpStyles = component$(() => {\n *   useStyles$(styles);\n *\n *   return <div>Some text</div>;\n * });\n * ```\n *\n * @public\n * @see `useStylesScoped`\n */\n// </docs>\nexport const useStyles$ = /*#__PURE__*/ implicit$FirstArg(useStylesQrl);\n/** @internal */\nexport const useStylesScopedQrl = (styles) => {\n    return {\n        scopeId: ComponentStylesPrefixContent + _useStyles(styles, getScopedStyles, true),\n    };\n};\n// <docs markdown=\"../readme.md#useStylesScoped\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useStylesScoped instead and run `pnpm docs.sync`)\n/**\n * A lazy-loadable reference to a component's styles, that is scoped to the component.\n *\n * Component styles allow Qwik to lazy load the style information for the component only when\n * needed. (And avoid double loading it in case of SSR hydration.)\n *\n * ```tsx\n * import scoped from './code-block.css?inline';\n *\n * export const CmpScopedStyles = component$(() => {\n *   useStylesScoped$(scoped);\n *\n *   return <div>Some text</div>;\n * });\n * ```\n *\n * @public\n * @see `useStyles`\n */\n// </docs>\nexport const useStylesScoped$ = /*#__PURE__*/ implicit$FirstArg(useStylesScopedQrl);\nconst liveUpdate = isDev && ((import.meta.hot && typeof document !== 'undefined') || qTest);\nconst _useStyles = (styleQrl, transform, scoped) => {\n    assertQrl(styleQrl);\n    // eslint-disable-next-line prefer-const\n    let { val, set, iCtx, i } = useSequentialScope();\n    const doc = liveUpdate\n        ? iCtx.$container$.document\n        : undefined;\n    if (val) {\n        if (liveUpdate && doc) {\n            // During HMR, update the style content if the resolved value changed\n            if (\n            // we get a string from SSR\n            typeof val === 'string' ||\n                val[1] !== doc.__hmrT) {\n                if (typeof val === 'string') {\n                    // This is the initial render value from SSR, we need to update it to be able to track future changes\n                    val = set([val, 0]);\n                }\n                val[1] = doc.__hmrT;\n                const styleId = styleKey(styleQrl, i);\n                const update = (content) => {\n                    const newContent = transform(content, styleId);\n                    const existing = doc.querySelector(`style[q\\\\:style=\"${styleId}\"]`);\n                    if (existing && existing.textContent !== newContent) {\n                        existing.textContent = newContent;\n                    }\n                };\n                if (styleQrl.resolved) {\n                    update(transform(styleQrl.resolved, styleId));\n                }\n                else {\n                    styleQrl.resolve().then(update);\n                }\n            }\n        }\n        return liveUpdate ? val[0] : val;\n    }\n    const styleId = styleKey(styleQrl, i);\n    const host = iCtx.$hostElement$;\n    set(liveUpdate && doc ? [styleId, doc.__hmrT] : styleId);\n    if (styleQrl.resolved) {\n        iCtx.$container$.$appendStyle$(transform(styleQrl.resolved, styleId), styleId, host, scoped);\n    }\n    else {\n        throw styleQrl\n            .resolve()\n            .then((val) => iCtx.$container$.$appendStyle$(transform(val, styleId), styleId, host, scoped));\n    }\n    return styleId;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXN0eWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBYTdDLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFtQixFQUFhLEVBQUU7SUFDN0QsT0FBTztRQUNMLE9BQU8sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO0tBQ2pELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MseUNBQXlDO0FBQ3pDLGlFQUFpRTtBQUNqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEUsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsTUFBbUIsRUFBbUIsRUFBRTtJQUN6RSxPQUFPO1FBQ0wsT0FBTyxFQUFF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TyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTFELElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0YsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLFFBQVE7YUFDWCxPQUFPLEVBQUU7YUFDVCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FDL0UsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBxVGVzdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHsgZ2V0U2NvcGVkU3R5bGVzIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXNoZWV0JztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHN0eWxlS2V5IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3N0eWxlcyc7XG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VTdHlsZXNTY29wZWQge1xuICBzY29wZUlkOiBzdHJpbmc7XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZVN0eWxlcyB7XG4gIHN0eWxlSWQ6IHN0cmluZztcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVN0eWxlc1FybCA9IChzdHlsZXM6IFFSTDxzdHJpbmc+KTogVXNlU3R5bGVzID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzdHlsZUlkOiBfdXNlU3R5bGVzKHN0eWxlcywgKHN0cikgPT4gc3RyLCBmYWxzZSksXG4gIH07XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VTdHlsZXNcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlU3R5bGVzIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBBIGxhenktbG9hZGFibGUgcmVmZXJlbmNlIHRvIGEgY29tcG9uZW50J3Mgc3R5bGVzLlxuICpcbiAqIENvbXBvbmVudCBzdHlsZXMgYWxsb3cgUXdpayB0byBsYXp5IGxvYWQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50IG9ubHkgd2hlblxuICogbmVlZGVkLiAoQW5kIGF2b2lkIGRvdWJsZSBsb2FkaW5nIGl0IGluIGNhc2Ugb2YgU1NSIGh5ZHJhdGlvbi4pXG4gKlxuICogYGBgdHN4XG4gKiBpbXBvcnQgc3R5bGVzIGZyb20gJy4vY29kZS1ibG9jay5jc3M/aW5saW5lJztcbiAqXG4gKiBleHBvcnQgY29uc3QgQ21wU3R5bGVzID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHVzZVN0eWxlcyQoc3R5bGVzKTtcbiAqXG4gKiAgIHJldHVybiA8ZGl2PlNvbWUgdGV4dDwvZGl2PjtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICogQHNlZSBgdXNlU3R5bGVzU2NvcGVkYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlU3R5bGVzJCA9IC8qI19fUFVSRV9fKi8gaW1wbGljaXQkRmlyc3RBcmcodXNlU3R5bGVzUXJsKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVN0eWxlc1Njb3BlZFFybCA9IChzdHlsZXM6IFFSTDxzdHJpbmc+KTogVXNlU3R5bGVzU2NvcGVkID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzY29wZUlkOiBDb21wb25lbnRTdHlsZXNQcmVmaXhDb250ZW50ICsgX3VzZVN0eWxlcyhzdHlsZXMsIGdldFNjb3BlZFN0eWxlcywgdHJ1ZSksXG4gIH07XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VTdHlsZXNTY29wZWRcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlU3R5bGVzU2NvcGVkIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBBIGxhenktbG9hZGFibGUgcmVmZXJlbmNlIHRvIGEgY29tcG9uZW50J3Mgc3R5bGVzLCB0aGF0IGlzIHNjb3BlZCB0byB0aGUgY29tcG9uZW50LlxuICpcbiAqIENvbXBvbmVudCBzdHlsZXMgYWxsb3cgUXdpayB0byBsYXp5IGxvYWQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50IG9ubHkgd2hlblxuICogbmVlZGVkLiAoQW5kIGF2b2lkIGRvdWJsZSBsb2FkaW5nIGl0IGluIGNhc2Ugb2YgU1NSIGh5ZHJhdGlvbi4pXG4gKlxuICogYGBgdHN4XG4gKiBpbXBvcnQgc2NvcGVkIGZyb20gJy4vY29kZS1ibG9jay5jc3M/aW5saW5lJztcbiAqXG4gKiBleHBvcnQgY29uc3QgQ21wU2NvcGVkU3R5bGVzID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHVzZVN0eWxlc1Njb3BlZCQoc2NvcGVkKTtcbiAqXG4gKiAgIHJldHVybiA8ZGl2PlNvbWUgdGV4dDwvZGl2PjtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICogQHNlZSBgdXNlU3R5bGVzYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlU3R5bGVzU2NvcGVkJCA9IC8qI19fUFVSRV9fKi8gaW1wbGljaXQkRmlyc3RBcmcodXNlU3R5bGVzU2NvcGVkUXJsKTtcblxuY29uc3QgbGl2ZVVwZGF0ZSA9IGlzRGV2ICYmICgoaW1wb3J0Lm1ldGEuaG90ICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHx8IHFUZXN0KTtcblxuY29uc3QgX3VzZVN0eWxlcyA9IChcbiAgc3R5bGVRcmw6IFFSTDxzdHJpbmc+LFxuICB0cmFuc2Zvcm06IChzdHI6IHN0cmluZywgc3R5bGVJZDogc3RyaW5nKSA9PiBzdHJpbmcsXG4gIHNjb3BlZDogYm9vbGVhblxuKTogc3RyaW5nID0+IHtcbiAgYXNzZXJ0UXJsKHN0eWxlUXJsKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7IHZhbCwgc2V0LCBpQ3R4LCBpIH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8c3RyaW5nIHwgW3N0cmluZywgbnVtYmVyXT4oKTtcbiAgY29uc3QgZG9jID0gbGl2ZVVwZGF0ZVxuICAgID8gKChpQ3R4LiRjb250YWluZXIkIGFzIERvbUNvbnRhaW5lcikuZG9jdW1lbnQgYXMgRG9jdW1lbnQgJiB7IF9faG1yVD86IG51bWJlciB9KVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAodmFsKSB7XG4gICAgaWYgKGxpdmVVcGRhdGUgJiYgZG9jKSB7XG4gICAgICAvLyBEdXJpbmcgSE1SLCB1cGRhdGUgdGhlIHN0eWxlIGNvbnRlbnQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGNoYW5nZWRcbiAgICAgIGlmIChcbiAgICAgICAgLy8gd2UgZ2V0IGEgc3RyaW5nIGZyb20gU1NSXG4gICAgICAgIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHZhbFsxXSAhPT0gZG9jLl9faG1yVFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGluaXRpYWwgcmVuZGVyIHZhbHVlIGZyb20gU1NSLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdCB0byBiZSBhYmxlIHRvIHRyYWNrIGZ1dHVyZSBjaGFuZ2VzXG4gICAgICAgICAgdmFsID0gc2V0KFt2YWwsIDBdKTtcbiAgICAgICAgfVxuICAgICAgICAodmFsIGFzIFtzdHJpbmcsIG51bWJlcl0pWzFdID0gZG9jLl9faG1yVCE7XG4gICAgICAgIGNvbnN0IHN0eWxlSWQgPSBzdHlsZUtleShzdHlsZVFybCwgaSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSB0cmFuc2Zvcm0oY29udGVudCwgc3R5bGVJZCk7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBkb2MucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGBzdHlsZVtxXFxcXDpzdHlsZT1cIiR7c3R5bGVJZH1cIl1gXG4gICAgICAgICAgKSBhcyBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudGV4dENvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLnRleHRDb250ZW50ID0gbmV3Q29udGVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzdHlsZVFybC5yZXNvbHZlZCkge1xuICAgICAgICAgIHVwZGF0ZSh0cmFuc2Zvcm0oc3R5bGVRcmwucmVzb2x2ZWQsIHN0eWxlSWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZVFybC5yZXNvbHZlKCkudGhlbih1cGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXZlVXBkYXRlID8gdmFsWzBdIDogKHZhbCBhcyBzdHJpbmcpO1xuICB9XG4gIGNvbnN0IHN0eWxlSWQgPSBzdHlsZUtleShzdHlsZVFybCwgaSk7XG4gIGNvbnN0IGhvc3QgPSBpQ3R4LiRob3N0RWxlbWVudCQ7XG4gIHNldChsaXZlVXBkYXRlICYmIGRvYyA/IFtzdHlsZUlkLCBkb2MuX19obXJUIV0gOiBzdHlsZUlkKTtcblxuICBpZiAoc3R5bGVRcmwucmVzb2x2ZWQpIHtcbiAgICBpQ3R4LiRjb250YWluZXIkLiRhcHBlbmRTdHlsZSQodHJhbnNmb3JtKHN0eWxlUXJsLnJlc29sdmVkLCBzdHlsZUlkKSwgc3R5bGVJZCwgaG9zdCwgc2NvcGVkKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBzdHlsZVFybFxuICAgICAgLnJlc29sdmUoKVxuICAgICAgLnRoZW4oKHZhbCkgPT5cbiAgICAgICAgaUN0eC4kY29udGFpbmVyJC4kYXBwZW5kU3R5bGUkKHRyYW5zZm9ybSh2YWwsIHN0eWxlSWQpLCBzdHlsZUlkLCBob3N0LCBzY29wZWQpXG4gICAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlSWQ7XG59O1xuIl19","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { createComputedSignal } from '../reactive-primitives/signal-api';\nimport { useConstant } from './use-signal';\nconst creator = (qrl, options) => {\n    qrl.resolve();\n    return createComputedSignal(qrl, options);\n};\n/** @internal */\nexport const useComputedQrl = (qrl, options) => {\n    return useConstant((creator), qrl, options);\n};\n/**\n * Creates a computed signal which is calculated from the given function. A computed signal is a\n * signal which is calculated from other signals. When the signals change, the computed signal is\n * recalculated, and if the result changed, all tasks which are tracking the signal will be re-run\n * and all components that read the signal will be re-rendered.\n *\n * The function must be synchronous and must not have any side effects.\n *\n * @public\n */\nexport const useComputed$ = implicit$FirstArg(useComputedQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbXB1dGVkLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU8zQyxNQUFNLE9BQU8sR0FBRyxDQUFJLEdBQXVCLEVBQUUsT0FBeUIsRUFBRSxFQUFFO0lBQ3hFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNkLE9BQU8sb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQztBQUNGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsR0FBdUIsRUFDdkIsT0FBeUIsRUFDRixFQUFFO0lBQ3pCLE9BQU8sV0FBVyxDQUFDLENBQUEsT0FBVSxDQUFBLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBUSxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZFNpZ25hbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBjcmVhdGVDb21wdXRlZFNpZ25hbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLWFwaSc7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkT3B0aW9ucyB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvdHlwZXMnO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuL3VzZS1zaWduYWwnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRGbjxUPiA9ICgpID0+IFQ7XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRSZXR1cm5UeXBlPFQ+ID0gVCBleHRlbmRzIFByb21pc2U8YW55PiA/IG5ldmVyIDogQ29tcHV0ZWRTaWduYWw8VD47XG5cbmNvbnN0IGNyZWF0b3IgPSA8VD4ocXJsOiBRUkw8Q29tcHV0ZWRGbjxUPj4sIG9wdGlvbnM/OiBDb21wdXRlZE9wdGlvbnMpID0+IHtcbiAgcXJsLnJlc29sdmUoKTtcbiAgcmV0dXJuIGNyZWF0ZUNvbXB1dGVkU2lnbmFsKHFybCwgb3B0aW9ucyk7XG59O1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbXB1dGVkUXJsID0gPFQ+KFxuICBxcmw6IFFSTDxDb21wdXRlZEZuPFQ+PixcbiAgb3B0aW9ucz86IENvbXB1dGVkT3B0aW9uc1xuKTogQ29tcHV0ZWRSZXR1cm5UeXBlPFQ+ID0+IHtcbiAgcmV0dXJuIHVzZUNvbnN0YW50KGNyZWF0b3I8VD4sIHFybCwgb3B0aW9ucykgYXMgYW55O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcHV0ZWQgc2lnbmFsIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZ2l2ZW4gZnVuY3Rpb24uIEEgY29tcHV0ZWQgc2lnbmFsIGlzIGFcbiAqIHNpZ25hbCB3aGljaCBpcyBjYWxjdWxhdGVkIGZyb20gb3RoZXIgc2lnbmFscy4gV2hlbiB0aGUgc2lnbmFscyBjaGFuZ2UsIHRoZSBjb21wdXRlZCBzaWduYWwgaXNcbiAqIHJlY2FsY3VsYXRlZCwgYW5kIGlmIHRoZSByZXN1bHQgY2hhbmdlZCwgYWxsIHRhc2tzIHdoaWNoIGFyZSB0cmFja2luZyB0aGUgc2lnbmFsIHdpbGwgYmUgcmUtcnVuXG4gKiBhbmQgYWxsIGNvbXBvbmVudHMgdGhhdCByZWFkIHRoZSBzaWduYWwgd2lsbCBiZSByZS1yZW5kZXJlZC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzeW5jaHJvbm91cyBhbmQgbXVzdCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbXB1dGVkJCA9IGltcGxpY2l0JEZpcnN0QXJnKHVzZUNvbXB1dGVkUXJsKTtcbiJdfQ==","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { createSerializerSignal } from '../reactive-primitives/signal-api';\nimport { useConstant } from './use-signal';\nconst creator = (qrl) => {\n    qrl.resolve();\n    return createSerializerSignal(qrl);\n};\n/** @internal */\nexport const useSerializerQrl = (qrl) => useConstant((creator), qrl);\n/**\n * Creates a signal which holds a custom serializable value. It requires that the value implements\n * the `CustomSerializable` type, which means having a function under the `[SerializeSymbol]`\n * property that returns a serializable value when called.\n *\n * The `fn` you pass is called with the result of the serialization (in the browser, only when the\n * value is needed), or `undefined` when not yet initialized. If you refer to other signals, `fn`\n * will be called when those change just like computed signals, and then the argument will be the\n * previous output, not the serialized result.\n *\n * This is useful when using third party libraries that use custom objects that are not\n * serializable.\n *\n * Note that the `fn` is called lazily, so it won't impact container resume.\n *\n * @example\n *\n * ```tsx\n * class MyCustomSerializable {\n *   constructor(public n: number) {}\n *   inc() {\n *     this.n++;\n *   }\n * }\n * const Cmp = component$(() => {\n *   const custom = useSerializer$({\n *     deserialize: (data) => new MyCustomSerializable(data),\n *     serialize: (data) => data.n,\n *     initial: 2,\n *   });\n *   return <div onClick$={() => custom.value.inc()}>{custom.value.n}</div>;\n * });\n * ```\n *\n * @example\n *\n * When using a Signal as the data to create the object, you need to pass the configuration as a\n * function, and you can then also provide the `update` function to update the object when the\n * signal changes.\n *\n * By returning an object from `update`, you signal that the listeners have to be notified. You can\n * mutate the current object but you should return it so that it will trigger listeners.\n *\n * ```tsx\n * const Cmp = component$(() => {\n *   const n = useSignal(2);\n *   const custom = useSerializer$(() =>\n *     ({\n *       deserialize: () => new MyCustomSerializable(n.value),\n *       update: (current) => {\n *         current.n = n.value;\n *         return current;\n *       }\n *     })\n *   );\n *   return <div onClick$={() => n.value++}>{custom.value.n}</div>;\n * });\n * ```\n *\n * @public\n */\nexport const useSerializer$ = implicit$FirstArg(useSerializerQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1zZXJpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSWxFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0MsTUFBTSxPQUFPLEdBQUcsQ0FBTyxHQUE2QixFQUFFLEVBQUU7SUFDdEQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsT0FBTyxzQkFBc0IsQ0FBTyxHQUFVLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBTyxHQUE2QixFQUFFLEVBQUUsQ0FDdEUsV0FBVyxDQUFDLENBQUEsT0FBYSxDQUFBLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRERztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBNkIsaUJBQWlCLENBQUMsZ0JBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVyQXJnIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IGNyZWF0ZVNlcmlhbGl6ZXIkIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmltcG9ydCB7IGNyZWF0ZVNlcmlhbGl6ZXJTaWduYWwgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC1hcGknO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuL3VzZS1zaWduYWwnO1xuXG5jb25zdCBjcmVhdG9yID0gPFQsIFM+KHFybDogUVJMPFNlcmlhbGl6ZXJBcmc8VCwgUz4+KSA9PiB7XG4gIHFybC5yZXNvbHZlKCk7XG4gIHJldHVybiBjcmVhdGVTZXJpYWxpemVyU2lnbmFsPFQsIFM+KHFybCBhcyBhbnkpO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVNlcmlhbGl6ZXJRcmwgPSA8VCwgUz4ocXJsOiBRUkw8U2VyaWFsaXplckFyZzxULCBTPj4pID0+XG4gIHVzZUNvbnN0YW50KGNyZWF0b3I8VCwgUz4sIHFybCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpZ25hbCB3aGljaCBob2xkcyBhIGN1c3RvbSBzZXJpYWxpemFibGUgdmFsdWUuIEl0IHJlcXVpcmVzIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudHNcbiAqIHRoZSBgQ3VzdG9tU2VyaWFsaXphYmxlYCB0eXBlLCB3aGljaCBtZWFucyBoYXZpbmcgYSBmdW5jdGlvbiB1bmRlciB0aGUgYFtTZXJpYWxpemVTeW1ib2xdYFxuICogcHJvcGVydHkgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlIHZhbHVlIHdoZW4gY2FsbGVkLlxuICpcbiAqIFRoZSBgZm5gIHlvdSBwYXNzIGlzIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHNlcmlhbGl6YXRpb24gKGluIHRoZSBicm93c2VyLCBvbmx5IHdoZW4gdGhlXG4gKiB2YWx1ZSBpcyBuZWVkZWQpLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuIElmIHlvdSByZWZlciB0byBvdGhlciBzaWduYWxzLCBgZm5gXG4gKiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRob3NlIGNoYW5nZSBqdXN0IGxpa2UgY29tcHV0ZWQgc2lnbmFscywgYW5kIHRoZW4gdGhlIGFyZ3VtZW50IHdpbGwgYmUgdGhlXG4gKiBwcmV2aW91cyBvdXRwdXQsIG5vdCB0aGUgc2VyaWFsaXplZCByZXN1bHQuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgdGhhdCB1c2UgY3VzdG9tIG9iamVjdHMgdGhhdCBhcmUgbm90XG4gKiBzZXJpYWxpemFibGUuXG4gKlxuICogTm90ZSB0aGF0IHRoZSBgZm5gIGlzIGNhbGxlZCBsYXppbHksIHNvIGl0IHdvbid0IGltcGFjdCBjb250YWluZXIgcmVzdW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHN4XG4gKiBjbGFzcyBNeUN1c3RvbVNlcmlhbGl6YWJsZSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuOiBudW1iZXIpIHt9XG4gKiAgIGluYygpIHtcbiAqICAgICB0aGlzLm4rKztcbiAqICAgfVxuICogfVxuICogY29uc3QgQ21wID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIGNvbnN0IGN1c3RvbSA9IHVzZVNlcmlhbGl6ZXIkKHtcbiAqICAgICBkZXNlcmlhbGl6ZTogKGRhdGEpID0+IG5ldyBNeUN1c3RvbVNlcmlhbGl6YWJsZShkYXRhKSxcbiAqICAgICBzZXJpYWxpemU6IChkYXRhKSA9PiBkYXRhLm4sXG4gKiAgICAgaW5pdGlhbDogMixcbiAqICAgfSk7XG4gKiAgIHJldHVybiA8ZGl2IG9uQ2xpY2skPXsoKSA9PiBjdXN0b20udmFsdWUuaW5jKCl9PntjdXN0b20udmFsdWUubn08L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogV2hlbiB1c2luZyBhIFNpZ25hbCBhcyB0aGUgZGF0YSB0byBjcmVhdGUgdGhlIG9iamVjdCwgeW91IG5lZWQgdG8gcGFzcyB0aGUgY29uZmlndXJhdGlvbiBhcyBhXG4gKiBmdW5jdGlvbiwgYW5kIHlvdSBjYW4gdGhlbiBhbHNvIHByb3ZpZGUgdGhlIGB1cGRhdGVgIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IHdoZW4gdGhlXG4gKiBzaWduYWwgY2hhbmdlcy5cbiAqXG4gKiBCeSByZXR1cm5pbmcgYW4gb2JqZWN0IGZyb20gYHVwZGF0ZWAsIHlvdSBzaWduYWwgdGhhdCB0aGUgbGlzdGVuZXJzIGhhdmUgdG8gYmUgbm90aWZpZWQuIFlvdSBjYW5cbiAqIG11dGF0ZSB0aGUgY3VycmVudCBvYmplY3QgYnV0IHlvdSBzaG91bGQgcmV0dXJuIGl0IHNvIHRoYXQgaXQgd2lsbCB0cmlnZ2VyIGxpc3RlbmVycy5cbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBuID0gdXNlU2lnbmFsKDIpO1xuICogICBjb25zdCBjdXN0b20gPSB1c2VTZXJpYWxpemVyJCgoKSA9PlxuICogICAgICh7XG4gKiAgICAgICBkZXNlcmlhbGl6ZTogKCkgPT4gbmV3IE15Q3VzdG9tU2VyaWFsaXphYmxlKG4udmFsdWUpLFxuICogICAgICAgdXBkYXRlOiAoY3VycmVudCkgPT4ge1xuICogICAgICAgICBjdXJyZW50Lm4gPSBuLnZhbHVlO1xuICogICAgICAgICByZXR1cm4gY3VycmVudDtcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICogICApO1xuICogICByZXR1cm4gPGRpdiBvbkNsaWNrJD17KCkgPT4gbi52YWx1ZSsrfT57Y3VzdG9tLnZhbHVlLm59PC9kaXY+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VTZXJpYWxpemVyJDogdHlwZW9mIGNyZWF0ZVNlcmlhbGl6ZXIkID0gaW1wbGljaXQkRmlyc3RBcmcodXNlU2VyaWFsaXplclFybCBhcyBhbnkpO1xuIl19","import { isServerPlatform } from '../shared/platform/platform';\nimport { createQRL } from '../shared/qrl/qrl-class';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { useOn, useOnDocument } from './use-on';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { Task, scheduleTask } from './use-task';\n/** @internal */\nexport const useVisibleTaskQrl = (qrl, opts) => {\n    const { val, set, i, iCtx } = useSequentialScope();\n    const eagerness = opts?.strategy ?? 'intersection-observer';\n    if (val) {\n        if (!(val.$flags$ & 32 /* TaskFlags.EVENTS_REGISTERED */) && !isServerPlatform()) {\n            val.$flags$ |= 32 /* TaskFlags.EVENTS_REGISTERED */;\n            useRegisterTaskEvents(val, eagerness);\n        }\n        return;\n    }\n    assertQrl(qrl);\n    let flags;\n    if (!isServerPlatform()) {\n        // In DOM we immediately execute\n        flags = 1 /* TaskFlags.VISIBLE_TASK */ | 4 /* TaskFlags.DIRTY */;\n        qrl.resolve();\n        markVNodeDirty(iCtx.$container$, iCtx.$hostElement$, 1 /* ChoreBits.TASKS */);\n    }\n    else {\n        // In SSR we defer execution until triggered in DOM\n        flags = 1 /* TaskFlags.VISIBLE_TASK */;\n    }\n    const task = new Task(flags, i, iCtx.$hostElement$, qrl, undefined, null);\n    set(task);\n    useRegisterTaskEvents(task, eagerness);\n};\nexport const useRegisterTaskEvents = (task, eagerness) => {\n    if (eagerness === 'intersection-observer') {\n        useOn('qvisible', getTaskHandlerQrl(task));\n    }\n    else if (eagerness === 'document-ready') {\n        useOnDocument('qinit', getTaskHandlerQrl(task));\n    }\n    else if (eagerness === 'document-idle') {\n        useOnDocument('qidle', getTaskHandlerQrl(task));\n    }\n};\nconst getTaskHandlerQrl = (task) => {\n    return createQRL(null, '_task', scheduleTask, null, [task]);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXZpc2libGUtdGFzay5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXZpc2libGUtdGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBYSxZQUFZLEVBQWUsTUFBTSxZQUFZLENBQUM7QUFvQnhFLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQWdCLEVBQUUsSUFBMkIsRUFBUSxFQUFFO0lBQ3ZGLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsRUFBZ0IsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLHVCQUF1QixDQUFDO0lBQzVELElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyx1Q0FBOEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1lBQ3hFLEdBQUcsQ0FBQyxPQUFPLHdDQUErQixDQUFDO1lBQzNDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZixJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLGdDQUFnQztRQUNoQyxLQUFLLEdBQUcsd0RBQXdDLENBQUM7UUFDaEQsR0FBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSwwQkFBa0IsQ0FBQztJQUN4RSxDQUFDO1NBQU0sQ0FBQztRQUNOLG1EQUFtRDtRQUNuRCxLQUFLLGlDQUF5QixDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDVixxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFVLEVBQUUsU0FBMEMsRUFBRSxFQUFFO0lBQzlGLElBQUksU0FBUyxLQUFLLHVCQUF1QixFQUFFLENBQUM7UUFDMUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO1NBQU0sSUFBSSxTQUFTLEtBQUssZUFBZSxFQUFFLENBQUM7UUFDekMsYUFBYSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBVSxFQUFxQixFQUFFO0lBQzFELE9BQU8sU0FBUyxDQUFlLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNTZXJ2ZXJQbGF0Zm9ybSB9IGZyb20gJy4uL3NoYXJlZC9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBjcmVhdGVRUkwsIHR5cGUgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgeyBhc3NlcnRRcmwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBDaG9yZUJpdHMgfSBmcm9tICcuLi9zaGFyZWQvdm5vZGUvZW51bXMvY2hvcmUtYml0cy5lbnVtJztcbmltcG9ydCB7IG1hcmtWTm9kZURpcnR5IH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlLWRpcnR5JztcbmltcG9ydCB7IHVzZU9uLCB1c2VPbkRvY3VtZW50IH0gZnJvbSAnLi91c2Utb24nO1xuaW1wb3J0IHsgdXNlU2VxdWVudGlhbFNjb3BlIH0gZnJvbSAnLi91c2Utc2VxdWVudGlhbC1zY29wZSc7XG5pbXBvcnQgeyBUYXNrLCBUYXNrRmxhZ3MsIHNjaGVkdWxlVGFzaywgdHlwZSBUYXNrRm4gfSBmcm9tICcuL3VzZS10YXNrJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFZpc2libGVUYXNrU3RyYXRlZ3kgPSAnaW50ZXJzZWN0aW9uLW9ic2VydmVyJyB8ICdkb2N1bWVudC1yZWFkeScgfCAnZG9jdW1lbnQtaWRsZSc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIE9uVmlzaWJsZVRhc2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2UgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIFwiVmlzaWJsZVRhc2tcIiBzaG91bGQgZmlyc3QgZXhlY3V0ZS5cbiAgICpcbiAgICogLSBgaW50ZXJzZWN0aW9uLW9ic2VydmVyYDogdGhlIHRhc2sgd2lsbCBmaXJzdCBleGVjdXRlIHdoZW4gdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGVcbiAgICogICB2aWV3cG9ydCwgdW5kZXIgdGhlIGhvb2QgaXQgdXNlcyB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgQVBJLlxuICAgKiAtIGBkb2N1bWVudC1yZWFkeWA6IHRoZSB0YXNrIHdpbGwgZmlyc3QgZXhlY3V0ZSB3aGVuIHRoZSBkb2N1bWVudCBpcyByZWFkeSwgdW5kZXIgdGhlIGhvb2QgaXRcbiAgICogICB1c2VzIHRoZSBkb2N1bWVudCBgbG9hZGAgZXZlbnQuXG4gICAqIC0gYGRvY3VtZW50LWlkbGVgOiB0aGUgdGFzayB3aWxsIGZpcnN0IGV4ZWN1dGUgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaWRsZSwgdW5kZXIgdGhlIGhvb2QgaXQgdXNlc1xuICAgKiAgIHRoZSByZXF1ZXN0SWRsZUNhbGxiYWNrIEFQSS5cbiAgICovXG4gIHN0cmF0ZWd5PzogVmlzaWJsZVRhc2tTdHJhdGVneTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVZpc2libGVUYXNrUXJsID0gKHFybDogUVJMPFRhc2tGbj4sIG9wdHM/OiBPblZpc2libGVUYXNrT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpLCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8VGFzazxUYXNrRm4+PigpO1xuICBjb25zdCBlYWdlcm5lc3MgPSBvcHRzPy5zdHJhdGVneSA/PyAnaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcbiAgaWYgKHZhbCkge1xuICAgIGlmICghKHZhbC4kZmxhZ3MkICYgVGFza0ZsYWdzLkVWRU5UU19SRUdJU1RFUkVEKSAmJiAhaXNTZXJ2ZXJQbGF0Zm9ybSgpKSB7XG4gICAgICB2YWwuJGZsYWdzJCB8PSBUYXNrRmxhZ3MuRVZFTlRTX1JFR0lTVEVSRUQ7XG4gICAgICB1c2VSZWdpc3RlclRhc2tFdmVudHModmFsLCBlYWdlcm5lc3MpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgYXNzZXJ0UXJsKHFybCk7XG5cbiAgbGV0IGZsYWdzOiBudW1iZXI7XG4gIGlmICghaXNTZXJ2ZXJQbGF0Zm9ybSgpKSB7XG4gICAgLy8gSW4gRE9NIHdlIGltbWVkaWF0ZWx5IGV4ZWN1dGVcbiAgICBmbGFncyA9IFRhc2tGbGFncy5WSVNJQkxFX1RBU0sgfCBUYXNrRmxhZ3MuRElSVFk7XG4gICAgKHFybCBhcyBRUkxJbnRlcm5hbCkucmVzb2x2ZSgpO1xuICAgIG1hcmtWTm9kZURpcnR5KGlDdHguJGNvbnRhaW5lciQsIGlDdHguJGhvc3RFbGVtZW50JCwgQ2hvcmVCaXRzLlRBU0tTKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBTU1Igd2UgZGVmZXIgZXhlY3V0aW9uIHVudGlsIHRyaWdnZXJlZCBpbiBET01cbiAgICBmbGFncyA9IFRhc2tGbGFncy5WSVNJQkxFX1RBU0s7XG4gIH1cblxuICBjb25zdCB0YXNrID0gbmV3IFRhc2soZmxhZ3MsIGksIGlDdHguJGhvc3RFbGVtZW50JCwgcXJsLCB1bmRlZmluZWQsIG51bGwpO1xuICBzZXQodGFzayk7XG4gIHVzZVJlZ2lzdGVyVGFza0V2ZW50cyh0YXNrLCBlYWdlcm5lc3MpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVJlZ2lzdGVyVGFza0V2ZW50cyA9ICh0YXNrOiBUYXNrLCBlYWdlcm5lc3M6IFZpc2libGVUYXNrU3RyYXRlZ3kgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKGVhZ2VybmVzcyA9PT0gJ2ludGVyc2VjdGlvbi1vYnNlcnZlcicpIHtcbiAgICB1c2VPbigncXZpc2libGUnLCBnZXRUYXNrSGFuZGxlclFybCh0YXNrKSk7XG4gIH0gZWxzZSBpZiAoZWFnZXJuZXNzID09PSAnZG9jdW1lbnQtcmVhZHknKSB7XG4gICAgdXNlT25Eb2N1bWVudCgncWluaXQnLCBnZXRUYXNrSGFuZGxlclFybCh0YXNrKSk7XG4gIH0gZWxzZSBpZiAoZWFnZXJuZXNzID09PSAnZG9jdW1lbnQtaWRsZScpIHtcbiAgICB1c2VPbkRvY3VtZW50KCdxaWRsZScsIGdldFRhc2tIYW5kbGVyUXJsKHRhc2spKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0VGFza0hhbmRsZXJRcmwgPSAodGFzazogVGFzayk6IFFSTDxFdmVudEhhbmRsZXI+ID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVFSTDxFdmVudEhhbmRsZXI+KG51bGwsICdfdGFzaycsIHNjaGVkdWxlVGFzaywgbnVsbCwgW3Rhc2tdKTtcbn07XG4iXX0=","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { useResourceQrl } from './use-resource';\n// <docs markdown=\"../readme.md#useResource\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useResource instead and run `pnpm docs.sync`)\n/**\n * This method works like an async memoized function that runs whenever some tracked value changes\n * and returns some data.\n *\n * `useResource` however returns immediate a `ResourceReturn` object that contains the data and a\n * state that indicates if the data is available or not.\n *\n * The status can be one of the following:\n *\n * - `pending` - the data is not yet available.\n * - `resolved` - the data is available.\n * - `rejected` - the data is not available due to an error or timeout.\n *\n * Be careful when using a `try/catch` statement in `useResource$`. If you catch the error and don't\n * re-throw it (or a new Error), the resource status will never be `rejected`.\n *\n * @deprecated Use `useAsync$` instead, which is more powerful and flexible. `useResource$` is still\n *   available for backward compatibility but it is recommended to migrate to `useAsync$` for new\n *   code and when updating existing code.\n * @public\n * @see useAsync$\n * @see Resource\n * @see ResourceReturn\n */\n// </docs>\nexport const useResource$ = implicit$FirstArg(useResourceQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJlc291cmNlLWRvbGxhci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXJlc291cmNlLWRvbGxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxtRUFBbUU7QUFDbkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VRcmwgfSBmcm9tICcuL3VzZS1yZXNvdXJjZSc7XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZVJlc291cmNlXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI3VzZVJlc291cmNlIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBUaGlzIG1ldGhvZCB3b3JrcyBsaWtlIGFuIGFzeW5jIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgcnVucyB3aGVuZXZlciBzb21lIHRyYWNrZWQgdmFsdWUgY2hhbmdlc1xuICogYW5kIHJldHVybnMgc29tZSBkYXRhLlxuICpcbiAqIGB1c2VSZXNvdXJjZWAgaG93ZXZlciByZXR1cm5zIGltbWVkaWF0ZSBhIGBSZXNvdXJjZVJldHVybmAgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgYW5kIGFcbiAqIHN0YXRlIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhIGlzIGF2YWlsYWJsZSBvciBub3QuXG4gKlxuICogVGhlIHN0YXR1cyBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogLSBgcGVuZGluZ2AgLSB0aGUgZGF0YSBpcyBub3QgeWV0IGF2YWlsYWJsZS5cbiAqIC0gYHJlc29sdmVkYCAtIHRoZSBkYXRhIGlzIGF2YWlsYWJsZS5cbiAqIC0gYHJlamVjdGVkYCAtIHRoZSBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZHVlIHRvIGFuIGVycm9yIG9yIHRpbWVvdXQuXG4gKlxuICogQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIGEgYHRyeS9jYXRjaGAgc3RhdGVtZW50IGluIGB1c2VSZXNvdXJjZSRgLiBJZiB5b3UgY2F0Y2ggdGhlIGVycm9yIGFuZCBkb24ndFxuICogcmUtdGhyb3cgaXQgKG9yIGEgbmV3IEVycm9yKSwgdGhlIHJlc291cmNlIHN0YXR1cyB3aWxsIG5ldmVyIGJlIGByZWplY3RlZGAuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIGB1c2VBc3luYyRgIGluc3RlYWQsIHdoaWNoIGlzIG1vcmUgcG93ZXJmdWwgYW5kIGZsZXhpYmxlLiBgdXNlUmVzb3VyY2UkYCBpcyBzdGlsbFxuICogICBhdmFpbGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIG1pZ3JhdGUgdG8gYHVzZUFzeW5jJGAgZm9yIG5ld1xuICogICBjb2RlIGFuZCB3aGVuIHVwZGF0aW5nIGV4aXN0aW5nIGNvZGUuXG4gKiBAcHVibGljXG4gKiBAc2VlIHVzZUFzeW5jJFxuICogQHNlZSBSZXNvdXJjZVxuICogQHNlZSBSZXNvdXJjZVJldHVyblxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2UkID0gaW1wbGljaXQkRmlyc3RBcmcodXNlUmVzb3VyY2VRcmwpO1xuIl19","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { useTaskQrl } from './use-task';\n// <docs markdown=\"../readme.md#useTask\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useTask instead and run `pnpm docs.sync`)\n/**\n * Reruns the `taskFn` when the observed inputs change.\n *\n * Use `useTask` to observe changes on a set of inputs, and then re-execute the `taskFn` when those\n * inputs change.\n *\n * The `taskFn` only executes if the observed inputs change. To observe the inputs, use the `obs`\n * function to wrap property reads. This creates subscriptions that will trigger the `taskFn` to\n * rerun.\n *\n * @param task - Function which should be re-executed when changes to the inputs are detected\n * @public\n *\n * ### Example\n *\n * The `useTask` function is used to observe the `store.count` property. Any changes to the\n * `store.count` cause the `taskFn` to execute which in turn updates the `store.doubleCount` to\n * the double of `store.count`.\n *\n * ```tsx\n * const Cmp = component$(() => {\n *   const store = useStore({\n *     count: 0,\n *     doubleCount: 0,\n *     debounced: 0,\n *   });\n *\n *   // Double count task\n *   useTask$(({ track }) => {\n *     const count = track(() => store.count);\n *     store.doubleCount = 2 * count;\n *   });\n *\n *   // Debouncer task\n *   useTask$(({ track }) => {\n *     const doubleCount = track(() => store.doubleCount);\n *     const timer = setTimeout(() => {\n *       store.debounced = doubleCount;\n *     }, 2000);\n *     return () => {\n *       clearTimeout(timer);\n *     };\n *   });\n *   return (\n *     <div>\n *       <div>\n *         {store.count} / {store.doubleCount}\n *       </div>\n *       <div>{store.debounced}</div>\n *     </div>\n *   );\n * });\n * ```\n *\n * @public\n * @see `Tracker`\n */\n// </docs>\n// We need to cast to help out the api extractor\nexport const useTask$ = /*#__PURE__*/ implicit$FirstArg(useTaskQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXRhc2stZG9sbGFyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtdGFzay1kb2xsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBaUMsTUFBTSxZQUFZLENBQUM7QUFFdkUseUNBQXlDO0FBQ3pDLHlDQUF5QztBQUN6QywrREFBK0Q7QUFDL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0RHO0FBQ0gsVUFBVTtBQUNWLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FHekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHsgdXNlVGFza1FybCwgdHlwZSBUYXNrRm4sIHR5cGUgVGFza09wdGlvbnMgfSBmcm9tICcuL3VzZS10YXNrJztcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlVGFza1wiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VUYXNrIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBSZXJ1bnMgdGhlIGB0YXNrRm5gIHdoZW4gdGhlIG9ic2VydmVkIGlucHV0cyBjaGFuZ2UuXG4gKlxuICogVXNlIGB1c2VUYXNrYCB0byBvYnNlcnZlIGNoYW5nZXMgb24gYSBzZXQgb2YgaW5wdXRzLCBhbmQgdGhlbiByZS1leGVjdXRlIHRoZSBgdGFza0ZuYCB3aGVuIHRob3NlXG4gKiBpbnB1dHMgY2hhbmdlLlxuICpcbiAqIFRoZSBgdGFza0ZuYCBvbmx5IGV4ZWN1dGVzIGlmIHRoZSBvYnNlcnZlZCBpbnB1dHMgY2hhbmdlLiBUbyBvYnNlcnZlIHRoZSBpbnB1dHMsIHVzZSB0aGUgYG9ic2BcbiAqIGZ1bmN0aW9uIHRvIHdyYXAgcHJvcGVydHkgcmVhZHMuIFRoaXMgY3JlYXRlcyBzdWJzY3JpcHRpb25zIHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBgdGFza0ZuYCB0b1xuICogcmVydW4uXG4gKlxuICogQHBhcmFtIHRhc2sgLSBGdW5jdGlvbiB3aGljaCBzaG91bGQgYmUgcmUtZXhlY3V0ZWQgd2hlbiBjaGFuZ2VzIHRvIHRoZSBpbnB1dHMgYXJlIGRldGVjdGVkXG4gKiBAcHVibGljXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgYHVzZVRhc2tgIGZ1bmN0aW9uIGlzIHVzZWQgdG8gb2JzZXJ2ZSB0aGUgYHN0b3JlLmNvdW50YCBwcm9wZXJ0eS4gQW55IGNoYW5nZXMgdG8gdGhlXG4gKiBgc3RvcmUuY291bnRgIGNhdXNlIHRoZSBgdGFza0ZuYCB0byBleGVjdXRlIHdoaWNoIGluIHR1cm4gdXBkYXRlcyB0aGUgYHN0b3JlLmRvdWJsZUNvdW50YCB0b1xuICogdGhlIGRvdWJsZSBvZiBgc3RvcmUuY291bnRgLlxuICpcbiAqIGBgYHRzeFxuICogY29uc3QgQ21wID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUoe1xuICogICAgIGNvdW50OiAwLFxuICogICAgIGRvdWJsZUNvdW50OiAwLFxuICogICAgIGRlYm91bmNlZDogMCxcbiAqICAgfSk7XG4gKlxuICogICAvLyBEb3VibGUgY291bnQgdGFza1xuICogICB1c2VUYXNrJCgoeyB0cmFjayB9KSA9PiB7XG4gKiAgICAgY29uc3QgY291bnQgPSB0cmFjaygoKSA9PiBzdG9yZS5jb3VudCk7XG4gKiAgICAgc3RvcmUuZG91YmxlQ291bnQgPSAyICogY291bnQ7XG4gKiAgIH0pO1xuICpcbiAqICAgLy8gRGVib3VuY2VyIHRhc2tcbiAqICAgdXNlVGFzayQoKHsgdHJhY2sgfSkgPT4ge1xuICogICAgIGNvbnN0IGRvdWJsZUNvdW50ID0gdHJhY2soKCkgPT4gc3RvcmUuZG91YmxlQ291bnQpO1xuICogICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gKiAgICAgICBzdG9yZS5kZWJvdW5jZWQgPSBkb3VibGVDb3VudDtcbiAqICAgICB9LCAyMDAwKTtcbiAqICAgICByZXR1cm4gKCkgPT4ge1xuICogICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAqICAgICB9O1xuICogICB9KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPGRpdj5cbiAqICAgICAgICAge3N0b3JlLmNvdW50fSAvIHtzdG9yZS5kb3VibGVDb3VudH1cbiAqICAgICAgIDwvZGl2PlxuICogICAgICAgPGRpdj57c3RvcmUuZGVib3VuY2VkfTwvZGl2PlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGBUcmFja2VyYFxuICovXG4vLyA8L2RvY3M+XG4vLyBXZSBuZWVkIHRvIGNhc3QgdG8gaGVscCBvdXQgdGhlIGFwaSBleHRyYWN0b3JcbmV4cG9ydCBjb25zdCB1c2VUYXNrJCA9IC8qI19fUFVSRV9fKi8gaW1wbGljaXQkRmlyc3RBcmcodXNlVGFza1FybCkgYXMgKFxuICBmbjogVGFza0ZuLFxuICBvcHRzPzogVGFza09wdGlvbnNcbikgPT4gdm9pZDtcbiJdfQ==","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { useVisibleTaskQrl } from './use-visible-task';\n// <docs markdown=\"../readme.md#useVisibleTask\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useVisibleTask instead and run `pnpm docs.sync`)\n/**\n * ```tsx\n * const Timer = component$(() => {\n *   const store = useStore({\n *     count: 0,\n *   });\n *\n *   useVisibleTask$(() => {\n *     // Only runs in the client\n *     const timer = setInterval(() => {\n *       store.count++;\n *     }, 500);\n *     return () => {\n *       clearInterval(timer);\n *     };\n *   });\n *\n *   return <div>{store.count}</div>;\n * });\n * ```\n *\n * @public\n */\n// </docs>\n// We need to cast to help out the api extractor\nexport const useVisibleTask$ = /*#__PURE__*/ implicit$FirstArg(useVisibleTaskQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXZpc2libGUtdGFzay1kb2xsYXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS12aXNpYmxlLXRhc2stZG9sbGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRixnREFBZ0Q7QUFDaEQseUNBQXlDO0FBQ3pDLHNFQUFzRTtBQUN0RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFVBQVU7QUFDVixnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FHdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHR5cGUgeyBUYXNrRm4gfSBmcm9tICcuL3VzZS10YXNrJztcbmltcG9ydCB7IHVzZVZpc2libGVUYXNrUXJsLCB0eXBlIE9uVmlzaWJsZVRhc2tPcHRpb25zIH0gZnJvbSAnLi91c2UtdmlzaWJsZS10YXNrJztcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlVmlzaWJsZVRhc2tcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlVmlzaWJsZVRhc2sgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIGBgYHRzeFxuICogY29uc3QgVGltZXIgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSh7XG4gKiAgICAgY291bnQ6IDAsXG4gKiAgIH0pO1xuICpcbiAqICAgdXNlVmlzaWJsZVRhc2skKCgpID0+IHtcbiAqICAgICAvLyBPbmx5IHJ1bnMgaW4gdGhlIGNsaWVudFxuICogICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICogICAgICAgc3RvcmUuY291bnQrKztcbiAqICAgICB9LCA1MDApO1xuICogICAgIHJldHVybiAoKSA9PiB7XG4gKiAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAqICAgICB9O1xuICogICB9KTtcbiAqXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5jb3VudH08L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuLy8gV2UgbmVlZCB0byBjYXN0IHRvIGhlbHAgb3V0IHRoZSBhcGkgZXh0cmFjdG9yXG5leHBvcnQgY29uc3QgdXNlVmlzaWJsZVRhc2skID0gLyojX19QVVJFX18qLyBpbXBsaWNpdCRGaXJzdEFyZyh1c2VWaXNpYmxlVGFza1FybCkgYXMgKFxuICBmbjogVGFza0ZuLFxuICBvcHRzPzogT25WaXNpYmxlVGFza09wdGlvbnNcbikgPT4gdm9pZDtcbiJdfQ==","import { createAsyncSignal } from '../reactive-primitives/signal-api';\nimport { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { useConstant } from './use-signal';\nconst creator = (qrl, options) => {\n    qrl.resolve();\n    return createAsyncSignal(qrl, options);\n};\n/** @internal */\nexport const useAsyncQrl = (qrl, options) => {\n    return useConstant((creator), qrl, options);\n};\n/**\n * Creates an AsyncSignal which holds the result of the given async function. If the function uses\n * `track()` to track reactive state, and that state changes, the AsyncSignal is recalculated, and\n * if the result changed, all tasks which are tracking the AsyncSignal will be re-run and all\n * subscribers (components, tasks etc) that read the AsyncSignal will be updated.\n *\n * If the async function throws an error, the AsyncSignal will capture the error and set the `error`\n * property. The error can be cleared by re-running the async function successfully.\n *\n * While the async function is running, the `loading` property will be set to `true`. Once the\n * function completes, `loading` will be set to `false`.\n *\n * If the value has not yet been resolved, reading the AsyncSignal will throw a Promise, which will\n * retry the component or task once the value resolves.\n *\n * If the value has been resolved, but the async function is re-running, reading the AsyncSignal\n * will subscribe to it and return the last resolved value until the new value is ready. As soon as\n * the new value is ready, the subscribers will be updated.\n *\n * @public\n */\nexport const useAsync$ = implicit$FirstArg(useAsyncQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWFzeW5jLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtYXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVczQyxNQUFNLE9BQU8sR0FBRyxDQUFJLEdBQW9CLEVBQUUsT0FBK0IsRUFBRSxFQUFFO0lBQzNFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNkLE9BQU8saUJBQWlCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FDekIsR0FBb0IsRUFDcEIsT0FBK0IsRUFDZixFQUFFO0lBQ2xCLE9BQU8sV0FBVyxDQUFDLENBQUEsT0FBVSxDQUFBLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFzeW5jU2lnbmFsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwtYXBpJztcbmltcG9ydCB7IHR5cGUgQXN5bmNTaWduYWwgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBBc3luY0N0eCwgQXN5bmNTaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5pbXBvcnQgeyBpbXBsaWNpdCRGaXJzdEFyZyB9IGZyb20gJy4uL3NoYXJlZC9xcmwvaW1wbGljaXRfZG9sbGFyJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB0eXBlIHsgVmFsdWVPclByb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuL3VzZS1zaWduYWwnO1xuXG4vKipcbiAqIE5vdGUsIHdlIGRvbid0IHBhc3MgdGhlIGdlbmVyaWMgdHlwZSB0byBBc3luY0N0eCBiZWNhdXNlIGl0IGNhdXNlcyBUeXBlU2NyaXB0IHRvIG5vdCBpbmZlciB0aGVcbiAqIHR5cGUgb2YgdGhlIHJlc291cmNlIGNvcnJlY3RseS4gVGhlIHR5cGUgaXMgb25seSB1c2VkIGZvciB0aGUgYHByZXZpb3VzYCBwcm9wZXJ0eSwgd2hpY2ggaXMgbm90XG4gKiBjb21tb25seSB1c2VkLCBhbmQgY2FuIGJlIGVhc2lseSBjYXN0IGlmIG5lZWRlZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFzeW5jRm48VD4gPSAoY3R4OiBBc3luY0N0eCkgPT4gVmFsdWVPclByb21pc2U8VD47XG5cbmNvbnN0IGNyZWF0b3IgPSA8VD4ocXJsOiBRUkw8QXN5bmNGbjxUPj4sIG9wdGlvbnM/OiBBc3luY1NpZ25hbE9wdGlvbnM8VD4pID0+IHtcbiAgcXJsLnJlc29sdmUoKTtcbiAgcmV0dXJuIGNyZWF0ZUFzeW5jU2lnbmFsKHFybCwgb3B0aW9ucyk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdXNlQXN5bmNRcmwgPSA8VD4oXG4gIHFybDogUVJMPEFzeW5jRm48VD4+LFxuICBvcHRpb25zPzogQXN5bmNTaWduYWxPcHRpb25zPFQ+XG4pOiBBc3luY1NpZ25hbDxUPiA9PiB7XG4gIHJldHVybiB1c2VDb25zdGFudChjcmVhdG9yPFQ+LCBxcmwsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFzeW5jU2lnbmFsIHdoaWNoIGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGdpdmVuIGFzeW5jIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gdXNlc1xuICogYHRyYWNrKClgIHRvIHRyYWNrIHJlYWN0aXZlIHN0YXRlLCBhbmQgdGhhdCBzdGF0ZSBjaGFuZ2VzLCB0aGUgQXN5bmNTaWduYWwgaXMgcmVjYWxjdWxhdGVkLCBhbmRcbiAqIGlmIHRoZSByZXN1bHQgY2hhbmdlZCwgYWxsIHRhc2tzIHdoaWNoIGFyZSB0cmFja2luZyB0aGUgQXN5bmNTaWduYWwgd2lsbCBiZSByZS1ydW4gYW5kIGFsbFxuICogc3Vic2NyaWJlcnMgKGNvbXBvbmVudHMsIHRhc2tzIGV0YykgdGhhdCByZWFkIHRoZSBBc3luY1NpZ25hbCB3aWxsIGJlIHVwZGF0ZWQuXG4gKlxuICogSWYgdGhlIGFzeW5jIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciwgdGhlIEFzeW5jU2lnbmFsIHdpbGwgY2FwdHVyZSB0aGUgZXJyb3IgYW5kIHNldCB0aGUgYGVycm9yYFxuICogcHJvcGVydHkuIFRoZSBlcnJvciBjYW4gYmUgY2xlYXJlZCBieSByZS1ydW5uaW5nIHRoZSBhc3luYyBmdW5jdGlvbiBzdWNjZXNzZnVsbHkuXG4gKlxuICogV2hpbGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGlzIHJ1bm5pbmcsIHRoZSBgbG9hZGluZ2AgcHJvcGVydHkgd2lsbCBiZSBzZXQgdG8gYHRydWVgLiBPbmNlIHRoZVxuICogZnVuY3Rpb24gY29tcGxldGVzLCBgbG9hZGluZ2Agd2lsbCBiZSBzZXQgdG8gYGZhbHNlYC5cbiAqXG4gKiBJZiB0aGUgdmFsdWUgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCwgcmVhZGluZyB0aGUgQXN5bmNTaWduYWwgd2lsbCB0aHJvdyBhIFByb21pc2UsIHdoaWNoIHdpbGxcbiAqIHJldHJ5IHRoZSBjb21wb25lbnQgb3IgdGFzayBvbmNlIHRoZSB2YWx1ZSByZXNvbHZlcy5cbiAqXG4gKiBJZiB0aGUgdmFsdWUgaGFzIGJlZW4gcmVzb2x2ZWQsIGJ1dCB0aGUgYXN5bmMgZnVuY3Rpb24gaXMgcmUtcnVubmluZywgcmVhZGluZyB0aGUgQXN5bmNTaWduYWxcbiAqIHdpbGwgc3Vic2NyaWJlIHRvIGl0IGFuZCByZXR1cm4gdGhlIGxhc3QgcmVzb2x2ZWQgdmFsdWUgdW50aWwgdGhlIG5ldyB2YWx1ZSBpcyByZWFkeS4gQXMgc29vbiBhc1xuICogdGhlIG5ldyB2YWx1ZSBpcyByZWFkeSwgdGhlIHN1YnNjcmliZXJzIHdpbGwgYmUgdXBkYXRlZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VBc3luYyQgPSBpbXBsaWNpdCRGaXJzdEFyZyh1c2VBc3luY1FybCk7XG4iXX0=","import { ERROR_CONTEXT } from '../shared/error/error-handling';\nimport { useContextProvider } from './use-context';\nimport { useStore } from './use-store.public';\n/** @public */\nexport const useErrorBoundary = () => {\n    const error = useStore({ error: undefined });\n    useContextProvider(ERROR_CONTEXT, error);\n    return error;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWVycm9yLWJvdW5kYXJ5LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtZXJyb3ItYm91bmRhcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFxQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV6QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVSUk9SX0NPTlRFWFQsIHR5cGUgRXJyb3JCb3VuZGFyeVN0b3JlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yLWhhbmRsaW5nJztcbmltcG9ydCB7IHVzZUNvbnRleHRQcm92aWRlciB9IGZyb20gJy4vdXNlLWNvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICcuL3VzZS1zdG9yZS5wdWJsaWMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IHVzZUVycm9yQm91bmRhcnkgPSAoKSA9PiB7XG4gIGNvbnN0IGVycm9yID0gdXNlU3RvcmU8RXJyb3JCb3VuZGFyeVN0b3JlPih7IGVycm9yOiB1bmRlZmluZWQgfSk7XG4gIHVzZUNvbnRleHRQcm92aWRlcihFUlJPUl9DT05URVhULCBlcnJvcik7XG5cbiAgcmV0dXJuIGVycm9yO1xufTtcbiJdfQ==","import { qTest } from '../shared/utils/qdev';\nimport { inlinedQrl } from '../shared/qrl/qrl';\nimport { tryGetInvokeContext } from '../use/use-core';\nimport { markVNodeDirty } from '../shared/vnode/vnode-dirty';\nimport { isServerPlatform } from '../shared/platform/platform';\nimport { componentQrl } from '../shared/component.public';\nimport { useTaskQrl } from '../use/use-task';\nimport { isServer } from '@qwik.dev/core/build';\nimport { SkipRender } from '../shared/jsx/utils.public';\nimport { _captures } from '../shared/qrl/qrl-class';\n/** @internal */\nexport const eachCmpTask = async ({ track }) => {\n    const props = _captures[0];\n    track(() => props.items);\n    const context = tryGetInvokeContext();\n    const host = context.$hostElement$;\n    const container = context.$container$;\n    markVNodeDirty(container, host, 256 /* ChoreBits.RECONCILE */);\n    const isSsr = qTest ? isServerPlatform() : isServer;\n    if (isSsr) {\n        await container.$renderPromise$;\n    }\n};\n/** @internal */\nexport const eachCmp = (props) => {\n    if (!__EXPERIMENTAL__.each) {\n        throw new Error('Each is experimental and must be enabled with `experimental: [\"each\"]` in the `qwikVite` plugin.');\n    }\n    useTaskQrl(/*#__PURE__*/ inlinedQrl(eachCmpTask, '_eaT', [props]));\n    return SkipRender;\n};\n/** @public @experimental */\nexport const Each = /*#__PURE__*/ componentQrl(\n/*#__PURE__*/ inlinedQrl(eachCmp, '_eaC'));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jb250cm9sLWZsb3cvZWFjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWVwRCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBVyxFQUFFLEVBQUU7SUFDdEQsTUFBTSxLQUFLLEdBQUcsU0FBVSxDQUFDLENBQUMsQ0FBbUIsQ0FBQztJQUM5QyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFHLENBQUM7SUFDdkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBWSxDQUFDO0lBQ3ZDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxnQ0FBc0IsQ0FBQztJQUNyRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNwRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsTUFBTSxTQUFTLENBQUMsZUFBZSxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBcUIsRUFBRSxFQUFFO0lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLGtHQUFrRyxDQUNuRyxDQUFDO0lBQ0osQ0FBQztJQUNELFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUYsNEJBQTRCO0FBQzVCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsWUFBWTtBQUM1QyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHVibGljUHJvcHMgfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyBxVGVzdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB0eXBlIHsgRGV2SlNYLCBKU1hPdXRwdXQgfSBmcm9tICcuLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IGlubGluZWRRcmwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybCc7XG5pbXBvcnQgeyB0cnlHZXRJbnZva2VDb250ZXh0IH0gZnJvbSAnLi4vdXNlL3VzZS1jb3JlJztcbmltcG9ydCB7IG1hcmtWTm9kZURpcnR5IH0gZnJvbSAnLi4vc2hhcmVkL3Zub2RlL3Zub2RlLWRpcnR5JztcbmltcG9ydCB7IENob3JlQml0cyB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS9lbnVtcy9jaG9yZS1iaXRzLmVudW0nO1xuaW1wb3J0IHsgaXNTZXJ2ZXJQbGF0Zm9ybSB9IGZyb20gJy4uL3NoYXJlZC9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBjb21wb25lbnRRcmwgfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyB0eXBlIFRhc2tDdHgsIHVzZVRhc2tRcmwgfSBmcm9tICcuLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBTa2lwUmVuZGVyIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC91dGlscy5wdWJsaWMnO1xuaW1wb3J0IHsgX2NhcHR1cmVzIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVhY2hQcm9wczxULCBJVEVNIGV4dGVuZHMgSlNYT3V0cHV0ID0gSlNYT3V0cHV0PiB7XG4gIGl0ZW1zOiByZWFkb25seSBUW107XG4gIGl0ZW0kOiBRUkw8KGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IElURU0+O1xuICBrZXkkOiBRUkw8KGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZz47XG59XG5cbmV4cG9ydCB0eXBlIEVhY2hDb21wb25lbnQgPSA8VCwgSVRFTSBleHRlbmRzIEpTWE91dHB1dCA9IEpTWE91dHB1dD4oXG4gIHByb3BzOiBQdWJsaWNQcm9wczxFYWNoUHJvcHM8VCwgSVRFTT4+LFxuICBrZXk6IHN0cmluZyB8IG51bGwsXG4gIGZsYWdzOiBudW1iZXIsXG4gIGRldj86IERldkpTWFxuKSA9PiBKU1hPdXRwdXQ7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBlYWNoQ21wVGFzayA9IGFzeW5jICh7IHRyYWNrIH06IFRhc2tDdHgpID0+IHtcbiAgY29uc3QgcHJvcHMgPSBfY2FwdHVyZXMhWzBdIGFzIEVhY2hQcm9wczxhbnk+O1xuICB0cmFjaygoKSA9PiBwcm9wcy5pdGVtcyk7XG4gIGNvbnN0IGNvbnRleHQgPSB0cnlHZXRJbnZva2VDb250ZXh0KCkhO1xuICBjb25zdCBob3N0ID0gY29udGV4dC4kaG9zdEVsZW1lbnQkITtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGV4dC4kY29udGFpbmVyJCE7XG4gIG1hcmtWTm9kZURpcnR5KGNvbnRhaW5lciwgaG9zdCwgQ2hvcmVCaXRzLlJFQ09OQ0lMRSk7XG4gIGNvbnN0IGlzU3NyID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiBpc1NlcnZlcjtcbiAgaWYgKGlzU3NyKSB7XG4gICAgYXdhaXQgY29udGFpbmVyLiRyZW5kZXJQcm9taXNlJDtcbiAgfVxufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGVhY2hDbXAgPSAocHJvcHM6IEVhY2hQcm9wczxhbnk+KSA9PiB7XG4gIGlmICghX19FWFBFUklNRU5UQUxfXy5lYWNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0VhY2ggaXMgZXhwZXJpbWVudGFsIGFuZCBtdXN0IGJlIGVuYWJsZWQgd2l0aCBgZXhwZXJpbWVudGFsOiBbXCJlYWNoXCJdYCBpbiB0aGUgYHF3aWtWaXRlYCBwbHVnaW4uJ1xuICAgICk7XG4gIH1cbiAgdXNlVGFza1FybCgvKiNfX1BVUkVfXyovIGlubGluZWRRcmwoZWFjaENtcFRhc2ssICdfZWFUJywgW3Byb3BzXSkpO1xuICByZXR1cm4gU2tpcFJlbmRlcjtcbn07XG5cbi8qKiBAcHVibGljIEBleHBlcmltZW50YWwgKi9cbmV4cG9ydCBjb25zdCBFYWNoID0gLyojX19QVVJFX18qLyBjb21wb25lbnRRcmw8RWFjaFByb3BzPGFueT4+KFxuICAvKiNfX1BVUkVfXyovIGlubGluZWRRcmwoZWFjaENtcCwgJ19lYUMnKVxuKSBhcyBFYWNoQ29tcG9uZW50O1xuIl19","import { isBrowser } from '@qwik.dev/core/build';\nimport { qTest } from '../shared/utils/qdev';\nimport { createSignal } from '../reactive-primitives/signal.public';\nimport { componentQrl } from '../shared/component.public';\nimport { _jsxSorted } from '../shared/jsx/jsx-internal';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { isServerPlatform } from '../shared/platform/platform';\nimport { inlinedQrl } from '../shared/qrl/qrl';\nimport { _captures } from '../shared/qrl/qrl-class';\nimport { noSerialize } from '../shared/serdes/verify';\nimport { canRevealRegistration } from '../shared/utils/reveal';\nimport { createInternalServerComponent } from '../ssr/internal-server-component';\nimport { createContextId, useContext, useContextProvider } from '../use/use-context';\nimport { useConstant } from '../use/use-signal';\nimport { useTaskQrl } from '../use/use-task';\nimport { createOutOfOrderRevealCoordinator, isOutOfOrderStreaming, } from './suspense-utils';\nconst RevealContext = /*#__PURE__*/ createContextId('qk-reveal');\nconst createRevealContext = (props) => {\n    return {\n        order: props.order ?? 'parallel',\n        collapsed: props.collapsed === true,\n        items: [],\n        version: createSignal(0),\n    };\n};\n/** @internal */\nexport const revealCanReveal = () => {\n    const registration = _captures[0];\n    // `version` is monotonic; the branch keeps the subscription read from being dropped by minifiers.\n    if (registration !== null && registration.reveal.version.value < 0) {\n        return false;\n    }\n    if (qTest ? isServerPlatform() : !isBrowser) {\n        const ooos = registration?.reveal.ooos;\n        if (ooos) {\n            return ooos.canReveal(registration);\n        }\n    }\n    return canRevealRegistration(registration);\n};\n/** @internal */\nexport const revealCleanupTask = ({ cleanup }) => {\n    const registration = _captures[0];\n    cleanup(() => {\n        // Keep the SSR registry intact so `reveal.items` serializes for resume.\n        if (qTest ? isServerPlatform() : !isBrowser) {\n            return;\n        }\n        const items = registration.reveal.items;\n        const index = items.indexOf(registration.item);\n        if (index !== -1) {\n            items.splice(index, 1);\n            registration.reveal.version.value++;\n        }\n    });\n};\nexport const useRevealBoundary = (boundary) => {\n    const reveal = useContext(RevealContext, null);\n    const registration = useConstant(() => {\n        if (reveal === null) {\n            return null;\n        }\n        const item = { boundary };\n        reveal.items.push(item);\n        return { reveal, item };\n    });\n    if (registration !== null) {\n        useTaskQrl(/*#__PURE__*/ inlinedQrl(revealCleanupTask, '_reT', [registration]), {\n            deferUpdates: false,\n        });\n    }\n    return registration;\n};\nconst getOutOfOrderCoordinator = (reveal) => {\n    const coordinator = reveal.ooos;\n    if (coordinator) {\n        return coordinator;\n    }\n    const nextCoordinator = createOutOfOrderRevealCoordinator(reveal.order, reveal.collapsed);\n    reveal.ooos = noSerialize(nextCoordinator);\n    return nextCoordinator;\n};\n/** @internal */\nexport const revealCmp = (props) => {\n    if (!__EXPERIMENTAL__.suspense) {\n        throw new Error('Reveal is experimental and must be enabled with `experimental: [\"suspense\"]` in the `qwikVite` plugin.');\n    }\n    const reveal = useConstant(createRevealContext, props);\n    useContextProvider(RevealContext, reveal);\n    const isServerEnv = qTest ? isServerPlatform() : !isBrowser;\n    if (__EXPERIMENTAL__.suspense && isServerEnv && isOutOfOrderStreaming()) {\n        const coordinator = getOutOfOrderCoordinator(reveal);\n        return /*#__PURE__*/ _jsxSorted(SSRRevealSlot, {\n            coordinator,\n        }, null, null, 0, 'u7_0');\n    }\n    return /*#__PURE__*/ _jsxSorted(Slot, null, null, null, 0, 'u7_0');\n};\n/** @public @experimental */\nexport const Reveal = /*#__PURE__*/ componentQrl(\n/*#__PURE__*/ inlinedQrl(revealCmp, '_reC'));\nconst SSRRevealSlot = __EXPERIMENTAL__.suspense\n    ? /*#__PURE__*/ createInternalServerComponent((ssr, jsx, _options, enqueue) => {\n        const coordinator = jsx.varProps.coordinator;\n        enqueue(() => {\n            const script = coordinator.script();\n            if (!script) {\n                return;\n            }\n            ssr.emitOutOfOrderExecutorIfNeeded();\n            ssr.emitInlineScript(script);\n        });\n        enqueue(/*#__PURE__*/ _jsxSorted(Slot, null, null, null, 0, 'u7_0'));\n    })\n    : null;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZWFsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NvbnRyb2wtZmxvdy9yZXZlYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQW9CLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLHFCQUFxQixHQUV0QixNQUFNLGtCQUFrQixDQUFDO0FBMkIxQixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMs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YnVpbGQnO1xuaW1wb3J0IHsgcVRlc3QgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICcuLi9yZWFjdGl2ZS1wcmltaXRpdmVzL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHsgY29tcG9uZW50UXJsIH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHsgX2pzeFNvcnRlZCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvanN4LWludGVybmFsJztcbmltcG9ydCB7IFNsb3QgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuaW1wb3J0IHsgaW5saW5lZFFybCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsJztcbmltcG9ydCB7IF9jYXB0dXJlcyB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IG5vU2VyaWFsaXplLCB0eXBlIE5vU2VyaWFsaXplIH0gZnJvbSAnLi4vc2hhcmVkL3NlcmRlcy92ZXJpZnknO1xuaW1wb3J0IHsgY2FuUmV2ZWFsUmVnaXN0cmF0aW9uLCB0eXBlIFJldmVhbE9yZGVyIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3JldmVhbCc7XG5pbXBvcnQgeyBjcmVhdGVJbnRlcm5hbFNlcnZlckNvbXBvbmVudCB9IGZyb20gJy4uL3Nzci9pbnRlcm5hbC1zZXJ2ZXItY29tcG9uZW50JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRJZCwgdXNlQ29udGV4dCwgdXNlQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnLi4vdXNlL3VzZS1jb250ZXh0JztcbmltcG9ydCB0eXBlIHsgQ3Vyc29yQm91bmRhcnkgfSBmcm9tICcuLi91c2UvdXNlLWN1cnNvci1ib3VuZGFyeSc7XG5pbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4uL3VzZS91c2Utc2lnbmFsJztcbmltcG9ydCB7IHVzZVRhc2tRcmwsIHR5cGUgVGFza0N0eCB9IGZyb20gJy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQge1xuICBjcmVhdGVPdXRPZk9yZGVyUmV2ZWFsQ29vcmRpbmF0b3IsXG4gIGlzT3V0T2ZPcmRlclN0cmVhbWluZyxcbiAgdHlwZSBPdXRPZk9yZGVyUmV2ZWFsQ29vcmRpbmF0b3IsXG59IGZyb20gJy4vc3VzcGVuc2UtdXRpbHMnO1xuXG5leHBvcnQgdHlwZSB7IFJldmVhbE9yZGVyIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3JldmVhbCc7XG5cbi8qKiBAcHVibGljIEBleHBlcmltZW50YWwgKi9cbmV4cG9ydCB0eXBlIFJldmVhbFByb3BzID0ge1xuICBvcmRlcj86IFJldmVhbE9yZGVyO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUmV2ZWFsSXRlbSA9IHtcbiAgYm91bmRhcnk6IEN1cnNvckJvdW5kYXJ5O1xufTtcblxuZXhwb3J0IHR5cGUgUmV2ZWFsQ29udGV4dCA9IHtcbiAgb3JkZXI6IFJldmVhbE9yZGVyO1xuICBjb2xsYXBzZWQ6IGJvb2xlYW47XG4gIGl0ZW1zOiBSZXZlYWxJdGVtW107XG4gIHZlcnNpb246IFNpZ25hbDxudW1iZXI+O1xuICBvb29zPzogTm9TZXJpYWxpemU8T3V0T2ZPcmRlclJldmVhbENvb3JkaW5hdG9yPFJldmVhbEl0ZW0+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIFJldmVhbFJlZ2lzdHJhdGlvbiA9IHtcbiAgcmV2ZWFsOiBSZXZlYWxDb250ZXh0O1xuICBpdGVtOiBSZXZlYWxJdGVtO1xufTtcblxuY29uc3QgUmV2ZWFsQ29udGV4dCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQ29udGV4dElkPFJldmVhbENvbnRleHQ+KCdxay1yZXZlYWwnKTtcblxuY29uc3QgY3JlYXRlUmV2ZWFsQ29udGV4dCA9IChwcm9wczogUmV2ZWFsUHJvcHMpOiBSZXZlYWxDb250ZXh0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBvcmRlcjogcHJvcHMub3JkZXIgPz8gJ3BhcmFsbGVsJyxcbiAgICBjb2xsYXBzZWQ6IHByb3BzLmNvbGxhcHNlZCA9PT0gdHJ1ZSxcbiAgICBpdGVtczogW10sXG4gICAgdmVyc2lvbjogY3JlYXRlU2lnbmFsKDApLFxuICB9O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHJldmVhbENhblJldmVhbCA9ICgpID0+IHtcbiAgY29uc3QgcmVnaXN0cmF0aW9uID0gX2NhcHR1cmVzIVswXSBhcyBSZXZlYWxSZWdpc3RyYXRpb24gfCBudWxsO1xuICAvLyBgdmVyc2lvbmAgaXMgbW9ub3RvbmljOyB0aGUgYnJhbmNoIGtlZXBzIHRoZSBzdWJzY3JpcHRpb24gcmVhZCBmcm9tIGJlaW5nIGRyb3BwZWQgYnkgbWluaWZpZXJzLlxuICBpZiAocmVnaXN0cmF0aW9uICE9PSBudWxsICYmIHJlZ2lzdHJhdGlvbi5yZXZlYWwudmVyc2lvbi52YWx1ZSA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHFUZXN0ID8gaXNTZXJ2ZXJQbGF0Zm9ybSgpIDogIWlzQnJvd3Nlcikge1xuICAgIGNvbnN0IG9vb3MgPSByZWdpc3RyYXRpb24/LnJldmVhbC5vb29zO1xuICAgIGlmIChvb29zKSB7XG4gICAgICByZXR1cm4gb29vcy5jYW5SZXZlYWwocmVnaXN0cmF0aW9uKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhblJldmVhbFJlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb24pO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHJldmVhbENsZWFudXBUYXNrID0gKHsgY2xlYW51cCB9OiBUYXNrQ3R4KSA9PiB7XG4gIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IF9jYXB0dXJlcyFbMF0gYXMgUmV2ZWFsUmVnaXN0cmF0aW9uO1xuICBjbGVhbnVwKCgpID0+IHtcbiAgICAvLyBLZWVwIHRoZSBTU1IgcmVnaXN0cnkgaW50YWN0IHNvIGByZXZlYWwuaXRlbXNgIHNlcmlhbGl6ZXMgZm9yIHJlc3VtZS5cbiAgICBpZiAocVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiAhaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zID0gcmVnaXN0cmF0aW9uLnJldmVhbC5pdGVtcztcbiAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmluZGV4T2YocmVnaXN0cmF0aW9uLml0ZW0pO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICByZWdpc3RyYXRpb24ucmV2ZWFsLnZlcnNpb24udmFsdWUrKztcbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVJldmVhbEJvdW5kYXJ5ID0gKGJvdW5kYXJ5OiBDdXJzb3JCb3VuZGFyeSk6IFJldmVhbFJlZ2lzdHJhdGlvbiB8IG51bGwgPT4ge1xuICBjb25zdCByZXZlYWwgPSB1c2VDb250ZXh0KFJldmVhbENvbnRleHQsIG51bGwpO1xuICBjb25zdCByZWdpc3RyYXRpb24gPSB1c2VDb25zdGFudCgoKSA9PiB7XG4gICAgaWYgKHJldmVhbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW06IFJldmVhbEl0ZW0gPSB7IGJvdW5kYXJ5IH07XG4gICAgcmV2ZWFsLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgcmV0dXJuIHsgcmV2ZWFsLCBpdGVtIH07XG4gIH0pO1xuXG4gIGlmIChyZWdpc3RyYXRpb24gIT09IG51bGwpIHtcbiAgICB1c2VUYXNrUXJsKC8qI19fUFVSRV9fKi8gaW5saW5lZFFybChyZXZlYWxDbGVhbnVwVGFzaywgJ19yZVQnLCBbcmVnaXN0cmF0aW9uXSksIHtcbiAgICAgIGRlZmVyVXBkYXRlczogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVnaXN0cmF0aW9uO1xufTtcblxuY29uc3QgZ2V0T3V0T2ZPcmRlckNvb3JkaW5hdG9yID0gKFxuICByZXZlYWw6IFJldmVhbENvbnRleHRcbik6IE91dE9mT3JkZXJSZXZlYWxDb29yZGluYXRvcjxSZXZlYWxJdGVtPiA9PiB7XG4gIGNvbnN0IGNvb3JkaW5hdG9yID0gcmV2ZWFsLm9vb3M7XG4gIGlmIChjb29yZGluYXRvcikge1xuICAgIHJldHVybiBjb29yZGluYXRvcjtcbiAgfVxuICBjb25zdCBuZXh0Q29vcmRpbmF0b3IgPSBjcmVhdGVPdXRPZk9yZGVyUmV2ZWFsQ29vcmRpbmF0b3I8UmV2ZWFsSXRlbT4oXG4gICAgcmV2ZWFsLm9yZGVyLFxuICAgIHJldmVhbC5jb2xsYXBzZWRcbiAgKTtcbiAgcmV2ZWFsLm9vb3MgPSBub1NlcmlhbGl6ZShuZXh0Q29vcmRpbmF0b3IpO1xuICByZXR1cm4gbmV4dENvb3JkaW5hdG9yO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHJldmVhbENtcCA9IChwcm9wczogUmV2ZWFsUHJvcHMpID0+IHtcbiAgaWYgKCFfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1JldmVhbCBpcyBleHBlcmltZW50YWwgYW5kIG11c3QgYmUgZW5hYmxlZCB3aXRoIGBleHBlcmltZW50YWw6IFtcInN1c3BlbnNlXCJdYCBpbiB0aGUgYHF3aWtWaXRlYCBwbHVnaW4uJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCByZXZlYWwgPSB1c2VDb25zdGFudChjcmVhdGVSZXZlYWxDb250ZXh0LCBwcm9wcyk7XG4gIHVzZUNvbnRleHRQcm92aWRlcihSZXZlYWxDb250ZXh0LCByZXZlYWwpO1xuXG4gIGNvbnN0IGlzU2VydmVyRW52ID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiAhaXNCcm93c2VyO1xuICBpZiAoX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZSAmJiBpc1NlcnZlckVudiAmJiBpc091dE9mT3JkZXJTdHJlYW1pbmcoKSkge1xuICAgIGNvbnN0IGNvb3JkaW5hdG9yID0gZ2V0T3V0T2ZPcmRlckNvb3JkaW5hdG9yKHJldmVhbCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX2pzeFNvcnRlZChcbiAgICAgIFNTUlJldmVhbFNsb3QsXG4gICAgICB7XG4gICAgICAgIGNvb3JkaW5hdG9yLFxuICAgICAgfSxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgMCxcbiAgICAgICd1N18wJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qLyBfanN4U29ydGVkKFNsb3QsIG51bGwsIG51bGwsIG51bGwsIDAsICd1N18wJyk7XG59O1xuXG4vKiogQHB1YmxpYyBAZXhwZXJpbWVudGFsICovXG5leHBvcnQgY29uc3QgUmV2ZWFsID0gLyojX19QVVJFX18qLyBjb21wb25lbnRRcmw8UmV2ZWFsUHJvcHM+KFxuICAvKiNfX1BVUkVfXyovIGlubGluZWRRcmwocmV2ZWFsQ21wLCAnX3JlQycpXG4pIGFzIHR5cGVvZiByZXZlYWxDbXA7XG5cbnR5cGUgU1NSUmV2ZWFsU2xvdFByb3BzID0ge1xuICBjb29yZGluYXRvcjogT3V0T2ZPcmRlclJldmVhbENvb3JkaW5hdG9yO1xufTtcblxuY29uc3QgU1NSUmV2ZWFsU2xvdCA9IF9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2VcbiAgPyAvKiNfX1BVUkVfXyovIGNyZWF0ZUludGVybmFsU2VydmVyQ29tcG9uZW50PFNTUlJldmVhbFNsb3RQcm9wcz4oXG4gICAgICAoc3NyLCBqc3gsIF9vcHRpb25zLCBlbnF1ZXVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdG9yID0ganN4LnZhclByb3BzLmNvb3JkaW5hdG9yIGFzIE91dE9mT3JkZXJSZXZlYWxDb29yZGluYXRvcjtcbiAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gY29vcmRpbmF0b3Iuc2NyaXB0KCk7XG4gICAgICAgICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3NyLmVtaXRPdXRPZk9yZGVyRXhlY3V0b3JJZk5lZWRlZCgpO1xuICAgICAgICAgIHNzci5lbWl0SW5saW5lU2NyaXB0KHNjcmlwdCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbnF1ZXVlKC8qI19fUFVSRV9fKi8gX2pzeFNvcnRlZChTbG90LCBudWxsLCBudWxsLCBudWxsLCAwLCAndTdfMCcpKTtcbiAgICAgIH1cbiAgICApXG4gIDogbnVsbCE7XG4iXX0=","import { isBrowser } from '@qwik.dev/core/build';\nimport { qTest } from '../shared/utils/qdev';\nimport { _wrapProp } from '../reactive-primitives/internal-api';\nimport { componentQrl } from '../shared/component.public';\nimport { _jsxSorted } from '../shared/jsx/jsx-internal';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { isServerPlatform } from '../shared/platform/platform';\nimport { _fnSignal } from '../shared/qrl/inlined-fn';\nimport { inlinedQrl } from '../shared/qrl/qrl';\nimport { _captures } from '../shared/qrl/qrl-class';\nimport { QCursorBoundary, QDefaultSlot, QSuspenseResolved, QSuspenseResultParent, } from '../shared/utils/markers';\nimport { resolveSlotName } from '../shared/utils/prop';\nimport { createInternalServerComponent } from '../ssr/internal-server-component';\nimport { useComputedQrl } from '../use/use-computed';\nimport { useCursorBoundary } from '../use/use-cursor-boundary';\nimport { useSignal } from '../use/use-signal';\nimport { useTaskQrl } from '../use/use-task';\nimport { revealCanReveal, useRevealBoundary } from './reveal';\nimport { isOutOfOrderStreaming, nextOutOfOrderSuspenseId, SUSPENSE_QRL_SYMBOL, } from './suspense-utils';\nconst _hf0 = (p0, p1, p2, p3) => ({\n    display: p1.value === 'fallback' &&\n        p0.fallback != null &&\n        p0.fallback !== false &&\n        (p2 === null || p2.value || !p3.reveal.collapsed)\n        ? 'contents'\n        : 'none',\n});\nconst _hf0_str = '{display:p1.value===\"fallback\"&&p0.fallback!=null&&p0.fallback!==false&&(p2===null||p2.value||!p3.reveal.collapsed)?\"contents\":\"none\"}';\nconst _hf1 = (p0, p1, p2) => ({\n    display: (p1.value === 'content' || p0.showStale) && (p2 === null || p2.value) ? 'contents' : 'none',\n});\nconst _hf1_str = '{display:(p1.value===\"content\"||p0.showStale)&&(p2===null||p2.value)?\"contents\":\"none\"}';\n/** @internal */\nexport const suspenseTask = ({ track, cleanup }) => {\n    const cursorBoundary = _captures[0], props = _captures[1], state = _captures[2], revealRegistration = _captures[3];\n    const pendingCount = track(cursorBoundary.pending);\n    const isBrowserEnv = qTest ? !isServerPlatform() : isBrowser;\n    if (revealRegistration !== null && isBrowserEnv) {\n        revealRegistration.reveal.version.value++;\n    }\n    if (!isBrowserEnv || pendingCount === 0) {\n        state.value = 'content';\n        return;\n    }\n    const delayTimer = setTimeout(() => {\n        if (cursorBoundary.pending.value > 0) {\n            state.value = 'fallback';\n        }\n    }, props.delay ?? 0);\n    cleanup(() => clearTimeout(delayTimer));\n};\n/** @internal */\nexport const suspenseCmp = (props) => {\n    if (!__EXPERIMENTAL__.suspense) {\n        throw new Error('Suspense is experimental and must be enabled with `experimental: [\"suspense\"]` in the `qwikVite` plugin.');\n    }\n    const state = useSignal('content');\n    const cursorBoundary = useCursorBoundary();\n    const revealRegistration = useRevealBoundary(cursorBoundary);\n    const canReveal = useComputedQrl(\n    /*#__PURE__*/ inlinedQrl(revealCanReveal, '_reR', [revealRegistration]));\n    useTaskQrl(\n    /*#__PURE__*/ inlinedQrl(suspenseTask, '_suT', [\n        cursorBoundary,\n        props,\n        state,\n        revealRegistration,\n    ]));\n    const isServerEnv = qTest ? isServerPlatform() : !isBrowser;\n    const isServerOutOfOrder = isServerEnv && isOutOfOrderStreaming();\n    const outOfOrderBoundaryId = isServerOutOfOrder ? nextOutOfOrderSuspenseId() : 0;\n    const outOfOrderRevealBoundary = isServerOutOfOrder\n        ? (revealRegistration?.reveal.ooos?.register(revealRegistration) ?? null)\n        : null;\n    const showOutOfOrderFallback = isServerOutOfOrder && shouldRenderFallback(props.fallback, outOfOrderRevealBoundary);\n    const outOfOrderBoundaryState = showOutOfOrderFallback && isPositiveDelay(props.delay)\n        ? { contentResolved: false, delayTimer: null }\n        : null;\n    const outOfOrderFallbackStyle = isServerOutOfOrder\n        ? /*#__PURE__*/ _fnSignal(_hf0, [props, state, canReveal, revealRegistration], _hf0_str)\n        : null;\n    const contentStyle = /*#__PURE__*/ _fnSignal(_hf1, [props, state, canReveal], _hf1_str);\n    const fallbackHost = (isServerOutOfOrder\n        ? /*#__PURE__*/ _jsxSorted(SSRFallback, {\n            boundary: outOfOrderBoundaryState,\n            delay: props.delay,\n            fallbackStyle: outOfOrderFallbackStyle,\n            showFallback: showOutOfOrderFallback,\n            state,\n        }, null, _wrapProp(props, 'fallback'), 1, null)\n        : /*#__PURE__*/ _jsxSorted('div', {\n            style: _fnSignal(_hf0, [props, state, canReveal, revealRegistration], _hf0_str),\n        }, null, _wrapProp(props, 'fallback'), 1, null));\n    return [\n        fallbackHost,\n        /*#__PURE__*/ _jsxSorted('div', null, isServerOutOfOrder\n            ? {\n                [QSuspenseResultParent]: String(outOfOrderBoundaryId),\n                style: contentStyle,\n            }\n            : {\n                style: contentStyle,\n            }, \n        /*#__PURE__*/ _jsxSorted(isServerOutOfOrder ? SSRDeferredSlot : Slot, isServerOutOfOrder\n            ? {\n                [QCursorBoundary]: cursorBoundary,\n                boundary: outOfOrderBoundaryState,\n                boundaryId: outOfOrderBoundaryId,\n                contentStyle,\n                reveal: outOfOrderRevealBoundary,\n            }\n            : {\n                [QCursorBoundary]: cursorBoundary,\n            }, null, null, 3, 'u6_0'), 1, null),\n    ];\n};\n/** @public @experimental */\nexport const Suspense = /*#__PURE__*/ componentQrl(\n/*#__PURE__*/ inlinedQrl(suspenseCmp, SUSPENSE_QRL_SYMBOL));\nconst SSRFallback = __EXPERIMENTAL__.suspense\n    ? /*#__PURE__*/ createInternalServerComponent((ssr, jsx, _options, enqueue) => {\n        const boundaryState = jsx.varProps.boundary;\n        const delay = jsx.varProps.delay;\n        const fallbackStyle = jsx.varProps.fallbackStyle;\n        const showFallback = jsx.varProps.showFallback === true;\n        const state = jsx.varProps.state;\n        if (showFallback && !isPositiveDelay(delay)) {\n            state.value = 'fallback';\n        }\n        else if (boundaryState && showFallback && isPositiveDelay(delay)) {\n            enqueue(() => scheduleOutOfOrderFallbackDelay(ssr, boundaryState, state, delay));\n        }\n        enqueue(\n        /*#__PURE__*/ _jsxSorted('div', {\n            style: fallbackStyle,\n        }, null, jsx.children, 1, null));\n    })\n    : null;\nconst SSRDeferredSlot = __EXPERIMENTAL__.suspense\n    ? /*#__PURE__*/ createInternalServerComponent(async (ssr, jsx, options) => {\n        const boundaryId = jsx.varProps.boundaryId ?? ssr.nextOutOfOrderId();\n        const contentSegment = `${boundaryId}`;\n        const boundaryState = jsx.varProps.boundary;\n        const contentStyle = jsx.varProps.contentStyle;\n        const revealBoundary = jsx.varProps.reveal;\n        const content = ssr.segment(contentSegment, createClaimedDeferredSlot(ssr, jsx, options), options);\n        writeOutOfOrderPlaceholder(ssr, boundaryId);\n        ssr.emitOutOfOrderExecutorIfNeeded();\n        ssr.queueOutOfOrderSegment(content.then((rendered) => emitRenderedOutOfOrderSegment(ssr, boundaryId, contentSegment, rendered, contentStyle, revealBoundary, boundaryState)));\n    })\n    : null;\nfunction createClaimedDeferredSlot(ssr, jsx, options) {\n    const componentFrame = options.parentComponentFrame;\n    if (!componentFrame) {\n        return /*#__PURE__*/ _jsxSorted(Slot, jsx.varProps, jsx.constProps, jsx.children, jsx.flags, jsx.key);\n    }\n    const slotName = resolveSlotName(componentFrame.componentNode, jsx, ssr);\n    const slotDefaultChildren = (jsx.children || null);\n    const slotChildren = componentFrame.claimChildrenForSlot(slotName) || slotDefaultChildren;\n    if (slotDefaultChildren && slotChildren !== slotDefaultChildren) {\n        ssr.addUnclaimedProjection(componentFrame, QDefaultSlot, slotDefaultChildren);\n    }\n    return /*#__PURE__*/ _jsxSorted(Slot, jsx.varProps, jsx.constProps, slotChildren, jsx.flags, jsx.key);\n}\nasync function emitRenderedOutOfOrderSegment(ssr, boundaryId, segmentId, rendered, contentStyle, revealBoundary, boundaryState) {\n    markOutOfOrderContentResolved(boundaryState);\n    revealBoundary?.resolve();\n    await ssr.$runQueuedRender$(async () => {\n        ssr.addRoot(contentStyle);\n        const result = await rendered.container.$finalizeOutOfOrderSegment$(segmentId, rendered);\n        writeOutOfOrderResolvedTemplate(ssr, boundaryId, result.html, revealBoundary);\n        ssr.emitOutOfOrderSegmentScripts(result.scripts);\n        ssr.emitInlineScript(`qO(${boundaryId})`);\n        // qO() is the browser-visible handoff for this segment, so flush it immediately.\n        await ssr.streamHandler.flush();\n    });\n}\nfunction markOutOfOrderContentResolved(boundaryState) {\n    if (!boundaryState) {\n        return;\n    }\n    boundaryState.contentResolved = true;\n    if (boundaryState.delayTimer) {\n        clearTimeout(boundaryState.delayTimer);\n        boundaryState.delayTimer = null;\n    }\n}\nfunction scheduleOutOfOrderFallbackDelay(ssr, boundaryState, state, delay) {\n    boundaryState.delayTimer = setTimeout(() => {\n        boundaryState.delayTimer = null;\n        void ssr.$runQueuedRender$(async () => {\n            if (boundaryState.contentResolved) {\n                return;\n            }\n            state.value = 'fallback';\n            ssr.emitBackpatchDataAndExecutorIfNeeded();\n            await ssr.streamHandler.flush();\n        });\n    }, delay);\n}\nfunction isPositiveDelay(delay) {\n    return typeof delay === 'number' && Number.isFinite(delay) && delay > 0;\n}\nfunction shouldRenderFallback(fallback, revealBoundary) {\n    return (fallback != null &&\n        fallback !== false &&\n        (revealBoundary === null || revealBoundary.showFallback));\n}\nfunction writeOutOfOrderPlaceholder(ssr, boundaryId) {\n    ssr.write(`<template ${QSuspenseResolved}=\"${boundaryId}\"></template>`);\n}\nfunction writeOutOfOrderResolvedTemplate(ssr, boundaryId, html, revealBoundary) {\n    ssr.write(`<template ${QSuspenseResolved}=\"${boundaryId}\"${revealBoundary?.attrs ?? ''}>`);\n    ssr.write(html);\n    ssr.write('</template>');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VzcGVuc2UuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvY29udHJvbC1mbG93L3N1c3BlbnNlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixpQkFBaUIsRUFDakIscUJBQXFCLEdBQ3RCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0s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SUFFL0MsT0FBTyxDQUNMLFFBQVEsSUFBSSxJQUFJO1FBQ2hCLFFBQVEsS0FBSyxLQUFLO1FBQ2xCLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQ3pELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxHQUFpQixFQUFFLFVBQWtCO0lBQ3ZFLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxpQkFBaUIsS0FBSyxVQUFVLGVBQWUsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUN0QyxHQUFpQixFQUNqQixVQUFrQixFQUNsQixJQUFZLEVBQ1osY0FBK0M7SUFFL0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLGlCQUFpQixLQUFLLFVBQVUsSUFBSSxjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBxVGVzdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IF93cmFwUHJvcCB9IGZyb20gJy4uL3JlYWN0aXZlLXByaW1pdGl2ZXMvaW50ZXJuYWwtYXBpJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmltcG9ydCB7IGNvbXBvbmVudFFybCB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IF9qc3hTb3J0ZWQgfSBmcm9tICcuLi9zaGFyZWQvanN4L2pzeC1pbnRlcm5hbCc7XG5pbXBvcnQgeyBTbG90IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC9zbG90LnB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IEpTWE5vZGVJbnRlcm5hbCwgSlNYT3V0cHV0IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWENoaWxkcmVuIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuaW1wb3J0IHsgX2ZuU2lnbmFsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbmxpbmVkLWZuJztcbmltcG9ydCB7IGlubGluZWRRcmwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybCc7XG5pbXBvcnQgeyBfY2FwdHVyZXMgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQge1xuICBRQ3Vyc29yQm91bmRhcnksXG4gIFFEZWZhdWx0U2xvdCxcbiAgUVN1c3BlbnNlUmVzb2x2ZWQsXG4gIFFTdXNwZW5zZVJlc3VsdFBhcmVudCxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNsb3ROYW1lIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Byb3AnO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zc3IvaW50ZXJuYWwtc2VydmVyLWNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7IFNTUkNvbnRhaW5lciwgU1NST3V0T2ZPcmRlclNlZ21lbnQsIFNTUlJlbmRlckpTWE9wdGlvbnMgfSBmcm9tICcuLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7IHVzZUNvbXB1dGVkUXJsIH0gZnJvbSAnLi4vdXNlL3VzZS1jb21wdXRlZCc7XG5pbXBvcnQgeyB1c2VDdXJzb3JCb3VuZGFyeSwgdHlwZSBDdXJzb3JCb3VuZGFyeSB9IGZyb20gJy4uL3VzZS91c2UtY3Vyc29yLWJvdW5kYXJ5JztcbmltcG9ydCB7IHVzZVNpZ25hbCB9IGZyb20gJy4uL3VzZS91c2Utc2lnbmFsJztcbmltcG9ydCB7IHVzZVRhc2tRcmwsIHR5cGUgVGFza0N0eCB9IGZyb20gJy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQgeyByZXZlYWxDYW5SZXZlYWwsIHVzZVJldmVhbEJvdW5kYXJ5LCB0eXBlIFJldmVhbFJlZ2lzdHJhdGlvbiB9IGZyb20gJy4vcmV2ZWFsJztcbmltcG9ydCB7XG4gIGlzT3V0T2ZPcmRlclN0cmVhbWluZyxcbiAgbmV4dE91dE9mT3JkZXJTdXNwZW5zZUlkLFxuICBTVVNQRU5TRV9RUkxfU1lNQk9MLFxuICB0eXBlIE91dE9mT3JkZXJSZXZlYWxCb3VuZGFyeSxcbn0gZnJvbSAnLi9zdXNwZW5zZS11dGlscyc7XG5cbnR5cGUgU3VzcGVuc2VTdGF0ZSA9ICdjb250ZW50JyB8ICdmYWxsYmFjayc7XG5cbnR5cGUgU1NST3V0T2ZPcmRlckJvdW5kYXJ5U3RhdGUgPSB7XG4gIGNvbnRlbnRSZXNvbHZlZDogYm9vbGVhbjtcbiAgZGVsYXlUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsO1xufTtcblxuLyoqIEBwdWJsaWMgQGV4cGVyaW1lbnRhbCAqL1xuZXhwb3J0IHR5cGUgU3VzcGVuc2VQcm9wcyA9IHtcbiAgZmFsbGJhY2s/OiBKU1hPdXRwdXQ7XG4gIHNob3dTdGFsZT86IGJvb2xlYW47XG4gIGRlbGF5PzogbnVtYmVyO1xufTtcblxuY29uc3QgX2hmMCA9IChcbiAgcDA6IFN1c3BlbnNlUHJvcHMsXG4gIHAxOiBTaWduYWw8U3VzcGVuc2VTdGF0ZT4sXG4gIHAyOiBTaWduYWw8Ym9vbGVhbj4gfCBudWxsLFxuICBwMzogUmV2ZWFsUmVnaXN0cmF0aW9uIHwgbnVsbFxuKSA9PiAoe1xuICBkaXNwbGF5OlxuICAgIHAxLnZhbHVlID09PSAnZmFsbGJhY2snICYmXG4gICAgcDAuZmFsbGJhY2sgIT0gbnVsbCAmJlxuICAgIHAwLmZhbGxiYWNrICE9PSBmYWxzZSAmJlxuICAgIChwMiA9PT0gbnVsbCB8fCBwMi52YWx1ZSB8fCAhcDMhLnJldmVhbC5jb2xsYXBzZWQpXG4gICAgICA/ICdjb250ZW50cydcbiAgICAgIDogJ25vbmUnLFxufSk7XG5jb25zdCBfaGYwX3N0ciA9XG4gICd7ZGlzcGxheTpwMS52YWx1ZT09PVwiZmFsbGJhY2tcIiYmcDAuZmFsbGJhY2shPW51bGwmJnAwLmZhbGxiYWNrIT09ZmFsc2UmJihwMj09PW51bGx8fHAyLnZhbHVlfHwhcDMucmV2ZWFsLmNvbGxhcHNlZCk/XCJjb250ZW50c1wiOlwibm9uZVwifSc7XG5jb25zdCBfaGYxID0gKHAwOiBTdXNwZW5zZVByb3BzLCBwMTogU2lnbmFsPFN1c3BlbnNlU3RhdGU+LCBwMjogU2lnbmFsPGJvb2xlYW4+IHwgbnVsbCkgPT4gKHtcbiAgZGlzcGxheTpcbiAgICAocDEudmFsdWUgPT09ICdjb250ZW50JyB8fCBwMC5zaG93U3RhbGUpICYmIChwMiA9PT0gbnVsbCB8fCBwMi52YWx1ZSkgPyAnY29udGVudHMnIDogJ25vbmUnLFxufSk7XG5jb25zdCBfaGYxX3N0ciA9XG4gICd7ZGlzcGxheToocDEudmFsdWU9PT1cImNvbnRlbnRcInx8cDAuc2hvd1N0YWxlKSYmKHAyPT09bnVsbHx8cDIudmFsdWUpP1wiY29udGVudHNcIjpcIm5vbmVcIn0nO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3Qgc3VzcGVuc2VUYXNrID0gKHsgdHJhY2ssIGNsZWFudXAgfTogVGFza0N0eCkgPT4ge1xuICBjb25zdCBjdXJzb3JCb3VuZGFyeSA9IF9jYXB0dXJlcyFbMF0gYXMgQ3Vyc29yQm91bmRhcnksXG4gICAgcHJvcHMgPSBfY2FwdHVyZXMhWzFdIGFzIHsgZGVsYXk/OiBudW1iZXIgfSxcbiAgICBzdGF0ZSA9IF9jYXB0dXJlcyFbMl0gYXMgU2lnbmFsPFN1c3BlbnNlU3RhdGU+LFxuICAgIHJldmVhbFJlZ2lzdHJhdGlvbiA9IF9jYXB0dXJlcyFbM10gYXMgUmV2ZWFsUmVnaXN0cmF0aW9uIHwgbnVsbDtcbiAgY29uc3QgcGVuZGluZ0NvdW50ID0gdHJhY2soY3Vyc29yQm91bmRhcnkucGVuZGluZyk7XG4gIGNvbnN0IGlzQnJvd3NlckVudiA9IHFUZXN0ID8gIWlzU2VydmVyUGxhdGZvcm0oKSA6IGlzQnJvd3NlcjtcbiAgaWYgKHJldmVhbFJlZ2lzdHJhdGlvbiAhPT0gbnVsbCAmJiBpc0Jyb3dzZXJFbnYpIHtcbiAgICByZXZlYWxSZWdpc3RyYXRpb24ucmV2ZWFsLnZlcnNpb24udmFsdWUrKztcbiAgfVxuICBpZiAoIWlzQnJvd3NlckVudiB8fCBwZW5kaW5nQ291bnQgPT09IDApIHtcbiAgICBzdGF0ZS52YWx1ZSA9ICdjb250ZW50JztcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZGVsYXlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmIChjdXJzb3JCb3VuZGFyeS5wZW5kaW5nLnZhbHVlID4gMCkge1xuICAgICAgc3RhdGUudmFsdWUgPSAnZmFsbGJhY2snO1xuICAgIH1cbiAgfSwgcHJvcHMuZGVsYXkgPz8gMCk7XG4gIGNsZWFudXAoKCkgPT4gY2xlYXJUaW1lb3V0KGRlbGF5VGltZXIpKTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBzdXNwZW5zZUNtcCA9IChwcm9wczogU3VzcGVuc2VQcm9wcyk6IEpTWE5vZGVJbnRlcm5hbDxzdHJpbmc+W10gPT4ge1xuICBpZiAoIV9fRVhQRVJJTUVOVEFMX18uc3VzcGVuc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnU3VzcGVuc2UgaXMgZXhwZXJpbWVudGFsIGFuZCBtdXN0IGJlIGVuYWJsZWQgd2l0aCBgZXhwZXJpbWVudGFsOiBbXCJzdXNwZW5zZVwiXWAgaW4gdGhlIGBxd2lrVml0ZWAgcGx1Z2luLidcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSB1c2VTaWduYWw8U3VzcGVuc2VTdGF0ZT4oJ2NvbnRlbnQnKTtcbiAgY29uc3QgY3Vyc29yQm91bmRhcnkgPSB1c2VDdXJzb3JCb3VuZGFyeSgpO1xuICBjb25zdCByZXZlYWxSZWdpc3RyYXRpb24gPSB1c2VSZXZlYWxCb3VuZGFyeShjdXJzb3JCb3VuZGFyeSk7XG4gIGNvbnN0IGNhblJldmVhbCA9IHVzZUNvbXB1dGVkUXJsKFxuICAgIC8qI19fUFVSRV9fKi8gaW5saW5lZFFybChyZXZlYWxDYW5SZXZlYWwsICdfcmVSJywgW3JldmVhbFJlZ2lzdHJhdGlvbl0pXG4gICk7XG5cbiAgdXNlVGFza1FybChcbiAgICAvKiNfX1BVUkVfXyovIGlubGluZWRRcmwoc3VzcGVuc2VUYXNrLCAnX3N1VCcsIFtcbiAgICAgIGN1cnNvckJvdW5kYXJ5LFxuICAgICAgcHJvcHMsXG4gICAgICBzdGF0ZSxcbiAgICAgIHJldmVhbFJlZ2lzdHJhdGlvbixcbiAgICBdKVxuICApO1xuXG4gIGNvbnN0IGlzU2VydmVyRW52ID0gcVRlc3QgPyBpc1NlcnZlclBsYXRmb3JtKCkgOiAhaXNCcm93c2VyO1xuICBjb25zdCBpc1NlcnZlck91dE9mT3JkZXIgPSBpc1NlcnZlckVudiAmJiBpc091dE9mT3JkZXJTdHJlYW1pbmcoKTtcbiAgY29uc3Qgb3V0T2ZPcmRlckJvdW5kYXJ5SWQgPSBpc1NlcnZlck91dE9mT3JkZXIgPyBuZXh0T3V0T2ZPcmRlclN1c3BlbnNlSWQoKSA6IDA7XG4gIGNvbnN0IG91dE9mT3JkZXJSZXZlYWxCb3VuZGFyeSA9IGlzU2VydmVyT3V0T2ZPcmRlclxuICAgID8gKHJldmVhbFJlZ2lzdHJhdGlvbj8ucmV2ZWFsLm9vb3M/LnJlZ2lzdGVyKHJldmVhbFJlZ2lzdHJhdGlvbikgPz8gbnVsbClcbiAgICA6IG51bGw7XG4gIGNvbnN0IHNob3dPdXRPZk9yZGVyRmFsbGJhY2sgPVxuICAgIGlzU2VydmVyT3V0T2ZPcmRlciAmJiBzaG91bGRSZW5kZXJGYWxsYmFjayhwcm9wcy5mYWxsYmFjaywgb3V0T2ZPcmRlclJldmVhbEJvdW5kYXJ5KTtcbiAgY29uc3Qgb3V0T2ZPcmRlckJvdW5kYXJ5U3RhdGUgPVxuICAgIHNob3dPdXRPZk9yZGVyRmFsbGJhY2sgJiYgaXNQb3NpdGl2ZURlbGF5KHByb3BzLmRlbGF5KVxuICAgICAgPyB7IGNvbnRlbnRSZXNvbHZlZDogZmFsc2UsIGRlbGF5VGltZXI6IG51bGwgfVxuICAgICAgOiBudWxsO1xuICBjb25zdCBvdXRPZk9yZGVyRmFsbGJhY2tTdHlsZSA9IGlzU2VydmVyT3V0T2ZPcmRlclxuICAgID8gLyojX19QVVJFX18qLyBfZm5TaWduYWwoX2hmMCwgW3Byb3BzLCBzdGF0ZSwgY2FuUmV2ZWFsLCByZXZlYWxSZWdpc3RyYXRpb25dLCBfaGYwX3N0cilcbiAgICA6IG51bGw7XG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IC8qI19fUFVSRV9fKi8gX2ZuU2lnbmFsKF9oZjEsIFtwcm9wcywgc3RhdGUsIGNhblJldmVhbF0sIF9oZjFfc3RyKTtcblxuICBjb25zdCBmYWxsYmFja0hvc3QgPSAoXG4gICAgaXNTZXJ2ZXJPdXRPZk9yZGVyXG4gICAgICA/IC8qI19fUFVSRV9fKi8gX2pzeFNvcnRlZChcbiAgICAgICAgICBTU1JGYWxsYmFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib3VuZGFyeTogb3V0T2ZPcmRlckJvdW5kYXJ5U3RhdGUsXG4gICAgICAgICAgICBkZWxheTogcHJvcHMuZGVsYXksXG4gICAgICAgICAgICBmYWxsYmFja1N0eWxlOiBvdXRPZk9yZGVyRmFsbGJhY2tTdHlsZSEsXG4gICAgICAgICAgICBzaG93RmFsbGJhY2s6IHNob3dPdXRPZk9yZGVyRmFsbGJhY2ssXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgX3dyYXBQcm9wKHByb3BzLCAnZmFsbGJhY2snKSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgOiAvKiNfX1BVUkVfXyovIF9qc3hTb3J0ZWQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3R5bGU6IF9mblNpZ25hbChfaGYwLCBbcHJvcHMsIHN0YXRlLCBjYW5SZXZlYWwsIHJldmVhbFJlZ2lzdHJhdGlvbl0sIF9oZjBfc3RyKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgX3dyYXBQcm9wKHByb3BzLCAnZmFsbGJhY2snKSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICApIGFzIEpTWE5vZGVJbnRlcm5hbDxzdHJpbmc+O1xuXG4gIHJldHVybiBbXG4gICAgZmFsbGJhY2tIb3N0LFxuICAgIC8qI19fUFVSRV9fKi8gX2pzeFNvcnRlZChcbiAgICAgICdkaXYnLFxuICAgICAgbnVsbCxcbiAgICAgIGlzU2VydmVyT3V0T2ZPcmRlclxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFtRU3VzcGVuc2VSZXN1bHRQYXJlbnRdOiBTdHJpbmcob3V0T2ZPcmRlckJvdW5kYXJ5SWQpLFxuICAgICAgICAgICAgc3R5bGU6IGNvbnRlbnRTdHlsZSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgc3R5bGU6IGNvbnRlbnRTdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgLyojX19QVVJFX18qLyBfanN4U29ydGVkKFxuICAgICAgICBpc1NlcnZlck91dE9mT3JkZXIgPyBTU1JEZWZlcnJlZFNsb3QgOiBTbG90LFxuICAgICAgICBpc1NlcnZlck91dE9mT3JkZXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgW1FDdXJzb3JCb3VuZGFyeV06IGN1cnNvckJvdW5kYXJ5LFxuICAgICAgICAgICAgICBib3VuZGFyeTogb3V0T2ZPcmRlckJvdW5kYXJ5U3RhdGUsXG4gICAgICAgICAgICAgIGJvdW5kYXJ5SWQ6IG91dE9mT3JkZXJCb3VuZGFyeUlkLFxuICAgICAgICAgICAgICBjb250ZW50U3R5bGUsXG4gICAgICAgICAgICAgIHJldmVhbDogb3V0T2ZPcmRlclJldmVhbEJvdW5kYXJ5LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBbUUN1cnNvckJvdW5kYXJ5XTogY3Vyc29yQm91bmRhcnksXG4gICAgICAgICAgICB9LFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICAzLFxuICAgICAgICAndTZfMCdcbiAgICAgICksXG4gICAgICAxLFxuICAgICAgbnVsbFxuICAgICksXG4gIF07XG59O1xuXG4vKiogQHB1YmxpYyBAZXhwZXJpbWVudGFsICovXG5leHBvcnQgY29uc3QgU3VzcGVuc2UgPSAvKiNfX1BVUkVfXyovIGNvbXBvbmVudFFybDxTdXNwZW5zZVByb3BzPihcbiAgLyojX19QVVJFX18qLyBpbmxpbmVkUXJsKHN1c3BlbnNlQ21wLCBTVVNQRU5TRV9RUkxfU1lNQk9MKVxuKSBhcyB0eXBlb2Ygc3VzcGVuc2VDbXA7XG5cbnR5cGUgU1NSRmFsbGJhY2tQcm9wcyA9IHtcbiAgYm91bmRhcnk6IFNTUk91dE9mT3JkZXJCb3VuZGFyeVN0YXRlIHwgbnVsbDtcbiAgZGVsYXk/OiBudW1iZXI7XG4gIGZhbGxiYWNrU3R5bGU6IFNpZ25hbDx7IGRpc3BsYXk6IHN0cmluZyB9PjtcbiAgc2hvd0ZhbGxiYWNrOiBib29sZWFuO1xuICBzdGF0ZTogU2lnbmFsPFN1c3BlbnNlU3RhdGU+O1xufTtcblxuY29uc3QgU1NSRmFsbGJhY2sgPSBfX0VYUEVSSU1FTlRBTF9fLnN1c3BlbnNlXG4gID8gLyojX19QVVJFX18qLyBjcmVhdGVJbnRlcm5hbFNlcnZlckNvbXBvbmVudDxTU1JGYWxsYmFja1Byb3BzPigoc3NyLCBqc3gsIF9vcHRpb25zLCBlbnF1ZXVlKSA9PiB7XG4gICAgICBjb25zdCBib3VuZGFyeVN0YXRlID0ganN4LnZhclByb3BzLmJvdW5kYXJ5IGFzIFNTUk91dE9mT3JkZXJCb3VuZGFyeVN0YXRlIHwgbnVsbDtcbiAgICAgIGNvbnN0IGRlbGF5ID0ganN4LnZhclByb3BzLmRlbGF5IGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrU3R5bGUgPSBqc3gudmFyUHJvcHMuZmFsbGJhY2tTdHlsZSBhcyBTaWduYWw8eyBkaXNwbGF5OiBzdHJpbmcgfT47XG4gICAgICBjb25zdCBzaG93RmFsbGJhY2sgPSBqc3gudmFyUHJvcHMuc2hvd0ZhbGxiYWNrID09PSB0cnVlO1xuICAgICAgY29uc3Qgc3RhdGUgPSBqc3gudmFyUHJvcHMuc3RhdGUgYXMgU2lnbmFsPFN1c3BlbnNlU3RhdGU+O1xuICAgICAgaWYgKHNob3dGYWxsYmFjayAmJiAhaXNQb3NpdGl2ZURlbGF5KGRlbGF5KSkge1xuICAgICAgICBzdGF0ZS52YWx1ZSA9ICdmYWxsYmFjayc7XG4gICAgICB9IGVsc2UgaWYgKGJvdW5kYXJ5U3RhdGUgJiYgc2hvd0ZhbGxiYWNrICYmIGlzUG9zaXRpdmVEZWxheShkZWxheSkpIHtcbiAgICAgICAgZW5xdWV1ZSgoKSA9PiBzY2hlZHVsZU91dE9mT3JkZXJGYWxsYmFja0RlbGF5KHNzciwgYm91bmRhcnlTdGF0ZSwgc3RhdGUsIGRlbGF5KSk7XG4gICAgICB9XG4gICAgICBlbnF1ZXVlKFxuICAgICAgICAvKiNfX1BVUkVfXyovIF9qc3hTb3J0ZWQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3R5bGU6IGZhbGxiYWNrU3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGpzeC5jaGlsZHJlbiBhcyBKU1hPdXRwdXQsXG4gICAgICAgICAgMSxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSlcbiAgOiBudWxsITtcblxudHlwZSBTU1JEZWZlcnJlZFNsb3RQcm9wcyA9IHtcbiAgYm91bmRhcnk6IFNTUk91dE9mT3JkZXJCb3VuZGFyeVN0YXRlIHwgbnVsbDtcbiAgYm91bmRhcnlJZDogbnVtYmVyO1xuICBjb250ZW50U3R5bGU6IFNpZ25hbDx7IGRpc3BsYXk6IHN0cmluZyB9PjtcbiAgcmV2ZWFsOiBPdXRPZk9yZGVyUmV2ZWFsQm91bmRhcnkgfCBudWxsO1xufTtcblxuY29uc3QgU1NSRGVmZXJyZWRTbG90ID0gX19FWFBFUklNRU5UQUxfXy5zdXNwZW5zZVxuICA/IC8qI19fUFVSRV9fKi8gY3JlYXRlSW50ZXJuYWxTZXJ2ZXJDb21wb25lbnQ8U1NSRGVmZXJyZWRTbG90UHJvcHM+KGFzeW5jIChzc3IsIGpzeCwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgYm91bmRhcnlJZCA9IChqc3gudmFyUHJvcHMuYm91bmRhcnlJZCBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/IHNzci5uZXh0T3V0T2ZPcmRlcklkKCk7XG4gICAgICBjb25zdCBjb250ZW50U2VnbWVudCA9IGAke2JvdW5kYXJ5SWR9YDtcbiAgICAgIGNvbnN0IGJvdW5kYXJ5U3RhdGUgPSBqc3gudmFyUHJvcHMuYm91bmRhcnkgYXMgU1NST3V0T2ZPcmRlckJvdW5kYXJ5U3RhdGUgfCBudWxsO1xuICAgICAgY29uc3QgY29udGVudFN0eWxlID0ganN4LnZhclByb3BzLmNvbnRlbnRTdHlsZSBhcyBTaWduYWw8eyBkaXNwbGF5OiBzdHJpbmcgfT47XG4gICAgICBjb25zdCByZXZlYWxCb3VuZGFyeSA9IGpzeC52YXJQcm9wcy5yZXZlYWwgYXMgT3V0T2ZPcmRlclJldmVhbEJvdW5kYXJ5IHwgbnVsbDtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzc3Iuc2VnbWVudChcbiAgICAgICAgY29udGVudFNlZ21lbnQsXG4gICAgICAgIGNyZWF0ZUNsYWltZWREZWZlcnJlZFNsb3Qoc3NyLCBqc3gsIG9wdGlvbnMpLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuXG4gICAgICB3cml0ZU91dE9mT3JkZXJQbGFjZWhvbGRlcihzc3IsIGJvdW5kYXJ5SWQpO1xuICAgICAgc3NyLmVtaXRPdXRPZk9yZGVyRXhlY3V0b3JJZk5lZWRlZCgpO1xuICAgICAgc3NyLnF1ZXVlT3V0T2ZPcmRlclNlZ21lbnQoXG4gICAgICAgIGNvbnRlbnQudGhlbigocmVuZGVyZWQpID0+XG4gICAgICAgICAgZW1pdFJlbmRlcmVkT3V0T2ZPcmRlclNlZ21lbnQoXG4gICAgICAgICAgICBzc3IsXG4gICAgICAgICAgICBib3VuZGFyeUlkLFxuICAgICAgICAgICAgY29udGVudFNlZ21lbnQsXG4gICAgICAgICAgICByZW5kZXJlZCxcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZSxcbiAgICAgICAgICAgIHJldmVhbEJvdW5kYXJ5LFxuICAgICAgICAgICAgYm91bmRhcnlTdGF0ZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KVxuICA6IG51bGwhO1xuXG5mdW5jdGlvbiBjcmVhdGVDbGFpbWVkRGVmZXJyZWRTbG90KFxuICBzc3I6IFNTUkNvbnRhaW5lcixcbiAganN4OiBKU1hOb2RlSW50ZXJuYWwsXG4gIG9wdGlvbnM6IFNTUlJlbmRlckpTWE9wdGlvbnNcbik6IFJldHVyblR5cGU8dHlwZW9mIF9qc3hTb3J0ZWQ+IHtcbiAgY29uc3QgY29tcG9uZW50RnJhbWUgPSBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lO1xuICBpZiAoIWNvbXBvbmVudEZyYW1lKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX2pzeFNvcnRlZChcbiAgICAgIFNsb3QsXG4gICAgICBqc3gudmFyUHJvcHMsXG4gICAgICBqc3guY29uc3RQcm9wcyxcbiAgICAgIGpzeC5jaGlsZHJlbixcbiAgICAgIGpzeC5mbGFncyxcbiAgICAgIGpzeC5rZXlcbiAgICApO1xuICB9XG4gIGNvbnN0IHNsb3ROYW1lID0gcmVzb2x2ZVNsb3ROYW1lKGNvbXBvbmVudEZyYW1lLmNvbXBvbmVudE5vZGUsIGpzeCwgc3NyKTtcbiAgY29uc3Qgc2xvdERlZmF1bHRDaGlsZHJlbiA9IChqc3guY2hpbGRyZW4gfHwgbnVsbCkgYXMgSlNYQ2hpbGRyZW4gfCBudWxsO1xuICBjb25zdCBzbG90Q2hpbGRyZW4gPVxuICAgIChcbiAgICAgIGNvbXBvbmVudEZyYW1lIGFzIHVua25vd24gYXMgeyBjbGFpbUNoaWxkcmVuRm9yU2xvdChzbG90TmFtZTogc3RyaW5nKTogSlNYQ2hpbGRyZW4gfCBudWxsIH1cbiAgICApLmNsYWltQ2hpbGRyZW5Gb3JTbG90KHNsb3ROYW1lKSB8fCBzbG90RGVmYXVsdENoaWxkcmVuO1xuICBpZiAoc2xvdERlZmF1bHRDaGlsZHJlbiAmJiBzbG90Q2hpbGRyZW4gIT09IHNsb3REZWZhdWx0Q2hpbGRyZW4pIHtcbiAgICBzc3IuYWRkVW5jbGFpbWVkUHJvamVjdGlvbihjb21wb25lbnRGcmFtZSwgUURlZmF1bHRTbG90LCBzbG90RGVmYXVsdENoaWxkcmVuKTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qLyBfanN4U29ydGVkKFxuICAgIFNsb3QsXG4gICAganN4LnZhclByb3BzLFxuICAgIGpzeC5jb25zdFByb3BzLFxuICAgIHNsb3RDaGlsZHJlbixcbiAgICBqc3guZmxhZ3MsXG4gICAganN4LmtleVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBlbWl0UmVuZGVyZWRPdXRPZk9yZGVyU2VnbWVudChcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIGJvdW5kYXJ5SWQ6IG51bWJlcixcbiAgc2VnbWVudElkOiBzdHJpbmcsXG4gIHJlbmRlcmVkOiBTU1JPdXRPZk9yZGVyU2VnbWVudCxcbiAgY29udGVudFN0eWxlOiBTaWduYWw8eyBkaXNwbGF5OiBzdHJpbmcgfT4sXG4gIHJldmVhbEJvdW5kYXJ5OiBPdXRPZk9yZGVyUmV2ZWFsQm91bmRhcnkgfCBudWxsLFxuICBib3VuZGFyeVN0YXRlOiBTU1JPdXRPZk9yZGVyQm91bmRhcnlTdGF0ZSB8IG51bGxcbik6IFByb21pc2U8dm9pZD4ge1xuICBtYXJrT3V0T2ZPcmRlckNvbnRlbnRSZXNvbHZlZChib3VuZGFyeVN0YXRlKTtcbiAgcmV2ZWFsQm91bmRhcnk/LnJlc29sdmUoKTtcbiAgYXdhaXQgc3NyLiRydW5RdWV1ZWRSZW5kZXIkKGFzeW5jICgpID0+IHtcbiAgICBzc3IuYWRkUm9vdChjb250ZW50U3R5bGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbmRlcmVkLmNvbnRhaW5lci4kZmluYWxpemVPdXRPZk9yZGVyU2VnbWVudCQoc2VnbWVudElkLCByZW5kZXJlZCk7XG4gICAgd3JpdGVPdXRPZk9yZGVyUmVzb2x2ZWRUZW1wbGF0ZShzc3IsIGJvdW5kYXJ5SWQsIHJlc3VsdC5odG1sLCByZXZlYWxCb3VuZGFyeSk7XG4gICAgc3NyLmVtaXRPdXRPZk9yZGVyU2VnbWVudFNjcmlwdHMocmVzdWx0LnNjcmlwdHMpO1xuICAgIHNzci5lbWl0SW5saW5lU2NyaXB0KGBxTygke2JvdW5kYXJ5SWR9KWApO1xuICAgIC8vIHFPKCkgaXMgdGhlIGJyb3dzZXItdmlzaWJsZSBoYW5kb2ZmIGZvciB0aGlzIHNlZ21lbnQsIHNvIGZsdXNoIGl0IGltbWVkaWF0ZWx5LlxuICAgIGF3YWl0IHNzci5zdHJlYW1IYW5kbGVyLmZsdXNoKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXJrT3V0T2ZPcmRlckNvbnRlbnRSZXNvbHZlZChib3VuZGFyeVN0YXRlOiBTU1JPdXRPZk9yZGVyQm91bmRhcnlTdGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKCFib3VuZGFyeVN0YXRlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJvdW5kYXJ5U3RhdGUuY29udGVudFJlc29sdmVkID0gdHJ1ZTtcbiAgaWYgKGJvdW5kYXJ5U3RhdGUuZGVsYXlUaW1lcikge1xuICAgIGNsZWFyVGltZW91dChib3VuZGFyeVN0YXRlLmRlbGF5VGltZXIpO1xuICAgIGJvdW5kYXJ5U3RhdGUuZGVsYXlUaW1lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVPdXRPZk9yZGVyRmFsbGJhY2tEZWxheShcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIGJvdW5kYXJ5U3RhdGU6IFNTUk91dE9mT3JkZXJCb3VuZGFyeVN0YXRlLFxuICBzdGF0ZTogU2lnbmFsPFN1c3BlbnNlU3RhdGU+LFxuICBkZWxheTogbnVtYmVyXG4pOiB2b2lkIHtcbiAgYm91bmRhcnlTdGF0ZS5kZWxheVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgYm91bmRhcnlTdGF0ZS5kZWxheVRpbWVyID0gbnVsbDtcbiAgICB2b2lkIHNzci4kcnVuUXVldWVkUmVuZGVyJChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoYm91bmRhcnlTdGF0ZS5jb250ZW50UmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3RhdGUudmFsdWUgPSAnZmFsbGJhY2snO1xuICAgICAgc3NyLmVtaXRCYWNrcGF0Y2hEYXRhQW5kRXhlY3V0b3JJZk5lZWRlZCgpO1xuICAgICAgYXdhaXQgc3NyLnN0cmVhbUhhbmRsZXIuZmx1c2goKTtcbiAgICB9KTtcbiAgfSwgZGVsYXkpO1xufVxuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlRGVsYXkoZGVsYXk6IG51bWJlciB8IHVuZGVmaW5lZCk6IGRlbGF5IGlzIG51bWJlciB7XG4gIHJldHVybiB0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShkZWxheSkgJiYgZGVsYXkgPiAwO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZW5kZXJGYWxsYmFjayhcbiAgZmFsbGJhY2s6IEpTWE91dHB1dCxcbiAgcmV2ZWFsQm91bmRhcnk6IE91dE9mT3JkZXJSZXZlYWxCb3VuZGFyeSB8IG51bGxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGZhbGxiYWNrICE9IG51bGwgJiZcbiAgICBmYWxsYmFjayAhPT0gZmFsc2UgJiZcbiAgICAocmV2ZWFsQm91bmRhcnkgPT09IG51bGwgfHwgcmV2ZWFsQm91bmRhcnkuc2hvd0ZhbGxiYWNrKVxuICApO1xufVxuXG5mdW5jdGlvbiB3cml0ZU91dE9mT3JkZXJQbGFjZWhvbGRlcihzc3I6IFNTUkNvbnRhaW5lciwgYm91bmRhcnlJZDogbnVtYmVyKTogdm9pZCB7XG4gIHNzci53cml0ZShgPHRlbXBsYXRlICR7UVN1c3BlbnNlUmVzb2x2ZWR9PVwiJHtib3VuZGFyeUlkfVwiPjwvdGVtcGxhdGU+YCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlT3V0T2ZPcmRlclJlc29sdmVkVGVtcGxhdGUoXG4gIHNzcjogU1NSQ29udGFpbmVyLFxuICBib3VuZGFyeUlkOiBudW1iZXIsXG4gIGh0bWw6IHN0cmluZyxcbiAgcmV2ZWFsQm91bmRhcnk6IE91dE9mT3JkZXJSZXZlYWxCb3VuZGFyeSB8IG51bGxcbik6IHZvaWQge1xuICBzc3Iud3JpdGUoYDx0ZW1wbGF0ZSAke1FTdXNwZW5zZVJlc29sdmVkfT1cIiR7Ym91bmRhcnlJZH1cIiR7cmV2ZWFsQm91bmRhcnk/LmF0dHJzID8/ICcnfT5gKTtcbiAgc3NyLndyaXRlKGh0bWwpO1xuICBzc3Iud3JpdGUoJzwvdGVtcGxhdGU+Jyk7XG59XG4iXX0=","// keep this import from core/build so the cjs build works\nimport { isDev } from '@qwik.dev/core/build';\nimport { qTest } from '../utils/qdev';\nimport { _jsxSorted } from '../../internal';\n/**\n * @deprecated This is no longer needed as the preloading happens automatically in qrl-class.ts.\n *   Leave this in your app for a while so it uninstalls existing service workers, but don't use it\n *   for new projects.\n * @alpha\n */\nexport const PrefetchServiceWorker = (opts) => {\n    const isTest = qTest;\n    if (isDev && !isTest) {\n        const props = {\n            dangerouslySetInnerHTML: '<!-- PrefetchServiceWorker is disabled in dev mode. -->',\n        };\n        return _jsxSorted('script', null, props, null, 0, 'prefetch-service-worker');\n    }\n    // if an MFE app has a custom BASE_URL then this will be the correct value\n    // if you're not using MFE from another codebase then you want to override this value to your custom setup\n    const baseUrl = import.meta.env?.BASE_URL || '/';\n    const resolvedOpts = {\n        path: 'qwik-prefetch-service-worker.js',\n        ...opts,\n    };\n    if (opts?.path?.startsWith?.('/')) {\n        // allow different path and base\n        resolvedOpts.path = opts.path;\n    }\n    else {\n        // baseUrl: '/'\n        // path: 'qwik-prefetch-service-worker.js'\n        // the file 'qwik-prefetch-service-worker.js' is not located in /build/\n        resolvedOpts.path = baseUrl + resolvedOpts.path;\n    }\n    let code = PREFETCH_CODE.replace('\"_URL_\"', JSON.stringify(resolvedOpts.path.split('/').pop()));\n    if (!isDev) {\n        // consecutive spaces are indentation\n        code = code.replaceAll(/\\s\\s+/gm, '');\n    }\n    const props = {\n        dangerouslySetInnerHTML: [\n            '(' + code + ')(',\n            [\n                'navigator.serviceWorker', // Service worker container\n            ].join(','),\n            ');',\n        ].join(''),\n        nonce: resolvedOpts.nonce,\n    };\n    return _jsxSorted('script', null, props, null, 0, 'prefetch-service-worker');\n};\nconst PREFETCH_CODE = /*#__PURE__*/ ((c // Service worker container\n) => {\n    if ('getRegistrations' in c) {\n        c.getRegistrations().then((registrations) => {\n            for (let i = 0; i < registrations.length; i++) {\n                const registration = registrations[i];\n                if (registration.active) {\n                    if (registration.active.scriptURL.endsWith('_URL_')) {\n                        registration.unregister().catch(console.error);\n                    }\n                }\n            }\n        });\n    }\n    if ('caches' in window) {\n        caches\n            .keys()\n            .then((names) => {\n            const cacheName = names.find((name) => name.startsWith('QwikBundles'));\n            if (cacheName) {\n                caches.delete(cacheName).catch(console.error);\n            }\n        })\n            .catch(console.error);\n    }\n}).toString();\n/**\n * @deprecated This is no longer needed as the preloading happens automatically in qrl-class. You\n *   can remove this component from your app.\n * @alpha\n */\nexport const PrefetchGraph = (_opts = {}) => null;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmV0Y2guanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3ByZWZldGNoLXNlcnZpY2Utd29ya2VyL3ByZWZldGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRDtBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLElBT3JDLEVBQWEsRUFBRTtJQUNkLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sS0FBSyxHQUFHO1lBQ1osdUJBQXVCLEVBQUUseURBQXlEO1NBQ25GLENBQUM7UUFDRixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSwwR0FBMEc7SUFDMUcsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxJQUFJLEdBQUcsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FBRztRQUNuQixJQUFJLEVBQUUsaUNBQWlDO1FBQ3ZDLEdBQUcsSUFBSTtLQUNSLENBQUM7SUFDRixJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxnQ0FBZ0M7UUFDaEMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBZTtRQUNmLDBDQUEwQztRQUMxQyx1RUFBdUU7UUFDdkUsWUFBWSxDQUFDLElBQUksR0FBRyxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNsRCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gscUNBQXFDO1FBQ3JDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUc7UUFDWix1QkFBdUIsRUFBRTtZQUN2QixHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDakI7Z0JBQ0UseUJBQXlCLEVBQUUsMkJBQTJCO2FBQ3ZELENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNYLElBQUk7U0FDTCxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDVixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7S0FDMUIsQ0FBQztJQUNGLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUNuQyxDQUF5QixDQUFDLDJCQUEyQjtFQUNyRCxFQUFFO0lBQ0YsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN4QixJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNwRCxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU07YUFDSCxJQUFJLEVBQUU7YUFDTixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFZDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQzNCLFFBQXdGLEVBQUUsRUFDL0UsRUFBRSxDQUFDLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGtlZXAgdGhpcyBpbXBvcnQgZnJvbSBjb3JlL2J1aWxkIHNvIHRoZSBjanMgYnVpbGQgd29ya3NcbmltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgcVRlc3QgfSBmcm9tICcuLi91dGlscy9xZGV2JztcbmltcG9ydCB7IF9qc3hTb3J0ZWQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IEpTWE91dHB1dCB9IGZyb20gJy4uL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIGFzIHRoZSBwcmVsb2FkaW5nIGhhcHBlbnMgYXV0b21hdGljYWxseSBpbiBxcmwtY2xhc3MudHMuXG4gKiAgIExlYXZlIHRoaXMgaW4geW91ciBhcHAgZm9yIGEgd2hpbGUgc28gaXQgdW5pbnN0YWxscyBleGlzdGluZyBzZXJ2aWNlIHdvcmtlcnMsIGJ1dCBkb24ndCB1c2UgaXRcbiAqICAgZm9yIG5ldyBwcm9qZWN0cy5cbiAqIEBhbHBoYVxuICovXG5leHBvcnQgY29uc3QgUHJlZmV0Y2hTZXJ2aWNlV29ya2VyID0gKG9wdHM6IHtcbiAgYmFzZT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBmZXRjaEJ1bmRsZUdyYXBoPzogYm9vbGVhbjtcbiAgbm9uY2U/OiBzdHJpbmc7XG59KTogSlNYT3V0cHV0ID0+IHtcbiAgY29uc3QgaXNUZXN0ID0gcVRlc3Q7XG4gIGlmIChpc0RldiAmJiAhaXNUZXN0KSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogJzwhLS0gUHJlZmV0Y2hTZXJ2aWNlV29ya2VyIGlzIGRpc2FibGVkIGluIGRldiBtb2RlLiAtLT4nLFxuICAgIH07XG4gICAgcmV0dXJuIF9qc3hTb3J0ZWQoJ3NjcmlwdCcsIG51bGwsIHByb3BzLCBudWxsLCAwLCAncHJlZmV0Y2gtc2VydmljZS13b3JrZXInKTtcbiAgfVxuXG4gIC8vIGlmIGFuIE1GRSBhcHAgaGFzIGEgY3VzdG9tIEJBU0VfVVJMIHRoZW4gdGhpcyB3aWxsIGJlIHRoZSBjb3JyZWN0IHZhbHVlXG4gIC8vIGlmIHlvdSdyZSBub3QgdXNpbmcgTUZFIGZyb20gYW5vdGhlciBjb2RlYmFzZSB0aGVuIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdmFsdWUgdG8geW91ciBjdXN0b20gc2V0dXBcbiAgY29uc3QgYmFzZVVybCA9IGltcG9ydC5tZXRhLmVudj8uQkFTRV9VUkwgfHwgJy8nO1xuICBjb25zdCByZXNvbHZlZE9wdHMgPSB7XG4gICAgcGF0aDogJ3F3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanMnLFxuICAgIC4uLm9wdHMsXG4gIH07XG4gIGlmIChvcHRzPy5wYXRoPy5zdGFydHNXaXRoPy4oJy8nKSkge1xuICAgIC8vIGFsbG93IGRpZmZlcmVudCBwYXRoIGFuZCBiYXNlXG4gICAgcmVzb2x2ZWRPcHRzLnBhdGggPSBvcHRzLnBhdGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gYmFzZVVybDogJy8nXG4gICAgLy8gcGF0aDogJ3F3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanMnXG4gICAgLy8gdGhlIGZpbGUgJ3F3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanMnIGlzIG5vdCBsb2NhdGVkIGluIC9idWlsZC9cbiAgICByZXNvbHZlZE9wdHMucGF0aCA9IGJhc2VVcmwgKyByZXNvbHZlZE9wdHMucGF0aDtcbiAgfVxuICBsZXQgY29kZSA9IFBSRUZFVENIX0NPREUucmVwbGFjZSgnXCJfVVJMX1wiJywgSlNPTi5zdHJpbmdpZnkocmVzb2x2ZWRPcHRzLnBhdGguc3BsaXQoJy8nKS5wb3AoKSkpO1xuICBpZiAoIWlzRGV2KSB7XG4gICAgLy8gY29uc2VjdXRpdmUgc3BhY2VzIGFyZSBpbmRlbnRhdGlvblxuICAgIGNvZGUgPSBjb2RlLnJlcGxhY2VBbGwoL1xcc1xccysvZ20sICcnKTtcbiAgfVxuICBjb25zdCBwcm9wcyA9IHtcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogW1xuICAgICAgJygnICsgY29kZSArICcpKCcsXG4gICAgICBbXG4gICAgICAgICduYXZpZ2F0b3Iuc2VydmljZVdvcmtlcicsIC8vIFNlcnZpY2Ugd29ya2VyIGNvbnRhaW5lclxuICAgICAgXS5qb2luKCcsJyksXG4gICAgICAnKTsnLFxuICAgIF0uam9pbignJyksXG4gICAgbm9uY2U6IHJlc29sdmVkT3B0cy5ub25jZSxcbiAgfTtcbiAgcmV0dXJuIF9qc3hTb3J0ZWQoJ3NjcmlwdCcsIG51bGwsIHByb3BzLCBudWxsLCAwLCAncHJlZmV0Y2gtc2VydmljZS13b3JrZXInKTtcbn07XG5cbmNvbnN0IFBSRUZFVENIX0NPREUgPSAvKiNfX1BVUkVfXyovICgoXG4gIGM6IFNlcnZpY2VXb3JrZXJDb250YWluZXIgLy8gU2VydmljZSB3b3JrZXIgY29udGFpbmVyXG4pID0+IHtcbiAgaWYgKCdnZXRSZWdpc3RyYXRpb25zJyBpbiBjKSB7XG4gICAgYy5nZXRSZWdpc3RyYXRpb25zKCkudGhlbigocmVnaXN0cmF0aW9ucykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdpc3RyYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJhdGlvbnNbaV07XG4gICAgICAgIGlmIChyZWdpc3RyYXRpb24uYWN0aXZlKSB7XG4gICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbi5hY3RpdmUuc2NyaXB0VVJMLmVuZHNXaXRoKCdfVVJMXycpKSB7XG4gICAgICAgICAgICByZWdpc3RyYXRpb24udW5yZWdpc3RlcigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICgnY2FjaGVzJyBpbiB3aW5kb3cpIHtcbiAgICBjYWNoZXNcbiAgICAgIC5rZXlzKClcbiAgICAgIC50aGVuKChuYW1lcykgPT4ge1xuICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBuYW1lcy5maW5kKChuYW1lKSA9PiBuYW1lLnN0YXJ0c1dpdGgoJ1F3aWtCdW5kbGVzJykpO1xuICAgICAgICBpZiAoY2FjaGVOYW1lKSB7XG4gICAgICAgICAgY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICB9XG59KS50b1N0cmluZygpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhcyB0aGUgcHJlbG9hZGluZyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaW4gcXJsLWNsYXNzLiBZb3VcbiAqICAgY2FuIHJlbW92ZSB0aGlzIGNvbXBvbmVudCBmcm9tIHlvdXIgYXBwLlxuICogQGFscGhhXG4gKi9cbmV4cG9ydCBjb25zdCBQcmVmZXRjaEdyYXBoID0gKFxuICBfb3B0czogeyBiYXNlPzogc3RyaW5nOyBtYW5pZmVzdEhhc2g/OiBzdHJpbmc7IG1hbmlmZXN0VVJMPzogc3RyaW5nOyBub25jZT86IHN0cmluZyB9ID0ge31cbik6IEpTWE91dHB1dCA9PiBudWxsO1xuIl19","//////////////////////////////////////////////////////////////////////////////////////////\n// Protect against duplicate imports\n//////////////////////////////////////////////////////////////////////////////////////////\nimport { qError } from '../server/qwik-copy';\nimport { version } from './version';\nif (globalThis.__qwik) {\n    qError(30 /* QError.duplicateQwik */, [globalThis.__qwik, version]);\n}\nglobalThis.__qwik = version;\nif (import.meta.hot) {\n    import.meta.hot.dispose(() => {\n        globalThis.__qwik = undefined;\n    });\n}\n//////////////////////////////////////////////////////////////////////////////////////////\n// Developer Core API\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { componentQrl, component$ } from './shared/component.public';\nexport { isBrowser, isDev, isServer } from '@qwik.dev/core/build';\n//////////////////////////////////////////////////////////////////////////////////////////\n// Internal Runtime\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { $, sync$, _qrlSync } from './shared/qrl/qrl.public';\nexport { eventQrl } from './shared/qrl/qrl.public';\nexport { event$ } from './shared/qrl/qrl.public.dollar';\nexport { qrl, inlinedQrl, inlinedQrlDEV, qrlDEV } from './shared/qrl/qrl';\nexport { implicit$FirstArg } from './shared/qrl/implicit_dollar';\n//////////////////////////////////////////////////////////////////////////////////////////\n// PLATFORM\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { getPlatform, setPlatform } from './shared/platform/platform';\nexport { getClientManifest } from './shared/get-client-manifest';\n//////////////////////////////////////////////////////////////////////////////////////////\n// JSX Runtime\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { SSRStreamBlock, SSRRaw, SSRStream, SSRComment, SkipRender, } from './shared/jsx/utils.public';\nexport { Slot } from './shared/jsx/slot.public';\nexport { Fragment, RenderOnce, jsx, jsxDEV, jsxs, h, h as createElement, } from './shared/jsx/jsx-runtime';\nexport { render } from './client/dom-render';\nexport { getDomContainer, _getQContainerElement } from './client/dom-container';\n//////////////////////////////////////////////////////////////////////////////////////////\n// use API\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { useStore, unwrapStore, forceStoreEffects } from './use/use-store.public';\nexport { untrack } from './use/use-core';\nexport { useId } from './use/use-id';\nexport { useContext, useContextProvider, createContextId } from './use/use-context';\nexport { useServerData } from './use/use-env-data';\nexport { useStylesQrl, useStyles$, useStylesScopedQrl, useStylesScoped$ } from './use/use-styles';\nexport { useOn, useOnDocument, useOnWindow } from './use/use-on';\nexport { useSignal, useConstant } from './use/use-signal';\nexport { withLocale, getLocale } from './use/use-locale';\nexport { useComputedQrl } from './use/use-computed';\nexport { useSerializerQrl, useSerializer$ } from './use/use-serializer';\nexport { useVisibleTaskQrl } from './use/use-visible-task';\nexport { useResourceQrl, Resource } from './use/use-resource';\nexport { useResource$ } from './use/use-resource-dollar';\nexport { useTaskQrl } from './use/use-task';\nexport { useTask$ } from './use/use-task-dollar';\nexport { useVisibleTask$ } from './use/use-visible-task-dollar';\nexport { useComputed$ } from './use/use-computed';\nexport { useAsyncQrl, useAsync$ } from './use/use-async';\nexport { useErrorBoundary } from './use/use-error-boundary';\nexport { isSignal, createSignal, createComputedQrl, createComputed$, createSerializerQrl, createSerializer$, createAsyncQrl, createAsync$, } from './reactive-primitives/signal.public';\n//////////////////////////////////////////////////////////////////////////////////////////\n// Control flow\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { eachCmpTask as _eaT, eachCmp as _eaC } from './control-flow/each';\nexport { Each } from './control-flow/each';\nexport { revealCanReveal as _reR, revealCleanupTask as _reT, revealCmp as _reC, } from './control-flow/reveal';\nexport { Reveal } from './control-flow/reveal';\nexport { suspenseTask as _suT, suspenseCmp as _suC } from './control-flow/suspense';\nexport { Suspense } from './control-flow/suspense';\nexport { noSerialize, NoSerializeSymbol, SerializerSymbol, } from './shared/serdes/verify';\nexport { version } from './version';\n//////////////////////////////////////////////////////////////////////////////////////////\n// Components\n//////////////////////////////////////////////////////////////////////////////////////////\nexport { PrefetchServiceWorker, PrefetchGraph } from './shared/prefetch-service-worker/prefetch';\n//////////////////////////////////////////////////////////////////////////////////////////\n// INTERNAL\n//////////////////////////////////////////////////////////////////////////////////////////\nexport * from './internal';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEZBQTBGO0FBQzFGLG9DQUFvQztBQUNwQywwRkFBMEY7QUFDMUYsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsSUFBSyxVQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLE1BQU0sZ0NBQXVCLENBQUUsVUFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBQ0EsVUFBa0IsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXJDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQzFCLFVBQWtCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwwRkFBMEY7QUFDMUYscUJBQXFCO0FBQ3JCLDBGQUEwRjtBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXJFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBY2xFLDBGQUEwRjtBQUMxRixtQkFBbUI7QUFDbkIsMEZBQTBGO0FBQzFGLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBZ0IsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFD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N0MsMEZBQTBGO0FBQzFGLGVBQWU7QUFDZiwwRkFBMEY7QUFDMUYsT0FBTyxFQUFFLFdBQVcsSUFBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxJQUFJLElBQUksRUFDdkIsaUJBQWlCLElBQUksSUFBSSxFQUN6QixTQUFTLElBQUksSUFBSSxHQUNsQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsWUFBWSxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT25ELE9BQU8sRUFDTCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUVqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUEyQ3BDLDBGQUEwRjtBQUMxRixhQUFhO0FBQ2IsMEZBQTBGO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRywwRkFBMEY7QUFDMUYsV0FBVztBQUNYLDBGQUEwRjtBQUMxRixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUHJvdGVjdCBhZ2FpbnN0IGR1cGxpY2F0ZSBpbXBvcnRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2VydmVyL3F3aWstY29weSc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuaWYgKChnbG9iYWxUaGlzIGFzIGFueSkuX19xd2lrKSB7XG4gIHFFcnJvcihRRXJyb3IuZHVwbGljYXRlUXdpaywgWyhnbG9iYWxUaGlzIGFzIGFueSkuX19xd2lrLCB2ZXJzaW9uXSk7XG59XG4oZ2xvYmFsVGhpcyBhcyBhbnkpLl9fcXdpayA9IHZlcnNpb247XG5cbmlmIChpbXBvcnQubWV0YS5ob3QpIHtcbiAgaW1wb3J0Lm1ldGEuaG90LmRpc3Bvc2UoKCkgPT4ge1xuICAgIChnbG9iYWxUaGlzIGFzIGFueSkuX19xd2lrID0gdW5kZWZpbmVkO1xuICB9KTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBEZXZlbG9wZXIgQ29yZSBBUElcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IHsgY29tcG9uZW50UXJsLCBjb21wb25lbnQkIH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50LnB1YmxpYyc7XG5cbmV4cG9ydCB0eXBlIHsgUHJvcHNPZiwgT25SZW5kZXJGbiwgQ29tcG9uZW50LCBQdWJsaWNQcm9wcyB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudC5wdWJsaWMnO1xuXG5leHBvcnQgeyBpc0Jyb3dzZXIsIGlzRGV2LCBpc1NlcnZlciB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBEZXZlbG9wZXIgRXZlbnQgQVBJXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB0eXBlIHtcbiAgU25hcHNob3RTdGF0ZSxcbiAgU25hcHNob3RSZXN1bHQsXG4gIFNuYXBzaG90TWV0YSxcbiAgU25hcHNob3RNZXRhVmFsdWUsXG4gIFNuYXBzaG90TGlzdGVuZXIsXG4gIElTc3JDb21wb25lbnRGcmFtZSxcbn0gZnJvbSAnLi9zc3Ivc3NyLXR5cGVzJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbnRlcm5hbCBSdW50aW1lXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB7ICQsIHN5bmMkLCBfcXJsU3luYywgdHlwZSBTeW5jUVJMIH0gZnJvbSAnLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuZXhwb3J0IHsgZXZlbnRRcmwgfSBmcm9tICcuL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5leHBvcnQgeyBldmVudCQgfSBmcm9tICcuL3NoYXJlZC9xcmwvcXJsLnB1YmxpYy5kb2xsYXInO1xuXG5leHBvcnQgeyBxcmwsIGlubGluZWRRcmwsIGlubGluZWRRcmxERVYsIHFybERFViB9IGZyb20gJy4vc2hhcmVkL3FybC9xcmwnO1xuZXhwb3J0IHR5cGUgeyBRUkwsIFByb3BGdW5jdGlvbiB9IGZyb20gJy4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmV4cG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi9zaGFyZWQvcXJsL2ltcGxpY2l0X2RvbGxhcic7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUExBVEZPUk1cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IHsgZ2V0UGxhdGZvcm0sIHNldFBsYXRmb3JtIH0gZnJvbSAnLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuZXhwb3J0IHR5cGUgeyBDb3JlUGxhdGZvcm0gfSBmcm9tICcuL3NoYXJlZC9wbGF0Zm9ybS90eXBlcyc7XG5leHBvcnQgdHlwZSB7IENsaWVudENvbnRhaW5lciB9IGZyb20gJy4vY2xpZW50L3R5cGVzJztcbmV4cG9ydCB0eXBlIHsgRG9tQ29udGFpbmVyIH0gZnJvbSAnLi9jbGllbnQvZG9tLWNvbnRhaW5lcic7XG5leHBvcnQgeyBnZXRDbGllbnRNYW5pZmVzdCB9IGZyb20gJy4vc2hhcmVkL2dldC1jbGllbnQtbWFuaWZlc3QnO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEpTWCBSdW50aW1lXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB7XG4gIFNTUlN0cmVhbUJsb2NrLFxuICBTU1JSYXcsXG4gIFNTUlN0cmVhbSxcbiAgU1NSQ29tbWVudCxcbiAgU2tpcFJlbmRlcixcbn0gZnJvbSAnLi9zaGFyZWQvanN4L3V0aWxzLnB1YmxpYyc7XG5leHBvcnQgdHlwZSB7XG4gIFNTUlN0cmVhbVByb3BzLFxuICBTU1JIaW50UHJvcHMsXG4gIFNTUlN0cmVhbUNoaWxkcmVuLFxuICBTU1JTdHJlYW1Xcml0ZXIsXG59IGZyb20gJy4vc2hhcmVkL2pzeC91dGlscy5wdWJsaWMnO1xuZXhwb3J0IHsgU2xvdCB9IGZyb20gJy4vc2hhcmVkL2pzeC9zbG90LnB1YmxpYyc7XG5leHBvcnQge1xuICBGcmFnbWVudCxcbiAgUmVuZGVyT25jZSxcbiAganN4LFxuICBqc3hERVYsXG4gIGpzeHMsXG4gIGgsXG4gIGggYXMgY3JlYXRlRWxlbWVudCxcbn0gZnJvbSAnLi9zaGFyZWQvanN4L2pzeC1ydW50aW1lJztcbmV4cG9ydCB0eXBlIHtcbiAgRE9NQXR0cmlidXRlcyxcbiAgUXdpa0F0dHJpYnV0ZXMsXG4gIEpTWFRhZ05hbWUsXG4gIEpTWENoaWxkcmVuLFxuICBDb21wb25lbnRCYXNlUHJvcHMsXG4gIENsYXNzTGlzdCxcbiAgQ29ycmVjdGVkVG9nZ2xlRXZlbnQsXG4gIEV2ZW50SGFuZGxlcixcbiAgUVJMRXZlbnRIYW5kbGVyTXVsdGksXG59IGZyb20gJy4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmV4cG9ydCB0eXBlIHtcbiAgSlNYT3V0cHV0LFxuICBGdW5jdGlvbkNvbXBvbmVudCxcbiAgSlNYTm9kZSxcbiAgSlNYTm9kZUludGVybmFsLFxuICBEZXZKU1gsXG59IGZyb20gJy4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5leHBvcnQgdHlwZSB7IFF3aWtET01BdHRyaWJ1dGVzLCBRd2lrSlNYLCBRd2lrSlNYIGFzIEpTWCB9IGZyb20gJy4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpayc7XG5cbmV4cG9ydCB0eXBlIHsgUXdpa0ludHJpbnNpY0VsZW1lbnRzIH0gZnJvbSAnLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1xd2lrLWVsZW1lbnRzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ1NTUHJvcGVydGllcyxcbiAgUXdpa0hUTUxFbGVtZW50cyxcbiAgUXdpa1NWR0VsZW1lbnRzLFxuICBTVkdBdHRyaWJ1dGVzLFxuICBIVE1MRWxlbWVudEF0dHJzLFxuICBTVkdQcm9wcyxcbn0gZnJvbSAnLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1nZW5lcmF0ZWQnO1xuZXhwb3J0IHsgcmVuZGVyIH0gZnJvbSAnLi9jbGllbnQvZG9tLXJlbmRlcic7XG5leHBvcnQgeyBnZXREb21Db250YWluZXIsIF9nZXRRQ29udGFpbmVyRWxlbWVudCB9IGZyb20gJy4vY2xpZW50L2RvbS1jb250YWluZXInO1xuZXhwb3J0IHR5cGUgeyBTdHJlYW1Xcml0ZXIsIFJlbmRlclNTUk9wdGlvbnMgfSBmcm9tICcuL3Nzci9zc3ItdHlwZXMnO1xuZXhwb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zLCBSZW5kZXJSZXN1bHQgfSBmcm9tICcuL2NsaWVudC90eXBlcyc7XG5leHBvcnQgdHlwZSB7IFNlcmlhbGl6YXRpb25TdHJhdGVneSB9IGZyb20gJy4vc2hhcmVkL3R5cGVzJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyB1c2UgQVBJXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB7IHVzZVN0b3JlLCB1bndyYXBTdG9yZSwgZm9yY2VTdG9yZUVmZmVjdHMgfSBmcm9tICcuL3VzZS91c2Utc3RvcmUucHVibGljJztcbmV4cG9ydCB7IHVudHJhY2sgfSBmcm9tICcuL3VzZS91c2UtY29yZSc7XG5leHBvcnQgeyB1c2VJZCB9IGZyb20gJy4vdXNlL3VzZS1pZCc7XG5leHBvcnQgeyB1c2VDb250ZXh0LCB1c2VDb250ZXh0UHJvdmlkZXIsIGNyZWF0ZUNvbnRleHRJZCB9IGZyb20gJy4vdXNlL3VzZS1jb250ZXh0JztcbmV4cG9ydCB7IHVzZVNlcnZlckRhdGEgfSBmcm9tICcuL3VzZS91c2UtZW52LWRhdGEnO1xuZXhwb3J0IHsgdXNlU3R5bGVzUXJsLCB1c2VTdHlsZXMkLCB1c2VTdHlsZXNTY29wZWRRcmwsIHVzZVN0eWxlc1Njb3BlZCQgfSBmcm9tICcuL3VzZS91c2Utc3R5bGVzJztcbmV4cG9ydCB7IHVzZU9uLCB1c2VPbkRvY3VtZW50LCB1c2VPbldpbmRvdywgdHlwZSBVc2VPbk9wdGlvbnMgfSBmcm9tICcuL3VzZS91c2Utb24nO1xuZXhwb3J0IHsgdXNlU2lnbmFsLCB1c2VDb25zdGFudCB9IGZyb20gJy4vdXNlL3VzZS1zaWduYWwnO1xuZXhwb3J0IHsgd2l0aExvY2FsZSwgZ2V0TG9jYWxlIH0gZnJvbSAnLi91c2UvdXNlLWxvY2FsZSc7XG5cbmV4cG9ydCB0eXBlIHsgVXNlU3R5bGVzU2NvcGVkIH0gZnJvbSAnLi91c2UvdXNlLXN0eWxlcyc7XG5leHBvcnQgdHlwZSB7IFVzZVNpZ25hbCB9IGZyb20gJy4vdXNlL3VzZS1zaWduYWwnO1xuZXhwb3J0IHR5cGUgeyBDb250ZXh0SWQgfSBmcm9tICcuL3VzZS91c2UtY29udGV4dCc7XG5leHBvcnQgdHlwZSB7IFVzZVN0b3JlT3B0aW9ucyB9IGZyb20gJy4vdXNlL3VzZS1zdG9yZS5wdWJsaWMnO1xuZXhwb3J0IHR5cGUgeyBDb21wdXRlZEZuLCBDb21wdXRlZFJldHVyblR5cGUgfSBmcm9tICcuL3VzZS91c2UtY29tcHV0ZWQnO1xuZXhwb3J0IHsgdXNlQ29tcHV0ZWRRcmwgfSBmcm9tICcuL3VzZS91c2UtY29tcHV0ZWQnO1xuZXhwb3J0IHsgdXNlU2VyaWFsaXplclFybCwgdXNlU2VyaWFsaXplciQgfSBmcm9tICcuL3VzZS91c2Utc2VyaWFsaXplcic7XG5leHBvcnQgdHlwZSB7IE9uVmlzaWJsZVRhc2tPcHRpb25zLCBWaXNpYmxlVGFza1N0cmF0ZWd5IH0gZnJvbSAnLi91c2UvdXNlLXZpc2libGUtdGFzayc7XG5leHBvcnQgeyB1c2VWaXNpYmxlVGFza1FybCB9IGZyb20gJy4vdXNlL3VzZS12aXNpYmxlLXRhc2snO1xuZXhwb3J0IHR5cGUgeyBUYXNrQ3R4LCBUYXNrRm4sIFRyYWNrZXIsIFRhc2tPcHRpb25zIH0gZnJvbSAnLi91c2UvdXNlLXRhc2snO1xuZXhwb3J0IHR5cGUge1xuICBSZXNvdXJjZVByb3BzLFxuICBSZXNvdXJjZU9wdGlvbnMsXG4gIFJlc291cmNlQ3R4LFxuICBSZXNvdXJjZUZuLFxuICBSZXNvdXJjZVBlbmRpbmcsXG4gIFJlc291cmNlUmVqZWN0ZWQsXG4gIFJlc291cmNlUmVzb2x2ZWQsXG4gIFJlc291cmNlUmV0dXJuLFxufSBmcm9tICcuL3VzZS91c2UtcmVzb3VyY2UnO1xuZXhwb3J0IHsgdXNlUmVzb3VyY2VRcmwsIFJlc291cmNlIH0gZnJvbSAnLi91c2UvdXNlLXJlc291cmNlJztcbmV4cG9ydCB7IHVzZVJlc291cmNlJCB9IGZyb20gJy4vdXNlL3VzZS1yZXNvdXJjZS1kb2xsYXInO1xuZXhwb3J0IHsgdXNlVGFza1FybCB9IGZyb20gJy4vdXNlL3VzZS10YXNrJztcbmV4cG9ydCB7IHVzZVRhc2skIH0gZnJvbSAnLi91c2UvdXNlLXRhc2stZG9sbGFyJztcbmV4cG9ydCB7IHVzZVZpc2libGVUYXNrJCB9IGZyb20gJy4vdXNlL3VzZS12aXNpYmxlLXRhc2stZG9sbGFyJztcbmV4cG9ydCB7IHVzZUNvbXB1dGVkJCB9IGZyb20gJy4vdXNlL3VzZS1jb21wdXRlZCc7XG5leHBvcnQgdHlwZSB7IEFzeW5jRm4gfSBmcm9tICcuL3VzZS91c2UtYXN5bmMnO1xuZXhwb3J0IHsgdXNlQXN5bmNRcmwsIHVzZUFzeW5jJCB9IGZyb20gJy4vdXNlL3VzZS1hc3luYyc7XG5leHBvcnQgeyB1c2VFcnJvckJvdW5kYXJ5IH0gZnJvbSAnLi91c2UvdXNlLWVycm9yLWJvdW5kYXJ5JztcbmV4cG9ydCB0eXBlIHsgRXJyb3JCb3VuZGFyeVN0b3JlIH0gZnJvbSAnLi9zaGFyZWQvZXJyb3IvZXJyb3ItaGFuZGxpbmcnO1xuZXhwb3J0IHtcbiAgdHlwZSBSZWFkb25seVNpZ25hbCxcbiAgdHlwZSBBc3luY1NpZ25hbCxcbiAgdHlwZSBTaWduYWwsXG4gIHR5cGUgQ29tcHV0ZWRTaWduYWwsXG59IGZyb20gJy4vcmVhY3RpdmUtcHJpbWl0aXZlcy9zaWduYWwucHVibGljJztcbmV4cG9ydCB7XG4gIGlzU2lnbmFsLFxuICBjcmVhdGVTaWduYWwsXG4gIGNyZWF0ZUNvbXB1dGVkUXJsLFxuICBjcmVhdGVDb21wdXRlZCQsXG4gIGNyZWF0ZVNlcmlhbGl6ZXJRcmwsXG4gIGNyZWF0ZVNlcmlhbGl6ZXIkLFxuICBjcmVhdGVBc3luY1FybCxcbiAgY3JlYXRlQXN5bmMkLFxufSBmcm9tICcuL3JlYWN0aXZlLXByaW1pdGl2ZXMvc2lnbmFsLnB1YmxpYyc7XG5leHBvcnQgdHlwZSB7IENvbXB1dGVkT3B0aW9ucyB9IGZyb20gJy4vcmVhY3RpdmUtcHJpbWl0aXZlcy90eXBlcyc7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udHJvbCBmbG93XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB7IGVhY2hDbXBUYXNrIGFzIF9lYVQsIGVhY2hDbXAgYXMgX2VhQyB9IGZyb20gJy4vY29udHJvbC1mbG93L2VhY2gnO1xuZXhwb3J0IHsgRWFjaCB9IGZyb20gJy4vY29udHJvbC1mbG93L2VhY2gnO1xuZXhwb3J0IHtcbiAgcmV2ZWFsQ2FuUmV2ZWFsIGFzIF9yZVIsXG4gIHJldmVhbENsZWFudXBUYXNrIGFzIF9yZVQsXG4gIHJldmVhbENtcCBhcyBfcmVDLFxufSBmcm9tICcuL2NvbnRyb2wtZmxvdy9yZXZlYWwnO1xuZXhwb3J0IHsgUmV2ZWFsIH0gZnJvbSAnLi9jb250cm9sLWZsb3cvcmV2ZWFsJztcbmV4cG9ydCB0eXBlIHsgUmV2ZWFsT3JkZXIsIFJldmVhbFByb3BzIH0gZnJvbSAnLi9jb250cm9sLWZsb3cvcmV2ZWFsJztcbmV4cG9ydCB7IHN1c3BlbnNlVGFzayBhcyBfc3VULCBzdXNwZW5zZUNtcCBhcyBfc3VDIH0gZnJvbSAnLi9jb250cm9sLWZsb3cvc3VzcGVuc2UnO1xuZXhwb3J0IHsgU3VzcGVuc2UgfSBmcm9tICcuL2NvbnRyb2wtZmxvdy9zdXNwZW5zZSc7XG5leHBvcnQgdHlwZSB7IFN1c3BlbnNlUHJvcHMgfSBmcm9tICcuL2NvbnRyb2wtZmxvdy9zdXNwZW5zZSc7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGV2ZWxvcGVyIExvdy1MZXZlbCBBUElcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IHR5cGUgeyBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmV4cG9ydCB7XG4gIG5vU2VyaWFsaXplLFxuICBOb1NlcmlhbGl6ZVN5bWJvbCxcbiAgU2VyaWFsaXplclN5bWJvbCxcbiAgdHlwZSBOb1NlcmlhbGl6ZSxcbn0gZnJvbSAnLi9zaGFyZWQvc2VyZGVzL3ZlcmlmeSc7XG5leHBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBRd2lrIEV2ZW50c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgdHlwZSB7XG4gIEtub3duRXZlbnROYW1lcyxcbiAgUXdpa0lkbGVFdmVudCxcbiAgUXdpa0luaXRFdmVudCxcbiAgUXdpa1Jlc3VtZUV2ZW50LFxuICBRd2lrU3ltYm9sRXZlbnQsXG4gIFF3aWtUcmFuc2l0aW9uRXZlbnQsXG4gIFF3aWtWaWV3VHJhbnNpdGlvbkV2ZW50LFxuICBRd2lrVmlzaWJsZUV2ZW50LFxuICAvLyBvbGRcbiAgTmF0aXZlQW5pbWF0aW9uRXZlbnQsXG4gIE5hdGl2ZUNsaXBib2FyZEV2ZW50LFxuICBOYXRpdmVDb21wb3NpdGlvbkV2ZW50LFxuICBOYXRpdmVEcmFnRXZlbnQsXG4gIE5hdGl2ZUZvY3VzRXZlbnQsXG4gIE5hdGl2ZUtleWJvYXJkRXZlbnQsXG4gIE5hdGl2ZU1vdXNlRXZlbnQsXG4gIE5hdGl2ZVBvaW50ZXJFdmVudCxcbiAgTmF0aXZlVG91Y2hFdmVudCxcbiAgTmF0aXZlVHJhbnNpdGlvbkV2ZW50LFxuICBOYXRpdmVVSUV2ZW50LFxuICBOYXRpdmVXaGVlbEV2ZW50LFxuICBRd2lrQW5pbWF0aW9uRXZlbnQsXG4gIFF3aWtDbGlwYm9hcmRFdmVudCxcbiAgUXdpa0NvbXBvc2l0aW9uRXZlbnQsXG4gIFF3aWtEcmFnRXZlbnQsXG4gIFF3aWtQb2ludGVyRXZlbnQsXG4gIFF3aWtGb2N1c0V2ZW50LFxuICBRd2lrU3VibWl0RXZlbnQsXG4gIFF3aWtJbnZhbGlkRXZlbnQsXG4gIFF3aWtDaGFuZ2VFdmVudCxcbiAgUXdpa0tleWJvYXJkRXZlbnQsXG4gIFF3aWtNb3VzZUV2ZW50LFxuICBRd2lrVG91Y2hFdmVudCxcbiAgUXdpa1VJRXZlbnQsXG4gIFF3aWtXaGVlbEV2ZW50LFxufSBmcm9tICcuL3NoYXJlZC9qc3gvdHlwZXMvanN4LXF3aWstZXZlbnRzJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb21wb25lbnRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB7IFByZWZldGNoU2VydmljZVdvcmtlciwgUHJlZmV0Y2hHcmFwaCB9IGZyb20gJy4vc2hhcmVkL3ByZWZldGNoLXNlcnZpY2Utd29ya2VyL3ByZWZldGNoJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJTlRFUk5BTFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsJztcbiJdfQ=="],"names":["isElement","DEBUG","log","isBrowser","getEffects","createSignal","_createSignal","createComputedQrl","createAsyncQrl","createSerializerQrl","_hasOwnProperty","processVNodeData","preload","creator"],"mappings":"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C7B,QAAQ,CAAC;AACT,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,CAAC,QAAQ,KAAK;AAC9C,IAAI,IAAI,MAAM,GAAG,IAAI;AACrB,IAAI,OAAO,CAAC,IAAI,KAAK;AACrB,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC/C,QAAQ;AACR,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,IAAI,CAAC;AACL,CAAC;;ACvBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA6BA;AACO,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG,IAAI,KAAK;AACtE,IAAI,KAAK,IAAI,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,qBAAqB,yBAAyB,CAAC;AAChG,IAAI,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,8BAA8B,EAAE,IAAI,EAAE,6BAA6B;AACzI,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,IAAI,KAAK;AACzC,IAAI,KAAK;AACT,QAAQ,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,kDAAkD,EAAE,IAAI,CAAC;AACrG,IAAI,qBAAqB,MAAM,CAAC,MAAM,CAAC;AACvC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC;AACtC,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK;AACzD,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE;AACnD,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AAC3B,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,eAAe,CAAC,OAAO,CAAC;AAChC,IAAI;AACJ,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,kBAAkB,CAAC,QAAQ,CAAC;AACpC,IAAI;AACJ,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC;AACtE,IAAI,GAAG,CAAC,CAAC,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,iBAAiB,CAAC,cAAc;;AC5B5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,QAAQ,iBAAiB,iBAAiB,CAAC,UAAU;;AC9DlE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,iBAAiB,iBAAiB,CAAC,iBAAiB;;AC3BhF,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK;AAClC,IAAI,GAAG,CAAC,OAAO,EAAE;AACjB,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1C,CAAC;AACD;AACY,MAAC,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK;AAC7C,IAAI,OAAO,WAAW,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,SAAS,GAAG,iBAAiB,CAAC,WAAW;;AC7BtD;AACY,MAAC,gBAAgB,GAAG,MAAM;AACtC,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAChD,IAAI,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC;AAC5C,IAAI,OAAO,KAAK;AAChB;;ACEA;AACY,MA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"}