{"version":3,"file":"index.mjs","sources":["../node_modules/svelte/internal/index.mjs","../node_modules/wr-rrweb/es/rrweb/src/types.js","../node_modules/wr-rrweb/es/rrweb/ext/tslib/tslib.es6.js","../node_modules/wr-rrweb/es/rrweb/ext/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/wr-rrweb/es/rrweb/src/utils.js","../node_modules/wr-rrweb/es/rrweb/ext/mitt/dist/mitt.es.js","../node_modules/wr-rrweb/es/rrweb/src/replay/smoothscroll.js","../node_modules/wr-rrweb/es/rrweb/src/replay/timer.js","../node_modules/wr-rrweb/es/rrweb/ext/@xstate/fsm/es/index.js","../node_modules/wr-rrweb/es/rrweb/src/replay/machine.js","../node_modules/wr-rrweb/es/rrweb/src/replay/styles/inject-style.js","../node_modules/wr-rrweb/es/rrweb/src/replay/virtual-styles.js","../node_modules/wr-rrweb/es/rrweb/src/replay/index.js","../node_modules/wr-rrweb/es/rrweb/ext/fflate/esm/browser.js","../node_modules/wr-rrweb/es/rrweb/src/packer/base.js","../node_modules/wr-rrweb/es/rrweb/src/packer/unpack.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}\nfunction not_equal(a, b) {\n    return a != a ? b == b : a !== b;\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(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    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 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 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 = ret) {\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\nfunction append(target, node) {\n    target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n    target.insertBefore(node, anchor || null);\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 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] = 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 === '' ? undefined : +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 claim_element(nodes, name, attributes, svg) {\n    for (let i = 0; i < nodes.length; i += 1) {\n        const node = nodes[i];\n        if (node.nodeName === name) {\n            let j = 0;\n            const remove = [];\n            while (j < node.attributes.length) {\n                const attribute = node.attributes[j++];\n                if (!attributes[attribute.name]) {\n                    remove.push(attribute.name);\n                }\n            }\n            for (let k = 0; k < remove.length; k++) {\n                node.removeAttribute(remove[k]);\n            }\n            return nodes.splice(i, 1)[0];\n        }\n    }\n    return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n    for (let i = 0; i < nodes.length; i += 1) {\n        const node = nodes[i];\n        if (node.nodeType === 3) {\n            node.data = '' + data;\n            return nodes.splice(i, 1)[0];\n        }\n    }\n    return text(data);\n}\nfunction claim_space(nodes) {\n    return claim_text(nodes, ' ');\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    node.style.setProperty(key, value, important ? 'important' : '');\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}\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    const z_index = (parseInt(computed_style.zIndex) || 0) - 1;\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: ${z_index};`);\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) {\n    const e = document.createEvent('CustomEvent');\n    e.initCustomEvent(type, false, false, 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(anchor = null) {\n        this.a = anchor;\n        this.e = this.n = null;\n    }\n    m(html, target, anchor = null) {\n        if (!this.e) {\n            this.e = element(target.nodeName);\n            this.t = target;\n            this.h(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}\n\nconst active_docs = new Set();\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_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 = node.ownerDocument;\n    active_docs.add(doc);\n    const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n    const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n    if (!current_rules[name]) {\n        current_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        active_docs.forEach(doc => {\n            const stylesheet = doc.__svelte_stylesheet;\n            let i = stylesheet.cssRules.length;\n            while (i--)\n                stylesheet.deleteRule(i);\n            doc.__svelte_rules = {};\n        });\n        active_docs.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) => {\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);\n            callbacks.slice().forEach(fn => {\n                fn.call(component, event);\n            });\n        }\n    };\n}\nfunction setContext(key, context) {\n    get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n    return get_current_component().$$.context.get(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        callbacks.slice().forEach(fn => fn(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}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n    if (flushing)\n        return;\n    flushing = true;\n    do {\n        // first, call beforeUpdate functions\n        // and update components\n        for (let i = 0; i < dirty_components.length; i += 1) {\n            const component = dirty_components[i];\n            set_current_component(component);\n            update(component.$$);\n        }\n        dirty_components.length = 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    flushing = false;\n    seen_callbacks.clear();\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}\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            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) {\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                            info.blocks[i] = null;\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        });\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}\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 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, classes_to_add) {\n    const attributes = Object.assign({}, ...args);\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    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}=\"${String(value).replace(/\"/g, '&#34;').replace(/'/g, '&#39;')}\"`;\n        }\n    });\n    return str;\n}\nconst escaped = {\n    '\"': '&quot;',\n    \"'\": '&#39;',\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;'\n};\nfunction escape(html) {\n    return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\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) {\n        const parent_component = current_component;\n        const $$ = {\n            on_destroy,\n            context: new Map(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 = {}, options = {}) => {\n            on_destroy = [];\n            const result = { title: '', head: '', css: new Set() };\n            const html = $$render(result, props, {}, options);\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    return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n    return classes ? ` class=\"${classes}\"` : ``;\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) {\n    const { fragment, on_mount, on_destroy, after_update } = component.$$;\n    fragment && fragment.m(target, anchor);\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    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, dirty = [-1]) {\n    const parent_component = current_component;\n    set_current_component(component);\n    const prop_values = options.props || {};\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        before_update: [],\n        after_update: [],\n        context: new Map(parent_component ? parent_component.$$.context : []),\n        // everything else\n        callbacks: blank_object(),\n        dirty\n    };\n    let ready = false;\n    $$.ctx = instance\n        ? instance(component, prop_values, (i, ret, ...rest) => {\n            const value = rest.length ? rest[0] : ret;\n            if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n                if ($$.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            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);\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            // @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        $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() {\n            // overridden by instance, if it has props\n        }\n    };\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() {\n        // overridden by instance, if it has props\n    }\n}\n\nfunction dispatch_dev(type, detail) {\n    document.dispatchEvent(custom_event(type, Object.assign({ version: '3.24.0' }, detail)));\n}\nfunction append_dev(target, node) {\n    dispatch_dev(\"SvelteDOMInsert\", { target, node });\n    append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n    dispatch_dev(\"SvelteDOMInsert\", { target, node, anchor });\n    insert(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}\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}\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, SvelteComponent, SvelteComponentDev, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, 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, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_function, is_promise, listen, listen_dev, loop, loop_guard, 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, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","var EventType;\r\n(function (EventType) {\r\n    EventType[EventType[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\r\n    EventType[EventType[\"Load\"] = 1] = \"Load\";\r\n    EventType[EventType[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\r\n    EventType[EventType[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\r\n    EventType[EventType[\"Meta\"] = 4] = \"Meta\";\r\n    EventType[EventType[\"Custom\"] = 5] = \"Custom\";\r\n    EventType[EventType[\"Plugin\"] = 6] = \"Plugin\";\r\n})(EventType || (EventType = {}));\r\nvar IncrementalSource;\r\n(function (IncrementalSource) {\r\n    IncrementalSource[IncrementalSource[\"Mutation\"] = 0] = \"Mutation\";\r\n    IncrementalSource[IncrementalSource[\"MouseMove\"] = 1] = \"MouseMove\";\r\n    IncrementalSource[IncrementalSource[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\r\n    IncrementalSource[IncrementalSource[\"Scroll\"] = 3] = \"Scroll\";\r\n    IncrementalSource[IncrementalSource[\"ViewportResize\"] = 4] = \"ViewportResize\";\r\n    IncrementalSource[IncrementalSource[\"Input\"] = 5] = \"Input\";\r\n    IncrementalSource[IncrementalSource[\"TouchMove\"] = 6] = \"TouchMove\";\r\n    IncrementalSource[IncrementalSource[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\r\n    IncrementalSource[IncrementalSource[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\r\n    IncrementalSource[IncrementalSource[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\r\n    IncrementalSource[IncrementalSource[\"Font\"] = 10] = \"Font\";\r\n    IncrementalSource[IncrementalSource[\"Log\"] = 11] = \"Log\";\r\n    IncrementalSource[IncrementalSource[\"Drag\"] = 12] = \"Drag\";\r\n})(IncrementalSource || (IncrementalSource = {}));\r\nvar MouseInteractions;\r\n(function (MouseInteractions) {\r\n    MouseInteractions[MouseInteractions[\"MouseUp\"] = 0] = \"MouseUp\";\r\n    MouseInteractions[MouseInteractions[\"MouseDown\"] = 1] = \"MouseDown\";\r\n    MouseInteractions[MouseInteractions[\"Click\"] = 2] = \"Click\";\r\n    MouseInteractions[MouseInteractions[\"ContextMenu\"] = 3] = \"ContextMenu\";\r\n    MouseInteractions[MouseInteractions[\"DblClick\"] = 4] = \"DblClick\";\r\n    MouseInteractions[MouseInteractions[\"Focus\"] = 5] = \"Focus\";\r\n    MouseInteractions[MouseInteractions[\"Blur\"] = 6] = \"Blur\";\r\n    MouseInteractions[MouseInteractions[\"TouchStart\"] = 7] = \"TouchStart\";\r\n    MouseInteractions[MouseInteractions[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\r\n    MouseInteractions[MouseInteractions[\"TouchEnd\"] = 9] = \"TouchEnd\";\r\n})(MouseInteractions || (MouseInteractions = {}));\r\nvar MediaInteractions;\r\n(function (MediaInteractions) {\r\n    MediaInteractions[MediaInteractions[\"Play\"] = 0] = \"Play\";\r\n    MediaInteractions[MediaInteractions[\"Pause\"] = 1] = \"Pause\";\r\n    MediaInteractions[MediaInteractions[\"Seeked\"] = 2] = \"Seeked\";\r\n})(MediaInteractions || (MediaInteractions = {}));\r\nvar ReplayerEvents;\r\n(function (ReplayerEvents) {\r\n    ReplayerEvents[\"Start\"] = \"start\";\r\n    ReplayerEvents[\"Pause\"] = \"pause\";\r\n    ReplayerEvents[\"Resume\"] = \"resume\";\r\n    ReplayerEvents[\"Resize\"] = \"resize\";\r\n    ReplayerEvents[\"Finish\"] = \"finish\";\r\n    ReplayerEvents[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\r\n    ReplayerEvents[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\r\n    ReplayerEvents[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\r\n    ReplayerEvents[\"SkipStart\"] = \"skip-start\";\r\n    ReplayerEvents[\"SkipEnd\"] = \"skip-end\";\r\n    ReplayerEvents[\"MouseInteraction\"] = \"mouse-interaction\";\r\n    ReplayerEvents[\"EventCast\"] = \"event-cast\";\r\n    ReplayerEvents[\"CustomEvent\"] = \"custom-event\";\r\n    ReplayerEvents[\"Flush\"] = \"flush\";\r\n    ReplayerEvents[\"StateChange\"] = \"state-change\";\r\n    ReplayerEvents[\"PlayBack\"] = \"play-back\";\r\n})(ReplayerEvents || (ReplayerEvents = {}));\n\nexport { EventType, IncrementalSource, MediaInteractions, 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\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nfunction __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\n\nexport { __assign, __read, __spread, __values };\n","var NodeType;\n(function (NodeType) {\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\n    return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n    var _a;\n    var host = (_a = n) === null || _a === void 0 ? void 0 : _a.host;\n    return Boolean(host && host.shadowRoot && host.shadowRoot === n);\n}\nfunction maskInputValue(_a) {\n    var maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\n    var text = value || '';\n    if (maskInputOptions[tagName.toLowerCase()] ||\n        maskInputOptions[type]) {\n        if (maskInputFn) {\n            text = maskInputFn(text);\n        }\n        else {\n            text = '*'.repeat(text.length);\n        }\n    }\n    return text;\n}\n\nvar _id = 1;\nvar tagNameRegex = RegExp('[^a-z0-9-_:]');\nvar IGNORED_NODE = -2;\nfunction genId() {\n    return _id++;\n}\nfunction getValidTagName(element) {\n    if (element instanceof HTMLFormElement) {\n        return 'form';\n    }\n    var processedTagName = element.tagName.toLowerCase().trim();\n    if (tagNameRegex.test(processedTagName)) {\n        return 'div';\n    }\n    return processedTagName;\n}\nfunction getCssRulesString(s) {\n    try {\n        var rules = s.rules || s.cssRules;\n        return rules ? Array.from(rules).map(getCssRuleString).join('') : null;\n    }\n    catch (error) {\n        return null;\n    }\n}\nfunction getCssRuleString(rule) {\n    return isCSSImportRule(rule)\n        ? getCssRulesString(rule.styleSheet) || ''\n        : rule.cssText;\n}\nfunction isCSSImportRule(rule) {\n    return 'styleSheet' in rule;\n}\nfunction extractOrigin(url) {\n    var origin;\n    if (url.indexOf('//') > -1) {\n        origin = url.split('/').slice(0, 3).join('/');\n    }\n    else {\n        origin = url.split('/')[0];\n    }\n    origin = origin.split('?')[0];\n    return origin;\n}\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nvar RELATIVE_PATH = /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/|#).*/;\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n    return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\n        var filePath = path1 || path2 || path3;\n        var maybeQuote = quote1 || quote2 || '';\n        if (!filePath) {\n            return origin;\n        }\n        if (!RELATIVE_PATH.test(filePath)) {\n            return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n        }\n        if (DATA_URI.test(filePath)) {\n            return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n        }\n        if (filePath[0] === '/') {\n            return \"url(\" + maybeQuote + (extractOrigin(href) + filePath) + maybeQuote + \")\";\n        }\n        var stack = href.split('/');\n        var parts = filePath.split('/');\n        stack.pop();\n        for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\n            var part = parts_1[_i];\n            if (part === '.') {\n                continue;\n            }\n            else if (part === '..') {\n                stack.pop();\n            }\n            else {\n                stack.push(part);\n            }\n        }\n        return \"url(\" + maybeQuote + stack.join('/') + maybeQuote + \")\";\n    });\n}\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n    if (attributeValue.trim() === '') {\n        return attributeValue;\n    }\n    var pos = 0;\n    function collectCharacters(regEx) {\n        var chars, match = regEx.exec(attributeValue.substring(pos));\n        if (match) {\n            chars = match[0];\n            pos += chars.length;\n            return chars;\n        }\n        return '';\n    }\n    var output = [];\n    while (true) {\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\n        if (pos >= attributeValue.length) {\n            break;\n        }\n        var url = collectCharacters(SRCSET_NOT_SPACES);\n        if (url.slice(-1) === ',') {\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n            output.push(url);\n        }\n        else {\n            var descriptorsStr = '';\n            url = absoluteToDoc(doc, url);\n            var inParens = false;\n            while (true) {\n                var c = attributeValue.charAt(pos);\n                if (c === '') {\n                    output.push((url + descriptorsStr).trim());\n                    break;\n                }\n                else if (!inParens) {\n                    if (c === ',') {\n                        pos += 1;\n                        output.push((url + descriptorsStr).trim());\n                        break;\n                    }\n                    else if (c === '(') {\n                        inParens = true;\n                    }\n                }\n                else {\n                    if (c === ')') {\n                        inParens = false;\n                    }\n                }\n                descriptorsStr += c;\n                pos += 1;\n            }\n        }\n    }\n    return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n    if (!attributeValue || attributeValue.trim() === '') {\n        return attributeValue;\n    }\n    var a = doc.createElement('a');\n    a.href = attributeValue;\n    return a.href;\n}\nfunction isSVGElement(el) {\n    return el.tagName === 'svg' || el instanceof SVGElement;\n}\nfunction getHref() {\n    var a = document.createElement('a');\n    a.href = '';\n    return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n    if (name === 'src' || ((name === 'href' || name === 'xlink:href') && value)) {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'background' &&\n        value &&\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'srcset' && value) {\n        return getAbsoluteSrcsetString(doc, value);\n    }\n    else if (name === 'style' && value) {\n        return absoluteToStylesheet(value, getHref());\n    }\n    else {\n        return value;\n    }\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n    if (typeof blockClass === 'string') {\n        if (element.classList.contains(blockClass)) {\n            return true;\n        }\n    }\n    else {\n        for (var eIndex = 0; eIndex < element.classList.length; eIndex++) {\n            var className = element.classList[eIndex];\n            if (blockClass.test(className)) {\n                return true;\n            }\n        }\n    }\n    if (blockSelector) {\n        return element.matches(blockSelector);\n    }\n    return false;\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\n    if (!node) {\n        return false;\n    }\n    if (node.nodeType === node.ELEMENT_NODE) {\n        if (typeof maskTextClass === 'string') {\n            if (node.classList.contains(maskTextClass)) {\n                return true;\n            }\n        }\n        else {\n            node.classList.forEach(function (className) {\n                if (maskTextClass.test(className)) {\n                    return true;\n                }\n            });\n        }\n        if (maskTextSelector) {\n            if (node.matches(maskTextSelector)) {\n                return true;\n            }\n        }\n        return needMaskingText(node.parentNode, maskTextClass, maskTextSelector);\n    }\n    if (node.nodeType === node.TEXT_NODE) {\n        return needMaskingText(node.parentNode, maskTextClass, maskTextSelector);\n    }\n    return needMaskingText(node.parentNode, maskTextClass, maskTextSelector);\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n    var win = iframeEl.contentWindow;\n    if (!win) {\n        return;\n    }\n    var fired = false;\n    var readyState;\n    try {\n        readyState = win.document.readyState;\n    }\n    catch (error) {\n        return;\n    }\n    if (readyState !== 'complete') {\n        var timer_1 = setTimeout(function () {\n            if (!fired) {\n                listener();\n                fired = true;\n            }\n        }, iframeLoadTimeout);\n        iframeEl.addEventListener('load', function () {\n            clearTimeout(timer_1);\n            fired = true;\n            listener();\n        });\n        return;\n    }\n    var blankUrl = 'about:blank';\n    if (win.location.href !== blankUrl ||\n        iframeEl.src === blankUrl ||\n        iframeEl.src === '') {\n        setTimeout(listener, 0);\n        return;\n    }\n    iframeEl.addEventListener('load', listener);\n}\nfunction serializeNode(n, options) {\n    var doc = options.doc, 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, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn;\n    var rootId;\n    if (doc.__sn) {\n        var docId = doc.__sn.id;\n        rootId = docId === 1 ? undefined : docId;\n    }\n    switch (n.nodeType) {\n        case n.DOCUMENT_NODE:\n            return {\n                type: NodeType.Document,\n                childNodes: [],\n                rootId: rootId,\n            };\n        case n.DOCUMENT_TYPE_NODE:\n            return {\n                type: NodeType.DocumentType,\n                name: n.name,\n                publicId: n.publicId,\n                systemId: n.systemId,\n                rootId: rootId,\n            };\n        case n.ELEMENT_NODE:\n            var needBlock = _isBlockedElement(n, blockClass, blockSelector);\n            var tagName = getValidTagName(n);\n            var attributes_1 = {};\n            for (var _i = 0, _b = Array.from(n.attributes); _i < _b.length; _i++) {\n                var _c = _b[_i], name = _c.name, value = _c.value;\n                attributes_1[name] = transformAttribute(doc, tagName, name, value);\n            }\n            if (tagName === 'link' && inlineStylesheet) {\n                var stylesheet = Array.from(doc.styleSheets).find(function (s) {\n                    return s.href === n.href;\n                });\n                var cssText = getCssRulesString(stylesheet);\n                if (cssText) {\n                    delete attributes_1.rel;\n                    delete attributes_1.href;\n                    attributes_1._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n                }\n            }\n            if (tagName === 'style' &&\n                n.sheet &&\n                !(n.innerText ||\n                    n.textContent ||\n                    '').trim().length) {\n                var cssText = getCssRulesString(n.sheet);\n                if (cssText) {\n                    attributes_1._cssText = absoluteToStylesheet(cssText, getHref());\n                }\n            }\n            if (tagName === 'input' ||\n                tagName === 'textarea' ||\n                tagName === 'select') {\n                var value = n.value;\n                if (attributes_1.type !== 'radio' &&\n                    attributes_1.type !== 'checkbox' &&\n                    attributes_1.type !== 'submit' &&\n                    attributes_1.type !== 'button' &&\n                    value) {\n                    attributes_1.value = maskInputValue({\n                        type: attributes_1.type,\n                        tagName: tagName,\n                        value: value,\n                        maskInputOptions: maskInputOptions,\n                        maskInputFn: maskInputFn,\n                    });\n                }\n                else if (n.checked) {\n                    attributes_1.checked = n.checked;\n                }\n            }\n            if (tagName === 'option') {\n                var selectValue = n.parentElement;\n                if (attributes_1.value === selectValue.value) {\n                    attributes_1.selected = n.selected;\n                }\n            }\n            if (tagName === 'canvas' && recordCanvas) {\n                attributes_1.rr_dataURL = n.toDataURL();\n            }\n            if (tagName === 'audio' || tagName === 'video') {\n                attributes_1.rr_mediaState = n.paused\n                    ? 'paused'\n                    : 'played';\n                attributes_1.rr_mediaCurrentTime = n.currentTime;\n            }\n            if (n.scrollLeft) {\n                attributes_1.rr_scrollLeft = n.scrollLeft;\n            }\n            if (n.scrollTop) {\n                attributes_1.rr_scrollTop = n.scrollTop;\n            }\n            if (needBlock) {\n                var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;\n                attributes_1 = {\n                    class: attributes_1.class,\n                    rr_width: width + \"px\",\n                    rr_height: height + \"px\",\n                };\n            }\n            if (tagName === 'iframe' && !keepIframeSrcFn(attributes_1.src)) {\n                delete attributes_1.src;\n            }\n            return {\n                type: NodeType.Element,\n                tagName: tagName,\n                attributes: attributes_1,\n                childNodes: [],\n                isSVG: isSVGElement(n) || undefined,\n                needBlock: needBlock,\n                rootId: rootId,\n            };\n        case n.TEXT_NODE:\n            var parentTagName = n.parentNode && n.parentNode.tagName;\n            var textContent = n.textContent;\n            var isStyle = parentTagName === 'STYLE' ? true : undefined;\n            var isScript = parentTagName === 'SCRIPT' ? true : undefined;\n            if (isStyle && textContent) {\n                textContent = absoluteToStylesheet(textContent, getHref());\n            }\n            if (isScript) {\n                textContent = 'SCRIPT_PLACEHOLDER';\n            }\n            if (!isStyle &&\n                !isScript &&\n                needMaskingText(n, maskTextClass, maskTextSelector) &&\n                textContent) {\n                textContent = maskTextFn\n                    ? maskTextFn(textContent)\n                    : textContent.replace(/[\\S]/g, '*');\n            }\n            return {\n                type: NodeType.Text,\n                textContent: textContent || '',\n                isStyle: isStyle,\n                rootId: rootId,\n            };\n        case n.CDATA_SECTION_NODE:\n            return {\n                type: NodeType.CDATA,\n                textContent: '',\n                rootId: rootId,\n            };\n        case n.COMMENT_NODE:\n            return {\n                type: NodeType.Comment,\n                textContent: n.textContent || '',\n                rootId: rootId,\n            };\n        default:\n            return false;\n    }\n}\nfunction lowerIfExists(maybeAttr) {\n    if (maybeAttr === undefined) {\n        return '';\n    }\n    else {\n        return maybeAttr.toLowerCase();\n    }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\n        return true;\n    }\n    else if (sn.type === NodeType.Element) {\n        if (slimDOMOptions.script &&\n            (sn.tagName === 'script' ||\n                (sn.tagName === 'link' &&\n                    sn.attributes.rel === 'preload' &&\n                    sn.attributes.as === 'script') ||\n                (sn.tagName === 'link' &&\n                    sn.attributes.rel === 'prefetch' &&\n                    typeof sn.attributes.href === 'string' &&\n                    sn.attributes.href.endsWith('.js')))) {\n            return true;\n        }\n        else if (slimDOMOptions.headFavicon &&\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n                (sn.tagName === 'meta' &&\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n            return true;\n        }\n        else if (sn.tagName === 'meta') {\n            if (slimDOMOptions.headMetaDescKeywords &&\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaSocial &&\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaRobots &&\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaHttpEquiv &&\n                sn.attributes['http-equiv'] !== undefined) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaAuthorship &&\n                (lowerIfExists(sn.attributes.name) === 'author' ||\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaVerification &&\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nfunction serializeNodeWithId(n, options) {\n    var doc = options.doc, map = options.map, 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.recordCanvas, recordCanvas = _d === void 0 ? false : _d, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _e = options.iframeLoadTimeout, iframeLoadTimeout = _e === void 0 ? 5000 : _e, _f = options.keepIframeSrcFn, keepIframeSrcFn = _f === void 0 ? function () { return false; } : _f;\n    var _g = options.preserveWhiteSpace, preserveWhiteSpace = _g === void 0 ? true : _g;\n    var _serializedNode = serializeNode(n, {\n        doc: doc,\n        blockClass: blockClass,\n        blockSelector: blockSelector,\n        maskTextClass: maskTextClass,\n        maskTextSelector: maskTextSelector,\n        inlineStylesheet: inlineStylesheet,\n        maskInputOptions: maskInputOptions,\n        maskTextFn: maskTextFn,\n        maskInputFn: maskInputFn,\n        recordCanvas: recordCanvas,\n        keepIframeSrcFn: keepIframeSrcFn,\n    });\n    if (!_serializedNode) {\n        console.warn(n, 'not serialized');\n        return null;\n    }\n    var id;\n    if ('__sn' in n) {\n        id = n.__sn.id;\n    }\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n        (!preserveWhiteSpace &&\n            _serializedNode.type === NodeType.Text &&\n            !_serializedNode.isStyle &&\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n        id = IGNORED_NODE;\n    }\n    else {\n        id = genId();\n    }\n    var serializedNode = Object.assign(_serializedNode, { id: id });\n    n.__sn = serializedNode;\n    if (id === IGNORED_NODE) {\n        return null;\n    }\n    map[id] = n;\n    if (onSerialize) {\n        onSerialize(n);\n    }\n    var recordChild = !skipChild;\n    if (serializedNode.type === NodeType.Element) {\n        recordChild = recordChild && !serializedNode.needBlock;\n        delete serializedNode.needBlock;\n    }\n    if ((serializedNode.type === NodeType.Document ||\n        serializedNode.type === NodeType.Element) &&\n        recordChild) {\n        if (slimDOMOptions.headWhitespace &&\n            _serializedNode.type === NodeType.Element &&\n            _serializedNode.tagName === 'head') {\n            preserveWhiteSpace = false;\n        }\n        var bypassOptions = {\n            doc: doc,\n            map: map,\n            blockClass: blockClass,\n            blockSelector: blockSelector,\n            maskTextClass: maskTextClass,\n            maskTextSelector: maskTextSelector,\n            skipChild: skipChild,\n            inlineStylesheet: inlineStylesheet,\n            maskInputOptions: maskInputOptions,\n            maskTextFn: maskTextFn,\n            maskInputFn: maskInputFn,\n            slimDOMOptions: slimDOMOptions,\n            recordCanvas: recordCanvas,\n            preserveWhiteSpace: preserveWhiteSpace,\n            onSerialize: onSerialize,\n            onIframeLoad: onIframeLoad,\n            iframeLoadTimeout: iframeLoadTimeout,\n            keepIframeSrcFn: keepIframeSrcFn,\n        };\n        for (var _i = 0, _h = Array.from(n.childNodes); _i < _h.length; _i++) {\n            var childN = _h[_i];\n            var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n            if (serializedChildNode) {\n                serializedNode.childNodes.push(serializedChildNode);\n            }\n        }\n        if (isElement(n) && n.shadowRoot) {\n            serializedNode.isShadowHost = true;\n            for (var _j = 0, _k = Array.from(n.shadowRoot.childNodes); _j < _k.length; _j++) {\n                var childN = _k[_j];\n                var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n                if (serializedChildNode) {\n                    serializedChildNode.isShadow = true;\n                    serializedNode.childNodes.push(serializedChildNode);\n                }\n            }\n        }\n    }\n    if (n.parentNode && isShadowRoot(n.parentNode)) {\n        serializedNode.isShadow = true;\n    }\n    if (serializedNode.type === NodeType.Element &&\n        serializedNode.tagName === 'iframe') {\n        onceIframeLoaded(n, function () {\n            var iframeDoc = n.contentDocument;\n            if (iframeDoc && onIframeLoad) {\n                var serializedIframeNode = serializeNodeWithId(iframeDoc, {\n                    doc: iframeDoc,\n                    map: map,\n                    blockClass: blockClass,\n                    blockSelector: blockSelector,\n                    maskTextClass: maskTextClass,\n                    maskTextSelector: maskTextSelector,\n                    skipChild: false,\n                    inlineStylesheet: inlineStylesheet,\n                    maskInputOptions: maskInputOptions,\n                    maskTextFn: maskTextFn,\n                    maskInputFn: maskInputFn,\n                    slimDOMOptions: slimDOMOptions,\n                    recordCanvas: recordCanvas,\n                    preserveWhiteSpace: preserveWhiteSpace,\n                    onSerialize: onSerialize,\n                    onIframeLoad: onIframeLoad,\n                    iframeLoadTimeout: iframeLoadTimeout,\n                    keepIframeSrcFn: keepIframeSrcFn,\n                });\n                if (serializedIframeNode) {\n                    onIframeLoad(n, serializedIframeNode);\n                }\n            }\n        }, iframeLoadTimeout);\n    }\n    return serializedNode;\n}\nfunction snapshot(n, options) {\n    var _a = options || {}, _b = _a.blockClass, blockClass = _b === void 0 ? 'rr-block' : _b, _c = _a.blockSelector, blockSelector = _c === void 0 ? null : _c, _d = _a.maskTextClass, maskTextClass = _d === void 0 ? 'rr-mask' : _d, _e = _a.maskTextSelector, maskTextSelector = _e === void 0 ? null : _e, _f = _a.inlineStylesheet, inlineStylesheet = _f === void 0 ? true : _f, _g = _a.recordCanvas, recordCanvas = _g === void 0 ? false : _g, _h = _a.maskAllInputs, maskAllInputs = _h === void 0 ? false : _h, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _j = _a.slimDOM, slimDOM = _j === void 0 ? false : _j, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, _k = _a.keepIframeSrcFn, keepIframeSrcFn = _k === void 0 ? function () { return false; } : _k;\n    var idNodeMap = {};\n    var maskInputOptions = maskAllInputs === true\n        ? {\n            color: true,\n            date: true,\n            'datetime-local': true,\n            email: true,\n            month: true,\n            number: true,\n            range: true,\n            search: true,\n            tel: true,\n            text: true,\n            time: true,\n            url: true,\n            week: true,\n            textarea: true,\n            select: true,\n            password: true,\n        }\n        : maskAllInputs === false\n            ? {\n                password: true,\n            }\n            : maskAllInputs;\n    var slimDOMOptions = slimDOM === true || slimDOM === 'all'\n        ?\n            {\n                script: true,\n                comment: true,\n                headFavicon: true,\n                headWhitespace: true,\n                headMetaDescKeywords: slimDOM === 'all',\n                headMetaSocial: true,\n                headMetaRobots: true,\n                headMetaHttpEquiv: true,\n                headMetaAuthorship: true,\n                headMetaVerification: true,\n            }\n        : slimDOM === false\n            ? {}\n            : slimDOM;\n    return [\n        serializeNodeWithId(n, {\n            doc: n,\n            map: idNodeMap,\n            blockClass: blockClass,\n            blockSelector: blockSelector,\n            maskTextClass: maskTextClass,\n            maskTextSelector: maskTextSelector,\n            skipChild: false,\n            inlineStylesheet: inlineStylesheet,\n            maskInputOptions: maskInputOptions,\n            maskTextFn: maskTextFn,\n            maskInputFn: maskInputFn,\n            slimDOMOptions: slimDOMOptions,\n            recordCanvas: recordCanvas,\n            preserveWhiteSpace: preserveWhiteSpace,\n            onSerialize: onSerialize,\n            onIframeLoad: onIframeLoad,\n            iframeLoadTimeout: iframeLoadTimeout,\n            keepIframeSrcFn: keepIframeSrcFn,\n        }),\n        idNodeMap,\n    ];\n}\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\nfunction parse(css, options) {\n    if (options === void 0) { options = {}; }\n    var lineno = 1;\n    var column = 1;\n    function updatePosition(str) {\n        var lines = str.match(/\\n/g);\n        if (lines) {\n            lineno += lines.length;\n        }\n        var i = str.lastIndexOf('\\n');\n        column = i === -1 ? column + str.length : str.length - i;\n    }\n    function position() {\n        var start = { line: lineno, column: column };\n        return function (node) {\n            node.position = new Position(start);\n            whitespace();\n            return node;\n        };\n    }\n    var Position = (function () {\n        function Position(start) {\n            this.start = start;\n            this.end = { line: lineno, column: column };\n            this.source = options.source;\n        }\n        return Position;\n    }());\n    Position.prototype.content = css;\n    var errorsList = [];\n    function error(msg) {\n        var err = new Error(options.source + ':' + lineno + ':' + column + ': ' + msg);\n        err.reason = msg;\n        err.filename = options.source;\n        err.line = lineno;\n        err.column = column;\n        err.source = css;\n        if (options.silent) {\n            errorsList.push(err);\n        }\n        else {\n            throw err;\n        }\n    }\n    function stylesheet() {\n        var rulesList = rules();\n        return {\n            type: 'stylesheet',\n            stylesheet: {\n                source: options.source,\n                rules: rulesList,\n                parsingErrors: errorsList,\n            },\n        };\n    }\n    function open() {\n        return match(/^{\\s*/);\n    }\n    function close() {\n        return match(/^}/);\n    }\n    function rules() {\n        var node;\n        var rules = [];\n        whitespace();\n        comments(rules);\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\n            if (node !== false) {\n                rules.push(node);\n                comments(rules);\n            }\n        }\n        return rules;\n    }\n    function match(re) {\n        var m = re.exec(css);\n        if (!m) {\n            return;\n        }\n        var str = m[0];\n        updatePosition(str);\n        css = css.slice(str.length);\n        return m;\n    }\n    function whitespace() {\n        match(/^\\s*/);\n    }\n    function comments(rules) {\n        if (rules === void 0) { rules = []; }\n        var c;\n        while ((c = comment())) {\n            if (c !== false) {\n                rules.push(c);\n            }\n            c = comment();\n        }\n        return rules;\n    }\n    function comment() {\n        var pos = position();\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\n            return;\n        }\n        var i = 2;\n        while ('' !== css.charAt(i) &&\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\n            ++i;\n        }\n        i += 2;\n        if ('' === css.charAt(i - 1)) {\n            return error('End of comment missing');\n        }\n        var str = css.slice(2, i - 2);\n        column += 2;\n        updatePosition(str);\n        css = css.slice(i);\n        column += 2;\n        return pos({\n            type: 'comment',\n            comment: str,\n        });\n    }\n    function selector() {\n        var m = match(/^([^{]+)/);\n        if (!m) {\n            return;\n        }\n        return trim(m[0])\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\n            return m.replace(/,/g, '\\u200C');\n        })\n            .split(/\\s*(?![^(]*\\)),\\s*/)\n            .map(function (s) {\n            return s.replace(/\\u200C/g, ',');\n        });\n    }\n    function declaration() {\n        var pos = position();\n        var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n        if (!propMatch) {\n            return;\n        }\n        var prop = trim(propMatch[0]);\n        if (!match(/^:\\s*/)) {\n            return error(\"property missing ':'\");\n        }\n        var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n        var ret = pos({\n            type: 'declaration',\n            property: prop.replace(commentre, ''),\n            value: val ? trim(val[0]).replace(commentre, '') : '',\n        });\n        match(/^[;\\s]*/);\n        return ret;\n    }\n    function declarations() {\n        var decls = [];\n        if (!open()) {\n            return error(\"missing '{'\");\n        }\n        comments(decls);\n        var decl;\n        while ((decl = declaration())) {\n            if (decl !== false) {\n                decls.push(decl);\n                comments(decls);\n            }\n            decl = declaration();\n        }\n        if (!close()) {\n            return error(\"missing '}'\");\n        }\n        return decls;\n    }\n    function keyframe() {\n        var m;\n        var vals = [];\n        var pos = position();\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\n            vals.push(m[1]);\n            match(/^,\\s*/);\n        }\n        if (!vals.length) {\n            return;\n        }\n        return pos({\n            type: 'keyframe',\n            values: vals,\n            declarations: declarations(),\n        });\n    }\n    function atkeyframes() {\n        var pos = position();\n        var m = match(/^@([-\\w]+)?keyframes\\s*/);\n        if (!m) {\n            return;\n        }\n        var vendor = m[1];\n        m = match(/^([-\\w]+)\\s*/);\n        if (!m) {\n            return error('@keyframes missing name');\n        }\n        var name = m[1];\n        if (!open()) {\n            return error(\"@keyframes missing '{'\");\n        }\n        var frame;\n        var frames = comments();\n        while ((frame = keyframe())) {\n            frames.push(frame);\n            frames = frames.concat(comments());\n        }\n        if (!close()) {\n            return error(\"@keyframes missing '}'\");\n        }\n        return pos({\n            type: 'keyframes',\n            name: name,\n            vendor: vendor,\n            keyframes: frames,\n        });\n    }\n    function atsupports() {\n        var pos = position();\n        var m = match(/^@supports *([^{]+)/);\n        if (!m) {\n            return;\n        }\n        var supports = trim(m[1]);\n        if (!open()) {\n            return error(\"@supports missing '{'\");\n        }\n        var style = comments().concat(rules());\n        if (!close()) {\n            return error(\"@supports missing '}'\");\n        }\n        return pos({\n            type: 'supports',\n            supports: supports,\n            rules: style,\n        });\n    }\n    function athost() {\n        var pos = position();\n        var m = match(/^@host\\s*/);\n        if (!m) {\n            return;\n        }\n        if (!open()) {\n            return error(\"@host missing '{'\");\n        }\n        var style = comments().concat(rules());\n        if (!close()) {\n            return error(\"@host missing '}'\");\n        }\n        return pos({\n            type: 'host',\n            rules: style,\n        });\n    }\n    function atmedia() {\n        var pos = position();\n        var m = match(/^@media *([^{]+)/);\n        if (!m) {\n            return;\n        }\n        var media = trim(m[1]);\n        if (!open()) {\n            return error(\"@media missing '{'\");\n        }\n        var style = comments().concat(rules());\n        if (!close()) {\n            return error(\"@media missing '}'\");\n        }\n        return pos({\n            type: 'media',\n            media: media,\n            rules: style,\n        });\n    }\n    function atcustommedia() {\n        var pos = position();\n        var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n        if (!m) {\n            return;\n        }\n        return pos({\n            type: 'custom-media',\n            name: trim(m[1]),\n            media: trim(m[2]),\n        });\n    }\n    function atpage() {\n        var pos = position();\n        var m = match(/^@page */);\n        if (!m) {\n            return;\n        }\n        var sel = selector() || [];\n        if (!open()) {\n            return error(\"@page missing '{'\");\n        }\n        var decls = comments();\n        var decl;\n        while ((decl = declaration())) {\n            decls.push(decl);\n            decls = decls.concat(comments());\n        }\n        if (!close()) {\n            return error(\"@page missing '}'\");\n        }\n        return pos({\n            type: 'page',\n            selectors: sel,\n            declarations: decls,\n        });\n    }\n    function atdocument() {\n        var pos = position();\n        var m = match(/^@([-\\w]+)?document *([^{]+)/);\n        if (!m) {\n            return;\n        }\n        var vendor = trim(m[1]);\n        var doc = trim(m[2]);\n        if (!open()) {\n            return error(\"@document missing '{'\");\n        }\n        var style = comments().concat(rules());\n        if (!close()) {\n            return error(\"@document missing '}'\");\n        }\n        return pos({\n            type: 'document',\n            document: doc,\n            vendor: vendor,\n            rules: style,\n        });\n    }\n    function atfontface() {\n        var pos = position();\n        var m = match(/^@font-face\\s*/);\n        if (!m) {\n            return;\n        }\n        if (!open()) {\n            return error(\"@font-face missing '{'\");\n        }\n        var decls = comments();\n        var decl;\n        while ((decl = declaration())) {\n            decls.push(decl);\n            decls = decls.concat(comments());\n        }\n        if (!close()) {\n            return error(\"@font-face missing '}'\");\n        }\n        return pos({\n            type: 'font-face',\n            declarations: decls,\n        });\n    }\n    var atimport = _compileAtrule('import');\n    var atcharset = _compileAtrule('charset');\n    var atnamespace = _compileAtrule('namespace');\n    function _compileAtrule(name) {\n        var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\n        return function () {\n            var pos = position();\n            var m = match(re);\n            if (!m) {\n                return;\n            }\n            var ret = { type: name };\n            ret[name] = m[1].trim();\n            return pos(ret);\n        };\n    }\n    function atrule() {\n        if (css[0] !== '@') {\n            return;\n        }\n        return (atkeyframes() ||\n            atmedia() ||\n            atcustommedia() ||\n            atsupports() ||\n            atimport() ||\n            atcharset() ||\n            atnamespace() ||\n            atdocument() ||\n            atpage() ||\n            athost() ||\n            atfontface());\n    }\n    function rule() {\n        var pos = position();\n        var sel = selector();\n        if (!sel) {\n            return error('selector missing');\n        }\n        comments();\n        return pos({\n            type: 'rule',\n            selectors: sel,\n            declarations: declarations(),\n        });\n    }\n    return addParent(stylesheet());\n}\nfunction trim(str) {\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\n}\nfunction addParent(obj, parent) {\n    var isNode = obj && typeof obj.type === 'string';\n    var childParent = isNode ? obj : parent;\n    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n        var k = _a[_i];\n        var value = obj[k];\n        if (Array.isArray(value)) {\n            value.forEach(function (v) {\n                addParent(v, childParent);\n            });\n        }\n        else if (value && typeof value === 'object') {\n            addParent(value, childParent);\n        }\n    }\n    if (isNode) {\n        Object.defineProperty(obj, 'parent', {\n            configurable: true,\n            writable: true,\n            enumerable: false,\n            value: parent || null,\n        });\n    }\n    return obj;\n}\n\nvar tagMap = {\n    script: 'noscript',\n    altglyph: 'altGlyph',\n    altglyphdef: 'altGlyphDef',\n    altglyphitem: 'altGlyphItem',\n    animatecolor: 'animateColor',\n    animatemotion: 'animateMotion',\n    animatetransform: 'animateTransform',\n    clippath: 'clipPath',\n    feblend: 'feBlend',\n    fecolormatrix: 'feColorMatrix',\n    fecomponenttransfer: 'feComponentTransfer',\n    fecomposite: 'feComposite',\n    feconvolvematrix: 'feConvolveMatrix',\n    fediffuselighting: 'feDiffuseLighting',\n    fedisplacementmap: 'feDisplacementMap',\n    fedistantlight: 'feDistantLight',\n    fedropshadow: 'feDropShadow',\n    feflood: 'feFlood',\n    fefunca: 'feFuncA',\n    fefuncb: 'feFuncB',\n    fefuncg: 'feFuncG',\n    fefuncr: 'feFuncR',\n    fegaussianblur: 'feGaussianBlur',\n    feimage: 'feImage',\n    femerge: 'feMerge',\n    femergenode: 'feMergeNode',\n    femorphology: 'feMorphology',\n    feoffset: 'feOffset',\n    fepointlight: 'fePointLight',\n    fespecularlighting: 'feSpecularLighting',\n    fespotlight: 'feSpotLight',\n    fetile: 'feTile',\n    feturbulence: 'feTurbulence',\n    foreignobject: 'foreignObject',\n    glyphref: 'glyphRef',\n    lineargradient: 'linearGradient',\n    radialgradient: 'radialGradient',\n};\nfunction getTagName(n) {\n    var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\n    if (tagName === 'link' && n.attributes._cssText) {\n        tagName = 'style';\n    }\n    return tagName;\n}\nfunction escapeRegExp(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR, 'g');\nfunction addHoverClass(cssText) {\n    var ast = parse(cssText, {\n        silent: true,\n    });\n    if (!ast.stylesheet) {\n        return cssText;\n    }\n    var selectors = [];\n    ast.stylesheet.rules.forEach(function (rule) {\n        if ('selectors' in rule) {\n            (rule.selectors || []).forEach(function (selector) {\n                if (HOVER_SELECTOR.test(selector)) {\n                    selectors.push(selector);\n                }\n            });\n        }\n    });\n    if (selectors.length === 0) {\n        return cssText;\n    }\n    var selectorMatcher = new RegExp(selectors\n        .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\n        .sort(function (a, b) { return b.length - a.length; })\n        .map(function (selector) {\n        return escapeRegExp(selector);\n    })\n        .join('|'), 'g');\n    return cssText.replace(selectorMatcher, function (selector) {\n        var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\n        return selector + \", \" + newSelector;\n    });\n}\nfunction buildNode(n, options) {\n    var doc = options.doc, hackCss = options.hackCss;\n    switch (n.type) {\n        case NodeType.Document:\n            return doc.implementation.createDocument(null, '', null);\n        case NodeType.DocumentType:\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\n        case NodeType.Element:\n            var tagName = getTagName(n);\n            var node_1;\n            if (n.isSVG) {\n                node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\n            }\n            else {\n                node_1 = doc.createElement(tagName);\n            }\n            var _loop_1 = function (name) {\n                if (!n.attributes.hasOwnProperty(name)) {\n                    return \"continue\";\n                }\n                var value = n.attributes[name];\n                value =\n                    typeof value === 'boolean' || typeof value === 'number' ? '' : value;\n                if (!name.startsWith('rr_')) {\n                    var isTextarea = tagName === 'textarea' && name === 'value';\n                    var isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\n                    if (isRemoteOrDynamicCss && hackCss) {\n                        value = addHoverClass(value);\n                    }\n                    if (isTextarea || isRemoteOrDynamicCss) {\n                        var child = doc.createTextNode(value);\n                        for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\n                            var c = _a[_i];\n                            if (c.nodeType === node_1.TEXT_NODE) {\n                                node_1.removeChild(c);\n                            }\n                        }\n                        node_1.appendChild(child);\n                        return \"continue\";\n                    }\n                    try {\n                        if (n.isSVG && name === 'xlink:href') {\n                            node_1.setAttributeNS('http://www.w3.org/1999/xlink', name, value);\n                        }\n                        else if (name === 'onload' ||\n                            name === 'onclick' ||\n                            name.substring(0, 7) === 'onmouse') {\n                            node_1.setAttribute('_' + name, value);\n                        }\n                        else if (tagName === 'meta' &&\n                            n.attributes['http-equiv'] === 'Content-Security-Policy' &&\n                            name === 'content') {\n                            node_1.setAttribute('csp-content', value);\n                            return \"continue\";\n                        }\n                        else if (tagName === 'link' &&\n                            n.attributes.rel === 'preload' &&\n                            n.attributes.as === 'script') ;\n                        else if (tagName === 'link' &&\n                            n.attributes.rel === 'prefetch' &&\n                            typeof n.attributes.href === 'string' &&\n                            n.attributes.href.endsWith('.js')) ;\n                        else {\n                            node_1.setAttribute(name, value);\n                        }\n                    }\n                    catch (error) {\n                    }\n                }\n                else {\n                    if (tagName === 'canvas' && name === 'rr_dataURL') {\n                        var image_1 = document.createElement('img');\n                        image_1.src = value;\n                        image_1.onload = function () {\n                            var ctx = node_1.getContext('2d');\n                            if (ctx) {\n                                ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\n                            }\n                        };\n                    }\n                    if (name === 'rr_width') {\n                        node_1.style.width = value;\n                    }\n                    if (name === 'rr_height') {\n                        node_1.style.height = value;\n                    }\n                    if (name === 'rr_mediaCurrentTime') {\n                        node_1.currentTime = n.attributes\n                            .rr_mediaCurrentTime;\n                    }\n                    if (name === 'rr_mediaState') {\n                        switch (value) {\n                            case 'played':\n                                node_1\n                                    .play()\n                                    .catch(function (e) { return console.warn('media playback error', e); });\n                                break;\n                            case 'paused':\n                                node_1.pause();\n                                break;\n                        }\n                    }\n                }\n            };\n            for (var name in n.attributes) {\n                _loop_1(name);\n            }\n            if (n.isShadowHost) {\n                if (!node_1.shadowRoot) {\n                    node_1.attachShadow({ mode: 'open' });\n                }\n                else {\n                    while (node_1.shadowRoot.firstChild) {\n                        node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\n                    }\n                }\n            }\n            return node_1;\n        case NodeType.Text:\n            return doc.createTextNode(n.isStyle && hackCss ? addHoverClass(n.textContent) : n.textContent);\n        case NodeType.CDATA:\n            return doc.createCDATASection(n.textContent);\n        case NodeType.Comment:\n            return doc.createComment(n.textContent);\n        default:\n            return null;\n    }\n}\nfunction buildNodeWithSN(n, options) {\n    var doc = options.doc, map = options.map, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend;\n    var node = buildNode(n, { doc: doc, hackCss: hackCss });\n    if (!node) {\n        return null;\n    }\n    if (n.rootId) {\n        console.assert(map[n.rootId] === doc, 'Target document should has the same root id.');\n    }\n    if (n.type === NodeType.Document) {\n        doc.close();\n        doc.open();\n        node = doc;\n    }\n    node.__sn = n;\n    map[n.id] = node;\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\n        !skipChild) {\n        for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\n            var childN = _c[_i];\n            var childNode = buildNodeWithSN(childN, {\n                doc: doc,\n                map: map,\n                skipChild: false,\n                hackCss: hackCss,\n                afterAppend: afterAppend,\n            });\n            if (!childNode) {\n                console.warn('Failed to rebuild', childN);\n                continue;\n            }\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\n                node.shadowRoot.appendChild(childNode);\n            }\n            else {\n                node.appendChild(childNode);\n            }\n            if (afterAppend) {\n                afterAppend(childNode);\n            }\n        }\n    }\n    return node;\n}\nfunction visit(idNodeMap, onVisit) {\n    function walk(node) {\n        onVisit(node);\n    }\n    for (var key in idNodeMap) {\n        if (idNodeMap[key]) {\n            walk(idNodeMap[key]);\n        }\n    }\n}\nfunction handleScroll(node) {\n    var n = node.__sn;\n    if (n.type !== NodeType.Element) {\n        return;\n    }\n    var el = node;\n    for (var name in n.attributes) {\n        if (!(n.attributes.hasOwnProperty(name) && name.startsWith('rr_'))) {\n            continue;\n        }\n        var value = n.attributes[name];\n        if (name === 'rr_scrollLeft') {\n            el.scrollLeft = value;\n        }\n        if (name === 'rr_scrollTop') {\n            el.scrollTop = value;\n        }\n    }\n}\nfunction rebuild(n, options) {\n    var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend;\n    var idNodeMap = {};\n    var node = buildNodeWithSN(n, {\n        doc: doc,\n        map: idNodeMap,\n        skipChild: false,\n        hackCss: hackCss,\n        afterAppend: afterAppend,\n    });\n    visit(idNodeMap, function (visitedNode) {\n        if (onVisit) {\n            onVisit(visitedNode);\n        }\n        handleScroll(visitedNode);\n    });\n    return [node, idNodeMap];\n}\n\nexport { IGNORED_NODE, NodeType, addHoverClass, buildNodeWithSN, isElement, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, transformAttribute };\n","import { __values } from '../ext/tslib/tslib.es6.js';\nimport { IGNORED_NODE, isShadowRoot, NodeType } from '../ext/rrweb-snapshot/es/rrweb-snapshot.js';\nimport { EventType, IncrementalSource } from './types.js';\n\nfunction on(type, fn, target) {\r\n    if (target === void 0) { target = document; }\r\n    var options = { capture: true, passive: true };\r\n    target.addEventListener(type, fn, options);\r\n    return function () { return target.removeEventListener(type, fn, options); };\r\n}\r\nfunction createMirror() {\r\n    return {\r\n        map: {},\r\n        getId: function (n) {\r\n            if (!n.__sn) {\r\n                return -1;\r\n            }\r\n            return n.__sn.id;\r\n        },\r\n        getNode: function (id) {\r\n            return this.map[id] || null;\r\n        },\r\n        removeNodeFromMap: function (n) {\r\n            var _this = this;\r\n            var id = n.__sn && n.__sn.id;\r\n            delete this.map[id];\r\n            if (n.childNodes) {\r\n                n.childNodes.forEach(function (child) {\r\n                    return _this.removeNodeFromMap(child);\r\n                });\r\n            }\r\n        },\r\n        has: function (id) {\r\n            return this.map.hasOwnProperty(id);\r\n        },\r\n        reset: function () {\r\n            this.map = {};\r\n        },\r\n    };\r\n}\r\nvar 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\nvar _mirror = {\r\n    map: {},\r\n    getId: function () {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return -1;\r\n    },\r\n    getNode: function () {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return null;\r\n    },\r\n    removeNodeFromMap: function () {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n    has: function () {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return false;\r\n    },\r\n    reset: function () {\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: function (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    if (options === void 0) { options = {}; }\r\n    var timeout = null;\r\n    var previous = 0;\r\n    return function (arg) {\r\n        var now = Date.now();\r\n        if (!previous && options.leading === false) {\r\n            previous = now;\r\n        }\r\n        var remaining = wait - (now - previous);\r\n        var context = this;\r\n        var args = arguments;\r\n        if (remaining <= 0 || remaining > wait) {\r\n            if (timeout) {\r\n                window.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 = window.setTimeout(function () {\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) {\r\n    if (win === void 0) { win = window; }\r\n    var original = win.Object.getOwnPropertyDescriptor(target, key);\r\n    win.Object.defineProperty(target, key, isRevoked\r\n        ? d\r\n        : {\r\n            set: function (value) {\r\n                var _this = this;\r\n                setTimeout(function () {\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 function () { 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 function () { };\r\n        }\r\n        var original_1 = source[name];\r\n        var wrapped = replacement(original_1);\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_1,\r\n                },\r\n            });\r\n        }\r\n        source[name] = wrapped;\r\n        return function () {\r\n            source[name] = original_1;\r\n        };\r\n    }\r\n    catch (_a) {\r\n        return function () { };\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) {\r\n    if (!node) {\r\n        return false;\r\n    }\r\n    if (node.nodeType === node.ELEMENT_NODE) {\r\n        var needBlock_1 = false;\r\n        if (typeof blockClass === 'string') {\r\n            needBlock_1 = node.classList.contains(blockClass);\r\n        }\r\n        else {\r\n            node.classList.forEach(function (className) {\r\n                if (blockClass.test(className)) {\r\n                    needBlock_1 = true;\r\n                }\r\n            });\r\n        }\r\n        return needBlock_1 || isBlocked(node.parentNode, blockClass);\r\n    }\r\n    if (node.nodeType === node.TEXT_NODE) {\r\n        return isBlocked(node.parentNode, blockClass);\r\n    }\r\n    return isBlocked(node.parentNode, blockClass);\r\n}\r\nfunction isIgnored(n) {\r\n    if ('__sn' in n) {\r\n        return n.__sn.id === IGNORED_NODE;\r\n    }\r\n    return false;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n    if (isShadowRoot(target)) {\r\n        return false;\r\n    }\r\n    var 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) {\r\n    if (win === void 0) { 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 = function contains(node) {\r\n            if (!(0 in arguments)) {\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 needCastInSyncMode(event) {\r\n    switch (event.type) {\r\n        case EventType.DomContentLoaded:\r\n        case EventType.Load:\r\n        case EventType.Custom:\r\n            return false;\r\n        case EventType.FullSnapshot:\r\n        case EventType.Meta:\r\n        case EventType.Plugin:\r\n            return true;\r\n    }\r\n    switch (event.data.source) {\r\n        case IncrementalSource.MouseMove:\r\n        case IncrementalSource.MouseInteraction:\r\n        case IncrementalSource.TouchMove:\r\n        case IncrementalSource.MediaInteraction:\r\n            return false;\r\n        case IncrementalSource.ViewportResize:\r\n        case IncrementalSource.StyleSheetRule:\r\n        case IncrementalSource.Scroll:\r\n        case IncrementalSource.Input:\r\n            return true;\r\n    }\r\n    return true;\r\n}\r\nvar TreeIndex = (function () {\r\n    function TreeIndex() {\r\n        this.reset();\r\n    }\r\n    TreeIndex.prototype.add = function (mutation) {\r\n        var parentTreeNode = this.indexes.get(mutation.parentId);\r\n        var treeNode = {\r\n            id: mutation.node.id,\r\n            mutation: mutation,\r\n            children: [],\r\n            texts: [],\r\n            attributes: [],\r\n        };\r\n        if (!parentTreeNode) {\r\n            this.tree[treeNode.id] = treeNode;\r\n        }\r\n        else {\r\n            treeNode.parent = parentTreeNode;\r\n            parentTreeNode.children[treeNode.id] = treeNode;\r\n        }\r\n        this.indexes.set(treeNode.id, treeNode);\r\n    };\r\n    TreeIndex.prototype.remove = function (mutation, mirror) {\r\n        var _this = this;\r\n        var parentTreeNode = this.indexes.get(mutation.parentId);\r\n        var treeNode = this.indexes.get(mutation.id);\r\n        var deepRemoveFromMirror = function (id) {\r\n            _this.removeIdSet.add(id);\r\n            var node = mirror.getNode(id);\r\n            node === null || node === void 0 ? void 0 : node.childNodes.forEach(function (childNode) {\r\n                if ('__sn' in childNode) {\r\n                    deepRemoveFromMirror(childNode.__sn.id);\r\n                }\r\n            });\r\n        };\r\n        var deepRemoveFromTreeIndex = function (node) {\r\n            _this.removeIdSet.add(node.id);\r\n            Object.values(node.children).forEach(function (n) { return deepRemoveFromTreeIndex(n); });\r\n            var _treeNode = _this.indexes.get(node.id);\r\n            if (_treeNode) {\r\n                var _parentTreeNode = _treeNode.parent;\r\n                if (_parentTreeNode) {\r\n                    delete _treeNode.parent;\r\n                    delete _parentTreeNode.children[_treeNode.id];\r\n                    _this.indexes.delete(mutation.id);\r\n                }\r\n            }\r\n        };\r\n        if (!treeNode) {\r\n            this.removeNodeMutations.push(mutation);\r\n            deepRemoveFromMirror(mutation.id);\r\n        }\r\n        else if (!parentTreeNode) {\r\n            delete this.tree[treeNode.id];\r\n            this.indexes.delete(treeNode.id);\r\n            deepRemoveFromTreeIndex(treeNode);\r\n        }\r\n        else {\r\n            delete treeNode.parent;\r\n            delete parentTreeNode.children[treeNode.id];\r\n            this.indexes.delete(mutation.id);\r\n            deepRemoveFromTreeIndex(treeNode);\r\n        }\r\n    };\r\n    TreeIndex.prototype.text = function (mutation) {\r\n        var treeNode = this.indexes.get(mutation.id);\r\n        if (treeNode) {\r\n            treeNode.texts.push(mutation);\r\n        }\r\n        else {\r\n            this.textMutations.push(mutation);\r\n        }\r\n    };\r\n    TreeIndex.prototype.attribute = function (mutation) {\r\n        var treeNode = this.indexes.get(mutation.id);\r\n        if (treeNode) {\r\n            treeNode.attributes.push(mutation);\r\n        }\r\n        else {\r\n            this.attributeMutations.push(mutation);\r\n        }\r\n    };\r\n    TreeIndex.prototype.scroll = function (d) {\r\n        this.scrollMap.set(d.id, d);\r\n    };\r\n    TreeIndex.prototype.input = function (d) {\r\n        this.inputMap.set(d.id, d);\r\n    };\r\n    TreeIndex.prototype.flush = function () {\r\n        var e_1, _a, e_2, _b;\r\n        var _this = this;\r\n        var _c = this, tree = _c.tree, removeNodeMutations = _c.removeNodeMutations, textMutations = _c.textMutations, attributeMutations = _c.attributeMutations;\r\n        var batchMutationData = {\r\n            source: IncrementalSource.Mutation,\r\n            removes: removeNodeMutations,\r\n            texts: textMutations,\r\n            attributes: attributeMutations,\r\n            adds: [],\r\n        };\r\n        var walk = function (treeNode, removed) {\r\n            if (removed) {\r\n                _this.removeIdSet.add(treeNode.id);\r\n            }\r\n            batchMutationData.texts = batchMutationData.texts\r\n                .concat(removed ? [] : treeNode.texts)\r\n                .filter(function (m) { return !_this.removeIdSet.has(m.id); });\r\n            batchMutationData.attributes = batchMutationData.attributes\r\n                .concat(removed ? [] : treeNode.attributes)\r\n                .filter(function (m) { return !_this.removeIdSet.has(m.id); });\r\n            if (!_this.removeIdSet.has(treeNode.id) &&\r\n                !_this.removeIdSet.has(treeNode.mutation.parentId) &&\r\n                !removed) {\r\n                batchMutationData.adds.push(treeNode.mutation);\r\n                if (treeNode.children) {\r\n                    Object.values(treeNode.children).forEach(function (n) { return walk(n, false); });\r\n                }\r\n            }\r\n            else {\r\n                Object.values(treeNode.children).forEach(function (n) { return walk(n, true); });\r\n            }\r\n        };\r\n        Object.values(tree).forEach(function (n) { return walk(n, false); });\r\n        try {\r\n            for (var _d = __values(this.scrollMap.keys()), _e = _d.next(); !_e.done; _e = _d.next()) {\r\n                var id = _e.value;\r\n                if (this.removeIdSet.has(id)) {\r\n                    this.scrollMap.delete(id);\r\n                }\r\n            }\r\n        }\r\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n        finally {\r\n            try {\r\n                if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\r\n            }\r\n            finally { if (e_1) throw e_1.error; }\r\n        }\r\n        try {\r\n            for (var _f = __values(this.inputMap.keys()), _g = _f.next(); !_g.done; _g = _f.next()) {\r\n                var id = _g.value;\r\n                if (this.removeIdSet.has(id)) {\r\n                    this.inputMap.delete(id);\r\n                }\r\n            }\r\n        }\r\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n        finally {\r\n            try {\r\n                if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\r\n            }\r\n            finally { if (e_2) throw e_2.error; }\r\n        }\r\n        var scrollMap = new Map(this.scrollMap);\r\n        var inputMap = new Map(this.inputMap);\r\n        this.reset();\r\n        return {\r\n            mutationData: batchMutationData,\r\n            scrollMap: scrollMap,\r\n            inputMap: inputMap,\r\n        };\r\n    };\r\n    TreeIndex.prototype.reset = function () {\r\n        this.tree = [];\r\n        this.indexes = new Map();\r\n        this.removeNodeMutations = [];\r\n        this.textMutations = [];\r\n        this.attributeMutations = [];\r\n        this.removeIdSet = new Set();\r\n        this.scrollMap = new Map();\r\n        this.inputMap = new Map();\r\n    };\r\n    return TreeIndex;\r\n}());\r\nfunction queueToResolveTrees(queue) {\r\n    var e_3, _a;\r\n    var queueNodeMap = {};\r\n    var putIntoMap = function (m, parent) {\r\n        var nodeInTree = {\r\n            value: m,\r\n            parent: parent,\r\n            children: [],\r\n        };\r\n        queueNodeMap[m.node.id] = nodeInTree;\r\n        return nodeInTree;\r\n    };\r\n    var queueNodeTrees = [];\r\n    try {\r\n        for (var queue_1 = __values(queue), queue_1_1 = queue_1.next(); !queue_1_1.done; queue_1_1 = queue_1.next()) {\r\n            var mutation = queue_1_1.value;\r\n            var nextId = mutation.nextId, parentId = mutation.parentId;\r\n            if (nextId && nextId in queueNodeMap) {\r\n                var nextInTree = queueNodeMap[nextId];\r\n                if (nextInTree.parent) {\r\n                    var 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                    var 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                var 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    }\r\n    catch (e_3_1) { e_3 = { error: e_3_1 }; }\r\n    finally {\r\n        try {\r\n            if (queue_1_1 && !queue_1_1.done && (_a = queue_1.return)) _a.call(queue_1);\r\n        }\r\n        finally { if (e_3) throw e_3.error; }\r\n    }\r\n    return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n    cb(tree.value);\r\n    for (var i = tree.children.length - 1; i >= 0; i--) {\r\n        iterateResolveTree(tree.children[i], cb);\r\n    }\r\n}\r\nfunction isIframeINode(node) {\r\n    if ('__sn' in node) {\r\n        return (node.__sn.type === NodeType.Element && node.__sn.tagName === 'iframe');\r\n    }\r\n    return false;\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n    var _a, _b;\r\n    var 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    var frameDimension = frameElement.getBoundingClientRect();\r\n    var frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n    var 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: relativeScale,\r\n        absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n    };\r\n}\r\nfunction hasShadowRoot(n) {\r\n    var _a;\r\n    return Boolean((_a = n) === null || _a === void 0 ? void 0 : _a.shadowRoot);\r\n}\n\nexport { TreeIndex, _mirror, createMirror, getBaseDimension, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isIframeINode, isIgnored, isTouchEvent, iterateResolveTree, needCastInSyncMode, on, patch, polyfill, queueToResolveTrees, throttle };\n","//      \n// An event handler can take an optional event argument\n// and should not return a value\n                                          \n                                                               \n\n// An array of all currently registered event handlers for a type\n                                            \n                                                            \n// A map of event types and their corresponding event handlers.\n                        \n                                 \n                                   \n  \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n *  @name mitt\n *  @returns {Mitt}\n */\nfunction mitt(all                 ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param  {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param  {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type        , handler              ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param  {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param  {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type        , handler              ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type  The event type to invoke\n\t\t * @param {Any} [evt]  Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type        , evt     ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n","function polyfill(w, d) {\r\n    if (w === void 0) { w = window; }\r\n    if (d === void 0) { d = document; }\r\n    if ('scrollBehavior' in d.documentElement.style &&\r\n        w.__forceSmoothScrollPolyfill__ !== true) {\r\n        return;\r\n    }\r\n    var Element = w.HTMLElement || w.Element;\r\n    var SCROLL_TIME = 468;\r\n    var 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    var 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        var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\r\n        return new RegExp(userAgentPatterns.join('|')).test(userAgent);\r\n    }\r\n    var 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        var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\r\n        return overflowValue === 'auto' || overflowValue === 'scroll';\r\n    }\r\n    function isScrollable(el) {\r\n        var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\r\n        var 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        var time = now();\r\n        var value;\r\n        var currentX;\r\n        var currentY;\r\n        var 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        var scrollable;\r\n        var startX;\r\n        var startY;\r\n        var method;\r\n        var 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        var left = arguments[0].left;\r\n        var 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        var scrollableParent = findScrollableParent(this);\r\n        var parentRects = scrollableParent.getBoundingClientRect();\r\n        var 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.js';\n\nvar Timer = (function () {\r\n    function Timer(actions, speed) {\r\n        if (actions === void 0) { actions = []; }\r\n        this.timeOffset = 0;\r\n        this.raf = null;\r\n        this.actions = actions;\r\n        this.speed = speed;\r\n    }\r\n    Timer.prototype.addAction = function (action) {\r\n        var index = this.findActionIndex(action);\r\n        this.actions.splice(index, 0, action);\r\n    };\r\n    Timer.prototype.addActions = function (actions) {\r\n        this.actions = this.actions.concat(actions);\r\n    };\r\n    Timer.prototype.start = function () {\r\n        this.timeOffset = 0;\r\n        var lastTimestamp = performance.now();\r\n        var actions = this.actions;\r\n        var self = this;\r\n        function check() {\r\n            var time = performance.now();\r\n            self.timeOffset += (time - lastTimestamp) * self.speed;\r\n            lastTimestamp = time;\r\n            while (actions.length) {\r\n                var action = actions[0];\r\n                if (self.timeOffset >= action.delay) {\r\n                    actions.shift();\r\n                    action.doAction();\r\n                }\r\n                else {\r\n                    break;\r\n                }\r\n            }\r\n            if (actions.length > 0 || self.liveMode) {\r\n                self.raf = requestAnimationFrame(check);\r\n            }\r\n        }\r\n        this.raf = requestAnimationFrame(check);\r\n    };\r\n    Timer.prototype.clear = function () {\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    Timer.prototype.setSpeed = function (speed) {\r\n        this.speed = speed;\r\n    };\r\n    Timer.prototype.toggleLiveMode = function (mode) {\r\n        this.liveMode = mode;\r\n    };\r\n    Timer.prototype.isActive = function () {\r\n        return this.raf !== null;\r\n    };\r\n    Timer.prototype.findActionIndex = function (action) {\r\n        var start = 0;\r\n        var end = this.actions.length - 1;\r\n        while (start <= end) {\r\n            var 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;\r\n            }\r\n        }\r\n        return start;\r\n    };\r\n    return Timer;\r\n}());\r\nfunction addDelay(event, baselineTime) {\r\n    if (event.type === EventType.IncrementalSnapshot &&\r\n        event.data.source === IncrementalSource.MouseMove) {\r\n        var firstOffset = event.data.positions[0].timeOffset;\r\n        var 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","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar t;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\";}(t||(t={}));var n={type:\"xstate.init\"};function e(t){return void 0===t?[]:[].concat(t)}function r(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 o(t){return function(n){return t===n}}function a(t){return \"string\"==typeof t?{type:t}:t}function u(t,n){return {value:t,context:n,actions:[],changed:!1,matches:o(t)}}function c(t,n){void 0===n&&(n={});var r={config:t,_options:n,initialState:{value:t.initial,actions:e(t.states[t.initial].entry).map((function(t){return i(t,n.actions)})),context:t.context,matches:o(t.initial)},transition:function(n,c){var s,f,v=\"string\"==typeof n?{value:n,context:t.context}:n,l=v.value,p=v.context,g=a(c),y=t.states[l];if(y.on){var d=e(y.on[g.type]),x=function(n){if(void 0===n)return {value:u(l,p)};var e=\"string\"==typeof n?{target:n}:n,a=e.target,c=void 0===a?l:a,s=e.actions,f=void 0===s?[]:s,v=e.cond,d=p;if((void 0===v?function(){return !0}:v)(p,g)){var x=t.states[c],m=!1,h=[].concat(y.exit,f,x.entry).filter((function(t){return t})).map((function(t){return i(t,r._options.actions)})).filter((function(t){if(\"xstate.assign\"===t.type){m=!0;var n=Object.assign({},d);return \"function\"==typeof t.assignment?n=t.assignment(d,g):Object.keys(t.assignment).forEach((function(e){n[e]=\"function\"==typeof t.assignment[e]?t.assignment[e](d,g):t.assignment[e];})),d=n,!1}return !0}));return {value:{value:c,context:d,actions:h,changed:c!==l||h.length>0||m,matches:o(c)}}}};try{for(var m=function(t){var n=\"function\"==typeof Symbol&&t[Symbol.iterator],e=0;return n?n.call(t):{next:function(){return t&&e>=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}}}(d),h=m.next();!h.done;h=m.next()){var S=x(h.value);if(\"object\"==typeof S)return S.value}}catch(t){s={error:t};}finally{try{h&&!h.done&&(f=m.return)&&f.call(m);}finally{if(s)throw s.error}}}return u(l,p)}};return r}var s=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function f(e){var r=e.initialState,i=t.NotStarted,u=new Set,c={_machine:e,send:function(n){i===t.Running&&(r=e.transition(r,n),s(r,a(n)),u.forEach((function(t){return t(r)})));},subscribe:function(t){return u.add(t),t(r),{unsubscribe:function(){return u.delete(t)}}},start:function(a){if(a){var u=\"object\"==typeof a?a:{context:e.config.context,value:a};r={value:u.value,actions:[],context:u.context,matches:o(u.value)};}return i=t.Running,s(r,n),c},stop:function(){return i=t.Stopped,u.clear(),c},get state(){return r},get status(){return i}};return c}\n\nexport { t as InterpreterStatus, r as assign, c as createMachine, f as interpret };\n","import { __assign, __values } from '../../ext/tslib/tslib.es6.js';\nimport { EventType, IncrementalSource, ReplayerEvents } from '../types.js';\nimport { needCastInSyncMode } from '../utils.js';\nimport { addDelay } from './timer.js';\nimport { interpret as f, createMachine as c, assign as r } from '../../ext/@xstate/fsm/es/index.js';\n\nfunction discardPriorSnapshots(events, baselineTime) {\r\n    for (var idx = events.length - 1; idx >= 0; idx--) {\r\n        var 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, _a) {\r\n    var getCastFn = _a.getCastFn, emitter = _a.emitter;\r\n    var playerMachine = c({\r\n        id: 'player',\r\n        context: 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: r({\r\n                lastPlayedEvent: function (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: r(function (ctx, event) {\r\n                var timeOffset = ctx.timeOffset;\r\n                if ('payload' in event && 'timeOffset' in event.payload) {\r\n                    timeOffset = event.payload.timeOffset;\r\n                }\r\n                return __assign(__assign({}, ctx), { timeOffset: timeOffset, baselineTime: ctx.events[0].timestamp + timeOffset });\r\n            }),\r\n            play: function (ctx) {\r\n                var e_1, _a, e_2, _b;\r\n                var _c;\r\n                var timer = ctx.timer, events = ctx.events, baselineTime = ctx.baselineTime, lastPlayedEvent = ctx.lastPlayedEvent;\r\n                timer.clear();\r\n                try {\r\n                    for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {\r\n                        var event = events_1_1.value;\r\n                        addDelay(event, baselineTime);\r\n                    }\r\n                }\r\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n                finally {\r\n                    try {\r\n                        if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);\r\n                    }\r\n                    finally { if (e_1) throw e_1.error; }\r\n                }\r\n                var neededEvents = discardPriorSnapshots(events, baselineTime);\r\n                var 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 + ((_c = lastPlayedEvent.data.positions[0]) === null || _c === void 0 ? void 0 : _c.timeOffset);\r\n                }\r\n                if (baselineTime < (lastPlayedTimestamp || 0)) {\r\n                    emitter.emit(ReplayerEvents.PlayBack);\r\n                }\r\n                var actions = new Array();\r\n                var _loop_1 = function (event) {\r\n                    if (lastPlayedTimestamp &&\r\n                        lastPlayedTimestamp < baselineTime &&\r\n                        (event.timestamp <= lastPlayedTimestamp ||\r\n                            event === lastPlayedEvent)) {\r\n                        return \"continue\";\r\n                    }\r\n                    var isSync = event.timestamp < baselineTime;\r\n                    if (isSync && !needCastInSyncMode(event)) {\r\n                        return \"continue\";\r\n                    }\r\n                    var castFn = getCastFn(event, isSync);\r\n                    if (isSync) {\r\n                        castFn();\r\n                    }\r\n                    else {\r\n                        actions.push({\r\n                            doAction: function () {\r\n                                castFn();\r\n                                emitter.emit(ReplayerEvents.EventCast, event);\r\n                            },\r\n                            delay: event.delay,\r\n                        });\r\n                    }\r\n                };\r\n                try {\r\n                    for (var neededEvents_1 = __values(neededEvents), neededEvents_1_1 = neededEvents_1.next(); !neededEvents_1_1.done; neededEvents_1_1 = neededEvents_1.next()) {\r\n                        var event = neededEvents_1_1.value;\r\n                        _loop_1(event);\r\n                    }\r\n                }\r\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n                finally {\r\n                    try {\r\n                        if (neededEvents_1_1 && !neededEvents_1_1.done && (_b = neededEvents_1.return)) _b.call(neededEvents_1);\r\n                    }\r\n                    finally { if (e_2) throw e_2.error; }\r\n                }\r\n                emitter.emit(ReplayerEvents.Flush);\r\n                timer.addActions(actions);\r\n                timer.start();\r\n            },\r\n            pause: function (ctx) {\r\n                ctx.timer.clear();\r\n            },\r\n            resetLastPlayedEvent: r(function (ctx) {\r\n                return __assign(__assign({}, ctx), { lastPlayedEvent: null });\r\n            }),\r\n            startLive: r({\r\n                baselineTime: function (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: r(function (ctx, machineEvent) {\r\n                var baselineTime = ctx.baselineTime, timer = ctx.timer, events = ctx.events;\r\n                if (machineEvent.type === 'ADD_EVENT') {\r\n                    var event_1 = machineEvent.payload.event;\r\n                    addDelay(event_1, baselineTime);\r\n                    var end = events.length - 1;\r\n                    if (!events[end] || events[end].timestamp <= event_1.timestamp) {\r\n                        events.push(event_1);\r\n                    }\r\n                    else {\r\n                        var insertionIndex = -1;\r\n                        var start = 0;\r\n                        while (start <= end) {\r\n                            var mid = Math.floor((start + end) / 2);\r\n                            if (events[mid].timestamp <= event_1.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_1);\r\n                    }\r\n                    var isSync = event_1.timestamp < baselineTime;\r\n                    var castFn_1 = getCastFn(event_1, isSync);\r\n                    if (isSync) {\r\n                        castFn_1();\r\n                    }\r\n                    else if (timer.isActive()) {\r\n                        timer.addAction({\r\n                            doAction: function () {\r\n                                castFn_1();\r\n                                emitter.emit(ReplayerEvents.EventCast, event_1);\r\n                            },\r\n                            delay: event_1.delay,\r\n                        });\r\n                    }\r\n                }\r\n                return __assign(__assign({}, ctx), { events: events });\r\n            }),\r\n        },\r\n    });\r\n    return f(playerMachine);\r\n}\r\nfunction createSpeedService(context) {\r\n    var speedMachine = c({\r\n        id: 'speed',\r\n        context: 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: function (ctx, event) {\r\n                if ('payload' in event) {\r\n                    ctx.timer.setSpeed(event.payload.speed);\r\n                }\r\n            },\r\n            recordSpeed: r({\r\n                normalSpeed: function (ctx) { return ctx.timer.speed; },\r\n            }),\r\n            restoreSpeed: function (ctx) {\r\n                ctx.timer.setSpeed(ctx.normalSpeed);\r\n            },\r\n        },\r\n    });\r\n    return f(speedMachine);\r\n}\n\nexport { createPlayerService, createSpeedService, discardPriorSnapshots };\n","var rules = function (blockClass) { return [\r\n    \".\" + blockClass + \" { background: #ccc }\",\r\n    'noscript { display: none !important; }',\r\n]; };\n\nexport default rules;\n","import { __read } from '../../ext/tslib/tslib.es6.js';\n\nvar StyleRuleType;\r\n(function (StyleRuleType) {\r\n    StyleRuleType[StyleRuleType[\"Insert\"] = 0] = \"Insert\";\r\n    StyleRuleType[StyleRuleType[\"Remove\"] = 1] = \"Remove\";\r\n    StyleRuleType[StyleRuleType[\"Snapshot\"] = 2] = \"Snapshot\";\r\n})(StyleRuleType || (StyleRuleType = {}));\r\nfunction applyVirtualStyleRulesToNode(storedRules, styleNode) {\r\n    storedRules.forEach(function (rule) {\r\n        var _a, _b;\r\n        if (rule.type === StyleRuleType.Insert) {\r\n            try {\r\n                (_a = styleNode.sheet) === null || _a === void 0 ? void 0 : _a.insertRule(rule.cssText, rule.index);\r\n            }\r\n            catch (e) {\r\n            }\r\n        }\r\n        else if (rule.type === StyleRuleType.Remove) {\r\n            try {\r\n                (_b = styleNode.sheet) === null || _b === void 0 ? void 0 : _b.deleteRule(rule.index);\r\n            }\r\n            catch (e) {\r\n            }\r\n        }\r\n        else if (rule.type === StyleRuleType.Snapshot) {\r\n            restoreSnapshotOfStyleRulesToNode(rule.cssTexts, styleNode);\r\n        }\r\n    });\r\n}\r\nfunction restoreSnapshotOfStyleRulesToNode(cssTexts, styleNode) {\r\n    var _a;\r\n    try {\r\n        var existingRules = Array.from(((_a = styleNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) || []).map(function (rule) { return rule.cssText; });\r\n        var existingRulesReversed = Object.entries(existingRules).reverse();\r\n        var lastMatch_1 = existingRules.length;\r\n        existingRulesReversed.forEach(function (_a) {\r\n            var _b;\r\n            var _c = __read(_a, 2), index = _c[0], rule = _c[1];\r\n            var indexOf = cssTexts.indexOf(rule);\r\n            if (indexOf === -1 || indexOf > lastMatch_1) {\r\n                try {\r\n                    (_b = styleNode.sheet) === null || _b === void 0 ? void 0 : _b.deleteRule(Number(index));\r\n                }\r\n                catch (e) {\r\n                }\r\n            }\r\n            lastMatch_1 = indexOf;\r\n        });\r\n        cssTexts.forEach(function (cssText, index) {\r\n            var _a, _b, _c;\r\n            try {\r\n                if (((_b = (_a = styleNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules[index]) === null || _b === void 0 ? void 0 : _b.cssText) !== cssText) {\r\n                    (_c = styleNode.sheet) === null || _c === void 0 ? void 0 : _c.insertRule(cssText, index);\r\n                }\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n    }\r\n    catch (e) {\r\n    }\r\n}\r\nfunction storeCSSRules(parentElement, virtualStyleRulesMap) {\r\n    var _a;\r\n    try {\r\n        var cssTexts = Array.from(((_a = parentElement.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) || []).map(function (rule) { return rule.cssText; });\r\n        virtualStyleRulesMap.set(parentElement, [\r\n            {\r\n                type: StyleRuleType.Snapshot,\r\n                cssTexts: cssTexts,\r\n            },\r\n        ]);\r\n    }\r\n    catch (e) {\r\n    }\r\n}\n\nexport { StyleRuleType, applyVirtualStyleRulesToNode, storeCSSRules };\n","import { __values, __assign, __spread } from '../../ext/tslib/tslib.es6.js';\nimport { rebuild, buildNodeWithSN, NodeType } from '../../ext/rrweb-snapshot/es/rrweb-snapshot.js';\nimport { ReplayerEvents, EventType, IncrementalSource, MediaInteractions, MouseInteractions } from '../types.js';\nimport { polyfill as polyfill$1, isIframeINode, hasShadowRoot, queueToResolveTrees, iterateResolveTree, getBaseDimension, createMirror, TreeIndex } from '../utils.js';\nimport * as mitt_es from '../../ext/mitt/dist/mitt.es.js';\nimport mitt$1 from '../../ext/mitt/dist/mitt.es.js';\nimport { polyfill } from './smoothscroll.js';\nimport { Timer } from './timer.js';\nimport { createPlayerService, createSpeedService } from './machine.js';\nimport rules from './styles/inject-style.js';\nimport { StyleRuleType, storeCSSRules, applyVirtualStyleRulesToNode } from './virtual-styles.js';\n\nvar SKIP_TIME_THRESHOLD = 10 * 1000;\r\nvar SKIP_TIME_INTERVAL = 5 * 1000;\r\nvar mitt = mitt$1 || mitt_es;\r\nvar REPLAY_CONSOLE_PREFIX = '[replayer]';\r\nvar defaultMouseTailConfig = {\r\n    duration: 500,\r\n    lineCap: 'round',\r\n    lineWidth: 3,\r\n    strokeStyle: 'red',\r\n};\r\nvar Replayer = (function () {\r\n    function Replayer(events, config) {\r\n        var _this = this;\r\n        this.mouseTail = null;\r\n        this.tailPositions = [];\r\n        this.emitter = mitt();\r\n        this.legacy_missingNodeRetryMap = {};\r\n        this.imageMap = new Map();\r\n        this.mirror = createMirror();\r\n        this.firstFullSnapshot = null;\r\n        this.newDocumentQueue = [];\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        var 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        };\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.emitter.on(ReplayerEvents.Resize, this.handleResize);\r\n        this.setupDom();\r\n        this.treeIndex = new TreeIndex();\r\n        this.fragmentParentMap = new Map();\r\n        this.elementStateMap = new Map();\r\n        this.virtualStyleRulesMap = new Map();\r\n        this.emitter.on(ReplayerEvents.Flush, function () {\r\n            var e_1, _a, e_2, _b, e_3, _c;\r\n            var _d = _this.treeIndex.flush(), scrollMap = _d.scrollMap, inputMap = _d.inputMap;\r\n            _this.fragmentParentMap.forEach(function (parent, frag) {\r\n                return _this.restoreRealParent(frag, parent);\r\n            });\r\n            try {\r\n                for (var _e = __values(_this.virtualStyleRulesMap.keys()), _f = _e.next(); !_f.done; _f = _e.next()) {\r\n                    var node = _f.value;\r\n                    _this.restoreNodeSheet(node);\r\n                }\r\n            }\r\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n            finally {\r\n                try {\r\n                    if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\r\n                }\r\n                finally { if (e_1) throw e_1.error; }\r\n            }\r\n            _this.fragmentParentMap.clear();\r\n            _this.elementStateMap.clear();\r\n            _this.virtualStyleRulesMap.clear();\r\n            try {\r\n                for (var _g = __values(scrollMap.values()), _h = _g.next(); !_h.done; _h = _g.next()) {\r\n                    var d = _h.value;\r\n                    _this.applyScroll(d);\r\n                }\r\n            }\r\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n            finally {\r\n                try {\r\n                    if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\r\n                }\r\n                finally { if (e_2) throw e_2.error; }\r\n            }\r\n            try {\r\n                for (var _j = __values(inputMap.values()), _k = _j.next(); !_k.done; _k = _j.next()) {\r\n                    var d = _k.value;\r\n                    _this.applyInput(d);\r\n                }\r\n            }\r\n            catch (e_3_1) { e_3 = { error: e_3_1 }; }\r\n            finally {\r\n                try {\r\n                    if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\r\n                }\r\n                finally { if (e_3) throw e_3.error; }\r\n            }\r\n        });\r\n        this.emitter.on(ReplayerEvents.PlayBack, function () {\r\n            _this.firstFullSnapshot = null;\r\n            _this.mirror.reset();\r\n        });\r\n        var timer = new Timer([], (config === null || config === void 0 ? void 0 : config.speed) || defaultConfig.speed);\r\n        this.service = createPlayerService({\r\n            events: events\r\n                .map(function (e) {\r\n                if (config && config.unpackFn) {\r\n                    return config.unpackFn(e);\r\n                }\r\n                return e;\r\n            })\r\n                .sort(function (a1, a2) { return a1.timestamp - a2.timestamp; }),\r\n            timer: timer,\r\n            timeOffset: 0,\r\n            baselineTime: 0,\r\n            lastPlayedEvent: null,\r\n        }, {\r\n            getCastFn: this.getCastFn,\r\n            emitter: this.emitter,\r\n        });\r\n        this.service.start();\r\n        this.service.subscribe(function (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: timer,\r\n        });\r\n        this.speedService.start();\r\n        this.speedService.subscribe(function (state) {\r\n            _this.emitter.emit(ReplayerEvents.StateChange, {\r\n                speed: state,\r\n            });\r\n        });\r\n        var firstMeta = this.service.state.context.events.find(function (e) { return e.type === EventType.Meta; });\r\n        var firstFullsnapshot = this.service.state.context.events.find(function (e) { return e.type === EventType.FullSnapshot; });\r\n        if (firstMeta) {\r\n            var _a = firstMeta.data, width_1 = _a.width, height_1 = _a.height;\r\n            setTimeout(function () {\r\n                _this.emitter.emit(ReplayerEvents.Resize, {\r\n                    width: width_1,\r\n                    height: height_1,\r\n                });\r\n            }, 0);\r\n        }\r\n        if (firstFullsnapshot) {\r\n            setTimeout(function () {\r\n                if (_this.firstFullSnapshot) {\r\n                    return;\r\n                }\r\n                _this.firstFullSnapshot = firstFullsnapshot;\r\n                _this.rebuildFullSnapshot(firstFullsnapshot);\r\n                _this.iframe.contentWindow.scrollTo(firstFullsnapshot.data.initialOffset);\r\n            }, 1);\r\n        }\r\n    }\r\n    Object.defineProperty(Replayer.prototype, \"timer\", {\r\n        get: function () {\r\n            return this.service.state.context.timer;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    Replayer.prototype.on = function (event, handler) {\r\n        this.emitter.on(event, handler);\r\n        return this;\r\n    };\r\n    Replayer.prototype.off = function (event, handler) {\r\n        this.emitter.off(event, handler);\r\n        return this;\r\n    };\r\n    Replayer.prototype.setConfig = function (config) {\r\n        var _this = this;\r\n        Object.keys(config).forEach(function (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    Replayer.prototype.getMetaData = function () {\r\n        var firstEvent = this.service.state.context.events[0];\r\n        var 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    Replayer.prototype.getCurrentTime = function () {\r\n        return this.timer.timeOffset + this.getTimeOffset();\r\n    };\r\n    Replayer.prototype.getTimeOffset = function () {\r\n        var _a = this.service.state.context, baselineTime = _a.baselineTime, events = _a.events;\r\n        return baselineTime - events[0].timestamp;\r\n    };\r\n    Replayer.prototype.getMirror = function () {\r\n        return this.mirror;\r\n    };\r\n    Replayer.prototype.play = function (timeOffset) {\r\n        var _a;\r\n        if (timeOffset === void 0) { timeOffset = 0; }\r\n        if (this.service.state.matches('paused')) {\r\n            this.service.send({ type: 'PLAY', payload: { timeOffset: timeOffset } });\r\n        }\r\n        else {\r\n            this.service.send({ type: 'PAUSE' });\r\n            this.service.send({ type: 'PLAY', payload: { timeOffset: timeOffset } });\r\n        }\r\n        (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('html')[0].classList.remove('rrweb-paused');\r\n        this.emitter.emit(ReplayerEvents.Start);\r\n    };\r\n    Replayer.prototype.pause = function (timeOffset) {\r\n        var _a;\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        (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('html')[0].classList.add('rrweb-paused');\r\n        this.emitter.emit(ReplayerEvents.Pause);\r\n    };\r\n    Replayer.prototype.resume = function (timeOffset) {\r\n        if (timeOffset === void 0) { timeOffset = 0; }\r\n        console.warn(\"The 'resume' will be departed 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    Replayer.prototype.startLive = function (baselineTime) {\r\n        this.service.send({ type: 'TO_LIVE', payload: { baselineTime: baselineTime } });\r\n    };\r\n    Replayer.prototype.addEvent = function (rawEvent) {\r\n        var _this = this;\r\n        var event = this.config.unpackFn\r\n            ? this.config.unpackFn(rawEvent)\r\n            : rawEvent;\r\n        Promise.resolve().then(function () {\r\n            return _this.service.send({ type: 'ADD_EVENT', payload: { event: event } });\r\n        });\r\n    };\r\n    Replayer.prototype.enableInteract = function () {\r\n        this.iframe.setAttribute('scrolling', 'auto');\r\n        this.iframe.style.pointerEvents = 'auto';\r\n    };\r\n    Replayer.prototype.disableInteract = function () {\r\n        this.iframe.setAttribute('scrolling', 'no');\r\n        this.iframe.style.pointerEvents = 'none';\r\n    };\r\n    Replayer.prototype.setupDom = function () {\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        var 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    Replayer.prototype.handleResize = function (dimension) {\r\n        var e_4, _a;\r\n        this.iframe.style.display = 'inherit';\r\n        try {\r\n            for (var _b = __values([this.mouseTail, this.iframe]), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n                var el = _c.value;\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        catch (e_4_1) { e_4 = { error: e_4_1 }; }\r\n        finally {\r\n            try {\r\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n            }\r\n            finally { if (e_4) throw e_4.error; }\r\n        }\r\n    };\r\n    Replayer.prototype.getCastFn = function (event, isSync) {\r\n        var _this = this;\r\n        if (isSync === void 0) { isSync = false; }\r\n        var 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 = function () {\r\n                    _this.emitter.emit(ReplayerEvents.CustomEvent, event);\r\n                };\r\n                break;\r\n            case EventType.Meta:\r\n                castFn = function () {\r\n                    return _this.emitter.emit(ReplayerEvents.Resize, {\r\n                        width: event.data.width,\r\n                        height: event.data.height,\r\n                    });\r\n                };\r\n                break;\r\n            case EventType.FullSnapshot:\r\n                castFn = function () {\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                    _this.iframe.contentWindow.scrollTo(event.data.initialOffset);\r\n                };\r\n                break;\r\n            case EventType.IncrementalSnapshot:\r\n                castFn = function () {\r\n                    var e_5, _a;\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                        try {\r\n                            for (var _b = __values(_this.service.state.context.events), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n                                var _event = _c.value;\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                        }\r\n                        catch (e_5_1) { e_5 = { error: e_5_1 }; }\r\n                        finally {\r\n                            try {\r\n                                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n                            }\r\n                            finally { if (e_5) throw e_5.error; }\r\n                        }\r\n                        if (_this.nextUserInteractionEvent) {\r\n                            var skipTime = _this.nextUserInteractionEvent.delay - event.delay;\r\n                            var 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: payload });\r\n                            _this.emitter.emit(ReplayerEvents.SkipStart, payload);\r\n                        }\r\n                    }\r\n                };\r\n                break;\r\n        }\r\n        var wrappedCastFn = function () {\r\n            var e_6, _a;\r\n            if (castFn) {\r\n                castFn();\r\n            }\r\n            try {\r\n                for (var _b = __values(_this.config.plugins || []), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n                    var plugin = _c.value;\r\n                    plugin.handler(event, isSync, { replayer: _this });\r\n                }\r\n            }\r\n            catch (e_6_1) { e_6 = { error: e_6_1 }; }\r\n            finally {\r\n                try {\r\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n                }\r\n                finally { if (e_6) throw e_6.error; }\r\n            }\r\n            _this.service.send({ type: 'CAST_EVENT', payload: { event: event } });\r\n            var last_index = _this.service.state.context.events.length - 1;\r\n            if (event === _this.service.state.context.events[last_index]) {\r\n                var finish_1 = function () {\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(function () {\r\n                        finish_1();\r\n                    }, Math.max(0, -event.data.positions[0].timeOffset + 50));\r\n                }\r\n                else {\r\n                    finish_1();\r\n                }\r\n            }\r\n        };\r\n        return wrappedCastFn;\r\n    };\r\n    Replayer.prototype.rebuildFullSnapshot = function (event, isSync) {\r\n        var e_7, _a;\r\n        var _this = this;\r\n        if (isSync === void 0) { 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        var collected = [];\r\n        this.mirror.map = rebuild(event.data.node, {\r\n            doc: this.iframe.contentDocument,\r\n            afterAppend: function (builtNode) {\r\n                _this.collectIframeAndAttachDocument(collected, builtNode);\r\n            },\r\n        })[1];\r\n        var _loop_1 = function (mutationInQueue, builtNode) {\r\n            this_1.attachDocumentToIframe(mutationInQueue, builtNode);\r\n            this_1.newDocumentQueue = this_1.newDocumentQueue.filter(function (m) { return m !== mutationInQueue; });\r\n            if (builtNode.contentDocument) {\r\n                var _a = builtNode.contentDocument, documentElement_1 = _a.documentElement, head_1 = _a.head;\r\n                this_1.insertStyleRules(documentElement_1, head_1);\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        try {\r\n            for (var collected_1 = __values(collected), collected_1_1 = collected_1.next(); !collected_1_1.done; collected_1_1 = collected_1.next()) {\r\n                var _b = collected_1_1.value, mutationInQueue = _b.mutationInQueue, builtNode = _b.builtNode;\r\n                _loop_1(mutationInQueue, builtNode);\r\n            }\r\n        }\r\n        catch (e_7_1) { e_7 = { error: e_7_1 }; }\r\n        finally {\r\n            try {\r\n                if (collected_1_1 && !collected_1_1.done && (_a = collected_1.return)) _a.call(collected_1);\r\n            }\r\n            finally { if (e_7) throw e_7.error; }\r\n        }\r\n        var _c = this.iframe.contentDocument, documentElement = _c.documentElement, head = _c.head;\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            this.preloadAllImages();\r\n        }\r\n    };\r\n    Replayer.prototype.insertStyleRules = function (documentElement, head) {\r\n        var styleEl = document.createElement('style');\r\n        documentElement.insertBefore(styleEl, head);\r\n        var injectStylesRules = rules(this.config.blockClass).concat(this.config.insertStyleRules);\r\n        if (this.config.pauseAnimation) {\r\n            injectStylesRules.push('html.rrweb-paused * { animation-play-state: paused !important; }');\r\n        }\r\n        for (var idx = 0; idx < injectStylesRules.length; idx++) {\r\n            styleEl.sheet.insertRule(injectStylesRules[idx], idx);\r\n        }\r\n    };\r\n    Replayer.prototype.attachDocumentToIframe = function (mutation, iframeEl) {\r\n        var e_8, _a;\r\n        var _this = this;\r\n        var collected = [];\r\n        if (!iframeEl.contentDocument) {\r\n            var parent = iframeEl.parentNode;\r\n            while (parent) {\r\n                if (this.fragmentParentMap.has(parent)) {\r\n                    var frag = parent;\r\n                    var realParent = this.fragmentParentMap.get(frag);\r\n                    this.restoreRealParent(frag, realParent);\r\n                    break;\r\n                }\r\n                parent = parent.parentNode;\r\n            }\r\n        }\r\n        buildNodeWithSN(mutation.node, {\r\n            doc: iframeEl.contentDocument,\r\n            map: this.mirror.map,\r\n            hackCss: true,\r\n            skipChild: false,\r\n            afterAppend: function (builtNode) {\r\n                _this.collectIframeAndAttachDocument(collected, builtNode);\r\n            },\r\n        });\r\n        var _loop_2 = function (mutationInQueue, builtNode) {\r\n            this_2.attachDocumentToIframe(mutationInQueue, builtNode);\r\n            this_2.newDocumentQueue = this_2.newDocumentQueue.filter(function (m) { return m !== mutationInQueue; });\r\n            if (builtNode.contentDocument) {\r\n                var _a = builtNode.contentDocument, documentElement = _a.documentElement, head = _a.head;\r\n                this_2.insertStyleRules(documentElement, head);\r\n            }\r\n        };\r\n        var this_2 = this;\r\n        try {\r\n            for (var collected_2 = __values(collected), collected_2_1 = collected_2.next(); !collected_2_1.done; collected_2_1 = collected_2.next()) {\r\n                var _b = collected_2_1.value, mutationInQueue = _b.mutationInQueue, builtNode = _b.builtNode;\r\n                _loop_2(mutationInQueue, builtNode);\r\n            }\r\n        }\r\n        catch (e_8_1) { e_8 = { error: e_8_1 }; }\r\n        finally {\r\n            try {\r\n                if (collected_2_1 && !collected_2_1.done && (_a = collected_2.return)) _a.call(collected_2);\r\n            }\r\n            finally { if (e_8) throw e_8.error; }\r\n        }\r\n    };\r\n    Replayer.prototype.collectIframeAndAttachDocument = function (collected, builtNode) {\r\n        if (isIframeINode(builtNode)) {\r\n            var mutationInQueue = this.newDocumentQueue.find(function (m) { return m.parentId === builtNode.__sn.id; });\r\n            if (mutationInQueue) {\r\n                collected.push({ mutationInQueue: mutationInQueue, builtNode: builtNode });\r\n            }\r\n        }\r\n    };\r\n    Replayer.prototype.waitForStylesheetLoad = function () {\r\n        var _this = this;\r\n        var _a;\r\n        var head = (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.head;\r\n        if (head) {\r\n            var unloadSheets_1 = new Set();\r\n            var timer_1;\r\n            var beforeLoadState_1 = this.service.state;\r\n            var stateHandler_1 = function () {\r\n                beforeLoadState_1 = _this.service.state;\r\n            };\r\n            this.emitter.on(ReplayerEvents.Start, stateHandler_1);\r\n            this.emitter.on(ReplayerEvents.Pause, stateHandler_1);\r\n            var unsubscribe_1 = function () {\r\n                _this.emitter.off(ReplayerEvents.Start, stateHandler_1);\r\n                _this.emitter.off(ReplayerEvents.Pause, stateHandler_1);\r\n            };\r\n            head\r\n                .querySelectorAll('link[rel=\"stylesheet\"]')\r\n                .forEach(function (css) {\r\n                if (!css.sheet) {\r\n                    unloadSheets_1.add(css);\r\n                    css.addEventListener('load', function () {\r\n                        unloadSheets_1.delete(css);\r\n                        if (unloadSheets_1.size === 0 && timer_1 !== -1) {\r\n                            if (beforeLoadState_1.matches('playing')) {\r\n                                _this.play(_this.getCurrentTime());\r\n                            }\r\n                            _this.emitter.emit(ReplayerEvents.LoadStylesheetEnd);\r\n                            if (timer_1) {\r\n                                window.clearTimeout(timer_1);\r\n                            }\r\n                            unsubscribe_1();\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n            if (unloadSheets_1.size > 0) {\r\n                this.service.send({ type: 'PAUSE' });\r\n                this.emitter.emit(ReplayerEvents.LoadStylesheetStart);\r\n                timer_1 = window.setTimeout(function () {\r\n                    if (beforeLoadState_1.matches('playing')) {\r\n                        _this.play(_this.getCurrentTime());\r\n                    }\r\n                    timer_1 = -1;\r\n                    unsubscribe_1();\r\n                }, this.config.loadTimeout);\r\n            }\r\n        }\r\n    };\r\n    Replayer.prototype.preloadAllImages = function () {\r\n        var e_9, _a;\r\n        var _this = this;\r\n        var beforeLoadState = this.service.state;\r\n        var stateHandler = function () {\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        var count = 0;\r\n        var resolved = 0;\r\n        try {\r\n            for (var _b = __values(this.service.state.context.events), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n                var event = _c.value;\r\n                if (event.type === EventType.IncrementalSnapshot &&\r\n                    event.data.source === IncrementalSource.CanvasMutation &&\r\n                    event.data.property === 'drawImage' &&\r\n                    typeof event.data.args[0] === 'string' &&\r\n                    !this.imageMap.has(event)) {\r\n                    count++;\r\n                    var canvas = document.createElement('canvas');\r\n                    var ctx = canvas.getContext('2d');\r\n                    var imgd = ctx === null || ctx === void 0 ? void 0 : ctx.createImageData(canvas.width, canvas.height);\r\n                    var d = imgd === null || imgd === void 0 ? void 0 : imgd.data;\r\n                    d = JSON.parse(event.data.args[0]);\r\n                    ctx === null || ctx === void 0 ? void 0 : ctx.putImageData(imgd, 0, 0);\r\n                }\r\n            }\r\n        }\r\n        catch (e_9_1) { e_9 = { error: e_9_1 }; }\r\n        finally {\r\n            try {\r\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n            }\r\n            finally { if (e_9) throw e_9.error; }\r\n        }\r\n        if (count !== resolved) {\r\n            this.service.send({ type: 'PAUSE' });\r\n        }\r\n    };\r\n    Replayer.prototype.applyIncremental = function (e, isSync) {\r\n        var _this = this;\r\n        var _a, _b;\r\n        var d = e.data;\r\n        switch (d.source) {\r\n            case IncrementalSource.Mutation: {\r\n                if (isSync) {\r\n                    d.adds.forEach(function (m) { return _this.treeIndex.add(m); });\r\n                    d.texts.forEach(function (m) { return _this.treeIndex.text(m); });\r\n                    d.attributes.forEach(function (m) { return _this.treeIndex.attribute(m); });\r\n                    d.removes.forEach(function (m) { return _this.treeIndex.remove(m, _this.mirror); });\r\n                }\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                    var lastPosition = d.positions[d.positions.length - 1];\r\n                    this.moveAndHover(d, lastPosition.x, lastPosition.y, lastPosition.id);\r\n                }\r\n                else {\r\n                    d.positions.forEach(function (p) {\r\n                        var action = {\r\n                            doAction: function () {\r\n                                _this.moveAndHover(d, p.x, p.y, p.id);\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: function () { },\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) {\r\n                    break;\r\n                }\r\n                var event = new Event(MouseInteractions[d.type].toLowerCase());\r\n                var 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: target,\r\n                });\r\n                var triggerFocus = this.config.triggerFocus;\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                            this.moveAndHover(d, d.x, d.y, d.id);\r\n                            this.mouse.classList.remove('active');\r\n                            void this.mouse.offsetWidth;\r\n                            this.mouse.classList.add('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 (isSync) {\r\n                    this.treeIndex.scroll(d);\r\n                    break;\r\n                }\r\n                this.applyScroll(d);\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 (isSync) {\r\n                    this.treeIndex.input(d);\r\n                    break;\r\n                }\r\n                this.applyInput(d);\r\n                break;\r\n            }\r\n            case IncrementalSource.MediaInteraction: {\r\n                var target = this.mirror.getNode(d.id);\r\n                if (!target) {\r\n                    return this.debugNodeNotFound(d, d.id);\r\n                }\r\n                var mediaEl = target;\r\n                try {\r\n                    if (d.currentTime) {\r\n                        mediaEl.currentTime = d.currentTime;\r\n                    }\r\n                    if (d.type === MediaInteractions.Pause) {\r\n                        mediaEl.pause();\r\n                    }\r\n                    if (d.type === MediaInteractions.Play) {\r\n                        mediaEl.play();\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                var target = this.mirror.getNode(d.id);\r\n                if (!target) {\r\n                    return this.debugNodeNotFound(d, d.id);\r\n                }\r\n                var styleEl = target;\r\n                var parent = target.parentNode;\r\n                var usingVirtualParent_1 = this.fragmentParentMap.has(parent);\r\n                var styleSheet_1 = usingVirtualParent_1 ? null : styleEl.sheet;\r\n                var rules_1;\r\n                if (!styleSheet_1) {\r\n                    if (this.virtualStyleRulesMap.has(target)) {\r\n                        rules_1 = this.virtualStyleRulesMap.get(target);\r\n                    }\r\n                    else {\r\n                        rules_1 = [];\r\n                        this.virtualStyleRulesMap.set(target, rules_1);\r\n                    }\r\n                }\r\n                if (d.adds) {\r\n                    d.adds.forEach(function (_a) {\r\n                        var rule = _a.rule, index = _a.index;\r\n                        if (styleSheet_1) {\r\n                            try {\r\n                                var _index = index === undefined\r\n                                    ? undefined\r\n                                    : Math.min(index, styleSheet_1.cssRules.length);\r\n                                try {\r\n                                    styleSheet_1.insertRule(rule, _index);\r\n                                }\r\n                                catch (e) {\r\n                                }\r\n                            }\r\n                            catch (e) {\r\n                            }\r\n                        }\r\n                        else {\r\n                            rules_1 === null || rules_1 === void 0 ? void 0 : rules_1.push({ cssText: rule, index: index, type: StyleRuleType.Insert });\r\n                        }\r\n                    });\r\n                }\r\n                if (d.removes) {\r\n                    d.removes.forEach(function (_a) {\r\n                        var index = _a.index;\r\n                        if (usingVirtualParent_1) {\r\n                            rules_1 === null || rules_1 === void 0 ? void 0 : rules_1.push({ index: index, type: StyleRuleType.Remove });\r\n                        }\r\n                        else {\r\n                            try {\r\n                                styleSheet_1 === null || styleSheet_1 === void 0 ? void 0 : styleSheet_1.deleteRule(index);\r\n                            }\r\n                            catch (e) {\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.CanvasMutation: {\r\n                if (!this.config.UNSAFE_replayCanvas) {\r\n                    return;\r\n                }\r\n                var 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                    var ctx = target.getContext('2d');\r\n                    if (d.setter) {\r\n                        ctx[d.property] = d.args[0];\r\n                        return;\r\n                    }\r\n                    var original = ctx[d.property];\r\n                    if (d.property === 'drawImage' && typeof d.args[0] === 'string') {\r\n                        var image = this.imageMap.get(e);\r\n                        d.args[0] = image;\r\n                        original.apply(ctx, d.args);\r\n                    }\r\n                    else {\r\n                        original.apply(ctx, d.args);\r\n                    }\r\n                }\r\n                catch (error) {\r\n                    this.warnCanvasMutationFailed(d, d.id, error);\r\n                }\r\n                break;\r\n            }\r\n            case IncrementalSource.Font: {\r\n                try {\r\n                    var fontFace = new FontFace(d.family, d.buffer ? new Uint8Array(JSON.parse(d.fontSource)) : d.fontSource, d.descriptors);\r\n                    (_b = this.iframe.contentDocument) === null || _b === void 0 ? void 0 : _b.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        }\r\n    };\r\n    Replayer.prototype.applyMutation = function (d, useVirtualParent) {\r\n        var e_10, _a;\r\n        var _this = this;\r\n        d.removes.forEach(function (mutation) {\r\n            var target = _this.mirror.getNode(mutation.id);\r\n            if (!target) {\r\n                if (d.removes.find(function (r) { return r.id === mutation.parentId; })) {\r\n                    return;\r\n                }\r\n                return _this.warnNodeNotFound(d, mutation.id);\r\n            }\r\n            var parent = _this.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            _this.mirror.removeNodeFromMap(target);\r\n            if (parent) {\r\n                var realTarget = null;\r\n                var realParent = '__sn' in parent ? _this.fragmentParentMap.get(parent) : undefined;\r\n                if (realParent && realParent.contains(target)) {\r\n                    parent = realParent;\r\n                }\r\n                else if (_this.fragmentParentMap.has(target)) {\r\n                    realTarget = _this.fragmentParentMap.get(target);\r\n                    _this.fragmentParentMap.delete(target);\r\n                    target = realTarget;\r\n                }\r\n                try {\r\n                    parent.removeChild(target);\r\n                }\r\n                catch (error) {\r\n                    if (error instanceof DOMException) {\r\n                        _this.warn('parent could not remove child in mutation', parent, realParent, target, realTarget, d);\r\n                    }\r\n                    else {\r\n                        throw error;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        var legacy_missingNodeMap = __assign({}, this.legacy_missingNodeRetryMap);\r\n        var queue = [];\r\n        var nextNotInDOM = function (mutation) {\r\n            var next = null;\r\n            if (mutation.nextId) {\r\n                next = _this.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        var appendNode = function (mutation) {\r\n            var _a, _b;\r\n            if (!_this.iframe.contentDocument) {\r\n                return console.warn('Looks like your replayer has been destroyed.');\r\n            }\r\n            var parent = _this.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            var parentInDocument = null;\r\n            if (_this.iframe.contentDocument.contains) {\r\n                parentInDocument = _this.iframe.contentDocument.contains(parent);\r\n            }\r\n            else if (_this.iframe.contentDocument.body.contains) {\r\n                parentInDocument = _this.iframe.contentDocument.body.contains(parent);\r\n            }\r\n            var hasIframeChild = ((_b = (_a = parent).getElementsByTagName) === null || _b === void 0 ? void 0 : _b.call(_a, 'iframe').length) > 0;\r\n            if (useVirtualParent &&\r\n                parentInDocument &&\r\n                !isIframeINode(parent) &&\r\n                !hasIframeChild) {\r\n                var virtualParent = document.createDocumentFragment();\r\n                _this.mirror.map[mutation.parentId] = virtualParent;\r\n                _this.fragmentParentMap.set(virtualParent, parent);\r\n                _this.storeState(parent);\r\n                while (parent.firstChild) {\r\n                    virtualParent.appendChild(parent.firstChild);\r\n                }\r\n                parent = virtualParent;\r\n            }\r\n            if (mutation.node.isShadow && hasShadowRoot(parent)) {\r\n                parent = parent.shadowRoot;\r\n            }\r\n            var previous = null;\r\n            var next = null;\r\n            if (mutation.previousId) {\r\n                previous = _this.mirror.getNode(mutation.previousId);\r\n            }\r\n            if (mutation.nextId) {\r\n                next = _this.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 && (mutation.node.rootId !== mutation.node.id) && !_this.mirror.getNode(mutation.node.rootId)) {\r\n                return;\r\n            }\r\n            var targetDoc = mutation.node.rootId\r\n                ? _this.mirror.getNode(mutation.node.rootId)\r\n                : _this.iframe.contentDocument;\r\n            if (isIframeINode(parent)) {\r\n                _this.attachDocumentToIframe(mutation, parent);\r\n                return;\r\n            }\r\n            var target = buildNodeWithSN(mutation.node, {\r\n                doc: targetDoc,\r\n                map: _this.mirror.map,\r\n                skipChild: true,\r\n                hackCss: true,\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: mutation,\r\n                };\r\n                return;\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            if (isIframeINode(target)) {\r\n                var mutationInQueue_1 = _this.newDocumentQueue.find(function (m) { return m.parentId === target.__sn.id; });\r\n                if (mutationInQueue_1) {\r\n                    _this.attachDocumentToIframe(mutationInQueue_1, target);\r\n                    _this.newDocumentQueue = _this.newDocumentQueue.filter(function (m) { return m !== mutationInQueue_1; });\r\n                }\r\n                if (target.contentDocument) {\r\n                    var _c = target.contentDocument, documentElement = _c.documentElement, head = _c.head;\r\n                    _this.insertStyleRules(documentElement, head);\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(function (mutation) {\r\n            appendNode(mutation);\r\n        });\r\n        var startTime = Date.now();\r\n        while (queue.length) {\r\n            var 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            try {\r\n                for (var resolveTrees_1 = (e_10 = void 0, __values(resolveTrees)), resolveTrees_1_1 = resolveTrees_1.next(); !resolveTrees_1_1.done; resolveTrees_1_1 = resolveTrees_1.next()) {\r\n                    var tree = resolveTrees_1_1.value;\r\n                    var parent = this.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, function (mutation) {\r\n                            appendNode(mutation);\r\n                        });\r\n                    }\r\n                }\r\n            }\r\n            catch (e_10_1) { e_10 = { error: e_10_1 }; }\r\n            finally {\r\n                try {\r\n                    if (resolveTrees_1_1 && !resolveTrees_1_1.done && (_a = resolveTrees_1.return)) _a.call(resolveTrees_1);\r\n                }\r\n                finally { if (e_10) throw e_10.error; }\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        d.texts.forEach(function (mutation) {\r\n            var target = _this.mirror.getNode(mutation.id);\r\n            if (!target) {\r\n                if (d.removes.find(function (r) { return r.id === mutation.id; })) {\r\n                    return;\r\n                }\r\n                return _this.warnNodeNotFound(d, mutation.id);\r\n            }\r\n            if (_this.fragmentParentMap.has(target)) {\r\n                target = _this.fragmentParentMap.get(target);\r\n            }\r\n            target.textContent = mutation.value;\r\n        });\r\n        d.attributes.forEach(function (mutation) {\r\n            var target = _this.mirror.getNode(mutation.id);\r\n            if (!target) {\r\n                if (d.removes.find(function (r) { return r.id === mutation.id; })) {\r\n                    return;\r\n                }\r\n                return _this.warnNodeNotFound(d, mutation.id);\r\n            }\r\n            if (_this.fragmentParentMap.has(target)) {\r\n                target = _this.fragmentParentMap.get(target);\r\n            }\r\n            for (var attributeName in mutation.attributes) {\r\n                if (typeof attributeName === 'string') {\r\n                    var 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                            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                        var styleValues = value;\r\n                        var targetEl = target;\r\n                        for (var 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                                var svp = styleValues[s];\r\n                                targetEl.style.setProperty(s, svp[0], svp[1]);\r\n                            }\r\n                            else {\r\n                                var 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    Replayer.prototype.applyScroll = function (d) {\r\n        var target = this.mirror.getNode(d.id);\r\n        if (!target) {\r\n            return this.debugNodeNotFound(d, d.id);\r\n        }\r\n        if (target === this.iframe.contentDocument) {\r\n            this.iframe.contentWindow.scrollTo({\r\n                top: d.y,\r\n                left: d.x,\r\n                behavior: 'smooth',\r\n            });\r\n        }\r\n        else {\r\n            try {\r\n                target.scrollTop = d.y;\r\n                target.scrollLeft = d.x;\r\n            }\r\n            catch (error) {\r\n            }\r\n        }\r\n    };\r\n    Replayer.prototype.applyInput = function (d) {\r\n        var 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    Replayer.prototype.legacy_resolveMissingNode = function (map, parent, target, targetMutation) {\r\n        var previousId = targetMutation.previousId, nextId = targetMutation.nextId;\r\n        var previousInMap = previousId && map[previousId];\r\n        var nextInMap = nextId && map[nextId];\r\n        if (previousInMap) {\r\n            var _a = previousInMap, node = _a.node, mutation = _a.mutation;\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            var _b = nextInMap, node = _b.node, mutation = _b.mutation;\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    Replayer.prototype.moveAndHover = function (d, x, y, id) {\r\n        var target = this.mirror.getNode(id);\r\n        if (!target) {\r\n            return this.debugNodeNotFound(d, id);\r\n        }\r\n        var base = getBaseDimension(target, this.iframe);\r\n        var _x = x * base.absoluteScale + base.x;\r\n        var _y = y * base.absoluteScale + base.y;\r\n        this.mouse.style.left = _x + \"px\";\r\n        this.mouse.style.top = _y + \"px\";\r\n        this.drawMouseTail({ x: _x, y: _y });\r\n        this.hoverElements(target);\r\n    };\r\n    Replayer.prototype.drawMouseTail = function (position) {\r\n        var _this = this;\r\n        if (!this.mouseTail) {\r\n            return;\r\n        }\r\n        var _a = this.config.mouseTail === true\r\n            ? defaultMouseTailConfig\r\n            : Object.assign({}, defaultMouseTailConfig, this.config.mouseTail), lineCap = _a.lineCap, lineWidth = _a.lineWidth, strokeStyle = _a.strokeStyle, duration = _a.duration;\r\n        var draw = function () {\r\n            if (!_this.mouseTail) {\r\n                return;\r\n            }\r\n            var 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(function (p) { return ctx.lineTo(p.x, p.y); });\r\n            ctx.stroke();\r\n        };\r\n        this.tailPositions.push(position);\r\n        draw();\r\n        setTimeout(function () {\r\n            _this.tailPositions = _this.tailPositions.filter(function (p) { return p !== position; });\r\n            draw();\r\n        }, duration / this.speedService.state.context.timer.speed);\r\n    };\r\n    Replayer.prototype.hoverElements = function (el) {\r\n        var _a;\r\n        (_a = this.iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.\\\\:hover').forEach(function (hoveredEl) {\r\n            hoveredEl.classList.remove(':hover');\r\n        });\r\n        var 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    Replayer.prototype.isUserInteraction = function (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    Replayer.prototype.backToNormal = function () {\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    Replayer.prototype.restoreRealParent = function (frag, parent) {\r\n        this.mirror.map[parent.__sn.id] = parent;\r\n        if (parent.__sn.type === NodeType.Element &&\r\n            parent.__sn.tagName === 'textarea' &&\r\n            frag.textContent) {\r\n            parent.value = frag.textContent;\r\n        }\r\n        parent.appendChild(frag);\r\n        this.restoreState(parent);\r\n    };\r\n    Replayer.prototype.storeState = function (parent) {\r\n        var e_11, _a;\r\n        if (parent) {\r\n            if (parent.nodeType === parent.ELEMENT_NODE) {\r\n                var parentElement = parent;\r\n                if (parentElement.scrollLeft || parentElement.scrollTop) {\r\n                    this.elementStateMap.set(parent, {\r\n                        scroll: [parentElement.scrollLeft, parentElement.scrollTop],\r\n                    });\r\n                }\r\n                if (parentElement.tagName === 'STYLE')\r\n                    storeCSSRules(parentElement, this.virtualStyleRulesMap);\r\n                var children = parentElement.children;\r\n                try {\r\n                    for (var _b = __values(Array.from(children)), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n                        var child = _c.value;\r\n                        this.storeState(child);\r\n                    }\r\n                }\r\n                catch (e_11_1) { e_11 = { error: e_11_1 }; }\r\n                finally {\r\n                    try {\r\n                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n                    }\r\n                    finally { if (e_11) throw e_11.error; }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    Replayer.prototype.restoreState = function (parent) {\r\n        var e_12, _a;\r\n        if (parent.nodeType === parent.ELEMENT_NODE) {\r\n            var parentElement = parent;\r\n            if (this.elementStateMap.has(parent)) {\r\n                var storedState = this.elementStateMap.get(parent);\r\n                if (storedState.scroll) {\r\n                    parentElement.scrollLeft = storedState.scroll[0];\r\n                    parentElement.scrollTop = storedState.scroll[1];\r\n                }\r\n                this.elementStateMap.delete(parent);\r\n            }\r\n            var children = parentElement.children;\r\n            try {\r\n                for (var _b = __values(Array.from(children)), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n                    var child = _c.value;\r\n                    this.restoreState(child);\r\n                }\r\n            }\r\n            catch (e_12_1) { e_12 = { error: e_12_1 }; }\r\n            finally {\r\n                try {\r\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n                }\r\n                finally { if (e_12) throw e_12.error; }\r\n            }\r\n        }\r\n    };\r\n    Replayer.prototype.restoreNodeSheet = function (node) {\r\n        var storedRules = this.virtualStyleRulesMap.get(node);\r\n        if (node.nodeName !== 'STYLE') {\r\n            return;\r\n        }\r\n        if (!storedRules) {\r\n            return;\r\n        }\r\n        var styleNode = node;\r\n        applyVirtualStyleRulesToNode(storedRules, styleNode);\r\n    };\r\n    Replayer.prototype.warnNodeNotFound = function (d, id) {\r\n        if (this.treeIndex['removeIdSet'].has(id)) {\r\n            this.warn(\"Node with id '\" + id + \"' was previously removed. \", d);\r\n        }\r\n        else {\r\n            this.warn(\"Node with id '\" + id + \"' not found. \", d);\r\n        }\r\n    };\r\n    Replayer.prototype.warnCanvasMutationFailed = function (d, id, error) {\r\n        this.warn(\"Has error on update canvas '\" + id + \"'\", d, error);\r\n    };\r\n    Replayer.prototype.debugNodeNotFound = function (d, id) {\r\n        if (this.treeIndex['removeIdSet'].has(id)) {\r\n            this.debug(REPLAY_CONSOLE_PREFIX, \"Node with id '\" + id + \"' was previously removed. \", d);\r\n        }\r\n        else {\r\n            this.debug(REPLAY_CONSOLE_PREFIX, \"Node with id '\" + id + \"' not found. \", d);\r\n        }\r\n    };\r\n    Replayer.prototype.warn = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        if (!this.config.showWarning) {\r\n            return;\r\n        }\r\n        console.warn.apply(console, __spread([REPLAY_CONSOLE_PREFIX], args));\r\n    };\r\n    Replayer.prototype.debug = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        if (!this.config.showDebug) {\r\n            return;\r\n        }\r\n        console.log.apply(console, __spread([REPLAY_CONSOLE_PREFIX], args));\r\n    };\r\n    return Replayer;\r\n}());\n\nexport { Replayer };\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 = hMap(flt, 9, 0), flrm = hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = hMap(fdt, 5, 0), fdrm = 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    if (final && !lm)\n        return buf;\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 = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = 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// CRC32 table\nvar crct = new u32(256);\nfor (var i = 0; i < 256; ++i) {\n    var c = i, k = 9;\n    while (--k)\n        c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n    crct[i] = c;\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","var MARK = 'v1';\n\nexport { MARK };\n","import { strFromU8, unzlibSync, strToU8 } from '../../ext/fflate/esm/browser.js';\nimport { MARK } from './base.js';\n\nvar unpack = function (raw) {\r\n    if (typeof raw !== 'string') {\r\n        return raw;\r\n    }\r\n    try {\r\n        var 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        var 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","declare global {\r\n  interface Document {\r\n    mozExitFullscreen: Document['exitFullscreen'];\r\n    webkitExitFullscreen: Document['exitFullscreen'];\r\n    msExitFullscreen: Document['exitFullscreen'];\r\n    webkitIsFullScreen: Document['fullscreen'];\r\n    mozFullScreen: Document['fullscreen'];\r\n    msFullscreenElement: Document['fullscreen'];\r\n  }\r\n\r\n  interface HTMLElement {\r\n    mozRequestFullScreen: Element['requestFullscreen'];\r\n    webkitRequestFullscreen: Element['requestFullscreen'];\r\n    msRequestFullscreen: Element['requestFullscreen'];\r\n  }\r\n}\r\n\r\nexport function inlineCss(cssObj: Record<string, string>): string {\r\n  let style = '';\r\n  Object.keys(cssObj).forEach((key) => {\r\n    style += `${key}: ${cssObj[key]};`;\r\n  });\r\n  return style;\r\n}\r\n\r\nfunction padZero(num: number, len = 2): string {\r\n  let str = String(num);\r\n  const threshold = Math.pow(10, len - 1);\r\n  if (num < threshold) {\r\n    while (String(threshold).length > str.length) {\r\n      str = '0' + num;\r\n    }\r\n  }\r\n  return str;\r\n}\r\n\r\nconst SECOND = 1000;\r\nconst MINUTE = 60 * SECOND;\r\nconst HOUR = 60 * MINUTE;\r\nexport function formatTime(ms: number): string {\r\n  if (ms <= 0) {\r\n    return '00:00';\r\n  }\r\n  const hour = Math.floor(ms / HOUR);\r\n  ms = ms % HOUR;\r\n  const minute = Math.floor(ms / MINUTE);\r\n  ms = ms % MINUTE;\r\n  const second = Math.floor(ms / SECOND);\r\n  if (hour) {\r\n    return `${padZero(hour)}:${padZero(minute)}:${padZero(second)}`;\r\n  }\r\n  return `${padZero(minute)}:${padZero(second)}`;\r\n}\r\n\r\nexport function openFullscreen(el: HTMLElement): Promise<void> {\r\n  if (el.requestFullscreen) {\r\n    return el.requestFullscreen();\r\n  } else if (el.mozRequestFullScreen) {\r\n    /* Firefox */\r\n    return el.mozRequestFullScreen();\r\n  } else if (el.webkitRequestFullscreen) {\r\n    /* Chrome, Safari and Opera */\r\n    return el.webkitRequestFullscreen();\r\n  } else if (el.msRequestFullscreen) {\r\n    /* IE/Edge */\r\n    return el.msRequestFullscreen();\r\n  }\r\n}\r\n\r\nexport function exitFullscreen(): Promise<void> {\r\n  if (document.exitFullscreen) {\r\n    return document.exitFullscreen();\r\n  } else if (document.mozExitFullscreen) {\r\n    /* Firefox */\r\n    return document.mozExitFullscreen();\r\n  } else if (document.webkitExitFullscreen) {\r\n    /* Chrome, Safari and Opera */\r\n    return document.webkitExitFullscreen();\r\n  } else if (document.msExitFullscreen) {\r\n    /* IE/Edge */\r\n    return document.msExitFullscreen();\r\n  }\r\n}\r\n\r\nexport function isFullscreen(): boolean {\r\n  return (\r\n    document.fullscreen ||\r\n    document.webkitIsFullScreen ||\r\n    document.mozFullScreen ||\r\n    document.msFullscreenElement\r\n  );\r\n}\r\n\r\nexport function onFullscreenChange(handler: () => unknown): () => void {\r\n  document.addEventListener('fullscreenchange', handler);\r\n  document.addEventListener('webkitfullscreenchange', handler);\r\n  document.addEventListener('mozfullscreenchange', handler);\r\n  document.addEventListener('MSFullscreenChange', handler);\r\n\r\n  return () => {\r\n    document.removeEventListener('fullscreenchange', handler);\r\n    document.removeEventListener('webkitfullscreenchange', handler);\r\n    document.removeEventListener('mozfullscreenchange', handler);\r\n    document.removeEventListener('MSFullscreenChange', handler);\r\n  };\r\n}\r\n\r\nexport function typeOf(\r\n  obj: unknown,\r\n):\r\n  | 'boolean'\r\n  | 'number'\r\n  | 'string'\r\n  | 'function'\r\n  | 'array'\r\n  | 'date'\r\n  | 'regExp'\r\n  | 'undefined'\r\n  | 'null'\r\n  | 'object' {\r\n  const toString = Object.prototype.toString;\r\n  const map = {\r\n    '[object Boolean]': 'boolean',\r\n    '[object Number]': 'number',\r\n    '[object String]': 'string',\r\n    '[object Function]': 'function',\r\n    '[object Array]': 'array',\r\n    '[object Date]': 'date',\r\n    '[object RegExp]': 'regExp',\r\n    '[object Undefined]': 'undefined',\r\n    '[object Null]': 'null',\r\n    '[object Object]': 'object',\r\n  };\r\n  return map[toString.call(obj)];\r\n}\r\n","<script lang=\"ts\">\r\n  export let disabled: boolean;\r\n  export let checked: boolean;\r\n  export let id: string;\r\n  export let label: string;\r\n</script>\r\n\r\n<style>\r\n  .switch {\r\n    height: 1em;\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n\r\n  .switch.disabled {\r\n    opacity: 0.5;\r\n  }\r\n\r\n  .label {\r\n    margin: 0 8px;\r\n  }\r\n\r\n  .switch input[type='checkbox'] {\r\n    position: absolute;\r\n    opacity: 0;\r\n  }\r\n\r\n  .switch label {\r\n    width: 2em;\r\n    height: 1em;\r\n    position: relative;\r\n    cursor: pointer;\r\n    display: block;\r\n  }\r\n\r\n  .switch.disabled label {\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .switch label:before {\r\n    content: '';\r\n    position: absolute;\r\n    width: 2em;\r\n    height: 1em;\r\n    left: 0.1em;\r\n    transition: background 0.1s ease;\r\n    background: rgba(73, 80, 246, 0.5);\r\n    border-radius: 50px;\r\n  }\r\n\r\n  .switch label:after {\r\n    content: '';\r\n    position: absolute;\r\n    width: 1em;\r\n    height: 1em;\r\n    border-radius: 50px;\r\n    left: 0;\r\n    transition: all 0.2s ease;\r\n    box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);\r\n    background: #fcfff4;\r\n    animation: switch-off 0.2s ease-out;\r\n    z-index: 2;\r\n  }\r\n\r\n  .switch input[type='checkbox']:checked + label:before {\r\n    background: rgb(73, 80, 246);\r\n  }\r\n\r\n  .switch input[type='checkbox']:checked + label:after {\r\n    animation: switch-on 0.2s ease-out;\r\n    left: 1.1em;\r\n  }\r\n</style>\r\n\r\n<div class=\"switch\" class:disabled>\r\n  <input type=\"checkbox\" {id} bind:checked {disabled} />\r\n  <label for={id} />\r\n  <span class=\"label\">{label}</span>\r\n</div>\r\n","<script lang=\"ts\">\r\n  import { EventType } from 'wr-rrweb';\r\n  import type { Replayer } from 'wr-rrweb';\r\n  import type { playerMetaData } from 'wr-rrweb/typings/types';\r\n  import type {\r\n    PlayerMachineState,\r\n    SpeedMachineState,\r\n  } from 'wr-rrweb/typings/replay/machine';\r\n  import {\r\n    onMount,\r\n    onDestroy,\r\n    createEventDispatcher,\r\n    afterUpdate,\r\n  } from 'svelte';\r\n  import { formatTime } from './utils';\r\n  import Switch from './components/Switch.svelte';\r\n\r\n  const dispatch = createEventDispatcher();\r\n\r\n  export let replayer: Replayer;\r\n  export let showController: boolean;\r\n  export let autoPlay: boolean;\r\n  export let skipInactive: boolean;\r\n  export let speedOption: number[];\r\n  export let speed = speedOption.length ? speedOption[0] : 1;\r\n  export let tags: Record<string, string> = {};\r\n\r\n  let currentTime = 0;\r\n  $: {\r\n    dispatch('ui-update-current-time', { payload: currentTime });\r\n  }\r\n  let timer: number | null = null;\r\n  let playerState: 'playing' | 'paused' | 'live';\r\n  $: {\r\n    dispatch('ui-update-player-state', { payload: playerState });\r\n  }\r\n  let speedState: 'normal' | 'skipping';\r\n  let progress: HTMLElement;\r\n  let step: HTMLElement;\r\n  let finished: boolean;\r\n\r\n  let meta: playerMetaData;\r\n  $: meta = replayer.getMetaData();\r\n  let percentage: string;\r\n  $: {\r\n    const percent = Math.min(1, currentTime / meta.totalTime);\r\n    percentage = `${100 * percent}%`;\r\n    dispatch('ui-update-progress', { payload: percent });\r\n  }\r\n  type CustomEvent = {\r\n    name: string;\r\n    background: string;\r\n    position: string;\r\n  };\r\n  let customEvents: CustomEvent[];\r\n  $: customEvents = (() => {\r\n    const { context } = replayer.service.state;\r\n    const totalEvents = context.events.length;\r\n    const start = context.events[0].timestamp;\r\n    const end = context.events[totalEvents - 1].timestamp;\r\n    const customEvents: CustomEvent[] = [];\r\n\r\n    // calculate tag position.\r\n    const position = (startTime: number, endTime: number, tagTime: number) => {\r\n      const sessionDuration = endTime - startTime;\r\n      const eventDuration = endTime - tagTime;\r\n      const eventPosition = 100 - (eventDuration / sessionDuration) * 100;\r\n\r\n      return eventPosition.toFixed(2);\r\n    };\r\n\r\n    // loop through all the events and find out custom event.\r\n    context.events.forEach((event) => {\r\n      /**\r\n       * we are only interested in custom event and calculate it's position\r\n       * to place it in player's timeline.\r\n       */\r\n      if (event.type === EventType.Custom) {\r\n        const customEvent = {\r\n          name: event.data.tag,\r\n          background: tags[event.data.tag] || 'rgb(73, 80, 246)',\r\n          position: `${position(start, end, event.timestamp)}%`,\r\n        };\r\n        customEvents.push(customEvent);\r\n      }\r\n    });\r\n\r\n    return customEvents;\r\n  })();\r\n\r\n  const loopTimer = () => {\r\n    stopTimer();\r\n\r\n    function update() {\r\n      currentTime = replayer.getCurrentTime();\r\n\r\n      if (currentTime < meta.totalTime) {\r\n        timer = requestAnimationFrame(update);\r\n      }\r\n    }\r\n\r\n    timer = requestAnimationFrame(update);\r\n  };\r\n\r\n  const stopTimer = () => {\r\n    if (timer) {\r\n      cancelAnimationFrame(timer);\r\n      timer = null;\r\n    }\r\n  };\r\n\r\n  export const toggle = () => {\r\n    switch (playerState) {\r\n      case 'playing':\r\n        pause();\r\n        break;\r\n      case 'paused':\r\n        play();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  export const play = () => {\r\n    if (playerState !== 'paused') {\r\n      return;\r\n    }\r\n    if (finished) {\r\n      replayer.play();\r\n      finished = false;\r\n    } else {\r\n      replayer.play(currentTime);\r\n    }\r\n  };\r\n\r\n  export const pause = () => {\r\n    if (playerState !== 'playing') {\r\n      return;\r\n    }\r\n    replayer.pause();\r\n  };\r\n\r\n  export const goto = (timeOffset: number, play?: boolean) => {\r\n    currentTime = timeOffset;\r\n    const resumePlaying =\r\n      typeof play === 'boolean' ? play : playerState === 'playing';\r\n    if (resumePlaying) {\r\n      replayer.play(timeOffset);\r\n    } else {\r\n      replayer.pause(timeOffset);\r\n    }\r\n  };\r\n\r\n  const handleProgressClick = (event: MouseEvent) => {\r\n    if (speedState === 'skipping') {\r\n      return;\r\n    }\r\n    const progressRect = progress.getBoundingClientRect();\r\n    const x = event.clientX - progressRect.left;\r\n    let percent = x / progressRect.width;\r\n    if (percent < 0) {\r\n      percent = 0;\r\n    } else if (percent > 1) {\r\n      percent = 1;\r\n    }\r\n    const timeOffset = meta.totalTime * percent;\r\n    goto(timeOffset);\r\n  };\r\n\r\n  export const setSpeed = (newSpeed: number) => {\r\n    let needFreeze = playerState === 'playing';\r\n    speed = newSpeed;\r\n    if (needFreeze) {\r\n      replayer.pause();\r\n    }\r\n    replayer.setConfig({ speed });\r\n    if (needFreeze) {\r\n      replayer.play(currentTime);\r\n    }\r\n  };\r\n\r\n  export const toggleSkipInactive = () => {\r\n    skipInactive = !skipInactive;\r\n  };\r\n\r\n  onMount(() => {\r\n    playerState = replayer.service.state.value as typeof playerState;\r\n    speedState = replayer.speedService.state.value as typeof speedState;\r\n    replayer.on(\r\n      'state-change',\r\n      (states: { player?: PlayerMachineState; speed?: SpeedMachineState }) => {\r\n        const { player, speed } = states;\r\n        if (player?.value && playerState !== player.value) {\r\n          playerState = player.value as typeof playerState;\r\n          switch (playerState) {\r\n            case 'playing':\r\n              loopTimer();\r\n              break;\r\n            case 'paused':\r\n              stopTimer();\r\n              break;\r\n            default:\r\n              break;\r\n          }\r\n        }\r\n        if (speed?.value && speedState !== speed.value) {\r\n          speedState = speed.value as typeof speedState;\r\n        }\r\n      },\r\n    );\r\n    replayer.on('finish', () => {\r\n      finished = true;\r\n    });\r\n\r\n    if (autoPlay) {\r\n      replayer.play();\r\n    }\r\n  });\r\n\r\n  afterUpdate(() => {\r\n    if (skipInactive !== replayer.config.skipInactive) {\r\n      replayer.setConfig({ skipInactive });\r\n    }\r\n  });\r\n\r\n  onDestroy(() => {\r\n    replayer.pause();\r\n    stopTimer();\r\n  });\r\n</script>\r\n\r\n<style>\r\n  .rr-controller {\r\n    width: 100%;\r\n    height: 80px;\r\n    background: #fff;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: space-around;\r\n    align-items: center;\r\n    border-radius: 0 0 5px 5px;\r\n  }\r\n\r\n  .rr-timeline {\r\n    width: 80%;\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n\r\n  .rr-timeline__time {\r\n    display: inline-block;\r\n    width: 100px;\r\n    text-align: center;\r\n    color: #11103e;\r\n  }\r\n\r\n  .rr-progress {\r\n    flex: 1;\r\n    height: 12px;\r\n    background: #eee;\r\n    position: relative;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    box-sizing: border-box;\r\n    border-top: solid 4px #fff;\r\n    border-bottom: solid 4px #fff;\r\n  }\r\n\r\n  .rr-progress.disabled {\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .rr-progress__step {\r\n    height: 100%;\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    background: #e0e1fe;\r\n  }\r\n\r\n  .rr-progress__handler {\r\n    width: 20px;\r\n    height: 20px;\r\n    border-radius: 10px;\r\n    position: absolute;\r\n    top: 2px;\r\n    transform: translate(-50%, -50%);\r\n    background: rgb(73, 80, 246);\r\n  }\r\n\r\n  .rr-controller__btns {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 13px;\r\n  }\r\n\r\n  .rr-controller__btns button {\r\n    width: 32px;\r\n    height: 32px;\r\n    display: flex;\r\n    padding: 0;\r\n    align-items: center;\r\n    justify-content: center;\r\n    background: none;\r\n    border: none;\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .rr-controller__btns button:active {\r\n    background: #e0e1fe;\r\n  }\r\n\r\n  .rr-controller__btns button.active {\r\n    color: #fff;\r\n    background: rgb(73, 80, 246);\r\n  }\r\n\r\n  .rr-controller__btns button:disabled {\r\n    cursor: not-allowed;\r\n  }\r\n</style>\r\n\r\n{#if showController}\r\n  <div class=\"rr-controller\">\r\n    <div class=\"rr-timeline\">\r\n      <span class=\"rr-timeline__time\">{formatTime(currentTime)}</span>\r\n      <div\r\n        class=\"rr-progress\"\r\n        class:disabled={speedState === 'skipping'}\r\n        bind:this={progress}\r\n        on:click={(event) => handleProgressClick(event)}>\r\n        <div\r\n          class=\"rr-progress__step\"\r\n          bind:this={step}\r\n          style=\"width: {percentage}\" />\r\n        {#each customEvents as event}\r\n          <div\r\n            title={event.name}\r\n            style=\"width: 10px;height: 5px;position: absolute;top:\r\n            2px;transform: translate(-50%, -50%);background: {event.background};left:\r\n            {event.position};\" />\r\n        {/each}\r\n\r\n        <div class=\"rr-progress__handler\" style=\"left: {percentage}\" />\r\n      </div>\r\n      <span class=\"rr-timeline__time\">{formatTime(meta.totalTime)}</span>\r\n    </div>\r\n    <div class=\"rr-controller__btns\">\r\n      <button on:click={toggle}>\r\n        {#if playerState === 'playing'}\r\n          <svg\r\n            class=\"icon\"\r\n            viewBox=\"0 0 1024 1024\"\r\n            version=\"1.1\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n            width=\"16\"\r\n            height=\"16\">\r\n            <path\r\n              d=\"M682.65984 128q53.00224 0 90.50112 37.49888t37.49888 90.50112l0\r\n              512q0 53.00224-37.49888 90.50112t-90.50112\r\n              37.49888-90.50112-37.49888-37.49888-90.50112l0-512q0-53.00224\r\n              37.49888-90.50112t90.50112-37.49888zM341.34016 128q53.00224 0\r\n              90.50112 37.49888t37.49888 90.50112l0 512q0 53.00224-37.49888\r\n              90.50112t-90.50112\r\n              37.49888-90.50112-37.49888-37.49888-90.50112l0-512q0-53.00224\r\n              37.49888-90.50112t90.50112-37.49888zM341.34016 213.34016q-17.67424\r\n              0-30.16704 12.4928t-12.4928 30.16704l0 512q0 17.67424 12.4928\r\n              30.16704t30.16704 12.4928 30.16704-12.4928\r\n              12.4928-30.16704l0-512q0-17.67424-12.4928-30.16704t-30.16704-12.4928zM682.65984\r\n              213.34016q-17.67424 0-30.16704 12.4928t-12.4928 30.16704l0 512q0\r\n              17.67424 12.4928 30.16704t30.16704 12.4928 30.16704-12.4928\r\n              12.4928-30.16704l0-512q0-17.67424-12.4928-30.16704t-30.16704-12.4928z\" />\r\n          </svg>\r\n        {:else}\r\n          <svg\r\n            class=\"icon\"\r\n            viewBox=\"0 0 1024 1024\"\r\n            version=\"1.1\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n            width=\"16\"\r\n            height=\"16\">\r\n            <path\r\n              d=\"M170.65984 896l0-768 640 384zM644.66944\r\n              512l-388.66944-233.32864 0 466.65728z\" />\r\n          </svg>\r\n        {/if}\r\n      </button>\r\n      {#each speedOption as s}\r\n        <button\r\n          class:active={s === speed && speedState !== 'skipping'}\r\n          on:click={() => setSpeed(s)}\r\n          disabled={speedState === 'skipping'}>\r\n          {s}x\r\n        </button>\r\n      {/each}\r\n      <Switch\r\n        id=\"skip\"\r\n        bind:checked={skipInactive}\r\n        disabled={speedState === 'skipping'}\r\n        label=\"skip inactive\" />\r\n      <button on:click={() => dispatch('fullscreen')}>\r\n        <svg\r\n          class=\"icon\"\r\n          viewBox=\"0 0 1024 1024\"\r\n          version=\"1.1\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n          width=\"16\"\r\n          height=\"16\">\r\n          <defs>\r\n            <style type=\"text/css\">\r\n\r\n            </style>\r\n          </defs>\r\n          <path\r\n            d=\"M916 380c-26.4 0-48-21.6-48-48L868 223.2 613.6 477.6c-18.4\r\n            18.4-48.8 18.4-68 0-18.4-18.4-18.4-48.8 0-68L800 156 692 156c-26.4\r\n            0-48-21.6-48-48 0-26.4 21.6-48 48-48l224 0c26.4 0 48 21.6 48 48l0\r\n            224C964 358.4 942.4 380 916 380zM231.2 860l108.8 0c26.4 0 48 21.6 48\r\n            48s-21.6 48-48 48l-224 0c-26.4 0-48-21.6-48-48l0-224c0-26.4 21.6-48\r\n            48-48 26.4 0 48 21.6 48 48L164 792l253.6-253.6c18.4-18.4 48.8-18.4\r\n            68 0 18.4 18.4 18.4 48.8 0 68L231.2 860z\"\r\n            p-id=\"1286\" />\r\n        </svg>\r\n      </button>\r\n    </div>\r\n  </div>\r\n{/if}\r\n","<script lang=\"ts\">\r\n  import { onMount, onDestroy } from 'svelte';\r\n  import { Replayer, unpack } from 'wr-rrweb';\r\n  import type { eventWithTime } from 'wr-rrweb/typings/types';\r\n  import {\r\n    inlineCss,\r\n    openFullscreen,\r\n    exitFullscreen,\r\n    isFullscreen,\r\n    onFullscreenChange,\r\n    typeOf,\r\n  } from './utils';\r\n  import Controller from './Controller.svelte';\r\n\r\n  export let width: number = 1024;\r\n  export let height: number = 576;\r\n  export let events: eventWithTime[] = [];\r\n  export let skipInactive: boolean = true;\r\n  export let autoPlay: boolean = true;\r\n  export let speedOption: number[] = [1, 2, 4, 8];\r\n  export let speed: number = 1;\r\n  export let showController: boolean = true;\r\n  export let tags: Record<string, string> = {};\r\n\r\n  let replayer: Replayer;\r\n  \r\n  export const getMirror = () => replayer.getMirror();\r\n\r\n  const controllerHeight = 80;\r\n  let player: HTMLElement;\r\n  let frame: HTMLElement;\r\n  let fullscreenListener: undefined | (() => void);\r\n  let _width: number = width;\r\n  let _height: number = height;\r\n  let controller: {\r\n    toggle: () => void;\r\n    setSpeed: (speed: number) => void;\r\n    toggleSkipInactive: () => void;\r\n  } & Controller;\r\n\r\n  let style: string;\r\n  $: style = inlineCss({\r\n    width: `${width}px`,\r\n    height: `${height}px`,\r\n  });\r\n  let playerStyle: string;\r\n  $: playerStyle = inlineCss({\r\n    width: `${width}px`,\r\n    height: `${height + (showController ? controllerHeight : 0)}px`,\r\n  });\r\n\r\n  const updateScale = (\r\n    el: HTMLElement,\r\n    frameDimension: { width: number; height: number },\r\n  ) => {\r\n    const widthScale = width / frameDimension.width;\r\n    const heightScale = height / frameDimension.height;\r\n    el.style.transform =\r\n      `scale(${Math.min(widthScale, heightScale, 1)})` +\r\n      'translate(-50%, -50%)';\r\n  };\r\n\r\n  export const triggerResize = () => {\r\n    updateScale(replayer.wrapper, {\r\n      width: replayer.iframe.offsetWidth,\r\n      height: replayer.iframe.offsetHeight,\r\n    });\r\n  };\r\n\r\n  export const toggleFullscreen = () => {\r\n    if (player) {\r\n      isFullscreen() ? exitFullscreen() : openFullscreen(player);\r\n    }\r\n  };\r\n\r\n  export const addEventListener = (\r\n    event: string,\r\n    handler: (detail: unknown) => unknown,\r\n  ) => {\r\n    replayer.on(event, handler);\r\n    switch (event) {\r\n      case 'ui-update-current-time':\r\n      case 'ui-update-progress':\r\n      case 'ui-update-player-state':\r\n        controller.$on(event, ({ detail }) => handler(detail));\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  export const addEvent = (event: eventWithTime) => {\r\n    replayer.addEvent(event);\r\n  };\r\n  export const getMetaData = () => replayer.getMetaData();\r\n  export const getReplayer = () => replayer;\r\n\r\n  // by pass controller methods as public API\r\n  export const toggle = () => {\r\n    controller.toggle();\r\n  };\r\n  export const setSpeed = (speed: number) => {\r\n    controller.setSpeed(speed);\r\n  };\r\n  export const toggleSkipInactive = () => {\r\n    controller.toggleSkipInactive();\r\n  };\r\n  export const play = () => {\r\n    controller.play();\r\n  };\r\n  export const pause = () => {\r\n    controller.pause();\r\n  };\r\n  export const goto = (timeOffset: number, play?: boolean) => {\r\n    controller.goto(timeOffset, play);\r\n  };\r\n\r\n  onMount(() => {\r\n    // runtime type check\r\n    if (speedOption !== undefined && typeOf(speedOption) !== 'array') {\r\n      throw new Error('speedOption must be array');\r\n    }\r\n    speedOption.forEach((item) => {\r\n      if (typeOf(item) !== 'number') {\r\n        throw new Error('item of speedOption must be number');\r\n      }\r\n    });\r\n    if (speedOption.indexOf(speed) < 0) {\r\n      throw new Error(`speed must be one of speedOption,\r\n        current config:\r\n        {\r\n          ...\r\n          speed: ${speed},\r\n          speedOption: [${speedOption.toString()}]\r\n          ...\r\n        }\r\n        `);\r\n    }\r\n\r\n    replayer = new Replayer(events, {\r\n      speed,\r\n      root: frame,\r\n      unpackFn: unpack,\r\n      ...$$props,\r\n    });\r\n\r\n    replayer.on('resize', (dimension) => {\r\n      updateScale(\r\n        replayer.wrapper,\r\n        dimension as { width: number; height: number },\r\n      );\r\n    });\r\n\r\n    fullscreenListener = onFullscreenChange(() => {\r\n      if (isFullscreen()) {\r\n        setTimeout(() => {\r\n          _width = width;\r\n          _height = height;\r\n          width = player.offsetWidth;\r\n          height = player.offsetHeight;\r\n          updateScale(replayer.wrapper, {\r\n            width: replayer.iframe.offsetWidth,\r\n            height: replayer.iframe.offsetHeight,\r\n          });\r\n        }, 0);\r\n      } else {\r\n        width = _width;\r\n        height = _height;\r\n        updateScale(replayer.wrapper, {\r\n          width: replayer.iframe.offsetWidth,\r\n          height: replayer.iframe.offsetHeight,\r\n        });\r\n      }\r\n    });\r\n  });\r\n\r\n  onDestroy(() => {\r\n    fullscreenListener && fullscreenListener();\r\n  });\r\n</script>\r\n\r\n<style global>\r\n  @import 'wr-rrweb/dist/rrweb.min.css';\r\n\r\n  .rr-player {\r\n    position: relative;\r\n    background: white;\r\n    float: left;\r\n    border-radius: 5px;\r\n    box-shadow: 0 24px 48px rgba(17, 16, 62, 0.12);\r\n  }\r\n\r\n  .rr-player__frame {\r\n    overflow: hidden;\r\n  }\r\n\r\n  .replayer-wrapper {\r\n    float: left;\r\n    clear: both;\r\n    transform-origin: top left;\r\n    left: 50%;\r\n    top: 50%;\r\n  }\r\n\r\n  .replayer-wrapper > iframe {\r\n    border: none;\r\n  }\r\n</style>\r\n\r\n<div class=\"rr-player\" bind:this={player} style={playerStyle}>\r\n  <div class=\"rr-player__frame\" bind:this={frame} {style} />\r\n  {#if replayer}\r\n    <Controller\r\n      bind:this={controller}\r\n      {replayer}\r\n      {showController}\r\n      {autoPlay}\r\n      {speedOption}\r\n      {skipInactive}\r\n      {tags}\r\n      on:fullscreen={() => toggleFullscreen()} />\r\n  {/if}\r\n</div>\r\n","import type { eventWithTime } from 'wr-rrweb/typings/types';\r\nimport _Player from './Player.svelte';\r\n\r\ntype PlayerProps = {\r\n  events: eventWithTime[];\r\n};\r\n\r\nclass Player extends _Player {\r\n  constructor(options: {\r\n    target: Element;\r\n    props: PlayerProps;\r\n    // for compatibility\r\n    data?: PlayerProps;\r\n  }) {\r\n    super({\r\n      target: options.target,\r\n      props: options.data || options.props,\r\n    });\r\n  }\r\n}\r\n\r\nexport default Player;\r\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","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","callbacks","e","createEvent","initCustomEvent","custom_event","slice","call","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","flushing","seen_callbacks","Set","flush","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","m","new_on_destroy","map","filter","destroy_component","make_dirty","then","fill","init","instance","create_fragment","not_equal","parent_component","prop_values","bound","context","Map","ready","ret","rest","hydrate","nodes","Array","from","childNodes","children","l","intro","SvelteComponent","[object Object]","this","$destroy","index","indexOf","splice","EventType","IncrementalSource","MouseInteractions","MediaInteractions","ReplayerEvents","NodeType","__assign","t","s","n","arguments","prototype","hasOwnProperty","apply","__values","Symbol","iterator","next","done","TypeError","__read","ar","error","__spread","concat","isElement","nodeType","ELEMENT_NODE","commentre","parse","css","lineno","column","updatePosition","str","lines","match","lastIndexOf","position","start","line","Position","whitespace","end","source","content","errorsList","msg","err","reason","filename","silent","open","close","rules","comments","charAt","atrule","rule","re","exec","comment","pos","selector","trim","replace","split","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","obj","parent","isNode","childParent","_i","_a","keys","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","ast","test","selectorMatcher","sort","join","newSelector","buildNode","hackCss","Document","implementation","createDocument","DocumentType","createDocumentType","publicId","systemId","Element","node_1","tagName","attributes","_cssText","getTagName","isSVG","_loop_1","startsWith","image_1","onload","getContext","drawImage","width","height","currentTime","rr_mediaCurrentTime","play","catch","console","warn","pause","isTextarea","isRemoteOrDynamicCss","child","TEXT_NODE","setAttributeNS","substring","rel","as","href","endsWith","isShadowHost","shadowRoot","firstChild","attachShadow","mode","Text","isStyle","textContent","CDATA","createCDATASection","Comment","createComment","buildNodeWithSN","skipChild","_b","afterAppend","rootId","assert","__sn","id","_c","childN","childNode","isShadow","rebuild","onVisit","idNodeMap","visit","visitedNode","el","scrollLeft","scrollTop","handleScroll","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","getId","getNode","removeNodeFromMap","reset","window","Proxy","Reflect","get","receiver","TreeIndex","mutation","parentTreeNode","indexes","parentId","treeNode","texts","tree","set","remove","mirror","_this","deepRemoveFromMirror","removeIdSet","deepRemoveFromTreeIndex","_treeNode","_parentTreeNode","removeNodeMutations","textMutations","attributeMutations","scroll","scrollMap","input","inputMap","e_1","e_2","batchMutationData","Mutation","removes","adds","walk","removed","_d","_e","e_1_1","return","_f","_g","e_2_1","mutationData","queueToResolveTrees","queue","e_3","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","queue_1","queue_1_1","nextId","nextInTree","idx","parentInTree","e_3_1","iterateResolveTree","cb","isIframeINode","getBaseDimension","rootIframe","frameElement","ownerDocument","defaultView","x","y","relativeScale","absoluteScale","frameDimension","getBoundingClientRect","frameBaseDimension","clientHeight","hasShadowRoot","Boolean","mitt","all","on","off","emit","evt","polyfill","w","documentElement","__forceSmoothScrollPolyfill__","userAgent","HTMLElement","original","scrollTo","scrollBy","elementScroll","scrollElement","scrollIntoView","now","performance","bind","Date","ROUNDING_TOLERANCE","navigator","undefined","shouldBailOut","smoothScroll","body","left","scrollX","pageXOffset","top","scrollY","pageYOffset","SyntaxError","behavior","scrollableParent","findScrollableParent","parentRects","clientRects","getComputedStyle","firstArg","hasScrollableSpace","axis","scrollHeight","clientWidth","scrollWidth","canOverflow","overflowValue","isScrollable","isScrollableY","isScrollableX","host","step","currentX","currentY","elapsed","startTime","Math","cos","PI","ease","startX","startY","method","scrollable","requestAnimationFrame","Timer","actions","speed","timeOffset","raf","addAction","action","findActionIndex","addActions","lastTimestamp","self","check","time","delay","shift","doAction","liveMode","cancelAnimationFrame","setSpeed","toggleLiveMode","isActive","mid","floor","addDelay","baselineTime","IncrementalSnapshot","MouseMove","firstOffset","positions","firstTimestamp","timestamp","NotStarted","Running","Stopped","assignment","u","changed","matches","config","_options","initialState","initial","states","entry","transition","f","g","cond","h","exit","S","_machine","send","subscribe","unsubscribe","stop","state","status","createPlayerService","getCastFn","emitter","playing","PAUSE","CAST_EVENT","END","ADD_EVENT","paused","PLAY","TO_LIVE","live","castEvent","lastPlayedEvent","payload","recordTimeOffset","events","timer","events_1","events_1_1","neededEvents","Meta","discardPriorSnapshots","lastPlayedTimestamp","PlayBack","isSync","DomContentLoaded","Load","Custom","FullSnapshot","Plugin","MouseInteraction","TouchMove","MediaInteraction","ViewportResize","StyleSheetRule","Scroll","Input","needCastInSyncMode","castFn","EventCast","neededEvents_1","neededEvents_1_1","Flush","resetLastPlayedEvent","startLive","addEvent","machineEvent","event_1","insertionIndex","castFn_1","StyleRuleType","applyVirtualStyleRulesToNode","storedRules","styleNode","Insert","sheet","insertRule","Remove","deleteRule","Snapshot","cssTexts","existingRules","cssRules","existingRulesReversed","entries","reverse","lastMatch_1","Number","restoreSnapshotOfStyleRulesToNode","mitt$1","mitt_es","defaultMouseTailConfig","duration","lineCap","lineWidth","strokeStyle","Replayer","mouseTail","tailPositions","legacy_missingNodeRetryMap","imageMap","firstFullSnapshot","newDocumentQueue","defaultConfig","maxSpeed","root","loadTimeout","skipInactive","showWarning","showDebug","blockClass","insertStyleRules","triggerFocus","UNSAFE_replayCanvas","pauseAnimation","handleResize","Resize","setupDom","treeIndex","fragmentParentMap","elementStateMap","virtualStyleRulesMap","frag","restoreRealParent","restoreNodeSheet","_h","applyScroll","_j","_k","applyInput","service","unpackFn","a1","a2","StateChange","player","speedService","normalSpeed","normal","FAST_FORWARD","SET_SPEED","skipping","BACK_TO_NORMAL","recordSpeed","restoreSpeed","firstMeta","find","firstFullsnapshot","width_1","height_1","setTimeout","rebuildFullSnapshot","iframe","contentWindow","initialOffset","setConfig","backToNormal","display","parseFloat","wrapper","getMetaData","firstEvent","lastEvent","endTime","totalTime","getCurrentTime","getTimeOffset","getMirror","contentDocument","getElementsByTagName","Start","Pause","resume","Resume","rawEvent","enableInteract","pointerEvents","disableInteract","mouse","win","NodeList","DOMTokenList","Node","contains","dimension","e_4","String","e_4_1","CustomEvent","e_5","applyIncremental","nextUserInteractionEvent","_event","isUserInteraction","e_5_1","skipTime","min","round","SkipStart","e_6","plugins","replayer","e_6_1","last_index","finish_1","Finish","max","e_7","collected","builtNode","collectIframeAndAttachDocument","mutationInQueue","this_1","attachDocumentToIframe","documentElement_1","head_1","head","collected_1","collected_1_1","e_7_1","FullsnapshotRebuilded","waitForStylesheetLoad","preloadAllImages","styleEl","injectStylesRules","iframeEl","e_8","realParent","_loop_2","this_2","collected_2","collected_2_1","e_8_1","timer_1","unloadSheets_1","beforeLoadState_1","stateHandler_1","unsubscribe_1","querySelectorAll","size","LoadStylesheetEnd","clearTimeout","LoadStylesheetStart","e_9","stateHandler","count","CanvasMutation","args","canvas","imgd","createImageData","JSON","putImageData","e_9_1","applyMutation","message","Drag","lastPosition","moveAndHover","Event","toLowerCase","debugNodeNotFound","Blur","blur","Focus","focus","preventScroll","Click","TouchStart","TouchEnd","offsetWidth","dispatchEvent","mediaEl","Play","rules_1","usingVirtualParent_1","styleSheet_1","_index","setter","image","warnCanvasMutationFailed","Font","fontFace","FontFace","family","buffer","Uint8Array","fontSource","descriptors","fonts","useVirtualParent","e_10","warnNodeNotFound","realTarget","DOMException","legacy_missingNodeMap","appendNode","parentInDocument","hasIframeChild","virtualParent","createDocumentFragment","storeState","previous","previousId","nextNotInDOM","targetDoc","nextSibling","mutationInQueue_1","legacy_resolveMissingNode","resolveTrees","resolveTrees_1","resolveTrees_1_1","debug","e_10_1","attributeName","styleValues","targetEl","removeProperty","svp","svs","checked","isChecked","targetMutation","previousInMap","nextInMap","base","_x","_y","drawMouseTail","hoverElements","draw","clearRect","beginPath","moveTo","lineTo","stroke","hoveredEl","currentEl","parentElement","SkipEnd","restoreState","e_11","storeCSSRules","e_11_1","e_12","storedState","e_12_1","nodeName","log","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","bits","bits16","slc","subarray","crct","unzlibSync","out","dat","buf","st","sl","noBuf","noSt","cbuf","bl","nbuf","final","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","mxa","sym","dsym","inflt","zlv","unpack","raw","latin1","TextDecoder","decode","fromCharCode","strFromU8","TextEncoder","encode","ai","charCodeAt","strToU8","inlineCss","cssObj","padZero","num","len","threshold","pow","formatTime","ms","hour","minute","second","isFullscreen","fullscreen","webkitIsFullScreen","mozFullScreen","msFullscreenElement","typeOf","[object Boolean]","[object Number]","[object String]","[object Function]","[object Array]","[object Date]","[object RegExp]","[object Undefined]","[object Null]","toString","disabled","label","background","dispatch","playerState","speedState","progress","finished","meta","percentage","customEvents","showController","autoPlay","speedOption","tags","stopTimer","goto","handleProgressClick","progressRect","percent","clientX","newSpeed","needFreeze","totalEvents","customEvent","tag","tagTime","toFixed","fullscreenListener","controller","playerStyle","_width","_height","updateScale","widthScale","heightScale","transform","toggleFullscreen","exitFullscreen","mozExitFullscreen","webkitExitFullscreen","msExitFullscreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","item","$$props","offsetHeight","$on","toggleSkipInactive","_Player","super"],"mappings":"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"}