{"version":3,"file":"index.mjs","sources":["../../../node_modules/svelte/internal/index.mjs","../../rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../../rrweb/es/rrweb/packages/rrweb/src/utils.js","../../rrweb/es/rrweb/packages/types/dist/types.js","../../rrweb/es/rrweb/ext/tslib/tslib.es6.js","../../rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../../rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js","../../rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js","../../rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js","../../rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js","../../rrweb/es/rrweb/packages/rrdom/es/rrdom.js","../../rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../../rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js","../../rrweb/es/rrweb/packages/rrweb/src/record/index.js","../../rrweb/es/rrweb/ext/fflate/esm/browser.js","../../rrweb/es/rrweb/packages/rrweb/src/packer/base.js","../../rrweb/es/rrweb/packages/rrweb/src/packer/unpack.js","../../rrweb/es/rrweb/ext/mitt/dist/mitt.mjs.js","../../rrweb/es/rrweb/ext/@xstate/fsm/es/index.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/smoothscroll.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/timer.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/machine.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/canvas/2d.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/canvas/index.js","../../rrweb/es/rrweb/packages/rrweb/src/replay/index.js","../src/utils.ts","../src/components/Switch.svelte","../src/Controller.svelte","../src/Player.svelte","../src/main.ts"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n    // @ts-ignore\n    for (const k in src)\n        tar[k] = src[k];\n    return tar;\n}\nfunction is_promise(value) {\n    return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n    element.__svelte_meta = {\n        loc: { file, line, column, char }\n    };\n}\nfunction run(fn) {\n    return fn();\n}\nfunction blank_object() {\n    return Object.create(null);\n}\nfunction run_all(fns) {\n    fns.forEach(run);\n}\nfunction is_function(thing) {\n    return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n    return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n    if (!src_url_equal_anchor) {\n        src_url_equal_anchor = document.createElement('a');\n    }\n    src_url_equal_anchor.href = url;\n    return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n    return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n    return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n    if (store != null && typeof store.subscribe !== 'function') {\n        throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n    }\n}\nfunction subscribe(store, ...callbacks) {\n    if (store == null) {\n        return noop;\n    }\n    const unsub = store.subscribe(...callbacks);\n    return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n    let value;\n    subscribe(store, _ => value = _)();\n    return value;\n}\nfunction component_subscribe(component, store, callback) {\n    component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n    if (definition) {\n        const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n        return definition[0](slot_ctx);\n    }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n    return definition[1] && fn\n        ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n        : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n    if (definition[2] && fn) {\n        const lets = definition[2](fn(dirty));\n        if ($$scope.dirty === undefined) {\n            return lets;\n        }\n        if (typeof lets === 'object') {\n            const merged = [];\n            const len = Math.max($$scope.dirty.length, lets.length);\n            for (let i = 0; i < len; i += 1) {\n                merged[i] = $$scope.dirty[i] | lets[i];\n            }\n            return merged;\n        }\n        return $$scope.dirty | lets;\n    }\n    return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n    if (slot_changes) {\n        const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n        slot.p(slot_context, slot_changes);\n    }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n    const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n    update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n    if ($$scope.ctx.length > 32) {\n        const dirty = [];\n        const length = $$scope.ctx.length / 32;\n        for (let i = 0; i < length; i++) {\n            dirty[i] = -1;\n        }\n        return dirty;\n    }\n    return -1;\n}\nfunction exclude_internal_props(props) {\n    const result = {};\n    for (const k in props)\n        if (k[0] !== '$')\n            result[k] = props[k];\n    return result;\n}\nfunction compute_rest_props(props, keys) {\n    const rest = {};\n    keys = new Set(keys);\n    for (const k in props)\n        if (!keys.has(k) && k[0] !== '$')\n            rest[k] = props[k];\n    return rest;\n}\nfunction compute_slots(slots) {\n    const result = {};\n    for (const key in slots) {\n        result[key] = true;\n    }\n    return result;\n}\nfunction once(fn) {\n    let ran = false;\n    return function (...args) {\n        if (ran)\n            return;\n        ran = true;\n        fn.call(this, ...args);\n    };\n}\nfunction null_to_empty(value) {\n    return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n    store.set(value);\n    return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n    return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n    ? () => window.performance.now()\n    : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n    now = fn;\n}\nfunction set_raf(fn) {\n    raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n    tasks.forEach(task => {\n        if (!task.c(now)) {\n            tasks.delete(task);\n            task.f();\n        }\n    });\n    if (tasks.size !== 0)\n        raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n    tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n    let task;\n    if (tasks.size === 0)\n        raf(run_tasks);\n    return {\n        promise: new Promise(fulfill => {\n            tasks.add(task = { c: callback, f: fulfill });\n        }),\n        abort() {\n            tasks.delete(task);\n        }\n    };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n    is_hydrating = true;\n}\nfunction end_hydrating() {\n    is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n    // Return first index of value larger than input value in the range [low, high)\n    while (low < high) {\n        const mid = low + ((high - low) >> 1);\n        if (key(mid) <= value) {\n            low = mid + 1;\n        }\n        else {\n            high = mid;\n        }\n    }\n    return low;\n}\nfunction init_hydrate(target) {\n    if (target.hydrate_init)\n        return;\n    target.hydrate_init = true;\n    // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n    let children = target.childNodes;\n    // If target is <head>, there may be children without claim_order\n    if (target.nodeName === 'HEAD') {\n        const myChildren = [];\n        for (let i = 0; i < children.length; i++) {\n            const node = children[i];\n            if (node.claim_order !== undefined) {\n                myChildren.push(node);\n            }\n        }\n        children = myChildren;\n    }\n    /*\n    * Reorder claimed children optimally.\n    * We can reorder claimed children optimally by finding the longest subsequence of\n    * nodes that are already claimed in order and only moving the rest. The longest\n    * subsequence subsequence of nodes that are claimed in order can be found by\n    * computing the longest increasing subsequence of .claim_order values.\n    *\n    * This algorithm is optimal in generating the least amount of reorder operations\n    * possible.\n    *\n    * Proof:\n    * We know that, given a set of reordering operations, the nodes that do not move\n    * always form an increasing subsequence, since they do not move among each other\n    * meaning that they must be already ordered among each other. Thus, the maximal\n    * set of nodes that do not move form a longest increasing subsequence.\n    */\n    // Compute longest increasing subsequence\n    // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n    const m = new Int32Array(children.length + 1);\n    // Predecessor indices + 1\n    const p = new Int32Array(children.length);\n    m[0] = -1;\n    let longest = 0;\n    for (let i = 0; i < children.length; i++) {\n        const current = children[i].claim_order;\n        // Find the largest subsequence length such that it ends in a value less than our current value\n        // upper_bound returns first greater value, so we subtract one\n        // with fast path for when we are on the current longest subsequence\n        const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n        p[i] = m[seqLen] + 1;\n        const newLen = seqLen + 1;\n        // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n        m[newLen] = i;\n        longest = Math.max(newLen, longest);\n    }\n    // The longest increasing subsequence of nodes (initially reversed)\n    const lis = [];\n    // The rest of the nodes, nodes that will be moved\n    const toMove = [];\n    let last = children.length - 1;\n    for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n        lis.push(children[cur - 1]);\n        for (; last >= cur; last--) {\n            toMove.push(children[last]);\n        }\n        last--;\n    }\n    for (; last >= 0; last--) {\n        toMove.push(children[last]);\n    }\n    lis.reverse();\n    // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n    toMove.sort((a, b) => a.claim_order - b.claim_order);\n    // Finally, we move the nodes\n    for (let i = 0, j = 0; i < toMove.length; i++) {\n        while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n            j++;\n        }\n        const anchor = j < lis.length ? lis[j] : null;\n        target.insertBefore(toMove[i], anchor);\n    }\n}\nfunction append(target, node) {\n    target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n    const append_styles_to = get_root_for_style(target);\n    if (!append_styles_to.getElementById(style_sheet_id)) {\n        const style = element('style');\n        style.id = style_sheet_id;\n        style.textContent = styles;\n        append_stylesheet(append_styles_to, style);\n    }\n}\nfunction get_root_for_style(node) {\n    if (!node)\n        return document;\n    const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n    if (root && root.host) {\n        return root;\n    }\n    return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n    const style_element = element('style');\n    append_stylesheet(get_root_for_style(node), style_element);\n    return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n    append(node.head || node, style);\n}\nfunction append_hydration(target, node) {\n    if (is_hydrating) {\n        init_hydrate(target);\n        if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) {\n            target.actual_end_child = target.firstChild;\n        }\n        // Skip nodes of undefined ordering\n        while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n            target.actual_end_child = target.actual_end_child.nextSibling;\n        }\n        if (node !== target.actual_end_child) {\n            // We only insert if the ordering of this node should be modified or the parent node is not target\n            if (node.claim_order !== undefined || node.parentNode !== target) {\n                target.insertBefore(node, target.actual_end_child);\n            }\n        }\n        else {\n            target.actual_end_child = node.nextSibling;\n        }\n    }\n    else if (node.parentNode !== target || node.nextSibling !== null) {\n        target.appendChild(node);\n    }\n}\nfunction insert(target, node, anchor) {\n    target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n    if (is_hydrating && !anchor) {\n        append_hydration(target, node);\n    }\n    else if (node.parentNode !== target || node.nextSibling != anchor) {\n        target.insertBefore(node, anchor || null);\n    }\n}\nfunction detach(node) {\n    node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n    for (let i = 0; i < iterations.length; i += 1) {\n        if (iterations[i])\n            iterations[i].d(detaching);\n    }\n}\nfunction element(name) {\n    return document.createElement(name);\n}\nfunction element_is(name, is) {\n    return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n    const target = {};\n    for (const k in obj) {\n        if (has_prop(obj, k)\n            // @ts-ignore\n            && exclude.indexOf(k) === -1) {\n            // @ts-ignore\n            target[k] = obj[k];\n        }\n    }\n    return target;\n}\nfunction svg_element(name) {\n    return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n    return document.createTextNode(data);\n}\nfunction space() {\n    return text(' ');\n}\nfunction empty() {\n    return text('');\n}\nfunction listen(node, event, handler, options) {\n    node.addEventListener(event, handler, options);\n    return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n    return function (event) {\n        event.preventDefault();\n        // @ts-ignore\n        return fn.call(this, event);\n    };\n}\nfunction stop_propagation(fn) {\n    return function (event) {\n        event.stopPropagation();\n        // @ts-ignore\n        return fn.call(this, event);\n    };\n}\nfunction self(fn) {\n    return function (event) {\n        // @ts-ignore\n        if (event.target === this)\n            fn.call(this, event);\n    };\n}\nfunction trusted(fn) {\n    return function (event) {\n        // @ts-ignore\n        if (event.isTrusted)\n            fn.call(this, event);\n    };\n}\nfunction attr(node, attribute, value) {\n    if (value == null)\n        node.removeAttribute(attribute);\n    else if (node.getAttribute(attribute) !== value)\n        node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n    // @ts-ignore\n    const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n    for (const key in attributes) {\n        if (attributes[key] == null) {\n            node.removeAttribute(key);\n        }\n        else if (key === 'style') {\n            node.style.cssText = attributes[key];\n        }\n        else if (key === '__value') {\n            node.value = node[key] = attributes[key];\n        }\n        else if (descriptors[key] && descriptors[key].set) {\n            node[key] = attributes[key];\n        }\n        else {\n            attr(node, key, attributes[key]);\n        }\n    }\n}\nfunction set_svg_attributes(node, attributes) {\n    for (const key in attributes) {\n        attr(node, key, attributes[key]);\n    }\n}\nfunction set_custom_element_data(node, prop, value) {\n    if (prop in node) {\n        node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n    }\n    else {\n        attr(node, prop, value);\n    }\n}\nfunction xlink_attr(node, attribute, value) {\n    node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n    const value = new Set();\n    for (let i = 0; i < group.length; i += 1) {\n        if (group[i].checked)\n            value.add(group[i].__value);\n    }\n    if (!checked) {\n        value.delete(__value);\n    }\n    return Array.from(value);\n}\nfunction to_number(value) {\n    return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n    const array = [];\n    for (let i = 0; i < ranges.length; i += 1) {\n        array.push({ start: ranges.start(i), end: ranges.end(i) });\n    }\n    return array;\n}\nfunction children(element) {\n    return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n    if (nodes.claim_info === undefined) {\n        nodes.claim_info = { last_index: 0, total_claimed: 0 };\n    }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n    // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n    init_claim_info(nodes);\n    const resultNode = (() => {\n        // We first try to find an element after the previous one\n        for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n            const node = nodes[i];\n            if (predicate(node)) {\n                const replacement = processNode(node);\n                if (replacement === undefined) {\n                    nodes.splice(i, 1);\n                }\n                else {\n                    nodes[i] = replacement;\n                }\n                if (!dontUpdateLastIndex) {\n                    nodes.claim_info.last_index = i;\n                }\n                return node;\n            }\n        }\n        // Otherwise, we try to find one before\n        // We iterate in reverse so that we don't go too far back\n        for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n            const node = nodes[i];\n            if (predicate(node)) {\n                const replacement = processNode(node);\n                if (replacement === undefined) {\n                    nodes.splice(i, 1);\n                }\n                else {\n                    nodes[i] = replacement;\n                }\n                if (!dontUpdateLastIndex) {\n                    nodes.claim_info.last_index = i;\n                }\n                else if (replacement === undefined) {\n                    // Since we spliced before the last_index, we decrease it\n                    nodes.claim_info.last_index--;\n                }\n                return node;\n            }\n        }\n        // If we can't find any matching node, we create a new one\n        return createNode();\n    })();\n    resultNode.claim_order = nodes.claim_info.total_claimed;\n    nodes.claim_info.total_claimed += 1;\n    return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n    return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n        const remove = [];\n        for (let j = 0; j < node.attributes.length; j++) {\n            const attribute = node.attributes[j];\n            if (!attributes[attribute.name]) {\n                remove.push(attribute.name);\n            }\n        }\n        remove.forEach(v => node.removeAttribute(v));\n        return undefined;\n    }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n    return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n    return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n    return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n        const dataStr = '' + data;\n        if (node.data.startsWith(dataStr)) {\n            if (node.data.length !== dataStr.length) {\n                return node.splitText(dataStr.length);\n            }\n        }\n        else {\n            node.data = dataStr;\n        }\n    }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n    );\n}\nfunction claim_space(nodes) {\n    return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n    for (let i = start; i < nodes.length; i += 1) {\n        const node = nodes[i];\n        if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n            return i;\n        }\n    }\n    return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n    // find html opening tag\n    const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n    const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n    if (start_index === end_index) {\n        return new HtmlTagHydration(undefined, is_svg);\n    }\n    init_claim_info(nodes);\n    const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n    detach(html_tag_nodes[0]);\n    detach(html_tag_nodes[html_tag_nodes.length - 1]);\n    const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n    for (const n of claimed_nodes) {\n        n.claim_order = nodes.claim_info.total_claimed;\n        nodes.claim_info.total_claimed += 1;\n    }\n    return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n    data = '' + data;\n    if (text.wholeText !== data)\n        text.data = data;\n}\nfunction set_input_value(input, value) {\n    input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n    try {\n        input.type = type;\n    }\n    catch (e) {\n        // do nothing\n    }\n}\nfunction set_style(node, key, value, important) {\n    if (value === null) {\n        node.style.removeProperty(key);\n    }\n    else {\n        node.style.setProperty(key, value, important ? 'important' : '');\n    }\n}\nfunction select_option(select, value) {\n    for (let i = 0; i < select.options.length; i += 1) {\n        const option = select.options[i];\n        if (option.__value === value) {\n            option.selected = true;\n            return;\n        }\n    }\n    select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n    for (let i = 0; i < select.options.length; i += 1) {\n        const option = select.options[i];\n        option.selected = ~value.indexOf(option.__value);\n    }\n}\nfunction select_value(select) {\n    const selected_option = select.querySelector(':checked') || select.options[0];\n    return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n    return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n    if (crossorigin === undefined) {\n        crossorigin = false;\n        try {\n            if (typeof window !== 'undefined' && window.parent) {\n                void window.parent.document;\n            }\n        }\n        catch (error) {\n            crossorigin = true;\n        }\n    }\n    return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n    const computed_style = getComputedStyle(node);\n    if (computed_style.position === 'static') {\n        node.style.position = 'relative';\n    }\n    const iframe = element('iframe');\n    iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n        'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n    iframe.setAttribute('aria-hidden', 'true');\n    iframe.tabIndex = -1;\n    const crossorigin = is_crossorigin();\n    let unsubscribe;\n    if (crossorigin) {\n        iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n        unsubscribe = listen(window, 'message', (event) => {\n            if (event.source === iframe.contentWindow)\n                fn();\n        });\n    }\n    else {\n        iframe.src = 'about:blank';\n        iframe.onload = () => {\n            unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n        };\n    }\n    append(node, iframe);\n    return () => {\n        if (crossorigin) {\n            unsubscribe();\n        }\n        else if (unsubscribe && iframe.contentWindow) {\n            unsubscribe();\n        }\n        detach(iframe);\n    };\n}\nfunction toggle_class(element, name, toggle) {\n    element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n    const e = document.createEvent('CustomEvent');\n    e.initCustomEvent(type, bubbles, cancelable, detail);\n    return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n    return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n    constructor(is_svg = false) {\n        this.is_svg = false;\n        this.is_svg = is_svg;\n        this.e = this.n = null;\n    }\n    c(html) {\n        this.h(html);\n    }\n    m(html, target, anchor = null) {\n        if (!this.e) {\n            if (this.is_svg)\n                this.e = svg_element(target.nodeName);\n            else\n                this.e = element(target.nodeName);\n            this.t = target;\n            this.c(html);\n        }\n        this.i(anchor);\n    }\n    h(html) {\n        this.e.innerHTML = html;\n        this.n = Array.from(this.e.childNodes);\n    }\n    i(anchor) {\n        for (let i = 0; i < this.n.length; i += 1) {\n            insert(this.t, this.n[i], anchor);\n        }\n    }\n    p(html) {\n        this.d();\n        this.h(html);\n        this.i(this.a);\n    }\n    d() {\n        this.n.forEach(detach);\n    }\n}\nclass HtmlTagHydration extends HtmlTag {\n    constructor(claimed_nodes, is_svg = false) {\n        super(is_svg);\n        this.e = this.n = null;\n        this.l = claimed_nodes;\n    }\n    c(html) {\n        if (this.l) {\n            this.n = this.l;\n        }\n        else {\n            super.c(html);\n        }\n    }\n    i(anchor) {\n        for (let i = 0; i < this.n.length; i += 1) {\n            insert_hydration(this.t, this.n[i], anchor);\n        }\n    }\n}\nfunction attribute_to_object(attributes) {\n    const result = {};\n    for (const attribute of attributes) {\n        result[attribute.name] = attribute.value;\n    }\n    return result;\n}\nfunction get_custom_elements_slots(element) {\n    const result = {};\n    element.childNodes.forEach((node) => {\n        result[node.slot || 'default'] = true;\n    });\n    return result;\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n    let hash = 5381;\n    let i = str.length;\n    while (i--)\n        hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n    return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n    const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n    managed_styles.set(doc, info);\n    return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n    const step = 16.666 / duration;\n    let keyframes = '{\\n';\n    for (let p = 0; p <= 1; p += step) {\n        const t = a + (b - a) * ease(p);\n        keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n    }\n    const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n    const name = `__svelte_${hash(rule)}_${uid}`;\n    const doc = get_root_for_style(node);\n    const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n    if (!rules[name]) {\n        rules[name] = true;\n        stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n    }\n    const animation = node.style.animation || '';\n    node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n    active += 1;\n    return name;\n}\nfunction delete_rule(node, name) {\n    const previous = (node.style.animation || '').split(', ');\n    const next = previous.filter(name\n        ? anim => anim.indexOf(name) < 0 // remove specific animation\n        : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n    );\n    const deleted = previous.length - next.length;\n    if (deleted) {\n        node.style.animation = next.join(', ');\n        active -= deleted;\n        if (!active)\n            clear_rules();\n    }\n}\nfunction clear_rules() {\n    raf(() => {\n        if (active)\n            return;\n        managed_styles.forEach(info => {\n            const { stylesheet } = info;\n            let i = stylesheet.cssRules.length;\n            while (i--)\n                stylesheet.deleteRule(i);\n            info.rules = {};\n        });\n        managed_styles.clear();\n    });\n}\n\nfunction create_animation(node, from, fn, params) {\n    if (!from)\n        return noop;\n    const to = node.getBoundingClientRect();\n    if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n        return noop;\n    const { delay = 0, duration = 300, easing = identity, \n    // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n    start: start_time = now() + delay, \n    // @ts-ignore todo:\n    end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n    let running = true;\n    let started = false;\n    let name;\n    function start() {\n        if (css) {\n            name = create_rule(node, 0, 1, duration, delay, easing, css);\n        }\n        if (!delay) {\n            started = true;\n        }\n    }\n    function stop() {\n        if (css)\n            delete_rule(node, name);\n        running = false;\n    }\n    loop(now => {\n        if (!started && now >= start_time) {\n            started = true;\n        }\n        if (started && now >= end) {\n            tick(1, 0);\n            stop();\n        }\n        if (!running) {\n            return false;\n        }\n        if (started) {\n            const p = now - start_time;\n            const t = 0 + 1 * easing(p / duration);\n            tick(t, 1 - t);\n        }\n        return true;\n    });\n    start();\n    tick(0, 1);\n    return stop;\n}\nfunction fix_position(node) {\n    const style = getComputedStyle(node);\n    if (style.position !== 'absolute' && style.position !== 'fixed') {\n        const { width, height } = style;\n        const a = node.getBoundingClientRect();\n        node.style.position = 'absolute';\n        node.style.width = width;\n        node.style.height = height;\n        add_transform(node, a);\n    }\n}\nfunction add_transform(node, a) {\n    const b = node.getBoundingClientRect();\n    if (a.left !== b.left || a.top !== b.top) {\n        const style = getComputedStyle(node);\n        const transform = style.transform === 'none' ? '' : style.transform;\n        node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n    }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n    current_component = component;\n}\nfunction get_current_component() {\n    if (!current_component)\n        throw new Error('Function called outside component initialization');\n    return current_component;\n}\nfunction beforeUpdate(fn) {\n    get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n    get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n    get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n    get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n    const component = get_current_component();\n    return (type, detail, { cancelable = false } = {}) => {\n        const callbacks = component.$$.callbacks[type];\n        if (callbacks) {\n            // TODO are there situations where events could be dispatched\n            // in a server (non-DOM) environment?\n            const event = custom_event(type, detail, { cancelable });\n            callbacks.slice().forEach(fn => {\n                fn.call(component, event);\n            });\n            return !event.defaultPrevented;\n        }\n        return true;\n    };\n}\nfunction setContext(key, context) {\n    get_current_component().$$.context.set(key, context);\n    return context;\n}\nfunction getContext(key) {\n    return get_current_component().$$.context.get(key);\n}\nfunction getAllContexts() {\n    return get_current_component().$$.context;\n}\nfunction hasContext(key) {\n    return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n    const callbacks = component.$$.callbacks[event.type];\n    if (callbacks) {\n        // @ts-ignore\n        callbacks.slice().forEach(fn => fn.call(this, event));\n    }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n    if (!update_scheduled) {\n        update_scheduled = true;\n        resolved_promise.then(flush);\n    }\n}\nfunction tick() {\n    schedule_update();\n    return resolved_promise;\n}\nfunction add_render_callback(fn) {\n    render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n    flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n//    for afterUpdates called during the initial onMount, which are called in\n//    reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n//    dirty_components array and will cause a reentrant call to flush(). Because\n//    the flush index is kept outside the function, the reentrant call will pick\n//    up where the earlier call left off and go through all dirty components. The\n//    current_component value is saved and restored so that the reentrant call will\n//    not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n//    callback called a second time; the seen_callbacks set, outside the flush()\n//    function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n    const saved_component = current_component;\n    do {\n        // first, call beforeUpdate functions\n        // and update components\n        while (flushidx < dirty_components.length) {\n            const component = dirty_components[flushidx];\n            flushidx++;\n            set_current_component(component);\n            update(component.$$);\n        }\n        set_current_component(null);\n        dirty_components.length = 0;\n        flushidx = 0;\n        while (binding_callbacks.length)\n            binding_callbacks.pop()();\n        // then, once components are updated, call\n        // afterUpdate functions. This may cause\n        // subsequent updates...\n        for (let i = 0; i < render_callbacks.length; i += 1) {\n            const callback = render_callbacks[i];\n            if (!seen_callbacks.has(callback)) {\n                // ...so guard against infinite loops\n                seen_callbacks.add(callback);\n                callback();\n            }\n        }\n        render_callbacks.length = 0;\n    } while (dirty_components.length);\n    while (flush_callbacks.length) {\n        flush_callbacks.pop()();\n    }\n    update_scheduled = false;\n    seen_callbacks.clear();\n    set_current_component(saved_component);\n}\nfunction update($$) {\n    if ($$.fragment !== null) {\n        $$.update();\n        run_all($$.before_update);\n        const dirty = $$.dirty;\n        $$.dirty = [-1];\n        $$.fragment && $$.fragment.p($$.ctx, dirty);\n        $$.after_update.forEach(add_render_callback);\n    }\n}\n\nlet promise;\nfunction wait() {\n    if (!promise) {\n        promise = Promise.resolve();\n        promise.then(() => {\n            promise = null;\n        });\n    }\n    return promise;\n}\nfunction dispatch(node, direction, kind) {\n    node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n    outros = {\n        r: 0,\n        c: [],\n        p: outros // parent group\n    };\n}\nfunction check_outros() {\n    if (!outros.r) {\n        run_all(outros.c);\n    }\n    outros = outros.p;\n}\nfunction transition_in(block, local) {\n    if (block && block.i) {\n        outroing.delete(block);\n        block.i(local);\n    }\n}\nfunction transition_out(block, local, detach, callback) {\n    if (block && block.o) {\n        if (outroing.has(block))\n            return;\n        outroing.add(block);\n        outros.c.push(() => {\n            outroing.delete(block);\n            if (callback) {\n                if (detach)\n                    block.d(1);\n                callback();\n            }\n        });\n        block.o(local);\n    }\n    else if (callback) {\n        callback();\n    }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n    let config = fn(node, params);\n    let running = false;\n    let animation_name;\n    let task;\n    let uid = 0;\n    function cleanup() {\n        if (animation_name)\n            delete_rule(node, animation_name);\n    }\n    function go() {\n        const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n        if (css)\n            animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n        tick(0, 1);\n        const start_time = now() + delay;\n        const end_time = start_time + duration;\n        if (task)\n            task.abort();\n        running = true;\n        add_render_callback(() => dispatch(node, true, 'start'));\n        task = loop(now => {\n            if (running) {\n                if (now >= end_time) {\n                    tick(1, 0);\n                    dispatch(node, true, 'end');\n                    cleanup();\n                    return running = false;\n                }\n                if (now >= start_time) {\n                    const t = easing((now - start_time) / duration);\n                    tick(t, 1 - t);\n                }\n            }\n            return running;\n        });\n    }\n    let started = false;\n    return {\n        start() {\n            if (started)\n                return;\n            started = true;\n            delete_rule(node);\n            if (is_function(config)) {\n                config = config();\n                wait().then(go);\n            }\n            else {\n                go();\n            }\n        },\n        invalidate() {\n            started = false;\n        },\n        end() {\n            if (running) {\n                cleanup();\n                running = false;\n            }\n        }\n    };\n}\nfunction create_out_transition(node, fn, params) {\n    let config = fn(node, params);\n    let running = true;\n    let animation_name;\n    const group = outros;\n    group.r += 1;\n    function go() {\n        const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n        if (css)\n            animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n        const start_time = now() + delay;\n        const end_time = start_time + duration;\n        add_render_callback(() => dispatch(node, false, 'start'));\n        loop(now => {\n            if (running) {\n                if (now >= end_time) {\n                    tick(0, 1);\n                    dispatch(node, false, 'end');\n                    if (!--group.r) {\n                        // this will result in `end()` being called,\n                        // so we don't need to clean up here\n                        run_all(group.c);\n                    }\n                    return false;\n                }\n                if (now >= start_time) {\n                    const t = easing((now - start_time) / duration);\n                    tick(1 - t, t);\n                }\n            }\n            return running;\n        });\n    }\n    if (is_function(config)) {\n        wait().then(() => {\n            // @ts-ignore\n            config = config();\n            go();\n        });\n    }\n    else {\n        go();\n    }\n    return {\n        end(reset) {\n            if (reset && config.tick) {\n                config.tick(1, 0);\n            }\n            if (running) {\n                if (animation_name)\n                    delete_rule(node, animation_name);\n                running = false;\n            }\n        }\n    };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n    let config = fn(node, params);\n    let t = intro ? 0 : 1;\n    let running_program = null;\n    let pending_program = null;\n    let animation_name = null;\n    function clear_animation() {\n        if (animation_name)\n            delete_rule(node, animation_name);\n    }\n    function init(program, duration) {\n        const d = (program.b - t);\n        duration *= Math.abs(d);\n        return {\n            a: t,\n            b: program.b,\n            d,\n            duration,\n            start: program.start,\n            end: program.start + duration,\n            group: program.group\n        };\n    }\n    function go(b) {\n        const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n        const program = {\n            start: now() + delay,\n            b\n        };\n        if (!b) {\n            // @ts-ignore todo: improve typings\n            program.group = outros;\n            outros.r += 1;\n        }\n        if (running_program || pending_program) {\n            pending_program = program;\n        }\n        else {\n            // if this is an intro, and there's a delay, we need to do\n            // an initial tick and/or apply CSS animation immediately\n            if (css) {\n                clear_animation();\n                animation_name = create_rule(node, t, b, duration, delay, easing, css);\n            }\n            if (b)\n                tick(0, 1);\n            running_program = init(program, duration);\n            add_render_callback(() => dispatch(node, b, 'start'));\n            loop(now => {\n                if (pending_program && now > pending_program.start) {\n                    running_program = init(pending_program, duration);\n                    pending_program = null;\n                    dispatch(node, running_program.b, 'start');\n                    if (css) {\n                        clear_animation();\n                        animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n                    }\n                }\n                if (running_program) {\n                    if (now >= running_program.end) {\n                        tick(t = running_program.b, 1 - t);\n                        dispatch(node, running_program.b, 'end');\n                        if (!pending_program) {\n                            // we're done\n                            if (running_program.b) {\n                                // intro — we can tidy up immediately\n                                clear_animation();\n                            }\n                            else {\n                                // outro — needs to be coordinated\n                                if (!--running_program.group.r)\n                                    run_all(running_program.group.c);\n                            }\n                        }\n                        running_program = null;\n                    }\n                    else if (now >= running_program.start) {\n                        const p = now - running_program.start;\n                        t = running_program.a + running_program.d * easing(p / running_program.duration);\n                        tick(t, 1 - t);\n                    }\n                }\n                return !!(running_program || pending_program);\n            });\n        }\n    }\n    return {\n        run(b) {\n            if (is_function(config)) {\n                wait().then(() => {\n                    // @ts-ignore\n                    config = config();\n                    go(b);\n                });\n            }\n            else {\n                go(b);\n            }\n        },\n        end() {\n            clear_animation();\n            running_program = pending_program = null;\n        }\n    };\n}\n\nfunction handle_promise(promise, info) {\n    const token = info.token = {};\n    function update(type, index, key, value) {\n        if (info.token !== token)\n            return;\n        info.resolved = value;\n        let child_ctx = info.ctx;\n        if (key !== undefined) {\n            child_ctx = child_ctx.slice();\n            child_ctx[key] = value;\n        }\n        const block = type && (info.current = type)(child_ctx);\n        let needs_flush = false;\n        if (info.block) {\n            if (info.blocks) {\n                info.blocks.forEach((block, i) => {\n                    if (i !== index && block) {\n                        group_outros();\n                        transition_out(block, 1, 1, () => {\n                            if (info.blocks[i] === block) {\n                                info.blocks[i] = null;\n                            }\n                        });\n                        check_outros();\n                    }\n                });\n            }\n            else {\n                info.block.d(1);\n            }\n            block.c();\n            transition_in(block, 1);\n            block.m(info.mount(), info.anchor);\n            needs_flush = true;\n        }\n        info.block = block;\n        if (info.blocks)\n            info.blocks[index] = block;\n        if (needs_flush) {\n            flush();\n        }\n    }\n    if (is_promise(promise)) {\n        const current_component = get_current_component();\n        promise.then(value => {\n            set_current_component(current_component);\n            update(info.then, 1, info.value, value);\n            set_current_component(null);\n        }, error => {\n            set_current_component(current_component);\n            update(info.catch, 2, info.error, error);\n            set_current_component(null);\n            if (!info.hasCatch) {\n                throw error;\n            }\n        });\n        // if we previously had a then/catch block, destroy it\n        if (info.current !== info.pending) {\n            update(info.pending, 0);\n            return true;\n        }\n    }\n    else {\n        if (info.current !== info.then) {\n            update(info.then, 1, info.value, promise);\n            return true;\n        }\n        info.resolved = promise;\n    }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n    const child_ctx = ctx.slice();\n    const { resolved } = info;\n    if (info.current === info.then) {\n        child_ctx[info.value] = resolved;\n    }\n    if (info.current === info.catch) {\n        child_ctx[info.error] = resolved;\n    }\n    info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n    ? window\n    : typeof globalThis !== 'undefined'\n        ? globalThis\n        : global);\n\nfunction destroy_block(block, lookup) {\n    block.d(1);\n    lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n    transition_out(block, 1, 1, () => {\n        lookup.delete(block.key);\n    });\n}\nfunction fix_and_destroy_block(block, lookup) {\n    block.f();\n    destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n    block.f();\n    outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n    let o = old_blocks.length;\n    let n = list.length;\n    let i = o;\n    const old_indexes = {};\n    while (i--)\n        old_indexes[old_blocks[i].key] = i;\n    const new_blocks = [];\n    const new_lookup = new Map();\n    const deltas = new Map();\n    i = n;\n    while (i--) {\n        const child_ctx = get_context(ctx, list, i);\n        const key = get_key(child_ctx);\n        let block = lookup.get(key);\n        if (!block) {\n            block = create_each_block(key, child_ctx);\n            block.c();\n        }\n        else if (dynamic) {\n            block.p(child_ctx, dirty);\n        }\n        new_lookup.set(key, new_blocks[i] = block);\n        if (key in old_indexes)\n            deltas.set(key, Math.abs(i - old_indexes[key]));\n    }\n    const will_move = new Set();\n    const did_move = new Set();\n    function insert(block) {\n        transition_in(block, 1);\n        block.m(node, next);\n        lookup.set(block.key, block);\n        next = block.first;\n        n--;\n    }\n    while (o && n) {\n        const new_block = new_blocks[n - 1];\n        const old_block = old_blocks[o - 1];\n        const new_key = new_block.key;\n        const old_key = old_block.key;\n        if (new_block === old_block) {\n            // do nothing\n            next = new_block.first;\n            o--;\n            n--;\n        }\n        else if (!new_lookup.has(old_key)) {\n            // remove old block\n            destroy(old_block, lookup);\n            o--;\n        }\n        else if (!lookup.has(new_key) || will_move.has(new_key)) {\n            insert(new_block);\n        }\n        else if (did_move.has(old_key)) {\n            o--;\n        }\n        else if (deltas.get(new_key) > deltas.get(old_key)) {\n            did_move.add(new_key);\n            insert(new_block);\n        }\n        else {\n            will_move.add(old_key);\n            o--;\n        }\n    }\n    while (o--) {\n        const old_block = old_blocks[o];\n        if (!new_lookup.has(old_block.key))\n            destroy(old_block, lookup);\n    }\n    while (n)\n        insert(new_blocks[n - 1]);\n    return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n    const keys = new Set();\n    for (let i = 0; i < list.length; i++) {\n        const key = get_key(get_context(ctx, list, i));\n        if (keys.has(key)) {\n            throw new Error('Cannot have duplicate keys in a keyed each');\n        }\n        keys.add(key);\n    }\n}\n\nfunction get_spread_update(levels, updates) {\n    const update = {};\n    const to_null_out = {};\n    const accounted_for = { $$scope: 1 };\n    let i = levels.length;\n    while (i--) {\n        const o = levels[i];\n        const n = updates[i];\n        if (n) {\n            for (const key in o) {\n                if (!(key in n))\n                    to_null_out[key] = 1;\n            }\n            for (const key in n) {\n                if (!accounted_for[key]) {\n                    update[key] = n[key];\n                    accounted_for[key] = 1;\n                }\n            }\n            levels[i] = n;\n        }\n        else {\n            for (const key in o) {\n                accounted_for[key] = 1;\n            }\n        }\n    }\n    for (const key in to_null_out) {\n        if (!(key in update))\n            update[key] = undefined;\n    }\n    return update;\n}\nfunction get_spread_object(spread_props) {\n    return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n    'allowfullscreen',\n    'allowpaymentrequest',\n    'async',\n    'autofocus',\n    'autoplay',\n    'checked',\n    'controls',\n    'default',\n    'defer',\n    'disabled',\n    'formnovalidate',\n    'hidden',\n    'ismap',\n    'loop',\n    'multiple',\n    'muted',\n    'nomodule',\n    'novalidate',\n    'open',\n    'playsinline',\n    'readonly',\n    'required',\n    'reversed',\n    'selected'\n]);\n\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n    return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n    const attributes = Object.assign({}, ...args);\n    if (attrs_to_add) {\n        const classes_to_add = attrs_to_add.classes;\n        const styles_to_add = attrs_to_add.styles;\n        if (classes_to_add) {\n            if (attributes.class == null) {\n                attributes.class = classes_to_add;\n            }\n            else {\n                attributes.class += ' ' + classes_to_add;\n            }\n        }\n        if (styles_to_add) {\n            if (attributes.style == null) {\n                attributes.style = style_object_to_string(styles_to_add);\n            }\n            else {\n                attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n            }\n        }\n    }\n    let str = '';\n    Object.keys(attributes).forEach(name => {\n        if (invalid_attribute_name_character.test(name))\n            return;\n        const value = attributes[name];\n        if (value === true)\n            str += ' ' + name;\n        else if (boolean_attributes.has(name.toLowerCase())) {\n            if (value)\n                str += ' ' + name;\n        }\n        else if (value != null) {\n            str += ` ${name}=\"${value}\"`;\n        }\n    });\n    return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n    const style_object = {};\n    for (const individual_style of style_attribute.split(';')) {\n        const colon_index = individual_style.indexOf(':');\n        const name = individual_style.slice(0, colon_index).trim();\n        const value = individual_style.slice(colon_index + 1).trim();\n        if (!name)\n            continue;\n        style_object[name] = value;\n    }\n    for (const name in style_directive) {\n        const value = style_directive[name];\n        if (value) {\n            style_object[name] = value;\n        }\n        else {\n            delete style_object[name];\n        }\n    }\n    return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n    const str = String(value);\n    const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n    pattern.lastIndex = 0;\n    let escaped = '';\n    let last = 0;\n    while (pattern.test(str)) {\n        const i = pattern.lastIndex - 1;\n        const ch = str[i];\n        escaped += str.substring(last, i) + (ch === '&' ? '&amp;' : (ch === '\"' ? '&quot;' : '&lt;'));\n        last = i + 1;\n    }\n    return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n    // keep booleans, null, and undefined for the sake of `spread`\n    const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n    return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n    const result = {};\n    for (const key in obj) {\n        result[key] = escape_attribute_value(obj[key]);\n    }\n    return result;\n}\nfunction each(items, fn) {\n    let str = '';\n    for (let i = 0; i < items.length; i += 1) {\n        str += fn(items[i], i);\n    }\n    return str;\n}\nconst missing_component = {\n    $$render: () => ''\n};\nfunction validate_component(component, name) {\n    if (!component || !component.$$render) {\n        if (name === 'svelte:component')\n            name += ' this={...}';\n        throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n    }\n    return component;\n}\nfunction debug(file, line, column, values) {\n    console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n    console.log(values); // eslint-disable-line no-console\n    return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n    function $$render(result, props, bindings, slots, context) {\n        const parent_component = current_component;\n        const $$ = {\n            on_destroy,\n            context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n            // these will be immediately discarded\n            on_mount: [],\n            before_update: [],\n            after_update: [],\n            callbacks: blank_object()\n        };\n        set_current_component({ $$ });\n        const html = fn(result, props, bindings, slots);\n        set_current_component(parent_component);\n        return html;\n    }\n    return {\n        render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n            on_destroy = [];\n            const result = { title: '', head: '', css: new Set() };\n            const html = $$render(result, props, {}, $$slots, context);\n            run_all(on_destroy);\n            return {\n                html,\n                css: {\n                    code: Array.from(result.css).map(css => css.code).join('\\n'),\n                    map: null // TODO\n                },\n                head: result.title + result.head\n            };\n        },\n        $$render\n    };\n}\nfunction add_attribute(name, value, boolean) {\n    if (value == null || (boolean && !value))\n        return '';\n    const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n    return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n    return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n    return Object.keys(style_object)\n        .filter(key => style_object[key])\n        .map(key => `${key}: ${style_object[key]};`)\n        .join(' ');\n}\nfunction add_styles(style_object) {\n    const styles = style_object_to_string(style_object);\n    return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n    const index = component.$$.props[name];\n    if (index !== undefined) {\n        component.$$.bound[index] = callback;\n        callback(component.$$.ctx[index]);\n    }\n}\nfunction create_component(block) {\n    block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n    block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n    const { fragment, on_mount, on_destroy, after_update } = component.$$;\n    fragment && fragment.m(target, anchor);\n    if (!customElement) {\n        // onMount happens before the initial afterUpdate\n        add_render_callback(() => {\n            const new_on_destroy = on_mount.map(run).filter(is_function);\n            if (on_destroy) {\n                on_destroy.push(...new_on_destroy);\n            }\n            else {\n                // Edge case - component was destroyed immediately,\n                // most likely as a result of a binding initialising\n                run_all(new_on_destroy);\n            }\n            component.$$.on_mount = [];\n        });\n    }\n    after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n    const $$ = component.$$;\n    if ($$.fragment !== null) {\n        run_all($$.on_destroy);\n        $$.fragment && $$.fragment.d(detaching);\n        // TODO null out other refs, including component.$$ (but need to\n        // preserve final state?)\n        $$.on_destroy = $$.fragment = null;\n        $$.ctx = [];\n    }\n}\nfunction make_dirty(component, i) {\n    if (component.$$.dirty[0] === -1) {\n        dirty_components.push(component);\n        schedule_update();\n        component.$$.dirty.fill(0);\n    }\n    component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n    const parent_component = current_component;\n    set_current_component(component);\n    const $$ = component.$$ = {\n        fragment: null,\n        ctx: null,\n        // state\n        props,\n        update: noop,\n        not_equal,\n        bound: blank_object(),\n        // lifecycle\n        on_mount: [],\n        on_destroy: [],\n        on_disconnect: [],\n        before_update: [],\n        after_update: [],\n        context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n        // everything else\n        callbacks: blank_object(),\n        dirty,\n        skip_bound: false,\n        root: options.target || parent_component.$$.root\n    };\n    append_styles && append_styles($$.root);\n    let ready = false;\n    $$.ctx = instance\n        ? instance(component, options.props || {}, (i, ret, ...rest) => {\n            const value = rest.length ? rest[0] : ret;\n            if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n                if (!$$.skip_bound && $$.bound[i])\n                    $$.bound[i](value);\n                if (ready)\n                    make_dirty(component, i);\n            }\n            return ret;\n        })\n        : [];\n    $$.update();\n    ready = true;\n    run_all($$.before_update);\n    // `false` as a special case of no DOM component\n    $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n    if (options.target) {\n        if (options.hydrate) {\n            start_hydrating();\n            const nodes = children(options.target);\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            $$.fragment && $$.fragment.l(nodes);\n            nodes.forEach(detach);\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            $$.fragment && $$.fragment.c();\n        }\n        if (options.intro)\n            transition_in(component.$$.fragment);\n        mount_component(component, options.target, options.anchor, options.customElement);\n        end_hydrating();\n        flush();\n    }\n    set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n    SvelteElement = class extends HTMLElement {\n        constructor() {\n            super();\n            this.attachShadow({ mode: 'open' });\n        }\n        connectedCallback() {\n            const { on_mount } = this.$$;\n            this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n            // @ts-ignore todo: improve typings\n            for (const key in this.$$.slotted) {\n                // @ts-ignore todo: improve typings\n                this.appendChild(this.$$.slotted[key]);\n            }\n        }\n        attributeChangedCallback(attr, _oldValue, newValue) {\n            this[attr] = newValue;\n        }\n        disconnectedCallback() {\n            run_all(this.$$.on_disconnect);\n        }\n        $destroy() {\n            destroy_component(this, 1);\n            this.$destroy = noop;\n        }\n        $on(type, callback) {\n            // TODO should this delegate to addEventListener?\n            const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n            callbacks.push(callback);\n            return () => {\n                const index = callbacks.indexOf(callback);\n                if (index !== -1)\n                    callbacks.splice(index, 1);\n            };\n        }\n        $set($$props) {\n            if (this.$$set && !is_empty($$props)) {\n                this.$$.skip_bound = true;\n                this.$$set($$props);\n                this.$$.skip_bound = false;\n            }\n        }\n    };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n    $destroy() {\n        destroy_component(this, 1);\n        this.$destroy = noop;\n    }\n    $on(type, callback) {\n        const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n        callbacks.push(callback);\n        return () => {\n            const index = callbacks.indexOf(callback);\n            if (index !== -1)\n                callbacks.splice(index, 1);\n        };\n    }\n    $set($$props) {\n        if (this.$$set && !is_empty($$props)) {\n            this.$$.skip_bound = true;\n            this.$$set($$props);\n            this.$$.skip_bound = false;\n        }\n    }\n}\n\nfunction dispatch_dev(type, detail) {\n    document.dispatchEvent(custom_event(type, Object.assign({ version: '3.49.0' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n    dispatch_dev('SvelteDOMInsert', { target, node });\n    append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n    dispatch_dev('SvelteDOMInsert', { target, node });\n    append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n    dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n    insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n    dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n    insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n    dispatch_dev('SvelteDOMRemove', { node });\n    detach(node);\n}\nfunction detach_between_dev(before, after) {\n    while (before.nextSibling && before.nextSibling !== after) {\n        detach_dev(before.nextSibling);\n    }\n}\nfunction detach_before_dev(after) {\n    while (after.previousSibling) {\n        detach_dev(after.previousSibling);\n    }\n}\nfunction detach_after_dev(before) {\n    while (before.nextSibling) {\n        detach_dev(before.nextSibling);\n    }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n    const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n    if (has_prevent_default)\n        modifiers.push('preventDefault');\n    if (has_stop_propagation)\n        modifiers.push('stopPropagation');\n    dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n    const dispose = listen(node, event, handler, options);\n    return () => {\n        dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n        dispose();\n    };\n}\nfunction attr_dev(node, attribute, value) {\n    attr(node, attribute, value);\n    if (value == null)\n        dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n    else\n        dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n    node[property] = value;\n    dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n    node.dataset[property] = value;\n    dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n    data = '' + data;\n    if (text.wholeText === data)\n        return;\n    dispatch_dev('SvelteDOMSetData', { node: text, data });\n    text.data = data;\n}\nfunction validate_each_argument(arg) {\n    if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n        let msg = '{#each} only iterates over array-like objects.';\n        if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n            msg += ' You can use a spread to convert this iterable into an array.';\n        }\n        throw new Error(msg);\n    }\n}\nfunction validate_slots(name, slot, keys) {\n    for (const slot_key of Object.keys(slot)) {\n        if (!~keys.indexOf(slot_key)) {\n            console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n        }\n    }\n}\nfunction validate_dynamic_element(tag) {\n    const is_string = typeof tag === 'string';\n    if (tag && !is_string) {\n        throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n    }\n}\nfunction validate_void_dynamic_element(tag) {\n    if (tag && is_void(tag)) {\n        throw new Error(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n    }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n    constructor(options) {\n        if (!options || (!options.target && !options.$$inline)) {\n            throw new Error(\"'target' is a required option\");\n        }\n        super();\n    }\n    $destroy() {\n        super.$destroy();\n        this.$destroy = () => {\n            console.warn('Component was already destroyed'); // eslint-disable-line no-console\n        };\n    }\n    $capture_state() { }\n    $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n    constructor(options) {\n        super(options);\n    }\n}\nfunction loop_guard(timeout) {\n    const start = Date.now();\n    return () => {\n        if (Date.now() - start > timeout) {\n            throw new Error('Infinite loop detected');\n        }\n    };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    var host = n === null || n === void 0 ? void 0 : n.host;\r\n    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction getCssRulesString(s) {\r\n    try {\r\n        var rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules).map(getCssRuleString).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction getCssRuleString(rule) {\r\n    var cssStringified = rule.cssText;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            cssStringified = getCssRulesString(rule.styleSheet) || cssStringified;\r\n        }\r\n        catch (_a) {\r\n        }\r\n    }\r\n    return cssStringified;\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nvar Mirror = (function () {\r\n    function Mirror() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    Mirror.prototype.getId = function (n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    };\r\n    Mirror.prototype.getNode = function (id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    };\r\n    Mirror.prototype.getIds = function () {\r\n        return Array.from(this.idNodeMap.keys());\r\n    };\r\n    Mirror.prototype.getMeta = function (n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    };\r\n    Mirror.prototype.removeNodeFromMap = function (n) {\r\n        var _this = this;\r\n        var id = this.getId(n);\r\n        this.idNodeMap[\"delete\"](id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach(function (childNode) {\r\n                return _this.removeNodeFromMap(childNode);\r\n            });\r\n        }\r\n    };\r\n    Mirror.prototype.has = function (id) {\r\n        return this.idNodeMap.has(id);\r\n    };\r\n    Mirror.prototype.hasNode = function (node) {\r\n        return this.nodeMetaMap.has(node);\r\n    };\r\n    Mirror.prototype.add = function (n, meta) {\r\n        var id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    };\r\n    Mirror.prototype.replace = function (id, n) {\r\n        var oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            var meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    };\r\n    Mirror.prototype.reset = function () {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    };\r\n    return Mirror;\r\n}());\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction maskInputValue(_a) {\r\n    var maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\r\n    var text = value || '';\r\n    if (maskInputOptions[tagName.toLowerCase()] ||\r\n        maskInputOptions[type]) {\r\n        if (maskInputFn) {\r\n            text = maskInputFn(text);\r\n        }\r\n        else {\r\n            text = '*'.repeat(text.length);\r\n        }\r\n    }\r\n    return text;\r\n}\r\nvar ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    var ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    var chunkSize = 50;\r\n    for (var x = 0; x < canvas.width; x += chunkSize) {\r\n        for (var y = 0; y < canvas.height; y += chunkSize) {\r\n            var getImageData = ctx.getImageData;\r\n            var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            var pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some(function (pixel) { return pixel !== 0; }))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\n\nvar _id = 1;\r\nvar tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nvar IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    var processedTagName = element.tagName.toLowerCase().trim();\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction stringifyStyleSheet(sheet) {\r\n    return sheet.cssRules\r\n        ? Array.from(sheet.cssRules)\r\n            .map(function (rule) { return rule.cssText || ''; })\r\n            .join('')\r\n        : '';\r\n}\r\nfunction extractOrigin(url) {\r\n    var origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nvar canvasService;\r\nvar canvasCtx;\r\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nvar RELATIVE_PATH = /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/|#).*/;\r\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\r\n        var filePath = path1 || path2 || path3;\r\n        var maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (!RELATIVE_PATH.test(filePath)) {\r\n            return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return \"url(\".concat(maybeQuote).concat(extractOrigin(href) + filePath).concat(maybeQuote, \")\");\r\n        }\r\n        var stack = href.split('/');\r\n        var parts = filePath.split('/');\r\n        stack.pop();\r\n        for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\r\n            var part = parts_1[_i];\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return \"url(\".concat(maybeQuote).concat(stack.join('/')).concat(maybeQuote, \")\");\r\n    });\r\n}\r\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    var pos = 0;\r\n    function collectCharacters(regEx) {\r\n        var chars;\r\n        var match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    var output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        var url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            var descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            var inParens = false;\r\n            while (true) {\r\n                var c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    var a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    var a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n    if (name === 'src' ||\r\n        (name === 'href' && value && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        value &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset' && value) {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style' && value) {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data' && value) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else {\r\n        return value;\r\n    }\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n    if (typeof blockClass === 'string') {\r\n        if (element.classList.contains(blockClass)) {\r\n            return true;\r\n        }\r\n    }\r\n    else {\r\n        for (var eIndex = element.classList.length; eIndex--;) {\r\n            var className = element.classList[eIndex];\r\n            if (blockClass.test(className)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    if (blockSelector) {\r\n        return element.matches(blockSelector);\r\n    }\r\n    return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n    if (!node)\r\n        return false;\r\n    if (node.nodeType !== node.ELEMENT_NODE) {\r\n        if (!checkAncestors)\r\n            return false;\r\n        return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n    }\r\n    for (var eIndex = node.classList.length; eIndex--;) {\r\n        var className = node.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!checkAncestors)\r\n        return false;\r\n    return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\r\n    var el = node.nodeType === node.ELEMENT_NODE\r\n        ? node\r\n        : node.parentElement;\r\n    if (el === null)\r\n        return false;\r\n    if (typeof maskTextClass === 'string') {\r\n        if (el.classList.contains(maskTextClass))\r\n            return true;\r\n        if (el.closest(\".\".concat(maskTextClass)))\r\n            return true;\r\n    }\r\n    else {\r\n        if (classMatchesRegex(el, maskTextClass, true))\r\n            return true;\r\n    }\r\n    if (maskTextSelector) {\r\n        if (el.matches(maskTextSelector))\r\n            return true;\r\n        if (el.closest(maskTextSelector))\r\n            return true;\r\n    }\r\n    return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    var win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    var fired = false;\r\n    var readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        var timer_1 = setTimeout(function () {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', function () {\r\n            clearTimeout(timer_1);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    var blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    var fired = false;\r\n    var styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    var timer = setTimeout(function () {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', function () {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c;\r\n    var rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: []\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId: rootId\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc: doc,\r\n                blockClass: blockClass,\r\n                blockSelector: blockSelector,\r\n                inlineStylesheet: inlineStylesheet,\r\n                maskInputOptions: maskInputOptions,\r\n                maskInputFn: maskInputFn,\r\n                dataURLOptions: dataURLOptions,\r\n                inlineImages: inlineImages,\r\n                recordCanvas: recordCanvas,\r\n                keepIframeSrcFn: keepIframeSrcFn,\r\n                newlyAddedElement: newlyAddedElement,\r\n                rootId: rootId\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskTextClass: maskTextClass,\r\n                maskTextSelector: maskTextSelector,\r\n                maskTextFn: maskTextFn,\r\n                rootId: rootId\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId: rootId\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId: rootId\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    var docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    var _a;\r\n    var maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, maskTextFn = options.maskTextFn, rootId = options.rootId;\r\n    var parentTagName = n.parentNode && n.parentNode.tagName;\r\n    var textContent = n.textContent;\r\n    var isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    var isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n                textContent = stringifyStyleSheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(\"Cannot get CSS styles from text's parentNode. Error: \".concat(err), n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    if (!isStyle &&\r\n        !isScript &&\r\n        textContent &&\r\n        needMaskingText(n, maskTextClass, maskTextSelector)) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle: isStyle,\r\n        rootId: rootId\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, rootId = options.rootId;\r\n    var needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n    var tagName = getValidTagName(n);\r\n    var attributes = {};\r\n    var len = n.attributes.length;\r\n    for (var i = 0; i < len; i++) {\r\n        var attr = n.attributes[i];\r\n        attributes[attr.name] = transformAttribute(doc, tagName, attr.name, attr.value);\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        var stylesheet = Array.from(doc.styleSheets).find(function (s) {\r\n            return s.href === n.href;\r\n        });\r\n        var cssText = null;\r\n        if (stylesheet) {\r\n            cssText = getCssRulesString(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        var cssText = getCssRulesString(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n        var value = n.value;\r\n        var checked = n.checked;\r\n        if (attributes.type !== 'radio' &&\r\n            attributes.type !== 'checkbox' &&\r\n            attributes.type !== 'submit' &&\r\n            attributes.type !== 'button' &&\r\n            value) {\r\n            attributes.value = maskInputValue({\r\n                type: attributes.type,\r\n                tagName: tagName,\r\n                value: value,\r\n                maskInputOptions: maskInputOptions,\r\n                maskInputFn: maskInputFn\r\n            });\r\n        }\r\n        else if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            var canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            var blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        var image_1 = n;\r\n        var oldValue_1 = image_1.crossOrigin;\r\n        image_1.crossOrigin = 'anonymous';\r\n        var recordInlineImage = function () {\r\n            try {\r\n                canvasService.width = image_1.naturalWidth;\r\n                canvasService.height = image_1.naturalHeight;\r\n                canvasCtx.drawImage(image_1, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(\"Cannot inline img src=\".concat(image_1.currentSrc, \"! Error: \").concat(err));\r\n            }\r\n            oldValue_1\r\n                ? (attributes.crossOrigin = oldValue_1)\r\n                : image_1.removeAttribute('crossorigin');\r\n        };\r\n        if (image_1.complete && image_1.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image_1.onload = recordInlineImage;\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;\r\n        attributes = {\r\n            \"class\": attributes[\"class\"],\r\n            rr_width: \"\".concat(width, \"px\"),\r\n            rr_height: \"\".concat(height, \"px\")\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName: tagName,\r\n        attributes: attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock: needBlock,\r\n        rootId: rootId\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'preload' &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.inlineStylesheet, inlineStylesheet = _b === void 0 ? true : _b, _c = options.maskInputOptions, maskInputOptions = _c === void 0 ? {} : _c, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _d = options.dataURLOptions, dataURLOptions = _d === void 0 ? {} : _d, _e = options.inlineImages, inlineImages = _e === void 0 ? false : _e, _f = options.recordCanvas, recordCanvas = _f === void 0 ? false : _f, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _g = options.iframeLoadTimeout, iframeLoadTimeout = _g === void 0 ? 5000 : _g, onStylesheetLoad = options.onStylesheetLoad, _h = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _h === void 0 ? 5000 : _h, _j = options.keepIframeSrcFn, keepIframeSrcFn = _j === void 0 ? function () { return false; } : _j, _k = options.newlyAddedElement, newlyAddedElement = _k === void 0 ? false : _k;\r\n    var _l = options.preserveWhiteSpace, preserveWhiteSpace = _l === void 0 ? true : _l;\r\n    var _serializedNode = serializeNode(n, {\r\n        doc: doc,\r\n        mirror: mirror,\r\n        blockClass: blockClass,\r\n        blockSelector: blockSelector,\r\n        maskTextClass: maskTextClass,\r\n        maskTextSelector: maskTextSelector,\r\n        inlineStylesheet: inlineStylesheet,\r\n        maskInputOptions: maskInputOptions,\r\n        maskTextFn: maskTextFn,\r\n        maskInputFn: maskInputFn,\r\n        dataURLOptions: dataURLOptions,\r\n        inlineImages: inlineImages,\r\n        recordCanvas: recordCanvas,\r\n        keepIframeSrcFn: keepIframeSrcFn,\r\n        newlyAddedElement: newlyAddedElement\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    var id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    var serializedNode = Object.assign(_serializedNode, { id: id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    var recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        var shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        var bypassOptions = {\r\n            doc: doc,\r\n            mirror: mirror,\r\n            blockClass: blockClass,\r\n            blockSelector: blockSelector,\r\n            maskTextClass: maskTextClass,\r\n            maskTextSelector: maskTextSelector,\r\n            skipChild: skipChild,\r\n            inlineStylesheet: inlineStylesheet,\r\n            maskInputOptions: maskInputOptions,\r\n            maskTextFn: maskTextFn,\r\n            maskInputFn: maskInputFn,\r\n            slimDOMOptions: slimDOMOptions,\r\n            dataURLOptions: dataURLOptions,\r\n            inlineImages: inlineImages,\r\n            recordCanvas: recordCanvas,\r\n            preserveWhiteSpace: preserveWhiteSpace,\r\n            onSerialize: onSerialize,\r\n            onIframeLoad: onIframeLoad,\r\n            iframeLoadTimeout: iframeLoadTimeout,\r\n            onStylesheetLoad: onStylesheetLoad,\r\n            stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n            keepIframeSrcFn: keepIframeSrcFn\r\n        };\r\n        for (var _i = 0, _m = Array.from(n.childNodes); _i < _m.length; _i++) {\r\n            var childN = _m[_i];\r\n            var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (var _o = 0, _p = Array.from(n.shadowRoot.childNodes); _o < _p.length; _o++) {\r\n                var childN = _p[_o];\r\n                var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, function () {\r\n            var iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                var serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror: mirror,\r\n                    blockClass: blockClass,\r\n                    blockSelector: blockSelector,\r\n                    maskTextClass: maskTextClass,\r\n                    maskTextSelector: maskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet: inlineStylesheet,\r\n                    maskInputOptions: maskInputOptions,\r\n                    maskTextFn: maskTextFn,\r\n                    maskInputFn: maskInputFn,\r\n                    slimDOMOptions: slimDOMOptions,\r\n                    dataURLOptions: dataURLOptions,\r\n                    inlineImages: inlineImages,\r\n                    recordCanvas: recordCanvas,\r\n                    preserveWhiteSpace: preserveWhiteSpace,\r\n                    onSerialize: onSerialize,\r\n                    onIframeLoad: onIframeLoad,\r\n                    iframeLoadTimeout: iframeLoadTimeout,\r\n                    onStylesheetLoad: onStylesheetLoad,\r\n                    stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n                    keepIframeSrcFn: keepIframeSrcFn\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, function () {\r\n            if (onStylesheetLoad) {\r\n                var serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc: doc,\r\n                    mirror: mirror,\r\n                    blockClass: blockClass,\r\n                    blockSelector: blockSelector,\r\n                    maskTextClass: maskTextClass,\r\n                    maskTextSelector: maskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet: inlineStylesheet,\r\n                    maskInputOptions: maskInputOptions,\r\n                    maskTextFn: maskTextFn,\r\n                    maskInputFn: maskInputFn,\r\n                    slimDOMOptions: slimDOMOptions,\r\n                    dataURLOptions: dataURLOptions,\r\n                    inlineImages: inlineImages,\r\n                    recordCanvas: recordCanvas,\r\n                    preserveWhiteSpace: preserveWhiteSpace,\r\n                    onSerialize: onSerialize,\r\n                    onIframeLoad: onIframeLoad,\r\n                    iframeLoadTimeout: iframeLoadTimeout,\r\n                    onStylesheetLoad: onStylesheetLoad,\r\n                    stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n                    keepIframeSrcFn: keepIframeSrcFn\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    var _a = options || {}, _b = _a.mirror, mirror = _b === void 0 ? new Mirror() : _b, _c = _a.blockClass, blockClass = _c === void 0 ? 'rr-block' : _c, _d = _a.blockSelector, blockSelector = _d === void 0 ? null : _d, _e = _a.maskTextClass, maskTextClass = _e === void 0 ? 'rr-mask' : _e, _f = _a.maskTextSelector, maskTextSelector = _f === void 0 ? null : _f, _g = _a.inlineStylesheet, inlineStylesheet = _g === void 0 ? true : _g, _h = _a.inlineImages, inlineImages = _h === void 0 ? false : _h, _j = _a.recordCanvas, recordCanvas = _j === void 0 ? false : _j, _k = _a.maskAllInputs, maskAllInputs = _k === void 0 ? false : _k, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _l = _a.slimDOM, slimDOM = _l === void 0 ? false : _l, dataURLOptions = _a.dataURLOptions, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, onStylesheetLoad = _a.onStylesheetLoad, stylesheetLoadTimeout = _a.stylesheetLoadTimeout, _m = _a.keepIframeSrcFn, keepIframeSrcFn = _m === void 0 ? function () { return false; } : _m;\r\n    var maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            password: true\r\n        }\r\n        : maskAllInputs === false\r\n            ? {\r\n                password: true\r\n            }\r\n            : maskAllInputs;\r\n    var slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror: mirror,\r\n        blockClass: blockClass,\r\n        blockSelector: blockSelector,\r\n        maskTextClass: maskTextClass,\r\n        maskTextSelector: maskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet: inlineStylesheet,\r\n        maskInputOptions: maskInputOptions,\r\n        maskTextFn: maskTextFn,\r\n        maskInputFn: maskInputFn,\r\n        slimDOMOptions: slimDOMOptions,\r\n        dataURLOptions: dataURLOptions,\r\n        inlineImages: inlineImages,\r\n        recordCanvas: recordCanvas,\r\n        preserveWhiteSpace: preserveWhiteSpace,\r\n        onSerialize: onSerialize,\r\n        onIframeLoad: onIframeLoad,\r\n        iframeLoadTimeout: iframeLoadTimeout,\r\n        onStylesheetLoad: onStylesheetLoad,\r\n        stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n        keepIframeSrcFn: keepIframeSrcFn,\r\n        newlyAddedElement: false\r\n    });\r\n}\r\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options) {\r\n    if (options === void 0) { options = {}; }\r\n    var lineno = 1;\r\n    var column = 1;\r\n    function updatePosition(str) {\r\n        var lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        var i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        var start = { line: lineno, column: column };\r\n        return function (node) {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    var Position = (function () {\r\n        function Position(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column: column };\r\n            this.source = options.source;\r\n        }\r\n        return Position;\r\n    }());\r\n    Position.prototype.content = css;\r\n    var errorsList = [];\r\n    function error(msg) {\r\n        var err = new Error(\"\".concat(options.source || '', \":\").concat(lineno, \":\").concat(column, \": \").concat(msg));\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        var rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList\r\n            }\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        var node;\r\n        var rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node !== false) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        var m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules) {\r\n        if (rules === void 0) { rules = []; }\r\n        var c;\r\n        while ((c = comment())) {\r\n            if (c !== false) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        var pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        var i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        var str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str\r\n        });\r\n    }\r\n    function selector() {\r\n        var m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map(function (s) {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        var pos = position();\r\n        var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        var prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(\"property missing ':'\");\r\n        }\r\n        var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        var ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : ''\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        var decls = [];\r\n        if (!open()) {\r\n            return error(\"missing '{'\");\r\n        }\r\n        comments(decls);\r\n        var decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(\"missing '}'\");\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        var m;\r\n        var vals = [];\r\n        var pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations()\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        var pos = position();\r\n        var m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        var name = m[1];\r\n        if (!open()) {\r\n            return error(\"@keyframes missing '{'\");\r\n        }\r\n        var frame;\r\n        var frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(\"@keyframes missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name: name,\r\n            vendor: vendor,\r\n            keyframes: frames\r\n        });\r\n    }\r\n    function atsupports() {\r\n        var pos = position();\r\n        var m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(\"@supports missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@supports missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports: supports,\r\n            rules: style\r\n        });\r\n    }\r\n    function athost() {\r\n        var pos = position();\r\n        var m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(\"@host missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@host missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style\r\n        });\r\n    }\r\n    function atmedia() {\r\n        var pos = position();\r\n        var m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(\"@media missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@media missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media: media,\r\n            rules: style\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        var pos = position();\r\n        var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2])\r\n        });\r\n    }\r\n    function atpage() {\r\n        var pos = position();\r\n        var m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var sel = selector() || [];\r\n        if (!open()) {\r\n            return error(\"@page missing '{'\");\r\n        }\r\n        var decls = comments();\r\n        var decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(\"@page missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls\r\n        });\r\n    }\r\n    function atdocument() {\r\n        var pos = position();\r\n        var m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var vendor = trim(m[1]);\r\n        var doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(\"@document missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@document missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor: vendor,\r\n            rules: style\r\n        });\r\n    }\r\n    function atfontface() {\r\n        var pos = position();\r\n        var m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(\"@font-face missing '{'\");\r\n        }\r\n        var decls = comments();\r\n        var decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(\"@font-face missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls\r\n        });\r\n    }\r\n    var atimport = _compileAtrule('import');\r\n    var atcharset = _compileAtrule('charset');\r\n    var atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return function () {\r\n            var pos = position();\r\n            var m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            var ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        var pos = position();\r\n        var sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations()\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    var isNode = obj && typeof obj.type === 'string';\r\n    var childParent = isNode ? obj : parent;\r\n    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\r\n        var k = _a[_i];\r\n        var value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach(function (v) {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nvar tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient'\r\n};\r\nfunction getTagName(n) {\r\n    var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\r\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    var cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    var ast = parse(cssText, {\r\n        silent: true\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    var selectors = [];\r\n    ast.stylesheet.rules.forEach(function (rule) {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach(function (selector) {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    var selectorMatcher = new RegExp(selectors\r\n        .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\r\n        .sort(function (a, b) { return b.length - a.length; })\r\n        .map(function (selector) {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    var result = cssText.replace(selectorMatcher, function (selector) {\r\n        var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return \"\".concat(selector, \", \").concat(newSelector);\r\n    });\r\n    cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    var stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass: stylesWithHoverClass\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    var doc = options.doc, hackCss = options.hackCss, cache = options.cache;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            var tagName = getTagName(n);\r\n            var node_1;\r\n            if (n.isSVG) {\r\n                node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                node_1 = doc.createElement(tagName);\r\n            }\r\n            var specialAttributes = {};\r\n            for (var name_1 in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name_1)) {\r\n                    continue;\r\n                }\r\n                var value = n.attributes[name_1];\r\n                if (tagName === 'option' &&\r\n                    name_1 === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name_1.startsWith('rr_')) {\r\n                    specialAttributes[name_1] = value;\r\n                    continue;\r\n                }\r\n                var isTextarea = tagName === 'textarea' && name_1 === 'value';\r\n                var isRemoteOrDynamicCss = tagName === 'style' && name_1 === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    var child = doc.createTextNode(value);\r\n                    for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\r\n                        var c = _a[_i];\r\n                        if (c.nodeType === node_1.TEXT_NODE) {\r\n                            node_1.removeChild(c);\r\n                        }\r\n                    }\r\n                    node_1.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name_1 === 'xlink:href') {\r\n                        node_1.setAttributeNS('http://www.w3.org/1999/xlink', name_1, value.toString());\r\n                    }\r\n                    else if (name_1 === 'onload' ||\r\n                        name_1 === 'onclick' ||\r\n                        name_1.substring(0, 7) === 'onmouse') {\r\n                        node_1.setAttribute('_' + name_1, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name_1 === 'content') {\r\n                        node_1.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'preload' &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node_1.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node_1.setAttribute(name_1, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            var _loop_1 = function (name_2) {\r\n                var value = specialAttributes[name_2];\r\n                if (tagName === 'canvas' && name_2 === 'rr_dataURL') {\r\n                    var image_1 = document.createElement('img');\r\n                    image_1.onload = function () {\r\n                        var ctx = node_1.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\r\n                        }\r\n                    };\r\n                    image_1.src = value.toString();\r\n                    if (node_1.RRNodeType)\r\n                        node_1.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name_2 === 'rr_dataURL') {\r\n                    var image = node_1;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name_2 === 'rr_width') {\r\n                    node_1.style.width = value.toString();\r\n                }\r\n                else if (name_2 === 'rr_height') {\r\n                    node_1.style.height = value.toString();\r\n                }\r\n                else if (name_2 === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node_1.currentTime = value;\r\n                }\r\n                else if (name_2 === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node_1\r\n                                .play()[\"catch\"](function (e) { return console.warn('media playback error', e); });\r\n                            break;\r\n                        case 'paused':\r\n                            node_1.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            };\r\n            for (var name_2 in specialAttributes) {\r\n                _loop_1(name_2);\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node_1.shadowRoot) {\r\n                    node_1.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node_1.shadowRoot.firstChild) {\r\n                        node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node_1;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    var doc = options.doc, mirror = options.mirror, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend, cache = options.cache;\r\n    var node = buildNode(n, { doc: doc, hackCss: hackCss, cache: cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\r\n            var childN = _c[_i];\r\n            var childNode = buildNodeWithSN(childN, {\r\n                doc: doc,\r\n                mirror: mirror,\r\n                skipChild: false,\r\n                hackCss: hackCss,\r\n                afterAppend: afterAppend,\r\n                cache: cache\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (var _i = 0, _a = mirror.getIds(); _i < _a.length; _i++) {\r\n        var id = _a[_i];\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    var n = mirror.getMeta(node);\r\n    if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n        return;\r\n    }\r\n    var el = node;\r\n    for (var name_3 in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name_3) &&\r\n            name_3.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        var value = n.attributes[name_3];\r\n        if (name_3 === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name_3 === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend, cache = options.cache, _b = options.mirror, mirror = _b === void 0 ? new Mirror() : _b;\r\n    var node = buildNodeWithSN(n, {\r\n        doc: doc,\r\n        mirror: mirror,\r\n        skipChild: false,\r\n        hackCss: hackCss,\r\n        afterAppend: afterAppend,\r\n        cache: cache\r\n    });\r\n    visit(mirror, function (visitedNode) {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, createCache, createMirror, genId, getCssRuleString, getCssRulesString, is2DCanvasBlank, isCSSImportRule, isElement, isNativeShadowDom, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, transformAttribute };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n    const options = { capture: true, passive: true };\r\n    target.addEventListener(type, fn, options);\r\n    return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n    '\\r\\n' +\r\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n    '\\r\\n' +\r\n    'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n    map: {},\r\n    getId() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return -1;\r\n    },\r\n    getNode() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return null;\r\n    },\r\n    removeNodeFromMap() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n    has() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return false;\r\n    },\r\n    reset() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n    _mirror = new Proxy(_mirror, {\r\n        get(target, prop, receiver) {\r\n            if (prop === 'map') {\r\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n            }\r\n            return Reflect.get(target, prop, receiver);\r\n        },\r\n    });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n    let timeout = null;\r\n    let previous = 0;\r\n    return function (...args) {\r\n        const now = Date.now();\r\n        if (!previous && options.leading === false) {\r\n            previous = now;\r\n        }\r\n        const remaining = wait - (now - previous);\r\n        const context = this;\r\n        if (remaining <= 0 || remaining > wait) {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n            previous = now;\r\n            func.apply(context, args);\r\n        }\r\n        else if (!timeout && options.trailing !== false) {\r\n            timeout = setTimeout(() => {\r\n                previous = options.leading === false ? 0 : Date.now();\r\n                timeout = null;\r\n                func.apply(context, args);\r\n            }, remaining);\r\n        }\r\n    };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n    win.Object.defineProperty(target, key, isRevoked\r\n        ? d\r\n        : {\r\n            set(value) {\r\n                setTimeout(() => {\r\n                    d.set.call(this, value);\r\n                }, 0);\r\n                if (original && original.set) {\r\n                    original.set.call(this, value);\r\n                }\r\n            },\r\n        });\r\n    return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n    try {\r\n        if (!(name in source)) {\r\n            return () => {\r\n            };\r\n        }\r\n        const original = source[name];\r\n        const wrapped = replacement(original);\r\n        if (typeof wrapped === 'function') {\r\n            wrapped.prototype = wrapped.prototype || {};\r\n            Object.defineProperties(wrapped, {\r\n                __rrweb_original__: {\r\n                    enumerable: false,\r\n                    value: original,\r\n                },\r\n            });\r\n        }\r\n        source[name] = wrapped;\r\n        return () => {\r\n            source[name] = original;\r\n        };\r\n    }\r\n    catch (_a) {\r\n        return () => {\r\n        };\r\n    }\r\n}\r\nfunction getWindowHeight() {\r\n    return (window.innerHeight ||\r\n        (document.documentElement && document.documentElement.clientHeight) ||\r\n        (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n    return (window.innerWidth ||\r\n        (document.documentElement && document.documentElement.clientWidth) ||\r\n        (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n    if (!node) {\r\n        return false;\r\n    }\r\n    const el = node.nodeType === node.ELEMENT_NODE\r\n        ? node\r\n        : node.parentElement;\r\n    if (!el)\r\n        return false;\r\n    if (typeof blockClass === 'string') {\r\n        if (el.classList.contains(blockClass))\r\n            return true;\r\n        if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n            return true;\r\n    }\r\n    else {\r\n        if (classMatchesRegex(el, blockClass, checkAncestors))\r\n            return true;\r\n    }\r\n    if (blockSelector) {\r\n        if (node.matches(blockSelector))\r\n            return true;\r\n        if (checkAncestors && el.closest(blockSelector) !== null)\r\n            return true;\r\n    }\r\n    return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n    return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n    return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n    if (isShadowRoot(target)) {\r\n        return false;\r\n    }\r\n    const id = mirror.getId(target);\r\n    if (!mirror.has(id)) {\r\n        return true;\r\n    }\r\n    if (target.parentNode &&\r\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n        return false;\r\n    }\r\n    if (!target.parentNode) {\r\n        return true;\r\n    }\r\n    return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction isTouchEvent(event) {\r\n    return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n        win.NodeList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n        win.DOMTokenList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if (!Node.prototype.contains) {\r\n        Node.prototype.contains = (...args) => {\r\n            let node = args[0];\r\n            if (!(0 in args)) {\r\n                throw new TypeError('1 argument is required');\r\n            }\r\n            do {\r\n                if (this === node) {\r\n                    return true;\r\n                }\r\n            } while ((node = node && node.parentNode));\r\n            return false;\r\n        };\r\n    }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n    const queueNodeMap = {};\r\n    const putIntoMap = (m, parent) => {\r\n        const nodeInTree = {\r\n            value: m,\r\n            parent,\r\n            children: [],\r\n        };\r\n        queueNodeMap[m.node.id] = nodeInTree;\r\n        return nodeInTree;\r\n    };\r\n    const queueNodeTrees = [];\r\n    for (const mutation of queue) {\r\n        const { nextId, parentId } = mutation;\r\n        if (nextId && nextId in queueNodeMap) {\r\n            const nextInTree = queueNodeMap[nextId];\r\n            if (nextInTree.parent) {\r\n                const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n                nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n            }\r\n            else {\r\n                const idx = queueNodeTrees.indexOf(nextInTree);\r\n                queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n            }\r\n            continue;\r\n        }\r\n        if (parentId in queueNodeMap) {\r\n            const parentInTree = queueNodeMap[parentId];\r\n            parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n            continue;\r\n        }\r\n        queueNodeTrees.push(putIntoMap(mutation, null));\r\n    }\r\n    return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n    cb(tree.value);\r\n    for (let i = tree.children.length - 1; i >= 0; i--) {\r\n        iterateResolveTree(tree.children[i], cb);\r\n    }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n    return Boolean(n.nodeName === 'LINK' &&\r\n        n.nodeType === n.ELEMENT_NODE &&\r\n        n.getAttribute &&\r\n        n.getAttribute('rel') === 'stylesheet' &&\r\n        mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n    var _a, _b;\r\n    const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n    if (!frameElement || frameElement === rootIframe) {\r\n        return {\r\n            x: 0,\r\n            y: 0,\r\n            relativeScale: 1,\r\n            absoluteScale: 1,\r\n        };\r\n    }\r\n    const frameDimension = frameElement.getBoundingClientRect();\r\n    const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n    const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n    return {\r\n        x: frameDimension.x * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.x,\r\n        y: frameDimension.y * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.y,\r\n        relativeScale,\r\n        absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n    };\r\n}\r\nfunction hasShadowRoot(n) {\r\n    return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n    const rule = rules[position[0]];\r\n    if (position.length === 1) {\r\n        return rule;\r\n    }\r\n    else {\r\n        return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n    }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n    const positions = [...nestedIndex];\r\n    const index = positions.pop();\r\n    return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n    const idSet = new Set();\r\n    const uniqueMutations = [];\r\n    for (let i = mutations.length; i--;) {\r\n        const mutation = mutations[i];\r\n        if (!idSet.has(mutation.id)) {\r\n            uniqueMutations.push(mutation);\r\n            idSet.add(mutation.id);\r\n        }\r\n    }\r\n    return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n    constructor() {\r\n        this.id = 1;\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n    }\r\n    getId(stylesheet) {\r\n        var _a;\r\n        return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n    }\r\n    has(stylesheet) {\r\n        return this.styleIDMap.has(stylesheet);\r\n    }\r\n    add(stylesheet, id) {\r\n        if (this.has(stylesheet))\r\n            return this.getId(stylesheet);\r\n        let newId;\r\n        if (id === undefined) {\r\n            newId = this.id++;\r\n        }\r\n        else\r\n            newId = id;\r\n        this.styleIDMap.set(stylesheet, newId);\r\n        this.idStyleMap.set(newId, stylesheet);\r\n        return newId;\r\n    }\r\n    getStyle(id) {\r\n        return this.idStyleMap.get(id) || null;\r\n    }\r\n    reset() {\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n        this.id = 1;\r\n    }\r\n    generateId() {\r\n        return this.id++;\r\n    }\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, isTouchEvent, iterateResolveTree, on, patch, polyfill, queueToResolveTrees, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, ReplayerEvents };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nvar decode = function (base64) {\n    var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return arraybuffer;\n};\n\nexport { decode, encode };\n","var WorkerClass = null;\n\ntry {\n    var WorkerThreads =\n        typeof module !== 'undefined' && typeof module.require === 'function' && module.require('worker_threads') ||\n        typeof __non_webpack_require__ === 'function' && __non_webpack_require__('worker_threads') ||\n        typeof require === 'function' && require('worker_threads');\n    WorkerClass = WorkerThreads.Worker;\n} catch(e) {} // eslint-disable-line\n\nexport { WorkerClass };\n","import { WorkerClass } from './_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js';\n\nfunction decodeBase64(base64, enableUnicode) {\n    return Buffer.from(base64, 'base64').toString(enableUnicode ? 'utf16' : 'utf8');\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n    var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n    var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n    var source = decodeBase64(base64, enableUnicode);\n    var start = source.indexOf('\\n', 10) + 1;\n    var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n    return function WorkerFactory(options) {\n        return new WorkerClass(body, Object.assign({}, options, { eval: true }));\n    };\n}\n\nexport { createBase64WorkerFactory };\n","var kIsNodeJS = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n\nfunction isNodeJS() {\n    return kIsNodeJS;\n}\n\nexport { isNodeJS };\n","import { createBase64WorkerFactory as createBase64WorkerFactory$1 } from './_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js';\nimport { createBase64WorkerFactory as createBase64WorkerFactory$2 } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';\nimport { isNodeJS } from './_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js';\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n    if (isNodeJS()) {\n        return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);\n    }\n    return createBase64WorkerFactory$2(base64, sourcemapArg, enableUnicodeArg);\n}\n\nexport { createBase64WorkerFactory };\n","var NodeType$1;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType$1 || (NodeType$1 = {}));\nvar Mirror$1 = (function () {\r\n    function Mirror() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    Mirror.prototype.getId = function (n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    };\r\n    Mirror.prototype.getNode = function (id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    };\r\n    Mirror.prototype.getIds = function () {\r\n        return Array.from(this.idNodeMap.keys());\r\n    };\r\n    Mirror.prototype.getMeta = function (n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    };\r\n    Mirror.prototype.removeNodeFromMap = function (n) {\r\n        var _this = this;\r\n        var id = this.getId(n);\r\n        this.idNodeMap[\"delete\"](id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach(function (childNode) {\r\n                return _this.removeNodeFromMap(childNode);\r\n            });\r\n        }\r\n    };\r\n    Mirror.prototype.has = function (id) {\r\n        return this.idNodeMap.has(id);\r\n    };\r\n    Mirror.prototype.hasNode = function (node) {\r\n        return this.nodeMetaMap.has(node);\r\n    };\r\n    Mirror.prototype.add = function (n, meta) {\r\n        var id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    };\r\n    Mirror.prototype.replace = function (id, n) {\r\n        var oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            var meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    };\r\n    Mirror.prototype.reset = function () {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    };\r\n    return Mirror;\r\n}());\r\nfunction createMirror$1() {\r\n    return new Mirror$1();\r\n}\n\nfunction parseCSSText(cssText) {\r\n    const res = {};\r\n    const listDelimiter = /;(?![^(]*\\))/g;\r\n    const propertyDelimiter = /:(.+)/;\r\n    const comment = /\\/\\*.*?\\*\\//g;\r\n    cssText\r\n        .replace(comment, '')\r\n        .split(listDelimiter)\r\n        .forEach(function (item) {\r\n        if (item) {\r\n            const tmp = item.split(propertyDelimiter);\r\n            tmp.length > 1 && (res[camelize(tmp[0].trim())] = tmp[1].trim());\r\n        }\r\n    });\r\n    return res;\r\n}\r\nfunction toCSSText(style) {\r\n    const properties = [];\r\n    for (const name in style) {\r\n        const value = style[name];\r\n        if (typeof value !== 'string')\r\n            continue;\r\n        const normalizedName = hyphenate(name);\r\n        properties.push(`${normalizedName}: ${value};`);\r\n    }\r\n    return properties.join(' ');\r\n}\r\nconst camelizeRE = /-([a-z])/g;\r\nconst CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\r\nconst camelize = (str) => {\r\n    if (CUSTOM_PROPERTY_REGEX.test(str))\r\n        return str;\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n};\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\nconst hyphenate = (str) => {\r\n    return str.replace(hyphenateRE, '-$1').toLowerCase();\r\n};\n\nclass BaseRRNode {\r\n    constructor(..._args) {\r\n        this.childNodes = [];\r\n        this.parentElement = null;\r\n        this.parentNode = null;\r\n        this.ELEMENT_NODE = NodeType.ELEMENT_NODE;\r\n        this.TEXT_NODE = NodeType.TEXT_NODE;\r\n    }\r\n    get firstChild() {\r\n        return this.childNodes[0] || null;\r\n    }\r\n    get lastChild() {\r\n        return this.childNodes[this.childNodes.length - 1] || null;\r\n    }\r\n    get nextSibling() {\r\n        const parentNode = this.parentNode;\r\n        if (!parentNode)\r\n            return null;\r\n        const siblings = parentNode.childNodes;\r\n        const index = siblings.indexOf(this);\r\n        return siblings[index + 1] || null;\r\n    }\r\n    contains(node) {\r\n        if (node === this)\r\n            return true;\r\n        for (const child of this.childNodes) {\r\n            if (child.contains(node))\r\n                return true;\r\n        }\r\n        return false;\r\n    }\r\n    appendChild(_newChild) {\r\n        throw new Error(`RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`);\r\n    }\r\n    insertBefore(_newChild, _refChild) {\r\n        throw new Error(`RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`);\r\n    }\r\n    removeChild(_node) {\r\n        throw new Error(`RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`);\r\n    }\r\n    toString() {\r\n        return 'RRNode';\r\n    }\r\n}\r\nfunction BaseRRDocumentImpl(RRNodeClass) {\r\n    return class BaseRRDocument extends RRNodeClass {\r\n        constructor() {\r\n            super(...arguments);\r\n            this.nodeType = NodeType.DOCUMENT_NODE;\r\n            this.nodeName = '#document';\r\n            this.compatMode = 'CSS1Compat';\r\n            this.RRNodeType = NodeType$1.Document;\r\n            this.textContent = null;\r\n        }\r\n        get documentElement() {\r\n            return (this.childNodes.find((node) => node.RRNodeType === NodeType$1.Element &&\r\n                node.tagName === 'HTML') || null);\r\n        }\r\n        get body() {\r\n            var _a;\r\n            return (((_a = this.documentElement) === null || _a === void 0 ? void 0 : _a.childNodes.find((node) => node.RRNodeType === NodeType$1.Element &&\r\n                node.tagName === 'BODY')) || null);\r\n        }\r\n        get head() {\r\n            var _a;\r\n            return (((_a = this.documentElement) === null || _a === void 0 ? void 0 : _a.childNodes.find((node) => node.RRNodeType === NodeType$1.Element &&\r\n                node.tagName === 'HEAD')) || null);\r\n        }\r\n        get implementation() {\r\n            return this;\r\n        }\r\n        get firstElementChild() {\r\n            return this.documentElement;\r\n        }\r\n        appendChild(childNode) {\r\n            const nodeType = childNode.RRNodeType;\r\n            if (nodeType === NodeType$1.Element ||\r\n                nodeType === NodeType$1.DocumentType) {\r\n                if (this.childNodes.some((s) => s.RRNodeType === nodeType)) {\r\n                    throw new Error(`RRDomException: Failed to execute 'appendChild' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? 'RRElement' : 'RRDoctype'} on RRDocument allowed.`);\r\n                }\r\n            }\r\n            childNode.parentElement = null;\r\n            childNode.parentNode = this;\r\n            this.childNodes.push(childNode);\r\n            return childNode;\r\n        }\r\n        insertBefore(newChild, refChild) {\r\n            const nodeType = newChild.RRNodeType;\r\n            if (nodeType === NodeType$1.Element ||\r\n                nodeType === NodeType$1.DocumentType) {\r\n                if (this.childNodes.some((s) => s.RRNodeType === nodeType)) {\r\n                    throw new Error(`RRDomException: Failed to execute 'insertBefore' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? 'RRElement' : 'RRDoctype'} on RRDocument allowed.`);\r\n                }\r\n            }\r\n            if (refChild === null)\r\n                return this.appendChild(newChild);\r\n            const childIndex = this.childNodes.indexOf(refChild);\r\n            if (childIndex == -1)\r\n                throw new Error(\"Failed to execute 'insertBefore' on 'RRNode': The RRNode before which the new node is to be inserted is not a child of this RRNode.\");\r\n            this.childNodes.splice(childIndex, 0, newChild);\r\n            newChild.parentElement = null;\r\n            newChild.parentNode = this;\r\n            return newChild;\r\n        }\r\n        removeChild(node) {\r\n            const indexOfChild = this.childNodes.indexOf(node);\r\n            if (indexOfChild === -1)\r\n                throw new Error(\"Failed to execute 'removeChild' on 'RRDocument': The RRNode to be removed is not a child of this RRNode.\");\r\n            this.childNodes.splice(indexOfChild, 1);\r\n            node.parentElement = null;\r\n            node.parentNode = null;\r\n            return node;\r\n        }\r\n        open() {\r\n            this.childNodes = [];\r\n        }\r\n        close() {\r\n        }\r\n        write(content) {\r\n            let publicId;\r\n            if (content ===\r\n                '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">')\r\n                publicId = '-//W3C//DTD XHTML 1.0 Transitional//EN';\r\n            else if (content ===\r\n                '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">')\r\n                publicId = '-//W3C//DTD HTML 4.0 Transitional//EN';\r\n            if (publicId) {\r\n                const doctype = this.createDocumentType('html', publicId, '');\r\n                this.open();\r\n                this.appendChild(doctype);\r\n            }\r\n        }\r\n        createDocument(_namespace, _qualifiedName, _doctype) {\r\n            return new BaseRRDocument();\r\n        }\r\n        createDocumentType(qualifiedName, publicId, systemId) {\r\n            const doctype = new (BaseRRDocumentTypeImpl(BaseRRNode))(qualifiedName, publicId, systemId);\r\n            doctype.ownerDocument = this;\r\n            return doctype;\r\n        }\r\n        createElement(tagName) {\r\n            const element = new (BaseRRElementImpl(BaseRRNode))(tagName);\r\n            element.ownerDocument = this;\r\n            return element;\r\n        }\r\n        createElementNS(_namespaceURI, qualifiedName) {\r\n            return this.createElement(qualifiedName);\r\n        }\r\n        createTextNode(data) {\r\n            const text = new (BaseRRTextImpl(BaseRRNode))(data);\r\n            text.ownerDocument = this;\r\n            return text;\r\n        }\r\n        createComment(data) {\r\n            const comment = new (BaseRRCommentImpl(BaseRRNode))(data);\r\n            comment.ownerDocument = this;\r\n            return comment;\r\n        }\r\n        createCDATASection(data) {\r\n            const CDATASection = new (BaseRRCDATASectionImpl(BaseRRNode))(data);\r\n            CDATASection.ownerDocument = this;\r\n            return CDATASection;\r\n        }\r\n        toString() {\r\n            return 'RRDocument';\r\n        }\r\n    };\r\n}\r\nfunction BaseRRDocumentTypeImpl(RRNodeClass) {\r\n    return class BaseRRDocumentType extends RRNodeClass {\r\n        constructor(qualifiedName, publicId, systemId) {\r\n            super();\r\n            this.nodeType = NodeType.DOCUMENT_TYPE_NODE;\r\n            this.RRNodeType = NodeType$1.DocumentType;\r\n            this.textContent = null;\r\n            this.name = qualifiedName;\r\n            this.publicId = publicId;\r\n            this.systemId = systemId;\r\n            this.nodeName = qualifiedName;\r\n        }\r\n        toString() {\r\n            return 'RRDocumentType';\r\n        }\r\n    };\r\n}\r\nfunction BaseRRElementImpl(RRNodeClass) {\r\n    return class BaseRRElement extends RRNodeClass {\r\n        constructor(tagName) {\r\n            super();\r\n            this.nodeType = NodeType.ELEMENT_NODE;\r\n            this.RRNodeType = NodeType$1.Element;\r\n            this.attributes = {};\r\n            this.shadowRoot = null;\r\n            this.tagName = tagName.toUpperCase();\r\n            this.nodeName = tagName.toUpperCase();\r\n        }\r\n        get textContent() {\r\n            let result = '';\r\n            this.childNodes.forEach((node) => (result += node.textContent));\r\n            return result;\r\n        }\r\n        set textContent(textContent) {\r\n            this.childNodes = [this.ownerDocument.createTextNode(textContent)];\r\n        }\r\n        get classList() {\r\n            return new ClassList(this.attributes.class, (newClassName) => {\r\n                this.attributes.class = newClassName;\r\n            });\r\n        }\r\n        get id() {\r\n            return this.attributes.id || '';\r\n        }\r\n        get className() {\r\n            return this.attributes.class || '';\r\n        }\r\n        get style() {\r\n            const style = (this.attributes.style\r\n                ? parseCSSText(this.attributes.style)\r\n                : {});\r\n            const hyphenateRE = /\\B([A-Z])/g;\r\n            style.setProperty = (name, value, priority) => {\r\n                if (hyphenateRE.test(name))\r\n                    return;\r\n                const normalizedName = camelize(name);\r\n                if (!value)\r\n                    delete style[normalizedName];\r\n                else\r\n                    style[normalizedName] = value;\r\n                if (priority === 'important')\r\n                    style[normalizedName] += ' !important';\r\n                this.attributes.style = toCSSText(style);\r\n            };\r\n            style.removeProperty = (name) => {\r\n                if (hyphenateRE.test(name))\r\n                    return '';\r\n                const normalizedName = camelize(name);\r\n                const value = style[normalizedName] || '';\r\n                delete style[normalizedName];\r\n                this.attributes.style = toCSSText(style);\r\n                return value;\r\n            };\r\n            return style;\r\n        }\r\n        getAttribute(name) {\r\n            return this.attributes[name] || null;\r\n        }\r\n        setAttribute(name, attribute) {\r\n            this.attributes[name] = attribute;\r\n        }\r\n        setAttributeNS(_namespace, qualifiedName, value) {\r\n            this.setAttribute(qualifiedName, value);\r\n        }\r\n        removeAttribute(name) {\r\n            delete this.attributes[name];\r\n        }\r\n        appendChild(newChild) {\r\n            this.childNodes.push(newChild);\r\n            newChild.parentNode = this;\r\n            newChild.parentElement = this;\r\n            return newChild;\r\n        }\r\n        insertBefore(newChild, refChild) {\r\n            if (refChild === null)\r\n                return this.appendChild(newChild);\r\n            const childIndex = this.childNodes.indexOf(refChild);\r\n            if (childIndex == -1)\r\n                throw new Error(\"Failed to execute 'insertBefore' on 'RRNode': The RRNode before which the new node is to be inserted is not a child of this RRNode.\");\r\n            this.childNodes.splice(childIndex, 0, newChild);\r\n            newChild.parentElement = this;\r\n            newChild.parentNode = this;\r\n            return newChild;\r\n        }\r\n        removeChild(node) {\r\n            const indexOfChild = this.childNodes.indexOf(node);\r\n            if (indexOfChild === -1)\r\n                throw new Error(\"Failed to execute 'removeChild' on 'RRElement': The RRNode to be removed is not a child of this RRNode.\");\r\n            this.childNodes.splice(indexOfChild, 1);\r\n            node.parentElement = null;\r\n            node.parentNode = null;\r\n            return node;\r\n        }\r\n        attachShadow(_init) {\r\n            const shadowRoot = this.ownerDocument.createElement('SHADOWROOT');\r\n            this.shadowRoot = shadowRoot;\r\n            return shadowRoot;\r\n        }\r\n        dispatchEvent(_event) {\r\n            return true;\r\n        }\r\n        toString() {\r\n            let attributeString = '';\r\n            for (const attribute in this.attributes) {\r\n                attributeString += `${attribute}=\"${this.attributes[attribute]}\" `;\r\n            }\r\n            return `${this.tagName} ${attributeString}`;\r\n        }\r\n    };\r\n}\r\nfunction BaseRRMediaElementImpl(RRElementClass) {\r\n    return class BaseRRMediaElement extends RRElementClass {\r\n        attachShadow(_init) {\r\n            throw new Error(`RRDomException: Failed to execute 'attachShadow' on 'RRElement': This RRElement does not support attachShadow`);\r\n        }\r\n        play() {\r\n            this.paused = false;\r\n        }\r\n        pause() {\r\n            this.paused = true;\r\n        }\r\n    };\r\n}\r\nfunction BaseRRTextImpl(RRNodeClass) {\r\n    return class BaseRRText extends RRNodeClass {\r\n        constructor(data) {\r\n            super();\r\n            this.nodeType = NodeType.TEXT_NODE;\r\n            this.nodeName = '#text';\r\n            this.RRNodeType = NodeType$1.Text;\r\n            this.data = data;\r\n        }\r\n        get textContent() {\r\n            return this.data;\r\n        }\r\n        set textContent(textContent) {\r\n            this.data = textContent;\r\n        }\r\n        toString() {\r\n            return `RRText text=${JSON.stringify(this.data)}`;\r\n        }\r\n    };\r\n}\r\nfunction BaseRRCommentImpl(RRNodeClass) {\r\n    return class BaseRRComment extends RRNodeClass {\r\n        constructor(data) {\r\n            super();\r\n            this.nodeType = NodeType.COMMENT_NODE;\r\n            this.nodeName = '#comment';\r\n            this.RRNodeType = NodeType$1.Comment;\r\n            this.data = data;\r\n        }\r\n        get textContent() {\r\n            return this.data;\r\n        }\r\n        set textContent(textContent) {\r\n            this.data = textContent;\r\n        }\r\n        toString() {\r\n            return `RRComment text=${JSON.stringify(this.data)}`;\r\n        }\r\n    };\r\n}\r\nfunction BaseRRCDATASectionImpl(RRNodeClass) {\r\n    return class BaseRRCDATASection extends RRNodeClass {\r\n        constructor(data) {\r\n            super();\r\n            this.nodeName = '#cdata-section';\r\n            this.nodeType = NodeType.CDATA_SECTION_NODE;\r\n            this.RRNodeType = NodeType$1.CDATA;\r\n            this.data = data;\r\n        }\r\n        get textContent() {\r\n            return this.data;\r\n        }\r\n        set textContent(textContent) {\r\n            this.data = textContent;\r\n        }\r\n        toString() {\r\n            return `RRCDATASection data=${JSON.stringify(this.data)}`;\r\n        }\r\n    };\r\n}\r\nclass ClassList {\r\n    constructor(classText, onChange) {\r\n        this.classes = [];\r\n        this.add = (...classNames) => {\r\n            for (const item of classNames) {\r\n                const className = String(item);\r\n                if (this.classes.indexOf(className) >= 0)\r\n                    continue;\r\n                this.classes.push(className);\r\n            }\r\n            this.onChange && this.onChange(this.classes.join(' '));\r\n        };\r\n        this.remove = (...classNames) => {\r\n            this.classes = this.classes.filter((item) => classNames.indexOf(item) === -1);\r\n            this.onChange && this.onChange(this.classes.join(' '));\r\n        };\r\n        if (classText) {\r\n            const classes = classText.trim().split(/\\s+/);\r\n            this.classes.push(...classes);\r\n        }\r\n        this.onChange = onChange;\r\n    }\r\n}\r\nvar NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"PLACEHOLDER\"] = 0] = \"PLACEHOLDER\";\r\n    NodeType[NodeType[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\r\n    NodeType[NodeType[\"ATTRIBUTE_NODE\"] = 2] = \"ATTRIBUTE_NODE\";\r\n    NodeType[NodeType[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\r\n    NodeType[NodeType[\"CDATA_SECTION_NODE\"] = 4] = \"CDATA_SECTION_NODE\";\r\n    NodeType[NodeType[\"ENTITY_REFERENCE_NODE\"] = 5] = \"ENTITY_REFERENCE_NODE\";\r\n    NodeType[NodeType[\"ENTITY_NODE\"] = 6] = \"ENTITY_NODE\";\r\n    NodeType[NodeType[\"PROCESSING_INSTRUCTION_NODE\"] = 7] = \"PROCESSING_INSTRUCTION_NODE\";\r\n    NodeType[NodeType[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\r\n    NodeType[NodeType[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\r\n    NodeType[NodeType[\"DOCUMENT_TYPE_NODE\"] = 10] = \"DOCUMENT_TYPE_NODE\";\r\n    NodeType[NodeType[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\r\n})(NodeType || (NodeType = {}));\n\nconst NAMESPACES = {\r\n    svg: 'http://www.w3.org/2000/svg',\r\n    'xlink:href': 'http://www.w3.org/1999/xlink',\r\n    xmlns: 'http://www.w3.org/2000/xmlns/',\r\n};\r\nconst SVGTagMap = {\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction diff(oldTree, newTree, replayer, rrnodeMirror) {\r\n    const oldChildren = oldTree.childNodes;\r\n    const newChildren = newTree.childNodes;\r\n    rrnodeMirror =\r\n        rrnodeMirror ||\r\n            newTree.mirror ||\r\n            newTree.ownerDocument.mirror;\r\n    if (oldChildren.length > 0 || newChildren.length > 0) {\r\n        diffChildren(Array.from(oldChildren), newChildren, oldTree, replayer, rrnodeMirror);\r\n    }\r\n    let inputDataToApply = null, scrollDataToApply = null;\r\n    switch (newTree.RRNodeType) {\r\n        case NodeType$1.Document: {\r\n            const newRRDocument = newTree;\r\n            scrollDataToApply = newRRDocument.scrollData;\r\n            break;\r\n        }\r\n        case NodeType$1.Element: {\r\n            const oldElement = oldTree;\r\n            const newRRElement = newTree;\r\n            diffProps(oldElement, newRRElement, rrnodeMirror);\r\n            scrollDataToApply = newRRElement.scrollData;\r\n            inputDataToApply = newRRElement.inputData;\r\n            switch (newRRElement.tagName) {\r\n                case 'AUDIO':\r\n                case 'VIDEO': {\r\n                    const oldMediaElement = oldTree;\r\n                    const newMediaRRElement = newRRElement;\r\n                    if (newMediaRRElement.paused !== undefined)\r\n                        newMediaRRElement.paused\r\n                            ? void oldMediaElement.pause()\r\n                            : void oldMediaElement.play();\r\n                    if (newMediaRRElement.muted !== undefined)\r\n                        oldMediaElement.muted = newMediaRRElement.muted;\r\n                    if (newMediaRRElement.volume !== undefined)\r\n                        oldMediaElement.volume = newMediaRRElement.volume;\r\n                    if (newMediaRRElement.currentTime !== undefined)\r\n                        oldMediaElement.currentTime = newMediaRRElement.currentTime;\r\n                    if (newMediaRRElement.playbackRate !== undefined)\r\n                        oldMediaElement.playbackRate = newMediaRRElement.playbackRate;\r\n                    break;\r\n                }\r\n                case 'CANVAS':\r\n                    {\r\n                        const rrCanvasElement = newTree;\r\n                        if (rrCanvasElement.rr_dataURL !== null) {\r\n                            const image = document.createElement('img');\r\n                            image.onload = () => {\r\n                                const ctx = oldElement.getContext('2d');\r\n                                if (ctx) {\r\n                                    ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                                }\r\n                            };\r\n                            image.src = rrCanvasElement.rr_dataURL;\r\n                        }\r\n                        rrCanvasElement.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation, oldTree));\r\n                    }\r\n                    break;\r\n                case 'STYLE':\r\n                    {\r\n                        const styleSheet = oldElement.sheet;\r\n                        styleSheet &&\r\n                            newTree.rules.forEach((data) => replayer.applyStyleSheetMutation(data, styleSheet));\r\n                    }\r\n                    break;\r\n            }\r\n            if (newRRElement.shadowRoot) {\r\n                if (!oldElement.shadowRoot)\r\n                    oldElement.attachShadow({ mode: 'open' });\r\n                const oldChildren = oldElement.shadowRoot.childNodes;\r\n                const newChildren = newRRElement.shadowRoot.childNodes;\r\n                if (oldChildren.length > 0 || newChildren.length > 0)\r\n                    diffChildren(Array.from(oldChildren), newChildren, oldElement.shadowRoot, replayer, rrnodeMirror);\r\n            }\r\n            break;\r\n        }\r\n        case NodeType$1.Text:\r\n        case NodeType$1.Comment:\r\n        case NodeType$1.CDATA:\r\n            if (oldTree.textContent !==\r\n                newTree.data)\r\n                oldTree.textContent = newTree.data;\r\n            break;\r\n    }\r\n    scrollDataToApply && replayer.applyScroll(scrollDataToApply, true);\r\n    inputDataToApply && replayer.applyInput(inputDataToApply);\r\n    if (newTree.nodeName === 'IFRAME') {\r\n        const oldContentDocument = oldTree.contentDocument;\r\n        const newIFrameElement = newTree;\r\n        if (oldContentDocument) {\r\n            const sn = rrnodeMirror.getMeta(newIFrameElement.contentDocument);\r\n            if (sn) {\r\n                replayer.mirror.add(oldContentDocument, Object.assign({}, sn));\r\n            }\r\n            diff(oldContentDocument, newIFrameElement.contentDocument, replayer, rrnodeMirror);\r\n        }\r\n    }\r\n}\r\nfunction diffProps(oldTree, newTree, rrnodeMirror) {\r\n    const oldAttributes = oldTree.attributes;\r\n    const newAttributes = newTree.attributes;\r\n    for (const name in newAttributes) {\r\n        const newValue = newAttributes[name];\r\n        const sn = rrnodeMirror.getMeta(newTree);\r\n        if (sn && 'isSVG' in sn && sn.isSVG && NAMESPACES[name])\r\n            oldTree.setAttributeNS(NAMESPACES[name], name, newValue);\r\n        else if (newTree.tagName === 'CANVAS' && name === 'rr_dataURL') {\r\n            const image = document.createElement('img');\r\n            image.src = newValue;\r\n            image.onload = () => {\r\n                const ctx = oldTree.getContext('2d');\r\n                if (ctx) {\r\n                    ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                }\r\n            };\r\n        }\r\n        else\r\n            oldTree.setAttribute(name, newValue);\r\n    }\r\n    for (const { name } of Array.from(oldAttributes))\r\n        if (!(name in newAttributes))\r\n            oldTree.removeAttribute(name);\r\n    newTree.scrollLeft && (oldTree.scrollLeft = newTree.scrollLeft);\r\n    newTree.scrollTop && (oldTree.scrollTop = newTree.scrollTop);\r\n}\r\nfunction diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirror) {\r\n    var _a;\r\n    let oldStartIndex = 0, oldEndIndex = oldChildren.length - 1, newStartIndex = 0, newEndIndex = newChildren.length - 1;\r\n    let oldStartNode = oldChildren[oldStartIndex], oldEndNode = oldChildren[oldEndIndex], newStartNode = newChildren[newStartIndex], newEndNode = newChildren[newEndIndex];\r\n    let oldIdToIndex = undefined, indexInOld;\r\n    while (oldStartIndex <= oldEndIndex && newStartIndex <= newEndIndex) {\r\n        const oldStartId = replayer.mirror.getId(oldStartNode);\r\n        const oldEndId = replayer.mirror.getId(oldEndNode);\r\n        const newStartId = rrnodeMirror.getId(newStartNode);\r\n        const newEndId = rrnodeMirror.getId(newEndNode);\r\n        if (oldStartNode === undefined) {\r\n            oldStartNode = oldChildren[++oldStartIndex];\r\n        }\r\n        else if (oldEndNode === undefined) {\r\n            oldEndNode = oldChildren[--oldEndIndex];\r\n        }\r\n        else if (oldStartId !== -1 &&\r\n            oldStartId === newStartId) {\r\n            diff(oldStartNode, newStartNode, replayer, rrnodeMirror);\r\n            oldStartNode = oldChildren[++oldStartIndex];\r\n            newStartNode = newChildren[++newStartIndex];\r\n        }\r\n        else if (oldEndId !== -1 &&\r\n            oldEndId === newEndId) {\r\n            diff(oldEndNode, newEndNode, replayer, rrnodeMirror);\r\n            oldEndNode = oldChildren[--oldEndIndex];\r\n            newEndNode = newChildren[--newEndIndex];\r\n        }\r\n        else if (oldStartId !== -1 &&\r\n            oldStartId === newEndId) {\r\n            parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);\r\n            diff(oldStartNode, newEndNode, replayer, rrnodeMirror);\r\n            oldStartNode = oldChildren[++oldStartIndex];\r\n            newEndNode = newChildren[--newEndIndex];\r\n        }\r\n        else if (oldEndId !== -1 &&\r\n            oldEndId === newStartId) {\r\n            parentNode.insertBefore(oldEndNode, oldStartNode);\r\n            diff(oldEndNode, newStartNode, replayer, rrnodeMirror);\r\n            oldEndNode = oldChildren[--oldEndIndex];\r\n            newStartNode = newChildren[++newStartIndex];\r\n        }\r\n        else {\r\n            if (!oldIdToIndex) {\r\n                oldIdToIndex = {};\r\n                for (let i = oldStartIndex; i <= oldEndIndex; i++) {\r\n                    const oldChild = oldChildren[i];\r\n                    if (oldChild && replayer.mirror.hasNode(oldChild))\r\n                        oldIdToIndex[replayer.mirror.getId(oldChild)] = i;\r\n                }\r\n            }\r\n            indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];\r\n            if (indexInOld) {\r\n                const nodeToMove = oldChildren[indexInOld];\r\n                parentNode.insertBefore(nodeToMove, oldStartNode);\r\n                diff(nodeToMove, newStartNode, replayer, rrnodeMirror);\r\n                oldChildren[indexInOld] = undefined;\r\n            }\r\n            else {\r\n                const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);\r\n                if (parentNode.nodeName === '#document' &&\r\n                    ((_a = replayer.mirror.getMeta(newNode)) === null || _a === void 0 ? void 0 : _a.type) === NodeType$1.Element &&\r\n                    parentNode.documentElement) {\r\n                    parentNode.removeChild(parentNode.documentElement);\r\n                    oldChildren[oldStartIndex] = undefined;\r\n                    oldStartNode = undefined;\r\n                }\r\n                parentNode.insertBefore(newNode, oldStartNode || null);\r\n                diff(newNode, newStartNode, replayer, rrnodeMirror);\r\n            }\r\n            newStartNode = newChildren[++newStartIndex];\r\n        }\r\n    }\r\n    if (oldStartIndex > oldEndIndex) {\r\n        const referenceRRNode = newChildren[newEndIndex + 1];\r\n        let referenceNode = null;\r\n        if (referenceRRNode)\r\n            parentNode.childNodes.forEach((child) => {\r\n                if (replayer.mirror.getId(child) === rrnodeMirror.getId(referenceRRNode))\r\n                    referenceNode = child;\r\n            });\r\n        for (; newStartIndex <= newEndIndex; ++newStartIndex) {\r\n            const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);\r\n            parentNode.insertBefore(newNode, referenceNode);\r\n            diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);\r\n        }\r\n    }\r\n    else if (newStartIndex > newEndIndex) {\r\n        for (; oldStartIndex <= oldEndIndex; oldStartIndex++) {\r\n            const node = oldChildren[oldStartIndex];\r\n            if (node) {\r\n                parentNode.removeChild(node);\r\n                replayer.mirror.removeNodeFromMap(node);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction createOrGetNode(rrNode, domMirror, rrnodeMirror) {\r\n    const nodeId = rrnodeMirror.getId(rrNode);\r\n    const sn = rrnodeMirror.getMeta(rrNode);\r\n    let node = null;\r\n    if (nodeId > -1)\r\n        node = domMirror.getNode(nodeId);\r\n    if (node !== null)\r\n        return node;\r\n    switch (rrNode.RRNodeType) {\r\n        case NodeType$1.Document:\r\n            node = new Document();\r\n            break;\r\n        case NodeType$1.DocumentType:\r\n            node = document.implementation.createDocumentType(rrNode.name, rrNode.publicId, rrNode.systemId);\r\n            break;\r\n        case NodeType$1.Element: {\r\n            let tagName = rrNode.tagName.toLowerCase();\r\n            tagName = SVGTagMap[tagName] || tagName;\r\n            if (sn && 'isSVG' in sn && (sn === null || sn === void 0 ? void 0 : sn.isSVG)) {\r\n                node = document.createElementNS(NAMESPACES['svg'], tagName);\r\n            }\r\n            else\r\n                node = document.createElement(rrNode.tagName);\r\n            break;\r\n        }\r\n        case NodeType$1.Text:\r\n            node = document.createTextNode(rrNode.data);\r\n            break;\r\n        case NodeType$1.Comment:\r\n            node = document.createComment(rrNode.data);\r\n            break;\r\n        case NodeType$1.CDATA:\r\n            node = document.createCDATASection(rrNode.data);\r\n            break;\r\n    }\r\n    if (sn)\r\n        domMirror.add(node, Object.assign({}, sn));\r\n    return node;\r\n}\n\nclass RRDocument extends BaseRRDocumentImpl(BaseRRNode) {\r\n    constructor(mirror) {\r\n        super();\r\n        this.UNSERIALIZED_STARTING_ID = -2;\r\n        this._unserializedId = this.UNSERIALIZED_STARTING_ID;\r\n        this.mirror = createMirror();\r\n        this.scrollData = null;\r\n        if (mirror) {\r\n            this.mirror = mirror;\r\n        }\r\n    }\r\n    get unserializedId() {\r\n        return this._unserializedId--;\r\n    }\r\n    createDocument(_namespace, _qualifiedName, _doctype) {\r\n        return new RRDocument();\r\n    }\r\n    createDocumentType(qualifiedName, publicId, systemId) {\r\n        const documentTypeNode = new RRDocumentType(qualifiedName, publicId, systemId);\r\n        documentTypeNode.ownerDocument = this;\r\n        return documentTypeNode;\r\n    }\r\n    createElement(tagName) {\r\n        const upperTagName = tagName.toUpperCase();\r\n        let element;\r\n        switch (upperTagName) {\r\n            case 'AUDIO':\r\n            case 'VIDEO':\r\n                element = new RRMediaElement(upperTagName);\r\n                break;\r\n            case 'IFRAME':\r\n                element = new RRIFrameElement(upperTagName, this.mirror);\r\n                break;\r\n            case 'CANVAS':\r\n                element = new RRCanvasElement(upperTagName);\r\n                break;\r\n            case 'STYLE':\r\n                element = new RRStyleElement(upperTagName);\r\n                break;\r\n            default:\r\n                element = new RRElement(upperTagName);\r\n                break;\r\n        }\r\n        element.ownerDocument = this;\r\n        return element;\r\n    }\r\n    createComment(data) {\r\n        const commentNode = new RRComment(data);\r\n        commentNode.ownerDocument = this;\r\n        return commentNode;\r\n    }\r\n    createCDATASection(data) {\r\n        const sectionNode = new RRCDATASection(data);\r\n        sectionNode.ownerDocument = this;\r\n        return sectionNode;\r\n    }\r\n    createTextNode(data) {\r\n        const textNode = new RRText(data);\r\n        textNode.ownerDocument = this;\r\n        return textNode;\r\n    }\r\n    destroyTree() {\r\n        this.childNodes = [];\r\n        this.mirror.reset();\r\n    }\r\n    open() {\r\n        super.open();\r\n        this._unserializedId = this.UNSERIALIZED_STARTING_ID;\r\n    }\r\n}\r\nconst RRDocumentType = BaseRRDocumentTypeImpl(BaseRRNode);\r\nclass RRElement extends BaseRRElementImpl(BaseRRNode) {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.inputData = null;\r\n        this.scrollData = null;\r\n    }\r\n}\r\nclass RRMediaElement extends BaseRRMediaElementImpl(RRElement) {\r\n}\r\nclass RRCanvasElement extends RRElement {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.rr_dataURL = null;\r\n        this.canvasMutations = [];\r\n    }\r\n    getContext() {\r\n        return null;\r\n    }\r\n}\r\nclass RRStyleElement extends RRElement {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.rules = [];\r\n    }\r\n}\r\nclass RRIFrameElement extends RRElement {\r\n    constructor(upperTagName, mirror) {\r\n        super(upperTagName);\r\n        this.contentDocument = new RRDocument();\r\n        this.contentDocument.mirror = mirror;\r\n    }\r\n}\r\nconst RRText = BaseRRTextImpl(BaseRRNode);\r\nconst RRComment = BaseRRCommentImpl(BaseRRNode);\r\nconst RRCDATASection = BaseRRCDATASectionImpl(BaseRRNode);\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'FORM';\r\n    }\r\n    return element.tagName.toUpperCase();\r\n}\r\nfunction buildFromNode(node, rrdom, domMirror, parentRRNode) {\r\n    let rrNode;\r\n    switch (node.nodeType) {\r\n        case NodeType.DOCUMENT_NODE:\r\n            if (parentRRNode && parentRRNode.nodeName === 'IFRAME')\r\n                rrNode = parentRRNode.contentDocument;\r\n            else {\r\n                rrNode = rrdom;\r\n                rrNode.compatMode = node.compatMode;\r\n            }\r\n            break;\r\n        case NodeType.DOCUMENT_TYPE_NODE: {\r\n            const documentType = node;\r\n            rrNode = rrdom.createDocumentType(documentType.name, documentType.publicId, documentType.systemId);\r\n            break;\r\n        }\r\n        case NodeType.ELEMENT_NODE: {\r\n            const elementNode = node;\r\n            const tagName = getValidTagName(elementNode);\r\n            rrNode = rrdom.createElement(tagName);\r\n            const rrElement = rrNode;\r\n            for (const { name, value } of Array.from(elementNode.attributes)) {\r\n                rrElement.attributes[name] = value;\r\n            }\r\n            elementNode.scrollLeft && (rrElement.scrollLeft = elementNode.scrollLeft);\r\n            elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);\r\n            break;\r\n        }\r\n        case NodeType.TEXT_NODE:\r\n            rrNode = rrdom.createTextNode(node.textContent || '');\r\n            break;\r\n        case NodeType.CDATA_SECTION_NODE:\r\n            rrNode = rrdom.createCDATASection(node.data);\r\n            break;\r\n        case NodeType.COMMENT_NODE:\r\n            rrNode = rrdom.createComment(node.textContent || '');\r\n            break;\r\n        case NodeType.DOCUMENT_FRAGMENT_NODE:\r\n            rrNode = parentRRNode.attachShadow({ mode: 'open' });\r\n            break;\r\n        default:\r\n            return null;\r\n    }\r\n    let sn = domMirror.getMeta(node);\r\n    if (rrdom instanceof RRDocument) {\r\n        if (!sn) {\r\n            sn = getDefaultSN(rrNode, rrdom.unserializedId);\r\n            domMirror.add(node, sn);\r\n        }\r\n        rrdom.mirror.add(rrNode, Object.assign({}, sn));\r\n    }\r\n    return rrNode;\r\n}\r\nfunction buildFromDom(dom, domMirror = createMirror$1(), rrdom = new RRDocument()) {\r\n    function walk(node, parentRRNode) {\r\n        const rrNode = buildFromNode(node, rrdom, domMirror, parentRRNode);\r\n        if (rrNode === null)\r\n            return;\r\n        if ((parentRRNode === null || parentRRNode === void 0 ? void 0 : parentRRNode.nodeName) !== 'IFRAME' &&\r\n            node.nodeType !== NodeType.DOCUMENT_FRAGMENT_NODE) {\r\n            parentRRNode === null || parentRRNode === void 0 ? void 0 : parentRRNode.appendChild(rrNode);\r\n            rrNode.parentNode = parentRRNode;\r\n            rrNode.parentElement = parentRRNode;\r\n        }\r\n        if (node.nodeName === 'IFRAME') {\r\n            const iframeDoc = node.contentDocument;\r\n            iframeDoc && walk(iframeDoc, rrNode);\r\n        }\r\n        else if (node.nodeType === NodeType.DOCUMENT_NODE ||\r\n            node.nodeType === NodeType.ELEMENT_NODE ||\r\n            node.nodeType === NodeType.DOCUMENT_FRAGMENT_NODE) {\r\n            if (node.nodeType === NodeType.ELEMENT_NODE &&\r\n                node.shadowRoot)\r\n                walk(node.shadowRoot, rrNode);\r\n            node.childNodes.forEach((childNode) => walk(childNode, rrNode));\r\n        }\r\n    }\r\n    walk(dom, null);\r\n    return rrdom;\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction getDefaultSN(node, id) {\r\n    switch (node.RRNodeType) {\r\n        case NodeType$1.Document:\r\n            return {\r\n                id,\r\n                type: node.RRNodeType,\r\n                childNodes: [],\r\n            };\r\n        case NodeType$1.DocumentType: {\r\n            const doctype = node;\r\n            return {\r\n                id,\r\n                type: node.RRNodeType,\r\n                name: doctype.name,\r\n                publicId: doctype.publicId,\r\n                systemId: doctype.systemId,\r\n            };\r\n        }\r\n        case NodeType$1.Element:\r\n            return {\r\n                id,\r\n                type: node.RRNodeType,\r\n                tagName: node.tagName.toLowerCase(),\r\n                attributes: {},\r\n                childNodes: [],\r\n            };\r\n        case NodeType$1.Text:\r\n            return {\r\n                id,\r\n                type: node.RRNodeType,\r\n                textContent: node.textContent || '',\r\n            };\r\n        case NodeType$1.Comment:\r\n            return {\r\n                id,\r\n                type: node.RRNodeType,\r\n                textContent: node.textContent || '',\r\n            };\r\n        case NodeType$1.CDATA:\r\n            return {\r\n                id,\r\n                type: node.RRNodeType,\r\n                textContent: '',\r\n            };\r\n    }\r\n}\n\nexport { BaseRRCDATASectionImpl, BaseRRCommentImpl, BaseRRDocumentImpl, BaseRRDocumentTypeImpl, BaseRRElementImpl, BaseRRMediaElementImpl, BaseRRNode, BaseRRTextImpl, ClassList, Mirror, NodeType, RRCDATASection, RRCanvasElement, RRComment, RRDocument, RRDocumentType, RRElement, RRIFrameElement, RRMediaElement, BaseRRNode as RRNode, RRStyleElement, RRText, buildFromDom, buildFromNode, createMirror, createOrGetNode, diff, getDefaultSN };\n","import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js';\n\nvar WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucykgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBgJHt3aWR0aH0tJHtoZWlnaHR9YDsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRCbG9iTWFwLmdldChpZCk7DQogICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0geWllbGQgYmxvYi5hcnJheUJ1ZmZlcigpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQogICAgY29uc3Qgd29ya2VyID0gc2VsZjsNCiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgeyBpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucyB9ID0gZS5kYXRhOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zKTsNCiAgICAgICAgICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICBiaXRtYXAuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgICAgIGxhc3RCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7DQogICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgaWQsDQogICAgICAgICAgICAgICAgICAgIHR5cGUsDQogICAgICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsKCn0pKCk7Cgo=', null, false);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","function decodeBase64(base64, enableUnicode) {\n    var binaryString = atob(base64);\n    if (enableUnicode) {\n        var binaryView = new Uint8Array(binaryString.length);\n        for (var i = 0, n = binaryString.length; i < n; ++i) {\n            binaryView[i] = binaryString.charCodeAt(i);\n        }\n        return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer));\n    }\n    return binaryString;\n}\n\nfunction createURL(base64, sourcemapArg, enableUnicodeArg) {\n    var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n    var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n    var source = decodeBase64(base64, enableUnicode);\n    var start = source.indexOf('\\n', 10) + 1;\n    var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n    var blob = new Blob([body], { type: 'application/javascript' });\n    return URL.createObjectURL(blob);\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n    var url;\n    return function WorkerFactory(options) {\n        url = url || createURL(base64, sourcemapArg, enableUnicodeArg);\n        return new Worker(url, options);\n    };\n}\n\nexport { createBase64WorkerFactory };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, getWindowWidth, getWindowHeight, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\n\nfunction wrapEvent(e) {\r\n    return Object.assign(Object.assign({}, e), { timestamp: Date.now() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), } = options;\r\n    const inEmittingFrame = recordCrossOriginIframes\r\n        ? window.parent === window\r\n        : true;\r\n    let passEmitsToParent = false;\r\n    if (!inEmittingFrame) {\r\n        try {\r\n            window.parent.document;\r\n            passEmitsToParent = false;\r\n        }\r\n        catch (e) {\r\n            passEmitsToParent = true;\r\n        }\r\n    }\r\n    if (inEmittingFrame && !emit) {\r\n        throw new Error('emit function is required');\r\n    }\r\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n        sampling.mousemove = mousemoveWait;\r\n    }\r\n    mirror.reset();\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            password: true,\r\n        }\r\n        : _maskInputOptions !== undefined\r\n            ? _maskInputOptions\r\n            : { password: true };\r\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n        ? {\r\n            script: true,\r\n            comment: true,\r\n            headFavicon: true,\r\n            headWhitespace: true,\r\n            headMetaSocial: true,\r\n            headMetaRobots: true,\r\n            headMetaHttpEquiv: true,\r\n            headMetaVerification: true,\r\n            headMetaAuthorship: _slimDOMOptions === 'all',\r\n            headMetaDescKeywords: _slimDOMOptions === 'all',\r\n        }\r\n        : _slimDOMOptions\r\n            ? _slimDOMOptions\r\n            : {};\r\n    polyfill();\r\n    let lastFullSnapshotEvent;\r\n    let incrementalSnapshotCount = 0;\r\n    const eventProcessor = (e) => {\r\n        for (const plugin of plugins || []) {\r\n            if (plugin.eventProcessor) {\r\n                e = plugin.eventProcessor(e);\r\n            }\r\n        }\r\n        if (packFn) {\r\n            e = packFn(e);\r\n        }\r\n        return e;\r\n    };\r\n    wrappedEmit = (e, isCheckout) => {\r\n        var _a;\r\n        if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n            e.type !== EventType.FullSnapshot &&\r\n            !(e.type === EventType.IncrementalSnapshot &&\r\n                e.data.source === IncrementalSource.Mutation)) {\r\n            mutationBuffers.forEach((buf) => buf.unfreeze());\r\n        }\r\n        if (inEmittingFrame) {\r\n            emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n        }\r\n        else if (passEmitsToParent) {\r\n            const message = {\r\n                type: 'rrweb',\r\n                event: eventProcessor(e),\r\n                isCheckout,\r\n            };\r\n            window.parent.postMessage(message, '*');\r\n        }\r\n        if (e.type === EventType.FullSnapshot) {\r\n            lastFullSnapshotEvent = e;\r\n            incrementalSnapshotCount = 0;\r\n        }\r\n        else if (e.type === EventType.IncrementalSnapshot) {\r\n            if (e.data.source === IncrementalSource.Mutation &&\r\n                e.data.isAttachIframe) {\r\n                return;\r\n            }\r\n            incrementalSnapshotCount++;\r\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n            const exceedTime = checkoutEveryNms &&\r\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n            if (exceedCount || exceedTime) {\r\n                takeFullSnapshot(true);\r\n            }\r\n        }\r\n    };\r\n    const wrappedMutationEmit = (m) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.IncrementalSnapshot,\r\n            data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n        }));\r\n    };\r\n    const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n    }));\r\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n    }));\r\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n    }));\r\n    const stylesheetManager = new StylesheetManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n    });\r\n    const iframeManager = new IframeManager({\r\n        mirror,\r\n        mutationCb: wrappedMutationEmit,\r\n        stylesheetManager: stylesheetManager,\r\n        recordCrossOriginIframes,\r\n        wrappedEmit,\r\n    });\r\n    for (const plugin of plugins || []) {\r\n        if (plugin.getMirror)\r\n            plugin.getMirror({\r\n                nodeMirror: mirror,\r\n                crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n                crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n            });\r\n    }\r\n    canvasManager = new CanvasManager({\r\n        recordCanvas,\r\n        mutationCb: wrappedCanvasMutationEmit,\r\n        win: window,\r\n        blockClass,\r\n        blockSelector,\r\n        mirror,\r\n        sampling: sampling.canvas,\r\n        dataURLOptions,\r\n    });\r\n    const shadowDomManager = new ShadowDomManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        scrollCb: wrappedScrollEmit,\r\n        bypassOptions: {\r\n            blockClass,\r\n            blockSelector,\r\n            maskTextClass,\r\n            maskTextSelector,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            dataURLOptions,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            recordCanvas,\r\n            inlineImages,\r\n            sampling,\r\n            slimDOMOptions,\r\n            iframeManager,\r\n            stylesheetManager,\r\n            canvasManager,\r\n            keepIframeSrcFn,\r\n        },\r\n        mirror,\r\n    });\r\n    takeFullSnapshot = (isCheckout = false) => {\r\n        var _a, _b, _c, _d, _e, _f;\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.Meta,\r\n            data: {\r\n                href: window.location.href,\r\n                width: getWindowWidth(),\r\n                height: getWindowHeight(),\r\n            },\r\n        }), isCheckout);\r\n        stylesheetManager.reset();\r\n        mutationBuffers.forEach((buf) => buf.lock());\r\n        const node = snapshot(document, {\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskTextClass,\r\n            maskTextSelector,\r\n            inlineStylesheet,\r\n            maskAllInputs: maskInputOptions,\r\n            maskTextFn,\r\n            slimDOM: slimDOMOptions,\r\n            dataURLOptions,\r\n            recordCanvas,\r\n            inlineImages,\r\n            onSerialize: (n) => {\r\n                if (isSerializedIframe(n, mirror)) {\r\n                    iframeManager.addIframe(n);\r\n                }\r\n                if (isSerializedStylesheet(n, mirror)) {\r\n                    stylesheetManager.trackLinkElement(n);\r\n                }\r\n                if (hasShadowRoot(n)) {\r\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n                }\r\n            },\r\n            onIframeLoad: (iframe, childSn) => {\r\n                iframeManager.attachIframe(iframe, childSn);\r\n                shadowDomManager.observeAttachShadow(iframe);\r\n            },\r\n            onStylesheetLoad: (linkEl, childSn) => {\r\n                stylesheetManager.attachLinkElement(linkEl, childSn);\r\n            },\r\n            keepIframeSrcFn,\r\n        });\r\n        if (!node) {\r\n            return console.warn('Failed to snapshot the document');\r\n        }\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.FullSnapshot,\r\n            data: {\r\n                node,\r\n                initialOffset: {\r\n                    left: window.pageXOffset !== undefined\r\n                        ? window.pageXOffset\r\n                        : (document === null || document === void 0 ? void 0 : document.documentElement.scrollLeft) ||\r\n                            ((_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n                            ((_c = document === null || document === void 0 ? void 0 : document.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n                            0,\r\n                    top: window.pageYOffset !== undefined\r\n                        ? window.pageYOffset\r\n                        : (document === null || document === void 0 ? void 0 : document.documentElement.scrollTop) ||\r\n                            ((_e = (_d = document === null || document === void 0 ? void 0 : document.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n                            ((_f = document === null || document === void 0 ? void 0 : document.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n                            0,\r\n                },\r\n            },\r\n        }));\r\n        mutationBuffers.forEach((buf) => buf.unlock());\r\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n    };\r\n    try {\r\n        const handlers = [];\r\n        handlers.push(on('DOMContentLoaded', () => {\r\n            wrappedEmit(wrapEvent({\r\n                type: EventType.DomContentLoaded,\r\n                data: {},\r\n            }));\r\n        }));\r\n        const observe = (doc) => {\r\n            var _a;\r\n            return initObservers({\r\n                mutationCb: wrappedMutationEmit,\r\n                mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source,\r\n                        positions,\r\n                    },\r\n                })),\r\n                mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n                })),\r\n                scrollCb: wrappedScrollEmit,\r\n                viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n                })),\r\n                inputCb: (v) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Input }, v),\r\n                })),\r\n                mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n                })),\r\n                styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n                })),\r\n                styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n                })),\r\n                canvasMutationCb: wrappedCanvasMutationEmit,\r\n                fontCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Font }, p),\r\n                })),\r\n                selectionCb: (p) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n                    }));\r\n                },\r\n                blockClass,\r\n                ignoreClass,\r\n                maskTextClass,\r\n                maskTextSelector,\r\n                maskInputOptions,\r\n                inlineStylesheet,\r\n                sampling,\r\n                recordCanvas,\r\n                inlineImages,\r\n                userTriggeredOnInput,\r\n                collectFonts,\r\n                doc,\r\n                maskInputFn,\r\n                maskTextFn,\r\n                keepIframeSrcFn,\r\n                blockSelector,\r\n                slimDOMOptions,\r\n                dataURLOptions,\r\n                mirror,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                shadowDomManager,\r\n                canvasManager,\r\n                ignoreCSSAttributes,\r\n                plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n                    observer: p.observer,\r\n                    options: p.options,\r\n                    callback: (payload) => wrappedEmit(wrapEvent({\r\n                        type: EventType.Plugin,\r\n                        data: {\r\n                            plugin: p.name,\r\n                            payload,\r\n                        },\r\n                    })),\r\n                }))) || [],\r\n            }, hooks);\r\n        };\r\n        iframeManager.addLoadListener((iframeEl) => {\r\n            handlers.push(observe(iframeEl.contentDocument));\r\n        });\r\n        const init = () => {\r\n            takeFullSnapshot();\r\n            handlers.push(observe(document));\r\n            recording = true;\r\n        };\r\n        if (document.readyState === 'interactive' ||\r\n            document.readyState === 'complete') {\r\n            init();\r\n        }\r\n        else {\r\n            handlers.push(on('load', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.Load,\r\n                    data: {},\r\n                }));\r\n                init();\r\n            }, window));\r\n        }\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n            recording = false;\r\n        };\r\n    }\r\n    catch (error) {\r\n        console.warn(error);\r\n    }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n    if (!recording) {\r\n        throw new Error('please add custom event after start recording');\r\n    }\r\n    wrappedEmit(wrapEvent({\r\n        type: EventType.Custom,\r\n        data: {\r\n            tag,\r\n            payload,\r\n        },\r\n    }));\r\n};\r\nrecord.freezePage = () => {\r\n    mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n    if (!recording) {\r\n        throw new Error('please take full snapshot after start recording');\r\n    }\r\n    takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new u32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i)\n        ++l[cd[i] - 1];\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 0; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >>> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i)\n            co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n    n.set(v.subarray(s, e));\n    return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n    // source length\n    var sl = dat.length;\n    // have to estimate size\n    var noBuf = !buf || st;\n    // no state\n    var noSt = !st || st.i;\n    if (!st)\n        st = {};\n    // Assumes roughly 33% compression ratio average\n    if (!buf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            st.f = final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        throw 'unexpected EOF';\n                    break;\n                }\n                // ensure size\n                if (noBuf)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                if (!noSt && pos + tl * (clb + 7) > tbts)\n                    break;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >>> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                throw 'invalid block type';\n            if (pos > tbts)\n                throw 'unexpected EOF';\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17;\n        if (noBuf)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var mxa = lbt + dbt + 18;\n        while (noSt || pos + mxa < tbts) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n            pos += c & 15;\n            if (pos > tbts)\n                throw 'unexpected EOF';\n            if (!c)\n                throw 'invalid length/literal';\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n                if (!d)\n                    throw 'invalid distance';\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n                }\n                if (pos > tbts)\n                    throw 'unexpected EOF';\n                if (noBuf)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                for (; bt < end; bt += 4) {\n                    buf[bt] = buf[bt - dt];\n                    buf[bt + 1] = buf[bt + 1 - dt];\n                    buf[bt + 2] = buf[bt + 2 - dt];\n                    buf[bt + 3] = buf[bt + 3 - dt];\n                }\n                bt = end;\n            }\n        }\n        st.l = lm, st.p = pos, st.b = bt;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n    d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return [new u8(0), 0];\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return [v, 1];\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >>> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        lcfreq[lclt[i] & 31]++;\n    for (var i = 0; i < lcdt.length; ++i)\n        lcfreq[lcdt[i] & 31]++;\n    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n    if (flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        if (syms[i] > 255) {\n            var len = (syms[i] >>> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n            var dst = syms[i] & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n    var s = dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var pos = 0;\n    if (!lvl || s < 8) {\n        for (var i = 0; i <= s; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e < s) {\n                // write full block\n                pos = wfblk(w, pos, dat.subarray(i, e));\n            }\n            else {\n                // write final block\n                w[i] = lst;\n                pos = wfblk(w, pos, dat.subarray(i, s));\n            }\n        }\n    }\n    else {\n        var opt = deo[lvl - 1];\n        var n = opt >>> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = new u16(32768), head = new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new u32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos\n        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n        for (; i < s; ++i) {\n            // hash value\n            var hv = hsh(i);\n            // index mod 32768\n            var imod = i & 32767;\n            // previous index with this value\n            var pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = (i - dif + j + 32768) & 32767;\n                                    var pti = prev[ti];\n                                    var cd = (ti - pti + 32768) & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += (imod - pimod + 32768) & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one Uint32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        // this is the easiest way to avoid needing to maintain state\n        if (!lst)\n            pos = wfblk(w, pos, et);\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// Alder32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 5552, l);\n                for (; i < e; ++i)\n                    n += d[i], m += n;\n                n %= 65521, m %= 65521;\n            }\n            a = n, b = m;\n        },\n        d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n    };\n};\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        throw 'invalid zlib data';\n    if (d[1] & 32)\n        throw 'invalid zlib data: preset dictionaries not supported';\n};\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction unzlibSync(data, out) {\n    return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n    var l = str.length;\n    if (!latin1 && typeof TextEncoder != 'undefined')\n        return new TextEncoder().encode(str);\n    var ar = new u8(str.length + (str.length >>> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >>> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n    var r = '';\n    if (!latin1 && typeof TextDecoder != 'undefined')\n        return new TextDecoder().decode(dat);\n    for (var i = 0; i < dat.length;) {\n        var c = dat[i++];\n        if (c < 128 || latin1)\n            r += String.fromCharCode(c);\n        else if (c < 224)\n            r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n        else if (c < 240)\n            r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n        else\n            c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n    }\n    return r;\n}\n\nexport { strFromU8, strToU8, unzlibSync, zlibSync };\n","const MARK = 'v1';\n\nexport { MARK };\n","import { strFromU8, unzlibSync, strToU8 } from './../../../../ext/fflate/esm/browser.js';\nimport { MARK } from './base.js';\n\nconst unpack = (raw) => {\r\n    if (typeof raw !== 'string') {\r\n        return raw;\r\n    }\r\n    try {\r\n        const e = JSON.parse(raw);\r\n        if (e.timestamp) {\r\n            return e;\r\n        }\r\n    }\r\n    catch (error) {\r\n    }\r\n    try {\r\n        const e = JSON.parse(strFromU8(unzlibSync(strToU8(raw, true))));\r\n        if (e.v === MARK) {\r\n            return e;\r\n        }\r\n        throw new Error(`These events were packed with packer ${e.v} which is incompatible with current packer ${MARK}.`);\r\n    }\r\n    catch (error) {\r\n        console.error(error);\r\n        throw new Error('Unknown data format.');\r\n    }\r\n};\n\nexport { unpack };\n","function mitt(n){return {all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e]);},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]));},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e);}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e);});}}}\n\nexport { mitt as default };\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,n){var e=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,o,i=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)a.push(r.value);}catch(t){o={error:t};}finally{try{r&&!r.done&&(e=i.return)&&e.call(i);}finally{if(o)throw o.error}}return a}var n;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\";}(n||(n={}));var e={type:\"xstate.init\"};function r(t){return void 0===t?[]:[].concat(t)}function o(t){return {type:\"xstate.assign\",assignment:t}}function i(t,n){return \"string\"==typeof(t=\"string\"==typeof t&&n&&n[t]?n[t]:t)?{type:t}:\"function\"==typeof t?{type:t.name,exec:t}:t}function a(t){return function(n){return t===n}}function u(t){return \"string\"==typeof t?{type:t}:t}function c(t,n){return {value:t,context:n,actions:[],changed:!1,matches:a(t)}}function f(t,n,e){var r=n,o=!1;return [t.filter((function(t){if(\"xstate.assign\"===t.type){o=!0;var n=Object.assign({},r);return \"function\"==typeof t.assignment?n=t.assignment(r,e):Object.keys(t.assignment).forEach((function(o){n[o]=\"function\"==typeof t.assignment[o]?t.assignment[o](r,e):t.assignment[o];})),r=n,!1}return !0})),r,o]}function s(n,o){void 0===o&&(o={});var s=t(f(r(n.states[n.initial].entry).map((function(t){return i(t,o.actions)})),n.context,e),2),l=s[0],v=s[1],y={config:n,_options:o,initialState:{value:n.initial,actions:l,context:v,matches:a(n.initial)},transition:function(e,o){var s,l,v=\"string\"==typeof e?{value:e,context:n.context}:e,p=v.value,g=v.context,d=u(o),x=n.states[p];if(x.on){var m=r(x.on[d.type]);try{for(var h=function(t){var n=\"function\"==typeof Symbol&&Symbol.iterator,e=n&&t[n],r=0;if(e)return e.call(t);if(t&&\"number\"==typeof t.length)return {next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(m),b=h.next();!b.done;b=h.next()){var S=b.value;if(void 0===S)return c(p,g);var w=\"string\"==typeof S?{target:S}:S,j=w.target,E=w.actions,R=void 0===E?[]:E,N=w.cond,O=void 0===N?function(){return !0}:N,_=void 0===j,k=null!=j?j:p,T=n.states[k];if(O(g,d)){var q=t(f((_?r(R):[].concat(x.exit,R,T.entry).filter((function(t){return t}))).map((function(t){return i(t,y._options.actions)})),g,d),3),z=q[0],A=q[1],B=q[2],C=null!=j?j:p;return {value:C,context:A,actions:z,changed:j!==p||z.length>0||B,matches:a(C)}}}}catch(t){s={error:t};}finally{try{b&&!b.done&&(l=h.return)&&l.call(h);}finally{if(s)throw s.error}}}return c(p,g)}};return y}var l=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function v(t){var r=t.initialState,o=n.NotStarted,i=new Set,c={_machine:t,send:function(e){o===n.Running&&(r=t.transition(r,e),l(r,u(e)),i.forEach((function(t){return t(r)})));},subscribe:function(t){return i.add(t),t(r),{unsubscribe:function(){return i.delete(t)}}},start:function(i){if(i){var u=\"object\"==typeof i?i:{context:t.config.context,value:i};r={value:u.value,actions:[],context:u.context,matches:a(u.value)};}return o=n.Running,l(r,e),c},stop:function(){return o=n.Stopped,i.clear(),c},get state(){return r},get status(){return o}};return c}\n\nexport { n as InterpreterStatus, o as assign, s as createMachine, v as interpret };\n","function polyfill(w = window, d = document) {\r\n    if ('scrollBehavior' in d.documentElement.style &&\r\n        w.__forceSmoothScrollPolyfill__ !== true) {\r\n        return;\r\n    }\r\n    const Element = w.HTMLElement || w.Element;\r\n    const SCROLL_TIME = 468;\r\n    const original = {\r\n        scroll: w.scroll || w.scrollTo,\r\n        scrollBy: w.scrollBy,\r\n        elementScroll: Element.prototype.scroll || scrollElement,\r\n        scrollIntoView: Element.prototype.scrollIntoView,\r\n    };\r\n    const now = w.performance && w.performance.now\r\n        ? w.performance.now.bind(w.performance)\r\n        : Date.now;\r\n    function isMicrosoftBrowser(userAgent) {\r\n        const userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\r\n        return new RegExp(userAgentPatterns.join('|')).test(userAgent);\r\n    }\r\n    const ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\r\n    function scrollElement(x, y) {\r\n        this.scrollLeft = x;\r\n        this.scrollTop = y;\r\n    }\r\n    function ease(k) {\r\n        return 0.5 * (1 - Math.cos(Math.PI * k));\r\n    }\r\n    function shouldBailOut(firstArg) {\r\n        if (firstArg === null ||\r\n            typeof firstArg !== 'object' ||\r\n            firstArg.behavior === undefined ||\r\n            firstArg.behavior === 'auto' ||\r\n            firstArg.behavior === 'instant') {\r\n            return true;\r\n        }\r\n        if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\r\n            return false;\r\n        }\r\n        throw new TypeError('behavior member of ScrollOptions ' +\r\n            firstArg.behavior +\r\n            ' is not a valid value for enumeration ScrollBehavior.');\r\n    }\r\n    function hasScrollableSpace(el, axis) {\r\n        if (axis === 'Y') {\r\n            return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\r\n        }\r\n        if (axis === 'X') {\r\n            return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\r\n        }\r\n    }\r\n    function canOverflow(el, axis) {\r\n        const overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\r\n        return overflowValue === 'auto' || overflowValue === 'scroll';\r\n    }\r\n    function isScrollable(el) {\r\n        const isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\r\n        const isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\r\n        return isScrollableY || isScrollableX;\r\n    }\r\n    function findScrollableParent(el) {\r\n        while (el !== d.body && isScrollable(el) === false) {\r\n            el = el.parentNode || el.host;\r\n        }\r\n        return el;\r\n    }\r\n    function step(context) {\r\n        const time = now();\r\n        let value;\r\n        let currentX;\r\n        let currentY;\r\n        let elapsed = (time - context.startTime) / SCROLL_TIME;\r\n        elapsed = elapsed > 1 ? 1 : elapsed;\r\n        value = ease(elapsed);\r\n        currentX = context.startX + (context.x - context.startX) * value;\r\n        currentY = context.startY + (context.y - context.startY) * value;\r\n        context.method.call(context.scrollable, currentX, currentY);\r\n        if (currentX !== context.x || currentY !== context.y) {\r\n            w.requestAnimationFrame(step.bind(w, context));\r\n        }\r\n    }\r\n    function smoothScroll(el, x, y) {\r\n        let scrollable;\r\n        let startX;\r\n        let startY;\r\n        let method;\r\n        const startTime = now();\r\n        if (el === d.body) {\r\n            scrollable = w;\r\n            startX = w.scrollX || w.pageXOffset;\r\n            startY = w.scrollY || w.pageYOffset;\r\n            method = original.scroll;\r\n        }\r\n        else {\r\n            scrollable = el;\r\n            startX = el.scrollLeft;\r\n            startY = el.scrollTop;\r\n            method = scrollElement;\r\n        }\r\n        step({\r\n            scrollable: scrollable,\r\n            method: method,\r\n            startTime: startTime,\r\n            startX: startX,\r\n            startY: startY,\r\n            x: x,\r\n            y: y,\r\n        });\r\n    }\r\n    w.scroll = w.scrollTo = function () {\r\n        if (arguments[0] === undefined) {\r\n            return;\r\n        }\r\n        if (shouldBailOut(arguments[0]) === true) {\r\n            original.scroll.call(w, arguments[0].left !== undefined\r\n                ? arguments[0].left\r\n                : typeof arguments[0] !== 'object'\r\n                    ? arguments[0]\r\n                    : w.scrollX || w.pageXOffset, arguments[0].top !== undefined\r\n                ? arguments[0].top\r\n                : arguments[1] !== undefined\r\n                    ? arguments[1]\r\n                    : w.scrollY || w.pageYOffset);\r\n            return;\r\n        }\r\n        smoothScroll.call(w, d.body, arguments[0].left !== undefined\r\n            ? ~~arguments[0].left\r\n            : w.scrollX || w.pageXOffset, arguments[0].top !== undefined\r\n            ? ~~arguments[0].top\r\n            : w.scrollY || w.pageYOffset);\r\n    };\r\n    w.scrollBy = function () {\r\n        if (arguments[0] === undefined) {\r\n            return;\r\n        }\r\n        if (shouldBailOut(arguments[0])) {\r\n            original.scrollBy.call(w, arguments[0].left !== undefined\r\n                ? arguments[0].left\r\n                : typeof arguments[0] !== 'object'\r\n                    ? arguments[0]\r\n                    : 0, arguments[0].top !== undefined\r\n                ? arguments[0].top\r\n                : arguments[1] !== undefined\r\n                    ? arguments[1]\r\n                    : 0);\r\n            return;\r\n        }\r\n        smoothScroll.call(w, d.body, ~~arguments[0].left + (w.scrollX || w.pageXOffset), ~~arguments[0].top + (w.scrollY || w.pageYOffset));\r\n    };\r\n    Element.prototype.scroll = Element.prototype.scrollTo = function () {\r\n        if (arguments[0] === undefined) {\r\n            return;\r\n        }\r\n        if (shouldBailOut(arguments[0]) === true) {\r\n            if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\r\n                throw new SyntaxError('Value could not be converted');\r\n            }\r\n            original.elementScroll.call(this, arguments[0].left !== undefined\r\n                ? ~~arguments[0].left\r\n                : typeof arguments[0] !== 'object'\r\n                    ? ~~arguments[0]\r\n                    : this.scrollLeft, arguments[0].top !== undefined\r\n                ? ~~arguments[0].top\r\n                : arguments[1] !== undefined\r\n                    ? ~~arguments[1]\r\n                    : this.scrollTop);\r\n            return;\r\n        }\r\n        const left = arguments[0].left;\r\n        const top = arguments[0].top;\r\n        smoothScroll.call(this, this, typeof left === 'undefined' ? this.scrollLeft : ~~left, typeof top === 'undefined' ? this.scrollTop : ~~top);\r\n    };\r\n    Element.prototype.scrollBy = function () {\r\n        if (arguments[0] === undefined) {\r\n            return;\r\n        }\r\n        if (shouldBailOut(arguments[0]) === true) {\r\n            original.elementScroll.call(this, arguments[0].left !== undefined\r\n                ? ~~arguments[0].left + this.scrollLeft\r\n                : ~~arguments[0] + this.scrollLeft, arguments[0].top !== undefined\r\n                ? ~~arguments[0].top + this.scrollTop\r\n                : ~~arguments[1] + this.scrollTop);\r\n            return;\r\n        }\r\n        this.scroll({\r\n            left: ~~arguments[0].left + this.scrollLeft,\r\n            top: ~~arguments[0].top + this.scrollTop,\r\n            behavior: arguments[0].behavior,\r\n        });\r\n    };\r\n    Element.prototype.scrollIntoView = function () {\r\n        if (shouldBailOut(arguments[0]) === true) {\r\n            original.scrollIntoView.call(this, arguments[0] === undefined ? true : arguments[0]);\r\n            return;\r\n        }\r\n        const scrollableParent = findScrollableParent(this);\r\n        const parentRects = scrollableParent.getBoundingClientRect();\r\n        const clientRects = this.getBoundingClientRect();\r\n        if (scrollableParent !== d.body) {\r\n            smoothScroll.call(this, scrollableParent, scrollableParent.scrollLeft + clientRects.left - parentRects.left, scrollableParent.scrollTop + clientRects.top - parentRects.top);\r\n            if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\r\n                w.scrollBy({\r\n                    left: parentRects.left,\r\n                    top: parentRects.top,\r\n                    behavior: 'smooth',\r\n                });\r\n            }\r\n        }\r\n        else {\r\n            w.scrollBy({\r\n                left: clientRects.left,\r\n                top: clientRects.top,\r\n                behavior: 'smooth',\r\n            });\r\n        }\r\n    };\r\n}\n\nexport { polyfill };\n","import { EventType, IncrementalSource } from '../../../types/dist/types.js';\n\nclass Timer {\r\n    constructor(actions = [], config) {\r\n        this.timeOffset = 0;\r\n        this.raf = null;\r\n        this.actions = actions;\r\n        this.speed = config.speed;\r\n        this.liveMode = config.liveMode;\r\n    }\r\n    addAction(action) {\r\n        if (!this.actions.length ||\r\n            this.actions[this.actions.length - 1].delay <= action.delay) {\r\n            this.actions.push(action);\r\n            return;\r\n        }\r\n        const index = this.findActionIndex(action);\r\n        this.actions.splice(index, 0, action);\r\n    }\r\n    start() {\r\n        this.timeOffset = 0;\r\n        let lastTimestamp = performance.now();\r\n        const check = () => {\r\n            const time = performance.now();\r\n            this.timeOffset += (time - lastTimestamp) * this.speed;\r\n            lastTimestamp = time;\r\n            while (this.actions.length) {\r\n                const action = this.actions[0];\r\n                if (this.timeOffset >= action.delay) {\r\n                    this.actions.shift();\r\n                    action.doAction();\r\n                }\r\n                else {\r\n                    break;\r\n                }\r\n            }\r\n            if (this.actions.length > 0 || this.liveMode) {\r\n                this.raf = requestAnimationFrame(check);\r\n            }\r\n        };\r\n        this.raf = requestAnimationFrame(check);\r\n    }\r\n    clear() {\r\n        if (this.raf) {\r\n            cancelAnimationFrame(this.raf);\r\n            this.raf = null;\r\n        }\r\n        this.actions.length = 0;\r\n    }\r\n    setSpeed(speed) {\r\n        this.speed = speed;\r\n    }\r\n    toggleLiveMode(mode) {\r\n        this.liveMode = mode;\r\n    }\r\n    isActive() {\r\n        return this.raf !== null;\r\n    }\r\n    findActionIndex(action) {\r\n        let start = 0;\r\n        let end = this.actions.length - 1;\r\n        while (start <= end) {\r\n            const mid = Math.floor((start + end) / 2);\r\n            if (this.actions[mid].delay < action.delay) {\r\n                start = mid + 1;\r\n            }\r\n            else if (this.actions[mid].delay > action.delay) {\r\n                end = mid - 1;\r\n            }\r\n            else {\r\n                return mid + 1;\r\n            }\r\n        }\r\n        return start;\r\n    }\r\n}\r\nfunction addDelay(event, baselineTime) {\r\n    if (event.type === EventType.IncrementalSnapshot &&\r\n        event.data.source === IncrementalSource.MouseMove &&\r\n        event.data.positions &&\r\n        event.data.positions.length) {\r\n        const firstOffset = event.data.positions[0].timeOffset;\r\n        const firstTimestamp = event.timestamp + firstOffset;\r\n        event.delay = firstTimestamp - baselineTime;\r\n        return firstTimestamp - baselineTime;\r\n    }\r\n    event.delay = event.timestamp - baselineTime;\r\n    return event.delay;\r\n}\n\nexport { Timer, addDelay };\n","import { interpret as v, createMachine as s, assign as o } from './../../../../ext/@xstate/fsm/es/index.js';\nimport { EventType, IncrementalSource, ReplayerEvents } from '../../../types/dist/types.js';\nimport { addDelay } from './timer.js';\n\nfunction discardPriorSnapshots(events, baselineTime) {\r\n    for (let idx = events.length - 1; idx >= 0; idx--) {\r\n        const event = events[idx];\r\n        if (event.type === EventType.Meta) {\r\n            if (event.timestamp <= baselineTime) {\r\n                return events.slice(idx);\r\n            }\r\n        }\r\n    }\r\n    return events;\r\n}\r\nfunction createPlayerService(context, { getCastFn, applyEventsSynchronously, emitter }) {\r\n    const playerMachine = s({\r\n        id: 'player',\r\n        context,\r\n        initial: 'paused',\r\n        states: {\r\n            playing: {\r\n                on: {\r\n                    PAUSE: {\r\n                        target: 'paused',\r\n                        actions: ['pause'],\r\n                    },\r\n                    CAST_EVENT: {\r\n                        target: 'playing',\r\n                        actions: 'castEvent',\r\n                    },\r\n                    END: {\r\n                        target: 'paused',\r\n                        actions: ['resetLastPlayedEvent', 'pause'],\r\n                    },\r\n                    ADD_EVENT: {\r\n                        target: 'playing',\r\n                        actions: ['addEvent'],\r\n                    },\r\n                },\r\n            },\r\n            paused: {\r\n                on: {\r\n                    PLAY: {\r\n                        target: 'playing',\r\n                        actions: ['recordTimeOffset', 'play'],\r\n                    },\r\n                    CAST_EVENT: {\r\n                        target: 'paused',\r\n                        actions: 'castEvent',\r\n                    },\r\n                    TO_LIVE: {\r\n                        target: 'live',\r\n                        actions: ['startLive'],\r\n                    },\r\n                    ADD_EVENT: {\r\n                        target: 'paused',\r\n                        actions: ['addEvent'],\r\n                    },\r\n                },\r\n            },\r\n            live: {\r\n                on: {\r\n                    ADD_EVENT: {\r\n                        target: 'live',\r\n                        actions: ['addEvent'],\r\n                    },\r\n                    CAST_EVENT: {\r\n                        target: 'live',\r\n                        actions: ['castEvent'],\r\n                    },\r\n                },\r\n            },\r\n        },\r\n    }, {\r\n        actions: {\r\n            castEvent: o({\r\n                lastPlayedEvent: (ctx, event) => {\r\n                    if (event.type === 'CAST_EVENT') {\r\n                        return event.payload.event;\r\n                    }\r\n                    return ctx.lastPlayedEvent;\r\n                },\r\n            }),\r\n            recordTimeOffset: o((ctx, event) => {\r\n                let timeOffset = ctx.timeOffset;\r\n                if ('payload' in event && 'timeOffset' in event.payload) {\r\n                    timeOffset = event.payload.timeOffset;\r\n                }\r\n                return Object.assign(Object.assign({}, ctx), { timeOffset, baselineTime: ctx.events[0].timestamp + timeOffset });\r\n            }),\r\n            play(ctx) {\r\n                var _a;\r\n                const { timer, events, baselineTime, lastPlayedEvent } = ctx;\r\n                timer.clear();\r\n                for (const event of events) {\r\n                    addDelay(event, baselineTime);\r\n                }\r\n                const neededEvents = discardPriorSnapshots(events, baselineTime);\r\n                let lastPlayedTimestamp = lastPlayedEvent === null || lastPlayedEvent === void 0 ? void 0 : lastPlayedEvent.timestamp;\r\n                if ((lastPlayedEvent === null || lastPlayedEvent === void 0 ? void 0 : lastPlayedEvent.type) === EventType.IncrementalSnapshot &&\r\n                    lastPlayedEvent.data.source === IncrementalSource.MouseMove) {\r\n                    lastPlayedTimestamp =\r\n                        lastPlayedEvent.timestamp +\r\n                            ((_a = lastPlayedEvent.data.positions[0]) === null || _a === void 0 ? void 0 : _a.timeOffset);\r\n                }\r\n                if (baselineTime < (lastPlayedTimestamp || 0)) {\r\n                    emitter.emit(ReplayerEvents.PlayBack);\r\n                }\r\n                const syncEvents = new Array();\r\n                for (const event of neededEvents) {\r\n                    if (lastPlayedTimestamp &&\r\n                        lastPlayedTimestamp < baselineTime &&\r\n                        (event.timestamp <= lastPlayedTimestamp ||\r\n                            event === lastPlayedEvent)) {\r\n                        continue;\r\n                    }\r\n                    if (event.timestamp < baselineTime) {\r\n                        syncEvents.push(event);\r\n                    }\r\n                    else {\r\n                        const castFn = getCastFn(event, false);\r\n                        timer.addAction({\r\n                            doAction: () => {\r\n                                castFn();\r\n                            },\r\n                            delay: event.delay,\r\n                        });\r\n                    }\r\n                }\r\n                applyEventsSynchronously(syncEvents);\r\n                emitter.emit(ReplayerEvents.Flush);\r\n                timer.start();\r\n            },\r\n            pause(ctx) {\r\n                ctx.timer.clear();\r\n            },\r\n            resetLastPlayedEvent: o((ctx) => {\r\n                return Object.assign(Object.assign({}, ctx), { lastPlayedEvent: null });\r\n            }),\r\n            startLive: o({\r\n                baselineTime: (ctx, event) => {\r\n                    ctx.timer.toggleLiveMode(true);\r\n                    ctx.timer.start();\r\n                    if (event.type === 'TO_LIVE' && event.payload.baselineTime) {\r\n                        return event.payload.baselineTime;\r\n                    }\r\n                    return Date.now();\r\n                },\r\n            }),\r\n            addEvent: o((ctx, machineEvent) => {\r\n                const { baselineTime, timer, events } = ctx;\r\n                if (machineEvent.type === 'ADD_EVENT') {\r\n                    const { event } = machineEvent.payload;\r\n                    addDelay(event, baselineTime);\r\n                    let end = events.length - 1;\r\n                    if (!events[end] || events[end].timestamp <= event.timestamp) {\r\n                        events.push(event);\r\n                    }\r\n                    else {\r\n                        let insertionIndex = -1;\r\n                        let start = 0;\r\n                        while (start <= end) {\r\n                            const mid = Math.floor((start + end) / 2);\r\n                            if (events[mid].timestamp <= event.timestamp) {\r\n                                start = mid + 1;\r\n                            }\r\n                            else {\r\n                                end = mid - 1;\r\n                            }\r\n                        }\r\n                        if (insertionIndex === -1) {\r\n                            insertionIndex = start;\r\n                        }\r\n                        events.splice(insertionIndex, 0, event);\r\n                    }\r\n                    const isSync = event.timestamp < baselineTime;\r\n                    const castFn = getCastFn(event, isSync);\r\n                    if (isSync) {\r\n                        castFn();\r\n                    }\r\n                    else if (timer.isActive()) {\r\n                        timer.addAction({\r\n                            doAction: () => {\r\n                                castFn();\r\n                            },\r\n                            delay: event.delay,\r\n                        });\r\n                    }\r\n                }\r\n                return Object.assign(Object.assign({}, ctx), { events });\r\n            }),\r\n        },\r\n    });\r\n    return v(playerMachine);\r\n}\r\nfunction createSpeedService(context) {\r\n    const speedMachine = s({\r\n        id: 'speed',\r\n        context,\r\n        initial: 'normal',\r\n        states: {\r\n            normal: {\r\n                on: {\r\n                    FAST_FORWARD: {\r\n                        target: 'skipping',\r\n                        actions: ['recordSpeed', 'setSpeed'],\r\n                    },\r\n                    SET_SPEED: {\r\n                        target: 'normal',\r\n                        actions: ['setSpeed'],\r\n                    },\r\n                },\r\n            },\r\n            skipping: {\r\n                on: {\r\n                    BACK_TO_NORMAL: {\r\n                        target: 'normal',\r\n                        actions: ['restoreSpeed'],\r\n                    },\r\n                    SET_SPEED: {\r\n                        target: 'normal',\r\n                        actions: ['setSpeed'],\r\n                    },\r\n                },\r\n            },\r\n        },\r\n    }, {\r\n        actions: {\r\n            setSpeed: (ctx, event) => {\r\n                if ('payload' in event) {\r\n                    ctx.timer.setSpeed(event.payload.speed);\r\n                }\r\n            },\r\n            recordSpeed: o({\r\n                normalSpeed: (ctx) => ctx.timer.speed,\r\n            }),\r\n            restoreSpeed: (ctx) => {\r\n                ctx.timer.setSpeed(ctx.normalSpeed);\r\n            },\r\n        },\r\n    });\r\n    return v(speedMachine);\r\n}\n\nexport { createPlayerService, createSpeedService, discardPriorSnapshots };\n","const rules = (blockClass) => [\r\n    `.${blockClass} { background: currentColor }`,\r\n    'noscript { display: none !important; }',\r\n];\n\nexport { rules as default };\n","import { __awaiter } from './../../../../../ext/tslib/tslib.es6.js';\nimport { decode } from './../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst webGLVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n    let contextMap = webGLVarMap.get(ctx);\r\n    if (!contextMap) {\r\n        contextMap = new Map();\r\n        webGLVarMap.set(ctx, contextMap);\r\n    }\r\n    if (!contextMap.has(ctor)) {\r\n        contextMap.set(ctor, []);\r\n    }\r\n    return contextMap.get(ctor);\r\n}\r\nfunction deserializeArg(imageMap, ctx, preload) {\r\n    return (arg) => __awaiter(this, void 0, void 0, function* () {\r\n        if (arg && typeof arg === 'object' && 'rr_type' in arg) {\r\n            if (preload)\r\n                preload.isUnchanged = false;\r\n            if (arg.rr_type === 'ImageBitmap' && 'args' in arg) {\r\n                const args = yield deserializeArg(imageMap, ctx, preload)(arg.args);\r\n                return yield createImageBitmap.apply(null, args);\r\n            }\r\n            else if ('index' in arg) {\r\n                if (preload || ctx === null)\r\n                    return arg;\r\n                const { rr_type: name, index } = arg;\r\n                return variableListFor(ctx, name)[index];\r\n            }\r\n            else if ('args' in arg) {\r\n                const { rr_type: name, args } = arg;\r\n                const ctor = window[name];\r\n                return new ctor(...(yield Promise.all(args.map(deserializeArg(imageMap, ctx, preload)))));\r\n            }\r\n            else if ('base64' in arg) {\r\n                return decode(arg.base64);\r\n            }\r\n            else if ('src' in arg) {\r\n                const image = imageMap.get(arg.src);\r\n                if (image) {\r\n                    return image;\r\n                }\r\n                else {\r\n                    const image = new Image();\r\n                    image.src = arg.src;\r\n                    imageMap.set(arg.src, image);\r\n                    return image;\r\n                }\r\n            }\r\n            else if ('data' in arg && arg.rr_type === 'Blob') {\r\n                const blobContents = yield Promise.all(arg.data.map(deserializeArg(imageMap, ctx, preload)));\r\n                const blob = new Blob(blobContents, {\r\n                    type: arg.type,\r\n                });\r\n                return blob;\r\n            }\r\n        }\r\n        else if (Array.isArray(arg)) {\r\n            const result = yield Promise.all(arg.map(deserializeArg(imageMap, ctx, preload)));\r\n            return result;\r\n        }\r\n        return arg;\r\n    });\r\n}\n\nexport { deserializeArg, variableListFor };\n","import { __awaiter } from './../../../../../ext/tslib/tslib.es6.js';\nimport { CanvasContext } from '../../../../types/dist/types.js';\nimport { deserializeArg, variableListFor } from './deserialize-args.js';\n\nfunction getContext(target, type) {\r\n    try {\r\n        if (type === CanvasContext.WebGL) {\r\n            return (target.getContext('webgl') || target.getContext('experimental-webgl'));\r\n        }\r\n        return target.getContext('webgl2');\r\n    }\r\n    catch (e) {\r\n        return null;\r\n    }\r\n}\r\nconst WebGLVariableConstructorsNames = [\r\n    'WebGLActiveInfo',\r\n    'WebGLBuffer',\r\n    'WebGLFramebuffer',\r\n    'WebGLProgram',\r\n    'WebGLRenderbuffer',\r\n    'WebGLShader',\r\n    'WebGLShaderPrecisionFormat',\r\n    'WebGLTexture',\r\n    'WebGLUniformLocation',\r\n    'WebGLVertexArrayObject',\r\n];\r\nfunction saveToWebGLVarMap(ctx, result) {\r\n    if (!(result === null || result === void 0 ? void 0 : result.constructor))\r\n        return;\r\n    const { name } = result.constructor;\r\n    if (!WebGLVariableConstructorsNames.includes(name))\r\n        return;\r\n    const variables = variableListFor(ctx, name);\r\n    if (!variables.includes(result))\r\n        variables.push(result);\r\n}\r\nfunction webglMutation({ mutation, target, type, imageMap, errorHandler, }) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        try {\r\n            const ctx = getContext(target, type);\r\n            if (!ctx)\r\n                return;\r\n            if (mutation.setter) {\r\n                ctx[mutation.property] = mutation.args[0];\r\n                return;\r\n            }\r\n            const original = ctx[mutation.property];\r\n            const args = yield Promise.all(mutation.args.map(deserializeArg(imageMap, ctx)));\r\n            const result = original.apply(ctx, args);\r\n            saveToWebGLVarMap(ctx, result);\r\n            const debugMode = false;\r\n            if (debugMode) ;\r\n        }\r\n        catch (error) {\r\n            errorHandler(mutation, error);\r\n        }\r\n    });\r\n}\n\nexport { webglMutation as default };\n","import { __awaiter } from './../../../../../ext/tslib/tslib.es6.js';\nimport { deserializeArg } from './deserialize-args.js';\n\nfunction canvasMutation({ event, mutation, target, imageMap, errorHandler, }) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        try {\r\n            const ctx = target.getContext('2d');\r\n            if (mutation.setter) {\r\n                ctx[mutation.property] =\r\n                    mutation.args[0];\r\n                return;\r\n            }\r\n            const original = ctx[mutation.property];\r\n            if (mutation.property === 'drawImage' &&\r\n                typeof mutation.args[0] === 'string') {\r\n                imageMap.get(event);\r\n                original.apply(ctx, mutation.args);\r\n            }\r\n            else {\r\n                const args = yield Promise.all(mutation.args.map(deserializeArg(imageMap, ctx)));\r\n                original.apply(ctx, args);\r\n            }\r\n        }\r\n        catch (error) {\r\n            errorHandler(mutation, error);\r\n        }\r\n    });\r\n}\n\nexport { canvasMutation as default };\n","import { __awaiter } from './../../../../../ext/tslib/tslib.es6.js';\nimport { CanvasContext } from '../../../../types/dist/types.js';\nimport webglMutation from './webgl.js';\nimport canvasMutation$1 from './2d.js';\n\nfunction canvasMutation({ event, mutation, target, imageMap, canvasEventMap, errorHandler, }) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        try {\r\n            const precomputedMutation = canvasEventMap.get(event) || mutation;\r\n            const commands = 'commands' in precomputedMutation\r\n                ? precomputedMutation.commands\r\n                : [precomputedMutation];\r\n            if ([CanvasContext.WebGL, CanvasContext.WebGL2].includes(mutation.type)) {\r\n                for (let i = 0; i < commands.length; i++) {\r\n                    const command = commands[i];\r\n                    yield webglMutation({\r\n                        mutation: command,\r\n                        type: mutation.type,\r\n                        target,\r\n                        imageMap,\r\n                        errorHandler,\r\n                    });\r\n                }\r\n                return;\r\n            }\r\n            for (let i = 0; i < commands.length; i++) {\r\n                const command = commands[i];\r\n                yield canvasMutation$1({\r\n                    event,\r\n                    mutation: command,\r\n                    target,\r\n                    imageMap,\r\n                    errorHandler,\r\n                });\r\n            }\r\n        }\r\n        catch (error) {\r\n            errorHandler(mutation, error);\r\n        }\r\n    });\r\n}\n\nexport { canvasMutation as default };\n","import { __awaiter } from './../../../../ext/tslib/tslib.es6.js';\nimport { createCache, createMirror, rebuild, buildNodeWithSN, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { RRDocument, diff, createOrGetNode, getDefaultSN, buildFromDom, buildFromNode } from '../../../rrdom/es/rrdom.js';\nimport * as mitt$1 from './../../../../ext/mitt/dist/mitt.mjs.js';\nimport mitt$2 from './../../../../ext/mitt/dist/mitt.mjs.js';\nimport { polyfill } from './smoothscroll.js';\nimport { Timer } from './timer.js';\nimport { createPlayerService, createSpeedService } from './machine.js';\nimport { EventType, ReplayerEvents, IncrementalSource, MouseInteractions } from '../../../types/dist/types.js';\nimport { StyleSheetMirror, polyfill as polyfill$1, isSerializedIframe, hasShadowRoot, queueToResolveTrees, iterateResolveTree, uniqueTextMutations, getPositionsAndIndex, getNestedRule, getBaseDimension } from '../utils.js';\nimport rules from './styles/inject-style.js';\nimport canvasMutation from './canvas/index.js';\nimport { deserializeArg } from './canvas/deserialize-args.js';\n\nconst SKIP_TIME_THRESHOLD = 10 * 1000;\r\nconst SKIP_TIME_INTERVAL = 5 * 1000;\r\nconst mitt = mitt$2 || mitt$1;\r\nconst REPLAY_CONSOLE_PREFIX = '[replayer]';\r\nconst defaultMouseTailConfig = {\r\n    duration: 500,\r\n    lineCap: 'round',\r\n    lineWidth: 3,\r\n    strokeStyle: 'red',\r\n};\r\nfunction indicatesTouchDevice(e) {\r\n    return (e.type == EventType.IncrementalSnapshot &&\r\n        (e.data.source == IncrementalSource.TouchMove ||\r\n            (e.data.source == IncrementalSource.MouseInteraction &&\r\n                e.data.type == MouseInteractions.TouchStart)));\r\n}\r\nclass Replayer {\r\n    constructor(events, config) {\r\n        this.usingVirtualDom = false;\r\n        this.virtualDom = new RRDocument();\r\n        this.mouseTail = null;\r\n        this.tailPositions = [];\r\n        this.emitter = mitt();\r\n        this.legacy_missingNodeRetryMap = {};\r\n        this.cache = createCache();\r\n        this.imageMap = new Map();\r\n        this.canvasEventMap = new Map();\r\n        this.mirror = createMirror();\r\n        this.styleMirror = new StyleSheetMirror();\r\n        this.firstFullSnapshot = null;\r\n        this.newDocumentQueue = [];\r\n        this.mousePos = null;\r\n        this.touchActive = null;\r\n        this.lastSelectionData = null;\r\n        this.constructedStyleMutations = [];\r\n        this.adoptedStyleSheets = [];\r\n        this.handleResize = (dimension) => {\r\n            this.iframe.style.display = 'inherit';\r\n            for (const el of [this.mouseTail, this.iframe]) {\r\n                if (!el) {\r\n                    continue;\r\n                }\r\n                el.setAttribute('width', String(dimension.width));\r\n                el.setAttribute('height', String(dimension.height));\r\n            }\r\n        };\r\n        this.applyEventsSynchronously = (events) => {\r\n            for (const event of events) {\r\n                switch (event.type) {\r\n                    case EventType.DomContentLoaded:\r\n                    case EventType.Load:\r\n                    case EventType.Custom:\r\n                        continue;\r\n                    case EventType.FullSnapshot:\r\n                    case EventType.Meta:\r\n                    case EventType.Plugin:\r\n                    case EventType.IncrementalSnapshot:\r\n                        break;\r\n                }\r\n                const castFn = this.getCastFn(event, true);\r\n                castFn();\r\n            }\r\n            if (this.touchActive === true) {\r\n                this.mouse.classList.add('touch-active');\r\n            }\r\n            else if (this.touchActive === false) {\r\n                this.mouse.classList.remove('touch-active');\r\n            }\r\n            this.touchActive = null;\r\n        };\r\n        this.getCastFn = (event, isSync = false) => {\r\n            let castFn;\r\n            switch (event.type) {\r\n                case EventType.DomContentLoaded:\r\n                case EventType.Load:\r\n                    break;\r\n                case EventType.Custom:\r\n                    castFn = () => {\r\n                        this.emitter.emit(ReplayerEvents.CustomEvent, event);\r\n                    };\r\n                    break;\r\n                case EventType.Meta:\r\n                    castFn = () => this.emitter.emit(ReplayerEvents.Resize, {\r\n                        width: event.data.width,\r\n                        height: event.data.height,\r\n                    });\r\n                    break;\r\n                case EventType.FullSnapshot:\r\n                    castFn = () => {\r\n                        var _a;\r\n                        if (this.firstFullSnapshot) {\r\n                            if (this.firstFullSnapshot === event) {\r\n                                this.firstFullSnapshot = true;\r\n                                return;\r\n                            }\r\n                        }\r\n                        else {\r\n                            this.firstFullSnapshot = true;\r\n                        }\r\n                        this.rebuildFullSnapshot(event, isSync);\r\n                        (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.scrollTo(event.data.initialOffset);\r\n                        this.styleMirror.reset();\r\n                    };\r\n                    break;\r\n                case EventType.IncrementalSnapshot:\r\n                    castFn = () => {\r\n                        this.applyIncremental(event, isSync);\r\n                        if (isSync) {\r\n                            return;\r\n                        }\r\n                        if (event === this.nextUserInteractionEvent) {\r\n                            this.nextUserInteractionEvent = null;\r\n                            this.backToNormal();\r\n                        }\r\n                        if (this.config.skipInactive && !this.nextUserInteractionEvent) {\r\n                            for (const _event of this.service.state.context.events) {\r\n                                if (_event.timestamp <= event.timestamp) {\r\n                                    continue;\r\n                                }\r\n                                if (this.isUserInteraction(_event)) {\r\n                                    if (_event.delay - event.delay >\r\n                                        SKIP_TIME_THRESHOLD *\r\n                                            this.speedService.state.context.timer.speed) {\r\n                                        this.nextUserInteractionEvent = _event;\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n                            if (this.nextUserInteractionEvent) {\r\n                                const skipTime = this.nextUserInteractionEvent.delay - event.delay;\r\n                                const payload = {\r\n                                    speed: Math.min(Math.round(skipTime / SKIP_TIME_INTERVAL), this.config.maxSpeed),\r\n                                };\r\n                                this.speedService.send({ type: 'FAST_FORWARD', payload });\r\n                                this.emitter.emit(ReplayerEvents.SkipStart, payload);\r\n                            }\r\n                        }\r\n                    };\r\n                    break;\r\n            }\r\n            const wrappedCastFn = () => {\r\n                if (castFn) {\r\n                    castFn();\r\n                }\r\n                for (const plugin of this.config.plugins || []) {\r\n                    if (plugin.handler)\r\n                        plugin.handler(event, isSync, { replayer: this });\r\n                }\r\n                this.service.send({ type: 'CAST_EVENT', payload: { event } });\r\n                const last_index = this.service.state.context.events.length - 1;\r\n                if (event === this.service.state.context.events[last_index]) {\r\n                    const finish = () => {\r\n                        if (last_index < this.service.state.context.events.length - 1) {\r\n                            return;\r\n                        }\r\n                        this.backToNormal();\r\n                        this.service.send('END');\r\n                        this.emitter.emit(ReplayerEvents.Finish);\r\n                    };\r\n                    if (event.type === EventType.IncrementalSnapshot &&\r\n                        event.data.source === IncrementalSource.MouseMove &&\r\n                        event.data.positions.length) {\r\n                        setTimeout(() => {\r\n                            finish();\r\n                        }, Math.max(0, -event.data.positions[0].timeOffset + 50));\r\n                    }\r\n                    else {\r\n                        finish();\r\n                    }\r\n                }\r\n                this.emitter.emit(ReplayerEvents.EventCast, event);\r\n            };\r\n            return wrappedCastFn;\r\n        };\r\n        if (!(config === null || config === void 0 ? void 0 : config.liveMode) && events.length < 2) {\r\n            throw new Error('Replayer need at least 2 events.');\r\n        }\r\n        const defaultConfig = {\r\n            speed: 1,\r\n            maxSpeed: 360,\r\n            root: document.body,\r\n            loadTimeout: 0,\r\n            skipInactive: false,\r\n            showWarning: true,\r\n            showDebug: false,\r\n            blockClass: 'rr-block',\r\n            liveMode: false,\r\n            insertStyleRules: [],\r\n            triggerFocus: true,\r\n            UNSAFE_replayCanvas: false,\r\n            pauseAnimation: true,\r\n            mouseTail: defaultMouseTailConfig,\r\n            useVirtualDom: true,\r\n        };\r\n        this.config = Object.assign({}, defaultConfig, config);\r\n        this.handleResize = this.handleResize.bind(this);\r\n        this.getCastFn = this.getCastFn.bind(this);\r\n        this.applyEventsSynchronously = this.applyEventsSynchronously.bind(this);\r\n        this.emitter.on(ReplayerEvents.Resize, this.handleResize);\r\n        this.setupDom();\r\n        for (const plugin of this.config.plugins || []) {\r\n            if (plugin.getMirror)\r\n                plugin.getMirror({ nodeMirror: this.mirror });\r\n        }\r\n        this.emitter.on(ReplayerEvents.Flush, () => {\r\n            if (this.usingVirtualDom) {\r\n                const replayerHandler = {\r\n                    mirror: this.mirror,\r\n                    applyCanvas: (canvasEvent, canvasMutationData, target) => {\r\n                        void canvasMutation({\r\n                            event: canvasEvent,\r\n                            mutation: canvasMutationData,\r\n                            target,\r\n                            imageMap: this.imageMap,\r\n                            canvasEventMap: this.canvasEventMap,\r\n                            errorHandler: this.warnCanvasMutationFailed.bind(this),\r\n                        });\r\n                    },\r\n                    applyInput: this.applyInput.bind(this),\r\n                    applyScroll: this.applyScroll.bind(this),\r\n                    applyStyleSheetMutation: (data, styleSheet) => {\r\n                        if (data.source === IncrementalSource.StyleSheetRule)\r\n                            this.applyStyleSheetRule(data, styleSheet);\r\n                        else if (data.source === IncrementalSource.StyleDeclaration)\r\n                            this.applyStyleDeclaration(data, styleSheet);\r\n                    },\r\n                };\r\n                this.iframe.contentDocument &&\r\n                    diff(this.iframe.contentDocument, this.virtualDom, replayerHandler, this.virtualDom.mirror);\r\n                this.virtualDom.destroyTree();\r\n                this.usingVirtualDom = false;\r\n                if (Object.keys(this.legacy_missingNodeRetryMap).length) {\r\n                    for (const key in this.legacy_missingNodeRetryMap) {\r\n                        try {\r\n                            const value = this.legacy_missingNodeRetryMap[key];\r\n                            const realNode = createOrGetNode(value.node, this.mirror, this.virtualDom.mirror);\r\n                            diff(realNode, value.node, replayerHandler, this.virtualDom.mirror);\r\n                            value.node = realNode;\r\n                        }\r\n                        catch (error) {\r\n                            if (this.config.showWarning) {\r\n                                console.warn(error);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                this.constructedStyleMutations.forEach((data) => {\r\n                    this.applyStyleSheetMutation(data);\r\n                });\r\n                this.constructedStyleMutations = [];\r\n                this.adoptedStyleSheets.forEach((data) => {\r\n                    this.applyAdoptedStyleSheet(data);\r\n                });\r\n                this.adoptedStyleSheets = [];\r\n            }\r\n            if (this.mousePos) {\r\n                this.moveAndHover(this.mousePos.x, this.mousePos.y, this.mousePos.id, true, this.mousePos.debugData);\r\n                this.mousePos = null;\r\n            }\r\n            if (this.lastSelectionData) {\r\n                this.applySelection(this.lastSelectionData);\r\n                this.lastSelectionData = null;\r\n            }\r\n        });\r\n        this.emitter.on(ReplayerEvents.PlayBack, () => {\r\n            this.firstFullSnapshot = null;\r\n            this.mirror.reset();\r\n            this.styleMirror.reset();\r\n        });\r\n        const timer = new Timer([], {\r\n            speed: this.config.speed,\r\n            liveMode: this.config.liveMode,\r\n        });\r\n        this.service = createPlayerService({\r\n            events: events\r\n                .map((e) => {\r\n                if (config && config.unpackFn) {\r\n                    return config.unpackFn(e);\r\n                }\r\n                return e;\r\n            })\r\n                .sort((a1, a2) => a1.timestamp - a2.timestamp),\r\n            timer,\r\n            timeOffset: 0,\r\n            baselineTime: 0,\r\n            lastPlayedEvent: null,\r\n        }, {\r\n            getCastFn: this.getCastFn,\r\n            applyEventsSynchronously: this.applyEventsSynchronously,\r\n            emitter: this.emitter,\r\n        });\r\n        this.service.start();\r\n        this.service.subscribe((state) => {\r\n            this.emitter.emit(ReplayerEvents.StateChange, {\r\n                player: state,\r\n            });\r\n        });\r\n        this.speedService = createSpeedService({\r\n            normalSpeed: -1,\r\n            timer,\r\n        });\r\n        this.speedService.start();\r\n        this.speedService.subscribe((state) => {\r\n            this.emitter.emit(ReplayerEvents.StateChange, {\r\n                speed: state,\r\n            });\r\n        });\r\n        const firstMeta = this.service.state.context.events.find((e) => e.type === EventType.Meta);\r\n        const firstFullsnapshot = this.service.state.context.events.find((e) => e.type === EventType.FullSnapshot);\r\n        if (firstMeta) {\r\n            const { width, height } = firstMeta.data;\r\n            setTimeout(() => {\r\n                this.emitter.emit(ReplayerEvents.Resize, {\r\n                    width,\r\n                    height,\r\n                });\r\n            }, 0);\r\n        }\r\n        if (firstFullsnapshot) {\r\n            setTimeout(() => {\r\n                var _a;\r\n                if (this.firstFullSnapshot) {\r\n                    return;\r\n                }\r\n                this.firstFullSnapshot = firstFullsnapshot;\r\n                this.rebuildFullSnapshot(firstFullsnapshot);\r\n                (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.scrollTo(firstFullsnapshot.data.initialOffset);\r\n            }, 1);\r\n        }\r\n        if (this.service.state.context.events.find(indicatesTouchDevice)) {\r\n            this.mouse.classList.add('touch-device');\r\n        }\r\n    }\r\n    get timer() {\r\n        return this.service.state.context.timer;\r\n    }\r\n    on(event, handler) {\r\n        this.emitter.on(event, handler);\r\n        return this;\r\n    }\r\n    off(event, handler) {\r\n        this.emitter.off(event, handler);\r\n        return this;\r\n    }\r\n    setConfig(config) {\r\n        Object.keys(config).forEach((key) => {\r\n            config[key];\r\n            this.config[key] = config[key];\r\n        });\r\n        if (!this.config.skipInactive) {\r\n            this.backToNormal();\r\n        }\r\n        if (typeof config.speed !== 'undefined') {\r\n            this.speedService.send({\r\n                type: 'SET_SPEED',\r\n                payload: {\r\n                    speed: config.speed,\r\n                },\r\n            });\r\n        }\r\n        if (typeof config.mouseTail !== 'undefined') {\r\n            if (config.mouseTail === false) {\r\n                if (this.mouseTail) {\r\n                    this.mouseTail.style.display = 'none';\r\n                }\r\n            }\r\n            else {\r\n                if (!this.mouseTail) {\r\n                    this.mouseTail = document.createElement('canvas');\r\n                    this.mouseTail.width = Number.parseFloat(this.iframe.width);\r\n                    this.mouseTail.height = Number.parseFloat(this.iframe.height);\r\n                    this.mouseTail.classList.add('replayer-mouse-tail');\r\n                    this.wrapper.insertBefore(this.mouseTail, this.iframe);\r\n                }\r\n                this.mouseTail.style.display = 'inherit';\r\n            }\r\n        }\r\n    }\r\n    getMetaData() {\r\n        const firstEvent = this.service.state.context.events[0];\r\n        const lastEvent = this.service.state.context.events[this.service.state.context.events.length - 1];\r\n        return {\r\n            startTime: firstEvent.timestamp,\r\n            endTime: lastEvent.timestamp,\r\n            totalTime: lastEvent.timestamp - firstEvent.timestamp,\r\n        };\r\n    }\r\n    getCurrentTime() {\r\n        return this.timer.timeOffset + this.getTimeOffset();\r\n    }\r\n    getTimeOffset() {\r\n        const { baselineTime, events } = this.service.state.context;\r\n        return baselineTime - events[0].timestamp;\r\n    }\r\n    getMirror() {\r\n        return this.mirror;\r\n    }\r\n    play(timeOffset = 0) {\r\n        var _a, _b;\r\n        if (this.service.state.matches('paused')) {\r\n            this.service.send({ type: 'PLAY', payload: { timeOffset } });\r\n        }\r\n        else {\r\n            this.service.send({ type: 'PAUSE' });\r\n            this.service.send({ type: 'PLAY', payload: { timeOffset } });\r\n        }\r\n        (_b = (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('html')[0]) === null || _b === void 0 ? void 0 : _b.classList.remove('rrweb-paused');\r\n        this.emitter.emit(ReplayerEvents.Start);\r\n    }\r\n    pause(timeOffset) {\r\n        var _a, _b;\r\n        if (timeOffset === undefined && this.service.state.matches('playing')) {\r\n            this.service.send({ type: 'PAUSE' });\r\n        }\r\n        if (typeof timeOffset === 'number') {\r\n            this.play(timeOffset);\r\n            this.service.send({ type: 'PAUSE' });\r\n        }\r\n        (_b = (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('html')[0]) === null || _b === void 0 ? void 0 : _b.classList.add('rrweb-paused');\r\n        this.emitter.emit(ReplayerEvents.Pause);\r\n    }\r\n    resume(timeOffset = 0) {\r\n        console.warn(`The 'resume' was deprecated in 1.0. Please use 'play' method which has the same interface.`);\r\n        this.play(timeOffset);\r\n        this.emitter.emit(ReplayerEvents.Resume);\r\n    }\r\n    destroy() {\r\n        this.pause();\r\n        this.config.root.removeChild(this.wrapper);\r\n        this.emitter.emit(ReplayerEvents.Destroy);\r\n    }\r\n    startLive(baselineTime) {\r\n        this.service.send({ type: 'TO_LIVE', payload: { baselineTime } });\r\n    }\r\n    addEvent(rawEvent) {\r\n        const event = this.config.unpackFn\r\n            ? this.config.unpackFn(rawEvent)\r\n            : rawEvent;\r\n        if (indicatesTouchDevice(event)) {\r\n            this.mouse.classList.add('touch-device');\r\n        }\r\n        void Promise.resolve().then(() => this.service.send({ type: 'ADD_EVENT', payload: { event } }));\r\n    }\r\n    enableInteract() {\r\n        this.iframe.setAttribute('scrolling', 'auto');\r\n        this.iframe.style.pointerEvents = 'auto';\r\n    }\r\n    disableInteract() {\r\n        this.iframe.setAttribute('scrolling', 'no');\r\n        this.iframe.style.pointerEvents = 'none';\r\n    }\r\n    resetCache() {\r\n        this.cache = createCache();\r\n    }\r\n    setupDom() {\r\n        this.wrapper = document.createElement('div');\r\n        this.wrapper.classList.add('replayer-wrapper');\r\n        this.config.root.appendChild(this.wrapper);\r\n        this.mouse = document.createElement('div');\r\n        this.mouse.classList.add('replayer-mouse');\r\n        this.wrapper.appendChild(this.mouse);\r\n        if (this.config.mouseTail !== false) {\r\n            this.mouseTail = document.createElement('canvas');\r\n            this.mouseTail.classList.add('replayer-mouse-tail');\r\n            this.mouseTail.style.display = 'inherit';\r\n            this.wrapper.appendChild(this.mouseTail);\r\n        }\r\n        this.iframe = document.createElement('iframe');\r\n        const attributes = ['allow-same-origin'];\r\n        if (this.config.UNSAFE_replayCanvas) {\r\n            attributes.push('allow-scripts');\r\n        }\r\n        this.iframe.style.display = 'none';\r\n        this.iframe.setAttribute('sandbox', attributes.join(' '));\r\n        this.disableInteract();\r\n        this.wrapper.appendChild(this.iframe);\r\n        if (this.iframe.contentWindow && this.iframe.contentDocument) {\r\n            polyfill(this.iframe.contentWindow, this.iframe.contentDocument);\r\n            polyfill$1(this.iframe.contentWindow);\r\n        }\r\n    }\r\n    rebuildFullSnapshot(event, isSync = false) {\r\n        if (!this.iframe.contentDocument) {\r\n            return console.warn('Looks like your replayer has been destroyed.');\r\n        }\r\n        if (Object.keys(this.legacy_missingNodeRetryMap).length) {\r\n            console.warn('Found unresolved missing node map', this.legacy_missingNodeRetryMap);\r\n        }\r\n        this.legacy_missingNodeRetryMap = {};\r\n        const collected = [];\r\n        const afterAppend = (builtNode, id) => {\r\n            this.collectIframeAndAttachDocument(collected, builtNode);\r\n            for (const plugin of this.config.plugins || []) {\r\n                if (plugin.onBuild)\r\n                    plugin.onBuild(builtNode, {\r\n                        id,\r\n                        replayer: this,\r\n                    });\r\n            }\r\n        };\r\n        rebuild(event.data.node, {\r\n            doc: this.iframe.contentDocument,\r\n            afterAppend,\r\n            cache: this.cache,\r\n            mirror: this.mirror,\r\n        });\r\n        afterAppend(this.iframe.contentDocument, event.data.node.id);\r\n        for (const { mutationInQueue, builtNode } of collected) {\r\n            this.attachDocumentToIframe(mutationInQueue, builtNode);\r\n            this.newDocumentQueue = this.newDocumentQueue.filter((m) => m !== mutationInQueue);\r\n        }\r\n        const { documentElement, head } = this.iframe.contentDocument;\r\n        this.insertStyleRules(documentElement, head);\r\n        if (!this.service.state.matches('playing')) {\r\n            this.iframe.contentDocument\r\n                .getElementsByTagName('html')[0]\r\n                .classList.add('rrweb-paused');\r\n        }\r\n        this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);\r\n        if (!isSync) {\r\n            this.waitForStylesheetLoad();\r\n        }\r\n        if (this.config.UNSAFE_replayCanvas) {\r\n            void this.preloadAllImages();\r\n        }\r\n    }\r\n    insertStyleRules(documentElement, head) {\r\n        var _a;\r\n        const injectStylesRules = rules(this.config.blockClass).concat(this.config.insertStyleRules);\r\n        if (this.config.pauseAnimation) {\r\n            injectStylesRules.push('html.rrweb-paused *, html.rrweb-paused *:before, html.rrweb-paused *:after { animation-play-state: paused !important; }');\r\n        }\r\n        if (this.usingVirtualDom) {\r\n            const styleEl = this.virtualDom.createElement('style');\r\n            this.virtualDom.mirror.add(styleEl, getDefaultSN(styleEl, this.virtualDom.unserializedId));\r\n            documentElement.insertBefore(styleEl, head);\r\n            styleEl.rules.push({\r\n                source: IncrementalSource.StyleSheetRule,\r\n                adds: injectStylesRules.map((cssText, index) => ({\r\n                    rule: cssText,\r\n                    index,\r\n                })),\r\n            });\r\n        }\r\n        else {\r\n            const styleEl = document.createElement('style');\r\n            documentElement.insertBefore(styleEl, head);\r\n            for (let idx = 0; idx < injectStylesRules.length; idx++) {\r\n                (_a = styleEl.sheet) === null || _a === void 0 ? void 0 : _a.insertRule(injectStylesRules[idx], idx);\r\n            }\r\n        }\r\n    }\r\n    attachDocumentToIframe(mutation, iframeEl) {\r\n        const mirror = this.usingVirtualDom\r\n            ? this.virtualDom.mirror\r\n            : this.mirror;\r\n        const collected = [];\r\n        const afterAppend = (builtNode, id) => {\r\n            this.collectIframeAndAttachDocument(collected, builtNode);\r\n            const sn = mirror.getMeta(builtNode);\r\n            if ((sn === null || sn === void 0 ? void 0 : sn.type) === NodeType.Element &&\r\n                (sn === null || sn === void 0 ? void 0 : sn.tagName.toUpperCase()) === 'HTML') {\r\n                const { documentElement, head } = iframeEl.contentDocument;\r\n                this.insertStyleRules(documentElement, head);\r\n            }\r\n            for (const plugin of this.config.plugins || []) {\r\n                if (plugin.onBuild)\r\n                    plugin.onBuild(builtNode, {\r\n                        id,\r\n                        replayer: this,\r\n                    });\r\n            }\r\n        };\r\n        buildNodeWithSN(mutation.node, {\r\n            doc: iframeEl.contentDocument,\r\n            mirror: mirror,\r\n            hackCss: true,\r\n            skipChild: false,\r\n            afterAppend,\r\n            cache: this.cache,\r\n        });\r\n        afterAppend(iframeEl.contentDocument, mutation.node.id);\r\n        for (const { mutationInQueue, builtNode } of collected) {\r\n            this.attachDocumentToIframe(mutationInQueue, builtNode);\r\n            this.newDocumentQueue = this.newDocumentQueue.filter((m) => m !== mutationInQueue);\r\n        }\r\n    }\r\n    collectIframeAndAttachDocument(collected, builtNode) {\r\n        if (isSerializedIframe(builtNode, this.mirror)) {\r\n            const mutationInQueue = this.newDocumentQueue.find((m) => m.parentId === this.mirror.getId(builtNode));\r\n            if (mutationInQueue) {\r\n                collected.push({\r\n                    mutationInQueue,\r\n                    builtNode: builtNode,\r\n                });\r\n            }\r\n        }\r\n    }\r\n    waitForStylesheetLoad() {\r\n        var _a;\r\n        const head = (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.head;\r\n        if (head) {\r\n            const unloadSheets = new Set();\r\n            let timer;\r\n            let beforeLoadState = this.service.state;\r\n            const stateHandler = () => {\r\n                beforeLoadState = this.service.state;\r\n            };\r\n            this.emitter.on(ReplayerEvents.Start, stateHandler);\r\n            this.emitter.on(ReplayerEvents.Pause, stateHandler);\r\n            const unsubscribe = () => {\r\n                this.emitter.off(ReplayerEvents.Start, stateHandler);\r\n                this.emitter.off(ReplayerEvents.Pause, stateHandler);\r\n            };\r\n            head\r\n                .querySelectorAll('link[rel=\"stylesheet\"]')\r\n                .forEach((css) => {\r\n                if (!css.sheet) {\r\n                    unloadSheets.add(css);\r\n                    css.addEventListener('load', () => {\r\n                        unloadSheets.delete(css);\r\n                        if (unloadSheets.size === 0 && timer !== -1) {\r\n                            if (beforeLoadState.matches('playing')) {\r\n                                this.play(this.getCurrentTime());\r\n                            }\r\n                            this.emitter.emit(ReplayerEvents.LoadStylesheetEnd);\r\n                            if (timer) {\r\n                                clearTimeout(timer);\r\n                            }\r\n                            unsubscribe();\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n            if (unloadSheets.size > 0) {\r\n                this.service.send({ type: 'PAUSE' });\r\n                this.emitter.emit(ReplayerEvents.LoadStylesheetStart);\r\n                timer = setTimeout(() => {\r\n                    if (beforeLoadState.matches('playing')) {\r\n                        this.play(this.getCurrentTime());\r\n                    }\r\n                    timer = -1;\r\n                    unsubscribe();\r\n                }, this.config.loadTimeout);\r\n            }\r\n        }\r\n    }\r\n    preloadAllImages() {\r\n        return __awaiter(this, void 0, void 0, function* () {\r\n            this.service.state;\r\n            const stateHandler = () => {\r\n                this.service.state;\r\n            };\r\n            this.emitter.on(ReplayerEvents.Start, stateHandler);\r\n            this.emitter.on(ReplayerEvents.Pause, stateHandler);\r\n            const promises = [];\r\n            for (const event of this.service.state.context.events) {\r\n                if (event.type === EventType.IncrementalSnapshot &&\r\n                    event.data.source === IncrementalSource.CanvasMutation) {\r\n                    promises.push(this.deserializeAndPreloadCanvasEvents(event.data, event));\r\n                    const commands = 'commands' in event.data ? event.data.commands : [event.data];\r\n                    commands.forEach((c) => {\r\n                        this.preloadImages(c, event);\r\n                    });\r\n                }\r\n            }\r\n            return Promise.all(promises);\r\n        });\r\n    }\r\n    preloadImages(data, event) {\r\n        if (data.property === 'drawImage' &&\r\n            typeof data.args[0] === 'string' &&\r\n            !this.imageMap.has(event)) {\r\n            const canvas = document.createElement('canvas');\r\n            const ctx = canvas.getContext('2d');\r\n            const imgd = ctx === null || ctx === void 0 ? void 0 : ctx.createImageData(canvas.width, canvas.height);\r\n            imgd === null || imgd === void 0 ? void 0 : imgd.data;\r\n            JSON.parse(data.args[0]);\r\n            ctx === null || ctx === void 0 ? void 0 : ctx.putImageData(imgd, 0, 0);\r\n        }\r\n    }\r\n    deserializeAndPreloadCanvasEvents(data, event) {\r\n        return __awaiter(this, void 0, void 0, function* () {\r\n            if (!this.canvasEventMap.has(event)) {\r\n                const status = {\r\n                    isUnchanged: true,\r\n                };\r\n                if ('commands' in data) {\r\n                    const commands = yield Promise.all(data.commands.map((c) => __awaiter(this, void 0, void 0, function* () {\r\n                        const args = yield Promise.all(c.args.map(deserializeArg(this.imageMap, null, status)));\r\n                        return Object.assign(Object.assign({}, c), { args });\r\n                    })));\r\n                    if (status.isUnchanged === false)\r\n                        this.canvasEventMap.set(event, Object.assign(Object.assign({}, data), { commands }));\r\n                }\r\n                else {\r\n                    const args = yield Promise.all(data.args.map(deserializeArg(this.imageMap, null, status)));\r\n                    if (status.isUnchanged === false)\r\n                        this.canvasEventMap.set(event, Object.assign(Object.assign({}, data), { args }));\r\n                }\r\n            }\r\n        });\r\n    }\r\n    applyIncremental(e, isSync) {\r\n        var _a, _b, _c;\r\n        const { data: d } = e;\r\n        switch (d.source) {\r\n            case IncrementalSource.Mutation: {\r\n                try {\r\n                    this.applyMutation(d, isSync);\r\n                }\r\n                catch (error) {\r\n                    this.warn(`Exception in mutation ${error.message || error}`, d);\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.Drag:\r\n            case IncrementalSource.TouchMove:\r\n            case IncrementalSource.MouseMove:\r\n                if (isSync) {\r\n                    const lastPosition = d.positions[d.positions.length - 1];\r\n                    this.mousePos = {\r\n                        x: lastPosition.x,\r\n                        y: lastPosition.y,\r\n                        id: lastPosition.id,\r\n                        debugData: d,\r\n                    };\r\n                }\r\n                else {\r\n                    d.positions.forEach((p) => {\r\n                        const action = {\r\n                            doAction: () => {\r\n                                this.moveAndHover(p.x, p.y, p.id, isSync, d);\r\n                            },\r\n                            delay: p.timeOffset +\r\n                                e.timestamp -\r\n                                this.service.state.context.baselineTime,\r\n                        };\r\n                        this.timer.addAction(action);\r\n                    });\r\n                    this.timer.addAction({\r\n                        doAction() {\r\n                        },\r\n                        delay: e.delay - ((_a = d.positions[0]) === null || _a === void 0 ? void 0 : _a.timeOffset),\r\n                    });\r\n                }\r\n                break;\r\n            case IncrementalSource.MouseInteraction: {\r\n                if (d.id === -1 || isSync) {\r\n                    break;\r\n                }\r\n                const event = new Event(MouseInteractions[d.type].toLowerCase());\r\n                const target = this.mirror.getNode(d.id);\r\n                if (!target) {\r\n                    return this.debugNodeNotFound(d, d.id);\r\n                }\r\n                this.emitter.emit(ReplayerEvents.MouseInteraction, {\r\n                    type: d.type,\r\n                    target,\r\n                });\r\n                const { triggerFocus } = this.config;\r\n                switch (d.type) {\r\n                    case MouseInteractions.Blur:\r\n                        if ('blur' in target) {\r\n                            target.blur();\r\n                        }\r\n                        break;\r\n                    case MouseInteractions.Focus:\r\n                        if (triggerFocus && target.focus) {\r\n                            target.focus({\r\n                                preventScroll: true,\r\n                            });\r\n                        }\r\n                        break;\r\n                    case MouseInteractions.Click:\r\n                    case MouseInteractions.TouchStart:\r\n                    case MouseInteractions.TouchEnd:\r\n                        if (isSync) {\r\n                            if (d.type === MouseInteractions.TouchStart) {\r\n                                this.touchActive = true;\r\n                            }\r\n                            else if (d.type === MouseInteractions.TouchEnd) {\r\n                                this.touchActive = false;\r\n                            }\r\n                            this.mousePos = {\r\n                                x: d.x,\r\n                                y: d.y,\r\n                                id: d.id,\r\n                                debugData: d,\r\n                            };\r\n                        }\r\n                        else {\r\n                            if (d.type === MouseInteractions.TouchStart) {\r\n                                this.tailPositions.length = 0;\r\n                            }\r\n                            this.moveAndHover(d.x, d.y, d.id, isSync, d);\r\n                            if (d.type === MouseInteractions.Click) {\r\n                                this.mouse.classList.remove('active');\r\n                                void this.mouse.offsetWidth;\r\n                                this.mouse.classList.add('active');\r\n                            }\r\n                            else if (d.type === MouseInteractions.TouchStart) {\r\n                                void this.mouse.offsetWidth;\r\n                                this.mouse.classList.add('touch-active');\r\n                            }\r\n                            else if (d.type === MouseInteractions.TouchEnd) {\r\n                                this.mouse.classList.remove('touch-active');\r\n                            }\r\n                        }\r\n                        break;\r\n                    case MouseInteractions.TouchCancel:\r\n                        if (isSync) {\r\n                            this.touchActive = false;\r\n                        }\r\n                        else {\r\n                            this.mouse.classList.remove('touch-active');\r\n                        }\r\n                        break;\r\n                    default:\r\n                        target.dispatchEvent(event);\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.Scroll: {\r\n                if (d.id === -1) {\r\n                    break;\r\n                }\r\n                if (this.usingVirtualDom) {\r\n                    const target = this.virtualDom.mirror.getNode(d.id);\r\n                    if (!target) {\r\n                        return this.debugNodeNotFound(d, d.id);\r\n                    }\r\n                    target.scrollData = d;\r\n                    break;\r\n                }\r\n                this.applyScroll(d, isSync);\r\n                break;\r\n            }\r\n            case IncrementalSource.ViewportResize:\r\n                this.emitter.emit(ReplayerEvents.Resize, {\r\n                    width: d.width,\r\n                    height: d.height,\r\n                });\r\n                break;\r\n            case IncrementalSource.Input: {\r\n                if (d.id === -1) {\r\n                    break;\r\n                }\r\n                if (this.usingVirtualDom) {\r\n                    const target = this.virtualDom.mirror.getNode(d.id);\r\n                    if (!target) {\r\n                        return this.debugNodeNotFound(d, d.id);\r\n                    }\r\n                    target.inputData = d;\r\n                    break;\r\n                }\r\n                this.applyInput(d);\r\n                break;\r\n            }\r\n            case IncrementalSource.MediaInteraction: {\r\n                const target = this.usingVirtualDom\r\n                    ? this.virtualDom.mirror.getNode(d.id)\r\n                    : this.mirror.getNode(d.id);\r\n                if (!target) {\r\n                    return this.debugNodeNotFound(d, d.id);\r\n                }\r\n                const mediaEl = target;\r\n                try {\r\n                    if (d.currentTime) {\r\n                        mediaEl.currentTime = d.currentTime;\r\n                    }\r\n                    if (d.volume) {\r\n                        mediaEl.volume = d.volume;\r\n                    }\r\n                    if (d.muted) {\r\n                        mediaEl.muted = d.muted;\r\n                    }\r\n                    if (d.type === 1) {\r\n                        mediaEl.pause();\r\n                    }\r\n                    if (d.type === 0) {\r\n                        void mediaEl.play();\r\n                    }\r\n                    if (d.type === 4) {\r\n                        mediaEl.playbackRate = d.playbackRate;\r\n                    }\r\n                }\r\n                catch (error) {\r\n                    if (this.config.showWarning) {\r\n                        console.warn(`Failed to replay media interactions: ${error.message || error}`);\r\n                    }\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.StyleSheetRule:\r\n            case IncrementalSource.StyleDeclaration: {\r\n                if (this.usingVirtualDom) {\r\n                    if (d.styleId)\r\n                        this.constructedStyleMutations.push(d);\r\n                    else if (d.id)\r\n                        (_b = this.virtualDom.mirror.getNode(d.id)) === null || _b === void 0 ? void 0 : _b.rules.push(d);\r\n                }\r\n                else\r\n                    this.applyStyleSheetMutation(d);\r\n                break;\r\n            }\r\n            case IncrementalSource.CanvasMutation: {\r\n                if (!this.config.UNSAFE_replayCanvas) {\r\n                    return;\r\n                }\r\n                if (this.usingVirtualDom) {\r\n                    const target = this.virtualDom.mirror.getNode(d.id);\r\n                    if (!target) {\r\n                        return this.debugNodeNotFound(d, d.id);\r\n                    }\r\n                    target.canvasMutations.push({\r\n                        event: e,\r\n                        mutation: d,\r\n                    });\r\n                }\r\n                else {\r\n                    const target = this.mirror.getNode(d.id);\r\n                    if (!target) {\r\n                        return this.debugNodeNotFound(d, d.id);\r\n                    }\r\n                    void canvasMutation({\r\n                        event: e,\r\n                        mutation: d,\r\n                        target: target,\r\n                        imageMap: this.imageMap,\r\n                        canvasEventMap: this.canvasEventMap,\r\n                        errorHandler: this.warnCanvasMutationFailed.bind(this),\r\n                    });\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.Font: {\r\n                try {\r\n                    const fontFace = new FontFace(d.family, d.buffer\r\n                        ? new Uint8Array(JSON.parse(d.fontSource))\r\n                        : d.fontSource, d.descriptors);\r\n                    (_c = this.iframe.contentDocument) === null || _c === void 0 ? void 0 : _c.fonts.add(fontFace);\r\n                }\r\n                catch (error) {\r\n                    if (this.config.showWarning) {\r\n                        console.warn(error);\r\n                    }\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.Selection: {\r\n                if (isSync) {\r\n                    this.lastSelectionData = d;\r\n                    break;\r\n                }\r\n                this.applySelection(d);\r\n                break;\r\n            }\r\n            case IncrementalSource.AdoptedStyleSheet: {\r\n                if (this.usingVirtualDom)\r\n                    this.adoptedStyleSheets.push(d);\r\n                else\r\n                    this.applyAdoptedStyleSheet(d);\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    applyMutation(d, isSync) {\r\n        if (this.config.useVirtualDom && !this.usingVirtualDom && isSync) {\r\n            this.usingVirtualDom = true;\r\n            buildFromDom(this.iframe.contentDocument, this.mirror, this.virtualDom);\r\n            if (Object.keys(this.legacy_missingNodeRetryMap).length) {\r\n                for (const key in this.legacy_missingNodeRetryMap) {\r\n                    try {\r\n                        const value = this.legacy_missingNodeRetryMap[key];\r\n                        const virtualNode = buildFromNode(value.node, this.virtualDom, this.mirror);\r\n                        if (virtualNode)\r\n                            value.node = virtualNode;\r\n                    }\r\n                    catch (error) {\r\n                        if (this.config.showWarning) {\r\n                            console.warn(error);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        const mirror = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\r\n        d.removes.forEach((mutation) => {\r\n            var _a;\r\n            const target = mirror.getNode(mutation.id);\r\n            if (!target) {\r\n                if (d.removes.find((r) => r.id === mutation.parentId)) {\r\n                    return;\r\n                }\r\n                return this.warnNodeNotFound(d, mutation.id);\r\n            }\r\n            let parent = mirror.getNode(mutation.parentId);\r\n            if (!parent) {\r\n                return this.warnNodeNotFound(d, mutation.parentId);\r\n            }\r\n            if (mutation.isShadow && hasShadowRoot(parent)) {\r\n                parent = parent.shadowRoot;\r\n            }\r\n            mirror.removeNodeFromMap(target);\r\n            if (parent)\r\n                try {\r\n                    parent.removeChild(target);\r\n                    if (this.usingVirtualDom &&\r\n                        target.nodeName === '#text' &&\r\n                        parent.nodeName === 'STYLE' &&\r\n                        ((_a = parent.rules) === null || _a === void 0 ? void 0 : _a.length) > 0)\r\n                        parent.rules = [];\r\n                }\r\n                catch (error) {\r\n                    if (error instanceof DOMException) {\r\n                        this.warn('parent could not remove child in mutation', parent, target, d);\r\n                    }\r\n                    else {\r\n                        throw error;\r\n                    }\r\n                }\r\n        });\r\n        const legacy_missingNodeMap = Object.assign({}, this.legacy_missingNodeRetryMap);\r\n        const queue = [];\r\n        const nextNotInDOM = (mutation) => {\r\n            let next = null;\r\n            if (mutation.nextId) {\r\n                next = mirror.getNode(mutation.nextId);\r\n            }\r\n            if (mutation.nextId !== null &&\r\n                mutation.nextId !== undefined &&\r\n                mutation.nextId !== -1 &&\r\n                !next) {\r\n                return true;\r\n            }\r\n            return false;\r\n        };\r\n        const appendNode = (mutation) => {\r\n            var _a;\r\n            if (!this.iframe.contentDocument) {\r\n                return console.warn('Looks like your replayer has been destroyed.');\r\n            }\r\n            let parent = mirror.getNode(mutation.parentId);\r\n            if (!parent) {\r\n                if (mutation.node.type === NodeType.Document) {\r\n                    return this.newDocumentQueue.push(mutation);\r\n                }\r\n                return queue.push(mutation);\r\n            }\r\n            if (mutation.node.isShadow) {\r\n                if (!hasShadowRoot(parent)) {\r\n                    parent.attachShadow({ mode: 'open' });\r\n                    parent = parent.shadowRoot;\r\n                }\r\n                else\r\n                    parent = parent.shadowRoot;\r\n            }\r\n            let previous = null;\r\n            let next = null;\r\n            if (mutation.previousId) {\r\n                previous = mirror.getNode(mutation.previousId);\r\n            }\r\n            if (mutation.nextId) {\r\n                next = mirror.getNode(mutation.nextId);\r\n            }\r\n            if (nextNotInDOM(mutation)) {\r\n                return queue.push(mutation);\r\n            }\r\n            if (mutation.node.rootId && !mirror.getNode(mutation.node.rootId)) {\r\n                return;\r\n            }\r\n            const targetDoc = mutation.node.rootId\r\n                ? mirror.getNode(mutation.node.rootId)\r\n                : this.usingVirtualDom\r\n                    ? this.virtualDom\r\n                    : this.iframe.contentDocument;\r\n            if (isSerializedIframe(parent, mirror)) {\r\n                this.attachDocumentToIframe(mutation, parent);\r\n                return;\r\n            }\r\n            const afterAppend = (node, id) => {\r\n                for (const plugin of this.config.plugins || []) {\r\n                    if (plugin.onBuild)\r\n                        plugin.onBuild(node, { id, replayer: this });\r\n                }\r\n            };\r\n            const target = buildNodeWithSN(mutation.node, {\r\n                doc: targetDoc,\r\n                mirror: mirror,\r\n                skipChild: true,\r\n                hackCss: true,\r\n                cache: this.cache,\r\n                afterAppend,\r\n            });\r\n            if (mutation.previousId === -1 || mutation.nextId === -1) {\r\n                legacy_missingNodeMap[mutation.node.id] = {\r\n                    node: target,\r\n                    mutation,\r\n                };\r\n                return;\r\n            }\r\n            const parentSn = mirror.getMeta(parent);\r\n            if (parentSn &&\r\n                parentSn.type === NodeType.Element &&\r\n                parentSn.tagName === 'textarea' &&\r\n                mutation.node.type === NodeType.Text) {\r\n                const childNodeArray = Array.isArray(parent.childNodes)\r\n                    ? parent.childNodes\r\n                    : Array.from(parent.childNodes);\r\n                for (const c of childNodeArray) {\r\n                    if (c.nodeType === parent.TEXT_NODE) {\r\n                        parent.removeChild(c);\r\n                    }\r\n                }\r\n            }\r\n            if (previous && previous.nextSibling && previous.nextSibling.parentNode) {\r\n                parent.insertBefore(target, previous.nextSibling);\r\n            }\r\n            else if (next && next.parentNode) {\r\n                parent.contains(next)\r\n                    ? parent.insertBefore(target, next)\r\n                    : parent.insertBefore(target, null);\r\n            }\r\n            else {\r\n                if (parent === targetDoc) {\r\n                    while (targetDoc.firstChild) {\r\n                        targetDoc.removeChild(targetDoc.firstChild);\r\n                    }\r\n                }\r\n                parent.appendChild(target);\r\n            }\r\n            afterAppend(target, mutation.node.id);\r\n            if (this.usingVirtualDom &&\r\n                target.nodeName === '#text' &&\r\n                parent.nodeName === 'STYLE' &&\r\n                ((_a = parent.rules) === null || _a === void 0 ? void 0 : _a.length) > 0)\r\n                parent.rules = [];\r\n            if (isSerializedIframe(target, this.mirror)) {\r\n                const targetId = this.mirror.getId(target);\r\n                const mutationInQueue = this.newDocumentQueue.find((m) => m.parentId === targetId);\r\n                if (mutationInQueue) {\r\n                    this.attachDocumentToIframe(mutationInQueue, target);\r\n                    this.newDocumentQueue = this.newDocumentQueue.filter((m) => m !== mutationInQueue);\r\n                }\r\n            }\r\n            if (mutation.previousId || mutation.nextId) {\r\n                this.legacy_resolveMissingNode(legacy_missingNodeMap, parent, target, mutation);\r\n            }\r\n        };\r\n        d.adds.forEach((mutation) => {\r\n            appendNode(mutation);\r\n        });\r\n        const startTime = Date.now();\r\n        while (queue.length) {\r\n            const resolveTrees = queueToResolveTrees(queue);\r\n            queue.length = 0;\r\n            if (Date.now() - startTime > 500) {\r\n                this.warn('Timeout in the loop, please check the resolve tree data:', resolveTrees);\r\n                break;\r\n            }\r\n            for (const tree of resolveTrees) {\r\n                const parent = mirror.getNode(tree.value.parentId);\r\n                if (!parent) {\r\n                    this.debug('Drop resolve tree since there is no parent for the root node.', tree);\r\n                }\r\n                else {\r\n                    iterateResolveTree(tree, (mutation) => {\r\n                        appendNode(mutation);\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        if (Object.keys(legacy_missingNodeMap).length) {\r\n            Object.assign(this.legacy_missingNodeRetryMap, legacy_missingNodeMap);\r\n        }\r\n        uniqueTextMutations(d.texts).forEach((mutation) => {\r\n            var _a;\r\n            const target = mirror.getNode(mutation.id);\r\n            if (!target) {\r\n                if (d.removes.find((r) => r.id === mutation.id)) {\r\n                    return;\r\n                }\r\n                return this.warnNodeNotFound(d, mutation.id);\r\n            }\r\n            target.textContent = mutation.value;\r\n            if (this.usingVirtualDom) {\r\n                const parent = target.parentNode;\r\n                if (((_a = parent === null || parent === void 0 ? void 0 : parent.rules) === null || _a === void 0 ? void 0 : _a.length) > 0)\r\n                    parent.rules = [];\r\n            }\r\n        });\r\n        d.attributes.forEach((mutation) => {\r\n            const target = mirror.getNode(mutation.id);\r\n            if (!target) {\r\n                if (d.removes.find((r) => r.id === mutation.id)) {\r\n                    return;\r\n                }\r\n                return this.warnNodeNotFound(d, mutation.id);\r\n            }\r\n            for (const attributeName in mutation.attributes) {\r\n                if (typeof attributeName === 'string') {\r\n                    const value = mutation.attributes[attributeName];\r\n                    if (value === null) {\r\n                        target.removeAttribute(attributeName);\r\n                    }\r\n                    else if (typeof value === 'string') {\r\n                        try {\r\n                            if (attributeName === '_cssText' &&\r\n                                (target.nodeName === 'LINK' || target.nodeName === 'STYLE')) {\r\n                                try {\r\n                                    const newSn = mirror.getMeta(target);\r\n                                    Object.assign(newSn.attributes, mutation.attributes);\r\n                                    const newNode = buildNodeWithSN(newSn, {\r\n                                        doc: target.ownerDocument,\r\n                                        mirror: mirror,\r\n                                        skipChild: true,\r\n                                        hackCss: true,\r\n                                        cache: this.cache,\r\n                                    });\r\n                                    const siblingNode = target.nextSibling;\r\n                                    const parentNode = target.parentNode;\r\n                                    if (newNode && parentNode) {\r\n                                        parentNode.removeChild(target);\r\n                                        parentNode.insertBefore(newNode, siblingNode);\r\n                                        mirror.replace(mutation.id, newNode);\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                catch (e) {\r\n                                }\r\n                            }\r\n                            target.setAttribute(attributeName, value);\r\n                        }\r\n                        catch (error) {\r\n                            if (this.config.showWarning) {\r\n                                console.warn('An error occurred may due to the checkout feature.', error);\r\n                            }\r\n                        }\r\n                    }\r\n                    else if (attributeName === 'style') {\r\n                        const styleValues = value;\r\n                        const targetEl = target;\r\n                        for (const s in styleValues) {\r\n                            if (styleValues[s] === false) {\r\n                                targetEl.style.removeProperty(s);\r\n                            }\r\n                            else if (styleValues[s] instanceof Array) {\r\n                                const svp = styleValues[s];\r\n                                targetEl.style.setProperty(s, svp[0], svp[1]);\r\n                            }\r\n                            else {\r\n                                const svs = styleValues[s];\r\n                                targetEl.style.setProperty(s, svs);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n    applyScroll(d, isSync) {\r\n        var _a, _b;\r\n        const target = this.mirror.getNode(d.id);\r\n        if (!target) {\r\n            return this.debugNodeNotFound(d, d.id);\r\n        }\r\n        const sn = this.mirror.getMeta(target);\r\n        if (target === this.iframe.contentDocument) {\r\n            (_a = this.iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.scrollTo({\r\n                top: d.y,\r\n                left: d.x,\r\n                behavior: isSync ? 'auto' : 'smooth',\r\n            });\r\n        }\r\n        else if ((sn === null || sn === void 0 ? void 0 : sn.type) === NodeType.Document) {\r\n            (_b = target.defaultView) === null || _b === void 0 ? void 0 : _b.scrollTo({\r\n                top: d.y,\r\n                left: d.x,\r\n                behavior: isSync ? 'auto' : 'smooth',\r\n            });\r\n        }\r\n        else {\r\n            try {\r\n                target.scrollTo({\r\n                    top: d.y,\r\n                    left: d.x,\r\n                    behavior: isSync ? 'auto' : 'smooth',\r\n                });\r\n            }\r\n            catch (error) {\r\n            }\r\n        }\r\n    }\r\n    applyInput(d) {\r\n        const target = this.mirror.getNode(d.id);\r\n        if (!target) {\r\n            return this.debugNodeNotFound(d, d.id);\r\n        }\r\n        try {\r\n            target.checked = d.isChecked;\r\n            target.value = d.text;\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    applySelection(d) {\r\n        try {\r\n            const selectionSet = new Set();\r\n            const ranges = d.ranges.map(({ start, startOffset, end, endOffset }) => {\r\n                const startContainer = this.mirror.getNode(start);\r\n                const endContainer = this.mirror.getNode(end);\r\n                if (!startContainer || !endContainer)\r\n                    return;\r\n                const result = new Range();\r\n                result.setStart(startContainer, startOffset);\r\n                result.setEnd(endContainer, endOffset);\r\n                const doc = startContainer.ownerDocument;\r\n                const selection = doc === null || doc === void 0 ? void 0 : doc.getSelection();\r\n                selection && selectionSet.add(selection);\r\n                return {\r\n                    range: result,\r\n                    selection,\r\n                };\r\n            });\r\n            selectionSet.forEach((s) => s.removeAllRanges());\r\n            ranges.forEach((r) => { var _a; return r && ((_a = r.selection) === null || _a === void 0 ? void 0 : _a.addRange(r.range)); });\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    applyStyleSheetMutation(data) {\r\n        var _a;\r\n        let styleSheet = null;\r\n        if (data.styleId)\r\n            styleSheet = this.styleMirror.getStyle(data.styleId);\r\n        else if (data.id)\r\n            styleSheet =\r\n                ((_a = this.mirror.getNode(data.id)) === null || _a === void 0 ? void 0 : _a.sheet) || null;\r\n        if (!styleSheet)\r\n            return;\r\n        if (data.source === IncrementalSource.StyleSheetRule)\r\n            this.applyStyleSheetRule(data, styleSheet);\r\n        else if (data.source === IncrementalSource.StyleDeclaration)\r\n            this.applyStyleDeclaration(data, styleSheet);\r\n    }\r\n    applyStyleSheetRule(data, styleSheet) {\r\n        var _a, _b, _c, _d;\r\n        (_a = data.adds) === null || _a === void 0 ? void 0 : _a.forEach(({ rule, index: nestedIndex }) => {\r\n            try {\r\n                if (Array.isArray(nestedIndex)) {\r\n                    const { positions, index } = getPositionsAndIndex(nestedIndex);\r\n                    const nestedRule = getNestedRule(styleSheet.cssRules, positions);\r\n                    nestedRule.insertRule(rule, index);\r\n                }\r\n                else {\r\n                    const index = nestedIndex === undefined\r\n                        ? undefined\r\n                        : Math.min(nestedIndex, styleSheet.cssRules.length);\r\n                    styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.insertRule(rule, index);\r\n                }\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        (_b = data.removes) === null || _b === void 0 ? void 0 : _b.forEach(({ index: nestedIndex }) => {\r\n            try {\r\n                if (Array.isArray(nestedIndex)) {\r\n                    const { positions, index } = getPositionsAndIndex(nestedIndex);\r\n                    const nestedRule = getNestedRule(styleSheet.cssRules, positions);\r\n                    nestedRule.deleteRule(index || 0);\r\n                }\r\n                else {\r\n                    styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.deleteRule(nestedIndex);\r\n                }\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        if (data.replace)\r\n            try {\r\n                void ((_c = styleSheet.replace) === null || _c === void 0 ? void 0 : _c.call(styleSheet, data.replace));\r\n            }\r\n            catch (e) {\r\n            }\r\n        if (data.replaceSync)\r\n            try {\r\n                (_d = styleSheet.replaceSync) === null || _d === void 0 ? void 0 : _d.call(styleSheet, data.replaceSync);\r\n            }\r\n            catch (e) {\r\n            }\r\n    }\r\n    applyStyleDeclaration(data, styleSheet) {\r\n        if (data.set) {\r\n            const rule = getNestedRule(styleSheet.rules, data.index);\r\n            rule.style.setProperty(data.set.property, data.set.value, data.set.priority);\r\n        }\r\n        if (data.remove) {\r\n            const rule = getNestedRule(styleSheet.rules, data.index);\r\n            rule.style.removeProperty(data.remove.property);\r\n        }\r\n    }\r\n    applyAdoptedStyleSheet(data) {\r\n        var _a;\r\n        const targetHost = this.mirror.getNode(data.id);\r\n        if (!targetHost)\r\n            return;\r\n        (_a = data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n            var _a;\r\n            let newStyleSheet = null;\r\n            let hostWindow = null;\r\n            if (hasShadowRoot(targetHost))\r\n                hostWindow = ((_a = targetHost.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) || null;\r\n            else if (targetHost.nodeName === '#document')\r\n                hostWindow = targetHost.defaultView;\r\n            if (!hostWindow)\r\n                return;\r\n            try {\r\n                newStyleSheet = new hostWindow.CSSStyleSheet();\r\n                this.styleMirror.add(newStyleSheet, style.styleId);\r\n                this.applyStyleSheetRule({\r\n                    source: IncrementalSource.StyleSheetRule,\r\n                    adds: style.rules,\r\n                }, newStyleSheet);\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        const MAX_RETRY_TIME = 10;\r\n        let count = 0;\r\n        const adoptStyleSheets = (targetHost, styleIds) => {\r\n            const stylesToAdopt = styleIds\r\n                .map((styleId) => this.styleMirror.getStyle(styleId))\r\n                .filter((style) => style !== null);\r\n            if (hasShadowRoot(targetHost))\r\n                targetHost.shadowRoot.adoptedStyleSheets = stylesToAdopt;\r\n            else if (targetHost.nodeName === '#document')\r\n                targetHost.adoptedStyleSheets = stylesToAdopt;\r\n            if (stylesToAdopt.length !== styleIds.length && count < MAX_RETRY_TIME) {\r\n                setTimeout(() => adoptStyleSheets(targetHost, styleIds), 0 + 100 * count);\r\n                count++;\r\n            }\r\n        };\r\n        adoptStyleSheets(targetHost, data.styleIds);\r\n    }\r\n    legacy_resolveMissingNode(map, parent, target, targetMutation) {\r\n        const { previousId, nextId } = targetMutation;\r\n        const previousInMap = previousId && map[previousId];\r\n        const nextInMap = nextId && map[nextId];\r\n        if (previousInMap) {\r\n            const { node, mutation } = previousInMap;\r\n            parent.insertBefore(node, target);\r\n            delete map[mutation.node.id];\r\n            delete this.legacy_missingNodeRetryMap[mutation.node.id];\r\n            if (mutation.previousId || mutation.nextId) {\r\n                this.legacy_resolveMissingNode(map, parent, node, mutation);\r\n            }\r\n        }\r\n        if (nextInMap) {\r\n            const { node, mutation } = nextInMap;\r\n            parent.insertBefore(node, target.nextSibling);\r\n            delete map[mutation.node.id];\r\n            delete this.legacy_missingNodeRetryMap[mutation.node.id];\r\n            if (mutation.previousId || mutation.nextId) {\r\n                this.legacy_resolveMissingNode(map, parent, node, mutation);\r\n            }\r\n        }\r\n    }\r\n    moveAndHover(x, y, id, isSync, debugData) {\r\n        const target = this.mirror.getNode(id);\r\n        if (!target) {\r\n            return this.debugNodeNotFound(debugData, id);\r\n        }\r\n        const base = getBaseDimension(target, this.iframe);\r\n        const _x = x * base.absoluteScale + base.x;\r\n        const _y = y * base.absoluteScale + base.y;\r\n        this.mouse.style.left = `${_x}px`;\r\n        this.mouse.style.top = `${_y}px`;\r\n        if (!isSync) {\r\n            this.drawMouseTail({ x: _x, y: _y });\r\n        }\r\n        this.hoverElements(target);\r\n    }\r\n    drawMouseTail(position) {\r\n        if (!this.mouseTail) {\r\n            return;\r\n        }\r\n        const { lineCap, lineWidth, strokeStyle, duration } = this.config.mouseTail === true\r\n            ? defaultMouseTailConfig\r\n            : Object.assign({}, defaultMouseTailConfig, this.config.mouseTail);\r\n        const draw = () => {\r\n            if (!this.mouseTail) {\r\n                return;\r\n            }\r\n            const ctx = this.mouseTail.getContext('2d');\r\n            if (!ctx || !this.tailPositions.length) {\r\n                return;\r\n            }\r\n            ctx.clearRect(0, 0, this.mouseTail.width, this.mouseTail.height);\r\n            ctx.beginPath();\r\n            ctx.lineWidth = lineWidth;\r\n            ctx.lineCap = lineCap;\r\n            ctx.strokeStyle = strokeStyle;\r\n            ctx.moveTo(this.tailPositions[0].x, this.tailPositions[0].y);\r\n            this.tailPositions.forEach((p) => ctx.lineTo(p.x, p.y));\r\n            ctx.stroke();\r\n        };\r\n        this.tailPositions.push(position);\r\n        draw();\r\n        setTimeout(() => {\r\n            this.tailPositions = this.tailPositions.filter((p) => p !== position);\r\n            draw();\r\n        }, duration / this.speedService.state.context.timer.speed);\r\n    }\r\n    hoverElements(el) {\r\n        var _a;\r\n        (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.\\\\:hover').forEach((hoveredEl) => {\r\n            hoveredEl.classList.remove(':hover');\r\n        });\r\n        let currentEl = el;\r\n        while (currentEl) {\r\n            if (currentEl.classList) {\r\n                currentEl.classList.add(':hover');\r\n            }\r\n            currentEl = currentEl.parentElement;\r\n        }\r\n    }\r\n    isUserInteraction(event) {\r\n        if (event.type !== EventType.IncrementalSnapshot) {\r\n            return false;\r\n        }\r\n        return (event.data.source > IncrementalSource.Mutation &&\r\n            event.data.source <= IncrementalSource.Input);\r\n    }\r\n    backToNormal() {\r\n        this.nextUserInteractionEvent = null;\r\n        if (this.speedService.state.matches('normal')) {\r\n            return;\r\n        }\r\n        this.speedService.send({ type: 'BACK_TO_NORMAL' });\r\n        this.emitter.emit(ReplayerEvents.SkipEnd, {\r\n            speed: this.speedService.state.context.normalSpeed,\r\n        });\r\n    }\r\n    warnNodeNotFound(d, id) {\r\n        this.warn(`Node with id '${id}' not found. `, d);\r\n    }\r\n    warnCanvasMutationFailed(d, error) {\r\n        this.warn(`Has error on canvas update`, error, 'canvas mutation:', d);\r\n    }\r\n    debugNodeNotFound(d, id) {\r\n        this.debug(REPLAY_CONSOLE_PREFIX, `Node with id '${id}' not found. `, d);\r\n    }\r\n    warn(...args) {\r\n        if (!this.config.showWarning) {\r\n            return;\r\n        }\r\n        console.warn(REPLAY_CONSOLE_PREFIX, ...args);\r\n    }\r\n    debug(...args) {\r\n        if (!this.config.showDebug) {\r\n            return;\r\n        }\r\n        console.log(REPLAY_CONSOLE_PREFIX, ...args);\r\n    }\r\n}\n\nexport { Replayer };\n","declare global {\n  interface Document {\n    mozExitFullscreen: Document['exitFullscreen'];\n    webkitExitFullscreen: Document['exitFullscreen'];\n    msExitFullscreen: Document['exitFullscreen'];\n    webkitIsFullScreen: Document['fullscreen'];\n    mozFullScreen: Document['fullscreen'];\n    msFullscreenElement: Document['fullscreen'];\n  }\n\n  interface HTMLElement {\n    mozRequestFullScreen: Element['requestFullscreen'];\n    webkitRequestFullscreen: Element['requestFullscreen'];\n    msRequestFullscreen: Element['requestFullscreen'];\n  }\n}\n\nimport { EventType, IncrementalSource } from 'rrweb';\nimport type { eventWithTime } from '@rrweb/types';\n\nexport function inlineCss(cssObj: Record<string, string>): string {\n  let style = '';\n  Object.keys(cssObj).forEach((key) => {\n    style += `${key}: ${cssObj[key]};`;\n  });\n  return style;\n}\n\nfunction padZero(num: number, len = 2): string {\n  let str = String(num);\n  const threshold = Math.pow(10, len - 1);\n  if (num < threshold) {\n    while (String(threshold).length > str.length) {\n      str = `0${num}`;\n    }\n  }\n  return str;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nexport function formatTime(ms: number): string {\n  if (ms <= 0) {\n    return '00:00';\n  }\n  const hour = Math.floor(ms / HOUR);\n  ms = ms % HOUR;\n  const minute = Math.floor(ms / MINUTE);\n  ms = ms % MINUTE;\n  const second = Math.floor(ms / SECOND);\n  if (hour) {\n    return `${padZero(hour)}:${padZero(minute)}:${padZero(second)}`;\n  }\n  return `${padZero(minute)}:${padZero(second)}`;\n}\n\nexport function openFullscreen(el: HTMLElement): Promise<void> {\n  if (el.requestFullscreen) {\n    return el.requestFullscreen();\n  } else if (el.mozRequestFullScreen) {\n    /* Firefox */\n    return el.mozRequestFullScreen();\n  } else if (el.webkitRequestFullscreen) {\n    /* Chrome, Safari and Opera */\n    return el.webkitRequestFullscreen();\n  } else if (el.msRequestFullscreen) {\n    /* IE/Edge */\n    return el.msRequestFullscreen();\n  }\n}\n\nexport function exitFullscreen(): Promise<void> {\n  if (document.exitFullscreen) {\n    return document.exitFullscreen();\n  } else if (document.mozExitFullscreen) {\n    /* Firefox */\n    return document.mozExitFullscreen();\n  } else if (document.webkitExitFullscreen) {\n    /* Chrome, Safari and Opera */\n    return document.webkitExitFullscreen();\n  } else if (document.msExitFullscreen) {\n    /* IE/Edge */\n    return document.msExitFullscreen();\n  }\n}\n\nexport function isFullscreen(): boolean {\n  let fullscreen = false;\n  [\n    'fullscreen',\n    'webkitIsFullScreen',\n    'mozFullScreen',\n    'msFullscreenElement',\n  ].forEach((fullScreenAccessor) => {\n    if (fullScreenAccessor in document) {\n      fullscreen = fullscreen || Boolean(document[fullScreenAccessor]);\n    }\n  });\n  return fullscreen;\n}\n\nexport function onFullscreenChange(handler: () => unknown): () => void {\n  document.addEventListener('fullscreenchange', handler);\n  document.addEventListener('webkitfullscreenchange', handler);\n  document.addEventListener('mozfullscreenchange', handler);\n  document.addEventListener('MSFullscreenChange', handler);\n\n  return () => {\n    document.removeEventListener('fullscreenchange', handler);\n    document.removeEventListener('webkitfullscreenchange', handler);\n    document.removeEventListener('mozfullscreenchange', handler);\n    document.removeEventListener('MSFullscreenChange', handler);\n  };\n}\n\nexport function typeOf(\n  obj: unknown,\n):\n  | 'boolean'\n  | 'number'\n  | 'string'\n  | 'function'\n  | 'array'\n  | 'date'\n  | 'regExp'\n  | 'undefined'\n  | 'null'\n  | 'object' {\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  const toString = Object.prototype.toString;\n  const map = {\n    '[object Boolean]': 'boolean',\n    '[object Number]': 'number',\n    '[object String]': 'string',\n    '[object Function]': 'function',\n    '[object Array]': 'array',\n    '[object Date]': 'date',\n    '[object RegExp]': 'regExp',\n    '[object Undefined]': 'undefined',\n    '[object Null]': 'null',\n    '[object Object]': 'object',\n  };\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n  return map[toString.call(obj)];\n}\n\n/**\n * Forked from 'rrweb' replay/index.ts. The original function is not exported.\n * Determine whether the event is a user interaction event\n * @param event - event to be determined\n * @returns true if the event is a user interaction event\n */\nfunction isUserInteraction(event: eventWithTime): boolean {\n  if (event.type !== EventType.IncrementalSnapshot) {\n    return false;\n  }\n  return (\n    event.data.source > IncrementalSource.Mutation &&\n    event.data.source <= IncrementalSource.Input\n  );\n}\n\n// Forked from 'rrweb' replay/index.ts. A const threshold of inactive time.\nconst SKIP_TIME_THRESHOLD = 10 * 1000;\n\n/**\n * Get periods of time when no user interaction happened from a list of events.\n * @param events - all events\n * @returns periods of time consist with [start time, end time]\n */\nexport function getInactivePeriods(events: eventWithTime[]) {\n  const inactivePeriods: [number, number][] = [];\n  let lastActiveTime = events[0].timestamp;\n  for (const event of events) {\n    if (!isUserInteraction(event)) continue;\n    if (event.timestamp - lastActiveTime > SKIP_TIME_THRESHOLD) {\n      inactivePeriods.push([lastActiveTime, event.timestamp]);\n    }\n    lastActiveTime = event.timestamp;\n  }\n  return inactivePeriods;\n}\n","<script lang=\"ts\">\n  export let disabled: boolean;\n  export let checked: boolean;\n  export let id: string;\n  export let label: string;\n</script>\n\n<style>\n  .switch {\n    height: 1em;\n    display: flex;\n    align-items: center;\n  }\n\n  .switch.disabled {\n    opacity: 0.5;\n  }\n\n  .label {\n    margin: 0 8px;\n  }\n\n  .switch input[type='checkbox'] {\n    position: absolute;\n    opacity: 0;\n  }\n\n  .switch label {\n    width: 2em;\n    height: 1em;\n    position: relative;\n    cursor: pointer;\n    display: block;\n  }\n\n  .switch.disabled label {\n    cursor: not-allowed;\n  }\n\n  .switch label:before {\n    content: '';\n    position: absolute;\n    width: 2em;\n    height: 1em;\n    left: 0.1em;\n    transition: background 0.1s ease;\n    background: rgba(73, 80, 246, 0.5);\n    border-radius: 50px;\n  }\n\n  .switch label:after {\n    content: '';\n    position: absolute;\n    width: 1em;\n    height: 1em;\n    border-radius: 50px;\n    left: 0;\n    transition: all 0.2s ease;\n    box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);\n    background: #fcfff4;\n    animation: switch-off 0.2s ease-out;\n    z-index: 2;\n  }\n\n  .switch input[type='checkbox']:checked + label:before {\n    background: rgb(73, 80, 246);\n  }\n\n  .switch input[type='checkbox']:checked + label:after {\n    animation: switch-on 0.2s ease-out;\n    left: 1.1em;\n  }\n</style>\n\n<div class=\"switch\" class:disabled>\n  <input type=\"checkbox\" {id} bind:checked {disabled} />\n  <label for={id} />\n  <span class=\"label\">{label}</span>\n</div>\n","<script lang=\"ts\">\n  import { EventType } from 'rrweb';\n  import type { Replayer } from 'rrweb';\n  import type { playerMetaData } from '@rrweb/types';\n  import type {\n    PlayerMachineState,\n    SpeedMachineState,\n  } from 'rrweb/typings/replay/machine';\n  import {\n    onMount,\n    onDestroy,\n    createEventDispatcher,\n    afterUpdate,\n  } from 'svelte';\n  import { formatTime, getInactivePeriods } from './utils';\n  import Switch from './components/Switch.svelte';\n\n  const dispatch = createEventDispatcher();\n\n  export let replayer: Replayer;\n  export let showController: boolean;\n  export let autoPlay: boolean;\n  export let skipInactive: boolean;\n  export let speedOption: number[];\n  export let speed = speedOption.length ? speedOption[0] : 1;\n  export let tags: Record<string, string> = {};\n  export let inactiveColor: string;\n\n  let currentTime = 0;\n  $: {\n    dispatch('ui-update-current-time', { payload: currentTime });\n  }\n  let timer: number | null = null;\n  let playerState: 'playing' | 'paused' | 'live';\n  $: {\n    dispatch('ui-update-player-state', { payload: playerState });\n  }\n  let speedState: 'normal' | 'skipping';\n  let progress: HTMLElement;\n  let step: HTMLElement;\n  let finished: boolean;\n\n  let pauseAt: number | false = false;\n  let onPauseHook: () => unknown | undefined = undefined;\n  let loop: {\n    start: number;\n    end: number;\n  } | null = null;\n\n  let meta: playerMetaData;\n  $: meta = replayer.getMetaData();\n  let percentage: string;\n  $: {\n    const percent = Math.min(1, currentTime / meta.totalTime);\n    percentage = `${100 * percent}%`;\n    dispatch('ui-update-progress', { payload: percent });\n  }\n  type CustomEvent = {\n    name: string;\n    background: string;\n    position: string;\n  };\n\n  /**\n   * Calculate the tag position (percent) to be displayed on the progress bar.\n   * @param startTime - The start time of the session.\n   * @param endTime - The end time of the session.\n   * @param tagTime - The time of the tag.\n   * @returns The position of the tag. unit: percentage\n   */\n  function position(startTime: number, endTime: number, tagTime: number) {\n    const sessionDuration = endTime - startTime;\n    const eventDuration = endTime - tagTime;\n    const eventPosition = 100 - (eventDuration / sessionDuration) * 100;\n    return eventPosition.toFixed(2);\n  }\n\n  let customEvents: CustomEvent[];\n  $: customEvents = (() => {\n    const { context } = replayer.service.state;\n    const totalEvents = context.events.length;\n    const start = context.events[0].timestamp;\n    const end = context.events[totalEvents - 1].timestamp;\n    const customEvents: CustomEvent[] = [];\n\n    // loop through all the events and find out custom event.\n    context.events.forEach((event) => {\n      /**\n       * we are only interested in custom event and calculate it's position\n       * to place it in player's timeline.\n       */\n      if (event.type === EventType.Custom) {\n        const customEvent = {\n          name: event.data.tag,\n          background: tags[event.data.tag] || 'rgb(73, 80, 246)',\n          position: `${position(start, end, event.timestamp)}%`,\n        };\n        customEvents.push(customEvent);\n      }\n    });\n\n    return customEvents;\n  })();\n\n  let inactivePeriods: {\n    name: string;\n    background: string;\n    position: string;\n    width: string;\n  }[];\n  $: inactivePeriods = (() => {\n    try {\n      const { context } = replayer.service.state;\n      const totalEvents = context.events.length;\n      const start = context.events[0].timestamp;\n      const end = context.events[totalEvents - 1].timestamp;\n      const periods = getInactivePeriods(context.events);\n      // calculate the indicator width.\n      const getWidth = (\n        startTime: number,\n        endTime: number,\n        tagStart: number,\n        tagEnd: number,\n      ) => {\n        const sessionDuration = endTime - startTime;\n        const eventDuration = tagEnd - tagStart;\n        const width = (eventDuration / sessionDuration) * 100;\n        return width.toFixed(2);\n      };\n      return periods.map((period) => ({\n        name: 'inactive period',\n        background: inactiveColor,\n        position: `${position(start, end, period[0])}%`,\n        width: `${getWidth(start, end, period[0], period[1])}%`,\n      }));\n    } catch (e) {\n      // For safety concern, if there is any error, the main function won't be affected.\n      return [];\n    }\n  })();\n\n  const loopTimer = () => {\n    stopTimer();\n\n    function update() {\n      currentTime = replayer.getCurrentTime();\n\n      if (pauseAt && currentTime >= pauseAt) {\n        if (loop) {\n          playRange(loop.start, loop.end, true, undefined);\n        } else {\n          replayer.pause();\n          if (onPauseHook) {\n            onPauseHook();\n            onPauseHook = null;\n          }\n        }\n      }\n\n      if (currentTime < meta.totalTime) {\n        timer = requestAnimationFrame(update);\n      }\n    }\n\n    timer = requestAnimationFrame(update);\n  };\n\n  const stopTimer = () => {\n    if (timer) {\n      cancelAnimationFrame(timer);\n      timer = null;\n    }\n  };\n\n  export const toggle = () => {\n    switch (playerState) {\n      case 'playing':\n        pause();\n        break;\n      case 'paused':\n        play();\n        break;\n      default:\n        break;\n    }\n  };\n\n  export const play = () => {\n    if (playerState !== 'paused') {\n      return;\n    }\n    if (finished) {\n      replayer.play();\n      finished = false;\n    } else {\n      replayer.play(currentTime);\n    }\n  };\n\n  export const pause = () => {\n    if (playerState !== 'playing') {\n      return;\n    }\n    replayer.pause();\n    pauseAt = false;\n  };\n\n  export const goto = (timeOffset: number, play?: boolean) => {\n    currentTime = timeOffset;\n    pauseAt = false;\n    const resumePlaying =\n      typeof play === 'boolean' ? play : playerState === 'playing';\n    if (resumePlaying) {\n      replayer.play(timeOffset);\n    } else {\n      replayer.pause(timeOffset);\n    }\n  };\n\n  export const playRange = (\n    timeOffset: number,\n    endTimeOffset: number,\n    startLooping: boolean = false,\n    afterHook: undefined | (() => void) = undefined,\n  ) => {\n    if (startLooping) {\n      loop = {\n        start: timeOffset,\n        end: endTimeOffset,\n      };\n    } else {\n      loop = null;\n    }\n    currentTime = timeOffset;\n    pauseAt = endTimeOffset;\n    onPauseHook = afterHook;\n    replayer.play(timeOffset);\n  };\n\n  const handleProgressClick = (event: MouseEvent) => {\n    if (speedState === 'skipping') {\n      return;\n    }\n    const progressRect = progress.getBoundingClientRect();\n    const x = event.clientX - progressRect.left;\n    let percent = x / progressRect.width;\n    if (percent < 0) {\n      percent = 0;\n    } else if (percent > 1) {\n      percent = 1;\n    }\n    const timeOffset = meta.totalTime * percent;\n    finished = false;\n    goto(timeOffset);\n  };\n\n  export const setSpeed = (newSpeed: number) => {\n    let needFreeze = playerState === 'playing';\n    speed = newSpeed;\n    if (needFreeze) {\n      replayer.pause();\n    }\n    replayer.setConfig({ speed });\n    if (needFreeze) {\n      replayer.play(currentTime);\n    }\n  };\n\n  export const toggleSkipInactive = () => {\n    skipInactive = !skipInactive;\n  };\n\n  export const triggerUpdateMeta = () => {\n    return Promise.resolve().then(() => {\n      meta = replayer.getMetaData();\n    });\n  };\n\n  onMount(() => {\n    playerState = replayer.service.state.value;\n    speedState = replayer.speedService.state.value;\n    replayer.on(\n      'state-change',\n      (states: { player?: PlayerMachineState; speed?: SpeedMachineState }) => {\n        const { player, speed } = states;\n        if (player?.value && playerState !== player.value) {\n          playerState = player.value;\n          switch (playerState) {\n            case 'playing':\n              loopTimer();\n              break;\n            case 'paused':\n              stopTimer();\n              break;\n            default:\n              break;\n          }\n        }\n        if (speed?.value && speedState !== speed.value) {\n          speedState = speed.value;\n        }\n      },\n    );\n    replayer.on('finish', () => {\n      finished = true;\n      if (onPauseHook) {\n        onPauseHook();\n        onPauseHook = null;\n      }\n    });\n\n    if (autoPlay) {\n      replayer.play();\n    }\n  });\n\n  afterUpdate(() => {\n    if (skipInactive !== replayer.config.skipInactive) {\n      replayer.setConfig({ skipInactive });\n    }\n  });\n\n  onDestroy(() => {\n    replayer.pause();\n    stopTimer();\n  });\n</script>\n\n<style>\n  .rr-controller {\n    width: 100%;\n    height: 80px;\n    background: #fff;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-around;\n    align-items: center;\n    border-radius: 0 0 5px 5px;\n  }\n\n  .rr-timeline {\n    width: 80%;\n    display: flex;\n    align-items: center;\n  }\n\n  .rr-timeline__time {\n    display: inline-block;\n    width: 100px;\n    text-align: center;\n    color: #11103e;\n  }\n\n  .rr-progress {\n    flex: 1;\n    height: 12px;\n    background: #eee;\n    position: relative;\n    border-radius: 3px;\n    cursor: pointer;\n    box-sizing: border-box;\n    border-top: solid 4px #fff;\n    border-bottom: solid 4px #fff;\n  }\n\n  .rr-progress.disabled {\n    cursor: not-allowed;\n  }\n\n  .rr-progress__step {\n    height: 100%;\n    position: absolute;\n    left: 0;\n    top: 0;\n    background: #e0e1fe;\n  }\n\n  .rr-progress__handler {\n    width: 20px;\n    height: 20px;\n    border-radius: 10px;\n    position: absolute;\n    top: 2px;\n    transform: translate(-50%, -50%);\n    background: rgb(73, 80, 246);\n  }\n\n  .rr-controller__btns {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 13px;\n  }\n\n  .rr-controller__btns button {\n    width: 32px;\n    height: 32px;\n    display: flex;\n    padding: 0;\n    align-items: center;\n    justify-content: center;\n    background: none;\n    border: none;\n    border-radius: 50%;\n    cursor: pointer;\n  }\n\n  .rr-controller__btns button:active {\n    background: #e0e1fe;\n  }\n\n  .rr-controller__btns button.active {\n    color: #fff;\n    background: rgb(73, 80, 246);\n  }\n\n  .rr-controller__btns button:disabled {\n    cursor: not-allowed;\n  }\n</style>\n\n{#if showController}\n  <div class=\"rr-controller\">\n    <div class=\"rr-timeline\">\n      <span class=\"rr-timeline__time\">{formatTime(currentTime)}</span>\n      <div\n        class=\"rr-progress\"\n        class:disabled={speedState === 'skipping'}\n        bind:this={progress}\n        on:click={handleProgressClick}\n      >\n        <div\n          class=\"rr-progress__step\"\n          bind:this={step}\n          style=\"width: {percentage}\"\n        />\n        {#each inactivePeriods as period}\n          <div\n            title={period.name}\n            style=\"width: {period.width};height: 4px;position: absolute;background: {period.background};left:\n            {period.position};\"\n          />\n        {/each}\n        {#each customEvents as event}\n          <div\n            title={event.name}\n            style=\"width: 10px;height: 5px;position: absolute;top:\n            2px;transform: translate(-50%, -50%);background: {event.background};left:\n            {event.position};\"\n          />\n        {/each}\n\n        <div class=\"rr-progress__handler\" style=\"left: {percentage}\" />\n      </div>\n      <span class=\"rr-timeline__time\">{formatTime(meta.totalTime)}</span>\n    </div>\n    <div class=\"rr-controller__btns\">\n      <button on:click={toggle}>\n        {#if playerState === 'playing'}\n          <svg\n            class=\"icon\"\n            viewBox=\"0 0 1024 1024\"\n            version=\"1.1\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            width=\"16\"\n            height=\"16\"\n          >\n            <path\n              d=\"M682.65984 128q53.00224 0 90.50112 37.49888t37.49888 90.50112l0\n              512q0 53.00224-37.49888 90.50112t-90.50112\n              37.49888-90.50112-37.49888-37.49888-90.50112l0-512q0-53.00224\n              37.49888-90.50112t90.50112-37.49888zM341.34016 128q53.00224 0\n              90.50112 37.49888t37.49888 90.50112l0 512q0 53.00224-37.49888\n              90.50112t-90.50112\n              37.49888-90.50112-37.49888-37.49888-90.50112l0-512q0-53.00224\n              37.49888-90.50112t90.50112-37.49888zM341.34016 213.34016q-17.67424\n              0-30.16704 12.4928t-12.4928 30.16704l0 512q0 17.67424 12.4928\n              30.16704t30.16704 12.4928 30.16704-12.4928\n              12.4928-30.16704l0-512q0-17.67424-12.4928-30.16704t-30.16704-12.4928zM682.65984\n              213.34016q-17.67424 0-30.16704 12.4928t-12.4928 30.16704l0 512q0\n              17.67424 12.4928 30.16704t30.16704 12.4928 30.16704-12.4928\n              12.4928-30.16704l0-512q0-17.67424-12.4928-30.16704t-30.16704-12.4928z\"\n            />\n          </svg>\n        {:else}\n          <svg\n            class=\"icon\"\n            viewBox=\"0 0 1024 1024\"\n            version=\"1.1\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            width=\"16\"\n            height=\"16\"\n          >\n            <path\n              d=\"M170.65984 896l0-768 640 384zM644.66944\n              512l-388.66944-233.32864 0 466.65728z\"\n            />\n          </svg>\n        {/if}\n      </button>\n      {#each speedOption as s}\n        <button\n          class:active={s === speed && speedState !== 'skipping'}\n          on:click={() => setSpeed(s)}\n          disabled={speedState === 'skipping'}\n        >\n          {s}x\n        </button>\n      {/each}\n      <Switch\n        id=\"skip\"\n        bind:checked={skipInactive}\n        disabled={speedState === 'skipping'}\n        label=\"skip inactive\"\n      />\n      <button on:click={() => dispatch('fullscreen')}>\n        <svg\n          class=\"icon\"\n          viewBox=\"0 0 1024 1024\"\n          version=\"1.1\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n          width=\"16\"\n          height=\"16\"\n        >\n          <defs>\n            <style type=\"text/css\">\n            </style>\n          </defs>\n          <path\n            d=\"M916 380c-26.4 0-48-21.6-48-48L868 223.2 613.6 477.6c-18.4\n            18.4-48.8 18.4-68 0-18.4-18.4-18.4-48.8 0-68L800 156 692 156c-26.4\n            0-48-21.6-48-48 0-26.4 21.6-48 48-48l224 0c26.4 0 48 21.6 48 48l0\n            224C964 358.4 942.4 380 916 380zM231.2 860l108.8 0c26.4 0 48 21.6 48\n            48s-21.6 48-48 48l-224 0c-26.4 0-48-21.6-48-48l0-224c0-26.4 21.6-48\n            48-48 26.4 0 48 21.6 48 48L164 792l253.6-253.6c18.4-18.4 48.8-18.4\n            68 0 18.4 18.4 18.4 48.8 0 68L231.2 860z\"\n            p-id=\"1286\"\n          />\n        </svg>\n      </button>\n    </div>\n  </div>\n{/if}\n","<script lang=\"ts\">\n  import { onMount, onDestroy } from 'svelte';\n  import { Replayer, unpack } from 'rrweb';\n  import type { eventWithTime } from '@rrweb/types';\n  import {\n    inlineCss,\n    openFullscreen,\n    exitFullscreen,\n    isFullscreen,\n    onFullscreenChange,\n    typeOf,\n  } from './utils';\n  import Controller from './Controller.svelte';\n\n  export let width = 1024;\n  export let height = 576;\n  export let maxScale = 1;\n  export let events: eventWithTime[] = [];\n  export let skipInactive = true;\n  export let autoPlay = true;\n  export let speedOption: number[] = [1, 2, 4, 8];\n  export let speed = 1;\n  export let showController = true;\n  export let tags: Record<string, string> = {};\n  // color of inactive periods indicator\n  export let inactiveColor = '#D4D4D4';\n\n  let replayer: Replayer;\n\n  export const getMirror = () => replayer.getMirror();\n\n  const controllerHeight = 80;\n  let player: HTMLElement;\n  let frame: HTMLElement;\n  let fullscreenListener: undefined | (() => void);\n  let _width: number = width;\n  let _height: number = height;\n  let controller: {\n    toggle: () => void;\n    setSpeed: (speed: number) => void;\n    toggleSkipInactive: () => void;\n  } & Controller;\n\n  let style: string;\n  $: style = inlineCss({\n    width: `${width}px`,\n    height: `${height}px`,\n  });\n  let playerStyle: string;\n  $: playerStyle = inlineCss({\n    width: `${width}px`,\n    height: `${height + (showController ? controllerHeight : 0)}px`,\n  });\n\n  const updateScale = (\n    el: HTMLElement,\n    frameDimension: { width: number; height: number },\n  ) => {\n    const widthScale = width / frameDimension.width;\n    const heightScale = height / frameDimension.height;\n    const scale = [widthScale, heightScale];\n    if (maxScale) scale.push(maxScale);\n    el.style.transform =\n      `scale(${Math.min(...scale)})` + 'translate(-50%, -50%)';\n  };\n\n  export const triggerResize = () => {\n    updateScale(replayer.wrapper, {\n      width: replayer.iframe.offsetWidth,\n      height: replayer.iframe.offsetHeight,\n    });\n  };\n\n  export const toggleFullscreen = () => {\n    if (player) {\n      isFullscreen() ? exitFullscreen() : openFullscreen(player);\n    }\n  };\n\n  export const addEventListener = (\n    event: string,\n    handler: (detail: unknown) => unknown,\n  ) => {\n    replayer.on(event, handler);\n    switch (event) {\n      case 'ui-update-current-time':\n      case 'ui-update-progress':\n      case 'ui-update-player-state':\n        controller.$on(event, ({ detail }) => handler(detail));\n      default:\n        break;\n    }\n  };\n\n  export const addEvent = (event: eventWithTime) => {\n    replayer.addEvent(event);\n    controller.triggerUpdateMeta();\n  };\n  export const getMetaData = () => replayer.getMetaData();\n  export const getReplayer = () => replayer;\n\n  // by pass controller methods as public API\n  export const toggle = () => {\n    controller.toggle();\n  };\n  export const setSpeed = (speed: number) => {\n    controller.setSpeed(speed);\n  };\n  export const toggleSkipInactive = () => {\n    controller.toggleSkipInactive();\n  };\n  export const play = () => {\n    controller.play();\n  };\n  export const pause = () => {\n    controller.pause();\n  };\n  export const goto = (timeOffset: number, play?: boolean) => {\n    controller.goto(timeOffset, play);\n  };\n  export const playRange = (\n    timeOffset: number,\n    endTimeOffset: number,\n    startLooping: boolean = false,\n    afterHook: undefined | (() => void) = undefined,\n  ) => {\n    controller.playRange(timeOffset, endTimeOffset, startLooping, afterHook);\n  };\n\n  onMount(() => {\n    // runtime type check\n    if (speedOption !== undefined && typeOf(speedOption) !== 'array') {\n      throw new Error('speedOption must be array');\n    }\n    speedOption.forEach((item) => {\n      if (typeOf(item) !== 'number') {\n        throw new Error('item of speedOption must be number');\n      }\n    });\n    if (speedOption.indexOf(speed) < 0) {\n      throw new Error(`speed must be one of speedOption,\n        current config:\n        {\n          ...\n          speed: ${speed},\n          speedOption: [${speedOption.toString()}]\n          ...\n        }\n        `);\n    }\n\n    replayer = new Replayer(events, {\n      speed,\n      root: frame,\n      unpackFn: unpack,\n      ...$$props,\n    });\n\n    replayer.on('resize', (dimension) => {\n      updateScale(\n        replayer.wrapper,\n        dimension as { width: number; height: number },\n      );\n    });\n\n    fullscreenListener = onFullscreenChange(() => {\n      if (isFullscreen()) {\n        setTimeout(() => {\n          _width = width;\n          _height = height;\n          width = player.offsetWidth;\n          height =\n            player.offsetHeight - (showController ? controllerHeight : 0);\n          updateScale(replayer.wrapper, {\n            width: replayer.iframe.offsetWidth,\n            height: replayer.iframe.offsetHeight,\n          });\n        }, 0);\n      } else {\n        width = _width;\n        height = _height;\n        updateScale(replayer.wrapper, {\n          width: replayer.iframe.offsetWidth,\n          height: replayer.iframe.offsetHeight,\n        });\n      }\n    });\n  });\n\n  onDestroy(() => {\n    fullscreenListener && fullscreenListener();\n  });\n</script>\n\n<style global>\n  @import 'rrweb/dist/rrweb.min.css';\n\n  .rr-player {\n    position: relative;\n    background: white;\n    float: left;\n    border-radius: 5px;\n    box-shadow: 0 24px 48px rgba(17, 16, 62, 0.12);\n  }\n\n  .rr-player__frame {\n    overflow: hidden;\n  }\n\n  .replayer-wrapper {\n    float: left;\n    clear: both;\n    transform-origin: top left;\n    left: 50%;\n    top: 50%;\n  }\n\n  .replayer-wrapper > iframe {\n    border: none;\n  }\n</style>\n\n<div class=\"rr-player\" bind:this={player} style={playerStyle}>\n  <div class=\"rr-player__frame\" bind:this={frame} {style} />\n  {#if replayer}\n    <Controller\n      bind:this={controller}\n      {replayer}\n      {showController}\n      {autoPlay}\n      {speedOption}\n      {skipInactive}\n      {tags}\n      {inactiveColor}\n      on:fullscreen={() => toggleFullscreen()}\n    />\n  {/if}\n</div>\n","import type { eventWithTime } from '@rrweb/types';\nimport _Player from './Player.svelte';\n\ntype PlayerProps = {\n  events: eventWithTime[];\n};\n\nclass Player extends _Player {\n  constructor(options: {\n    target: Element;\n    props: PlayerProps;\n    // for compatibility\n    data?: PlayerProps;\n  }) {\n    super({\n      target: options.target,\n      props: options.data || options.props,\n    });\n  }\n}\n\nexport default Player;\n"],"names":["noop","assign","tar","src","k","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","exclude_internal_props","props","result","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","i","length","d","element","name","document","createElement","svg_element","createElementNS","text","data","createTextNode","space","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","getAttribute","setAttribute","set_data","wholeText","set_style","key","important","style","removeProperty","setProperty","toggle_class","toggle","classList","current_component","set_current_component","component","get_current_component","Error","onMount","$$","on_mount","push","onDestroy","on_destroy","createEventDispatcher","type","detail","cancelable","callbacks","bubbles","e","createEvent","initCustomEvent","custom_event","slice","call","defaultPrevented","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","seen_callbacks","Set","flushidx","flush","saved_component","update","pop","callback","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","outroing","outros","group_outros","r","c","check_outros","transition_in","block","local","delete","transition_out","o","create_component","mount_component","customElement","m","new_on_destroy","map","filter","destroy_component","make_dirty","then","fill","init","instance","create_fragment","not_equal","append_styles","parent_component","bound","on_disconnect","context","Map","skip_bound","root","ready","ret","rest","hydrate","nodes","Array","from","childNodes","children","l","intro","SvelteComponent","$destroy","this","$on","index","indexOf","splice","$set","$$props","obj","$$set","keys","NodeType","isElement","n","nodeType","ELEMENT_NODE","Mirror","idNodeMap","nodeMetaMap","WeakMap","prototype","getId","_a","id","getMeta","getNode","get","getIds","removeNodeFromMap","_this","childNode","hasNode","meta","set","replace","oldNode","reset","createMirror","commentre","parse","css","lineno","column","updatePosition","str","lines","match","lastIndexOf","position","start","line","Position","whitespace","end","source","content","errorsList","error","msg","err","concat","reason","filename","silent","open","close","rules","comments","charAt","atrule","rule","re","exec","comment","pos","selector","trim","split","s","declaration","propMatch","prop","val","property","declarations","decl","decls","keyframe","vals","values","rulesList","atimport","_compileAtrule","atcharset","atnamespace","RegExp","vendor","frame","frames","keyframes","atkeyframes","media","atmedia","atcustommedia","supports","atsupports","doc","atdocument","sel","selectors","atpage","athost","atfontface","addParent","stylesheet","parsingErrors","parent","isNode","childParent","_i","isArray","v","defineProperty","configurable","writable","enumerable","tagMap","script","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","clippath","feblend","fecolormatrix","fecomponenttransfer","fecomposite","feconvolvematrix","fediffuselighting","fedisplacementmap","fedistantlight","fedropshadow","feflood","fefunca","fefuncb","fefuncg","fefuncr","fegaussianblur","feimage","femerge","femergenode","femorphology","feoffset","fepointlight","fespecularlighting","fespotlight","fetile","feturbulence","foreignobject","glyphref","lineargradient","radialgradient","HOVER_SELECTOR","HOVER_SELECTOR_GLOBAL","addHoverClass","cssText","cache","cachedStyle","stylesWithHoverClass","ast","test","selectorMatcher","sort","join","newSelector","createCache","buildNode","hackCss","Document","implementation","createDocument","DocumentType","createDocumentType","publicId","systemId","Element","node_1","tagName","attributes","_cssText","getTagName","isSVG","specialAttributes","name_1","hasOwnProperty","startsWith","isTextarea","isRemoteOrDynamicCss","setAttributeNS","toString","substring","rel","as","href","endsWith","srcset","rr_dataURL","child","TEXT_NODE","_loop_1","name_2","image_1","onload","getContext","drawImage","width","height","RRNodeType","image","currentSrc","currentTime","play","console","warn","pause","isShadowHost","shadowRoot","firstChild","attachShadow","mode","Text","isStyle","textContent","CDATA","createCDATASection","Comment","createComment","buildNodeWithSN","mirror","skipChild","_b","afterAppend","rootId","compatMode","xmlns","write","_c","childN","isShadow","rebuild","onVisit","visit","visitedNode","el","name_3","scrollLeft","scrollTop","handleScroll","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","queueToResolveTrees","queue","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","mutation","nextId","parentId","nextInTree","idx","parentInTree","iterateResolveTree","tree","cb","isSerializedIframe","Boolean","nodeName","getBaseDimension","rootIframe","frameElement","ownerDocument","defaultView","x","y","relativeScale","absoluteScale","frameDimension","getBoundingClientRect","frameBaseDimension","clientHeight","hasShadowRoot","getNestedRule","cssRules","getPositionsAndIndex","nestedIndex","positions","window","Proxy","Reflect","receiver","StyleSheetMirror","constructor","styleIDMap","idStyleMap","newId","undefined","getStyle","generateId","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","CanvasContext","CanvasContext2","ReplayerEvents","ReplayerEvents2","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","step","next","rejected","done","apply","chars","lookup","Uint8Array","charCodeAt","WorkerClass","WorkerThreads","module","require","__non_webpack_require__","Worker","createBase64WorkerFactory","base64","sourcemapArg","enableUnicodeArg","sourcemap","enableUnicode","Buffer","decodeBase64","body","eval","NodeType$1","kIsNodeJS","process","createBase64WorkerFactory$1","url","createBase64WorkerFactory$2","Mirror$1","toCSSText","properties","normalizedName","hyphenate","camelizeRE","CUSTOM_PROPERTY_REGEX","camelize","_","toUpperCase","hyphenateRE","toLowerCase","BaseRRNode","_args","parentElement","lastChild","nextSibling","siblings","contains","_newChild","_refChild","_node","BaseRRDocumentTypeImpl","RRNodeClass","qualifiedName","super","DOCUMENT_TYPE_NODE","BaseRRElementImpl","ClassList","class","newClassName","className","res","propertyDelimiter","item","tmp","parseCSSText","priority","_namespace","newChild","refChild","childIndex","indexOfChild","_init","dispatchEvent","_event","attributeString","BaseRRTextImpl","JSON","stringify","BaseRRCommentImpl","COMMENT_NODE","BaseRRCDATASectionImpl","CDATA_SECTION_NODE","classText","onChange","classes","classNames","String","remove","NAMESPACES","svg","SVGTagMap","diff","oldTree","newTree","replayer","rrnodeMirror","oldChildren","newChildren","diffChildren","inputDataToApply","scrollDataToApply","scrollData","oldElement","newRRElement","oldAttributes","newAttributes","newValue","sn","diffProps","inputData","oldMediaElement","newMediaRRElement","paused","muted","volume","playbackRate","rrCanvasElement","canvasMutations","canvasMutation","applyCanvas","styleSheet","sheet","applyStyleSheetMutation","applyScroll","applyInput","oldContentDocument","contentDocument","newIFrameElement","oldIdToIndex","indexInOld","oldStartIndex","oldEndIndex","newStartIndex","newEndIndex","oldStartNode","oldEndNode","newStartNode","newEndNode","oldStartId","oldEndId","newStartId","newEndId","oldChild","nodeToMove","newNode","createOrGetNode","documentElement","referenceRRNode","referenceNode","rrNode","domMirror","nodeId","RRDocument","BaseRRDocument","arguments","DOCUMENT_NODE","find","head","firstElementChild","some","doctype","_qualifiedName","_doctype","_namespaceURI","CDATASection","BaseRRDocumentImpl","UNSERIALIZED_STARTING_ID","_unserializedId","unserializedId","documentTypeNode","RRDocumentType","upperTagName","RRMediaElement","RRIFrameElement","RRCanvasElement","RRStyleElement","RRElement","commentNode","RRComment","sectionNode","RRCDATASection","textNode","RRText","destroyTree","RRElementClass","BaseRRMediaElementImpl","buildFromNode","rrdom","parentRRNode","documentType","elementNode","HTMLFormElement","getValidTagName","rrElement","DOCUMENT_FRAGMENT_NODE","getDefaultSN","buildFromDom","dom","createMirror$1","walk","iframeDoc","u8","u16","Uint16Array","u32","Uint32Array","fleb","fdeb","clim","freb","eb","j","fl","revfl","fd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flrm","fdrm","max","bits","bits16","slc","subarray","unzlibSync","out","dat","buf","st","sl","noBuf","noSt","cbuf","bl","nbuf","Math","final","f","bt","lm","dm","lbt","dbt","tbts","t","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","mxa","sym","dsym","inflt","zlv","unpack","raw","timestamp","latin1","TextDecoder","decode","fromCharCode","strFromU8","TextEncoder","encode","ar","ai","w","strToU8","mitt","all","on","off","emit","polyfill","__forceSmoothScrollPolyfill__","HTMLElement","original","scroll","scrollTo","scrollBy","elementScroll","scrollElement","scrollIntoView","now","performance","bind","Date","ROUNDING_TOLERANCE","userAgent","navigator","shouldBailOut","firstArg","behavior","TypeError","hasScrollableSpace","axis","scrollHeight","clientWidth","scrollWidth","canOverflow","overflowValue","getComputedStyle","isScrollable","isScrollableY","isScrollableX","findScrollableParent","host","currentX","currentY","elapsed","startTime","cos","PI","startX","startY","method","scrollable","requestAnimationFrame","smoothScroll","scrollX","pageXOffset","scrollY","pageYOffset","left","top","SyntaxError","scrollableParent","parentRects","clientRects","Timer","actions","config","timeOffset","raf","speed","liveMode","addAction","action","delay","findActionIndex","lastTimestamp","check","time","shift","doAction","cancelAnimationFrame","setSpeed","toggleLiveMode","isActive","mid","floor","addDelay","baselineTime","IncrementalSnapshot","MouseMove","firstOffset","firstTimestamp","Symbol","iterator","return","NotStarted","Running","Stopped","assignment","u","changed","matches","states","initial","entry","_options","initialState","transition","g","h","S","E","R","N","cond","O","T","q","exit","z","A","B","C","_machine","send","subscribe","unsubscribe","stop","state","status","createPlayerService","getCastFn","applyEventsSynchronously","emitter","playerMachine","playing","PAUSE","CAST_EVENT","END","ADD_EVENT","PLAY","TO_LIVE","live","castEvent","lastPlayedEvent","payload","recordTimeOffset","events","timer","neededEvents","Meta","discardPriorSnapshots","lastPlayedTimestamp","PlayBack","syncEvents","castFn","Flush","resetLastPlayedEvent","startLive","addEvent","machineEvent","insertionIndex","isSync","webGLVarMap","variableListFor","ctor","contextMap","deserializeArg","imageMap","preload","arg","isUnchanged","rr_type","args","createImageBitmap","encoded1","encoded2","encoded3","encoded4","bufferLength","len","arraybuffer","ArrayBuffer","bytes","Image","blobContents","Blob","WebGLVariableConstructorsNames","webglMutation","errorHandler","WebGL","setter","includes","variables","saveToWebGLVarMap","canvasEventMap","precomputedMutation","commands","WebGL2","command","canvasMutation$1","mitt$2","mitt$1","defaultMouseTailConfig","duration","lineCap","lineWidth","strokeStyle","indicatesTouchDevice","TouchMove","MouseInteraction","TouchStart","Replayer","usingVirtualDom","virtualDom","mouseTail","tailPositions","legacy_missingNodeRetryMap","styleMirror","firstFullSnapshot","newDocumentQueue","mousePos","touchActive","lastSelectionData","constructedStyleMutations","adoptedStyleSheets","handleResize","dimension","iframe","display","DomContentLoaded","Load","Custom","FullSnapshot","Plugin","mouse","CustomEvent","Resize","rebuildFullSnapshot","contentWindow","initialOffset","applyIncremental","nextUserInteractionEvent","backToNormal","skipInactive","service","isUserInteraction","speedService","skipTime","min","round","maxSpeed","SkipStart","plugin","plugins","last_index","finish","Finish","setTimeout","EventCast","defaultConfig","loadTimeout","showWarning","showDebug","blockClass","insertStyleRules","triggerFocus","UNSAFE_replayCanvas","pauseAnimation","useVirtualDom","setupDom","getMirror","nodeMirror","replayerHandler","canvasEvent","canvasMutationData","warnCanvasMutationFailed","StyleSheetRule","applyStyleSheetRule","StyleDeclaration","applyStyleDeclaration","realNode","applyAdoptedStyleSheet","moveAndHover","debugData","applySelection","unpackFn","a1","a2","StateChange","player","normalSpeed","normal","FAST_FORWARD","SET_SPEED","skipping","BACK_TO_NORMAL","recordSpeed","restoreSpeed","firstMeta","firstFullsnapshot","setConfig","Number","parseFloat","wrapper","getMetaData","firstEvent","lastEvent","endTime","totalTime","getCurrentTime","getTimeOffset","getElementsByTagName","Start","Pause","resume","Resume","destroy","Destroy","rawEvent","enableInteract","pointerEvents","disableInteract","resetCache","win","NodeList","DOMTokenList","Node","polyfill$1","collected","builtNode","collectIframeAndAttachDocument","onBuild","mutationInQueue","attachDocumentToIframe","FullsnapshotRebuilded","waitForStylesheetLoad","preloadAllImages","injectStylesRules","styleEl","adds","insertRule","iframeEl","unloadSheets","beforeLoadState","stateHandler","querySelectorAll","size","LoadStylesheetEnd","clearTimeout","LoadStylesheetStart","promises","CanvasMutation","deserializeAndPreloadCanvasEvents","preloadImages","canvas","imgd","createImageData","putImageData","Mutation","applyMutation","message","Drag","lastPosition","Event","debugNodeNotFound","Blur","blur","Focus","focus","preventScroll","Click","TouchEnd","offsetWidth","TouchCancel","Scroll","ViewportResize","Input","MediaInteraction","mediaEl","styleId","Font","fontFace","FontFace","family","buffer","fontSource","descriptors","fonts","Selection","AdoptedStyleSheet","virtualNode","removes","warnNodeNotFound","DOMException","legacy_missingNodeMap","appendNode","previous","previousId","nextNotInDOM","targetDoc","parentSn","childNodeArray","targetId","legacy_resolveMissingNode","resolveTrees","debug","mutations","idSet","uniqueMutations","uniqueTextMutations","texts","attributeName","newSn","siblingNode","styleValues","targetEl","svp","svs","checked","isChecked","selectionSet","ranges","startOffset","endOffset","startContainer","endContainer","Range","setStart","setEnd","selection","getSelection","range","removeAllRanges","addRange","_d","deleteRule","replaceSync","targetHost","styles","newStyleSheet","hostWindow","CSSStyleSheet","count","adoptStyleSheets","styleIds","stylesToAdopt","targetMutation","previousInMap","nextInMap","base","_x","_y","drawMouseTail","hoverElements","draw","clearRect","beginPath","moveTo","lineTo","stroke","hoveredEl","currentEl","SkipEnd","log","inlineCss","cssObj","padZero","num","threshold","pow","formatTime","ms","hour","minute","second","isFullscreen","fullscreen","fullScreenAccessor","typeOf","div","input","label_1","span","disabled","label","t0_value","create_if_block_1","div2","div5","div3","span0","div0","div1","span1","div4","button0","button1","current","t0","t6","t6_value","switch_1_changes","div_title_value","background","path","button","button_disabled_value","create_if_block","tagTime","toFixed","dispatch","playerState","speedState","progress","finished","onPauseHook","percentage","customEvents","inactivePeriods","showController","autoPlay","speedOption","tags","inactiveColor","pauseAt","loop","stopTimer","goto","$$invalidate","playRange","endTimeOffset","startLooping","afterHook","newSpeed","needFreeze","percent","totalEvents","customEvent","tag","periods","lastActiveTime","getInactivePeriods","getWidth","tagStart","tagEnd","period","progressRect","clientX","$$value","maxScale","fullscreenListener","controller","playerStyle","_width","_height","updateScale","scale","transform","toggleFullscreen","exitFullscreen","mozExitFullscreen","webkitExitFullscreen","msExitFullscreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","offsetHeight","triggerUpdateMeta","toggleSkipInactive","Player","_Player"],"mappings":"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"}