@vue/devtools 6.0.6 → 6.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/hook.js CHANGED
@@ -1 +1 @@
1
- (()=>{"use strict";var __webpack_modules__={6793:(__unused_webpack_module,exports,__webpack_require__)=>{eval("var __webpack_unused_export__;\n // this script is injected into every page.\n\n__webpack_unused_export__ = ({\n value: true\n});\nexports.U = void 0;\n/**\n * Install the hook on window, which is an event emitter.\n * Note because Chrome content scripts cannot directly modify the window object,\n * we are evaling this function by inserting a script tag. That's why we have\n * to inline the whole event emitter implementation here.\n *\n * @param {Window|global} target\n */\n\nfunction installHook(target, isIframe = false) {\n let listeners = {};\n\n function injectIframeHook(iframe) {\n if (iframe.__vdevtools__injected) return;\n\n try {\n iframe.__vdevtools__injected = true;\n\n const inject = () => {\n try {\n iframe.contentWindow.__VUE_DEVTOOLS_IFRAME__ = iframe;\n const script = iframe.contentDocument.createElement('script');\n script.textContent = ';(' + installHook.toString() + ')(window, true)';\n iframe.contentDocument.documentElement.appendChild(script);\n script.parentNode.removeChild(script);\n } catch (e) {// Ignore\n }\n };\n\n inject();\n iframe.addEventListener('load', () => inject());\n } catch (e) {// Ignore\n }\n }\n\n let iframeChecks = 0;\n\n function injectToIframes() {\n const iframes = document.querySelectorAll('iframe:not([data-vue-devtools-ignore])');\n\n for (const iframe of iframes) {\n injectIframeHook(iframe);\n }\n }\n\n injectToIframes();\n const iframeTimer = setInterval(() => {\n injectToIframes();\n iframeChecks++;\n\n if (iframeChecks >= 5) {\n clearInterval(iframeTimer);\n }\n }, 1000);\n if (Object.prototype.hasOwnProperty.call(target, '__VUE_DEVTOOLS_GLOBAL_HOOK__')) return;\n let hook;\n\n if (isIframe) {\n const sendToParent = cb => {\n try {\n const hook = window.parent.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook) {\n cb(hook);\n } else {\n console.warn('[Vue Devtools] No hook in parent window');\n }\n } catch (e) {\n console.warn('[Vue Devtools] Failed to send message to parend window', e);\n }\n };\n\n hook = {\n // eslint-disable-next-line accessor-pairs\n set Vue(value) {\n sendToParent(hook => {\n hook.Vue = value;\n });\n },\n\n // eslint-disable-next-line accessor-pairs\n set enabled(value) {\n sendToParent(hook => {\n hook.enabled = value;\n });\n },\n\n on(event, fn) {\n sendToParent(hook => hook.on(event, fn));\n },\n\n once(event, fn) {\n sendToParent(hook => hook.once(event, fn));\n },\n\n off(event, fn) {\n sendToParent(hook => hook.off(event, fn));\n },\n\n emit(event, ...args) {\n sendToParent(hook => hook.emit(event, ...args));\n }\n\n };\n } else {\n hook = {\n Vue: null,\n enabled: undefined,\n _buffer: [],\n store: null,\n initialState: null,\n storeModules: null,\n flushStoreModules: null,\n apps: [],\n\n _replayBuffer(event) {\n const buffer = this._buffer;\n this._buffer = [];\n\n for (let i = 0, l = buffer.length; i < l; i++) {\n const allArgs = buffer[i];\n allArgs[0] === event // eslint-disable-next-line prefer-spread\n ? this.emit.apply(this, allArgs) : this._buffer.push(allArgs);\n }\n },\n\n on(event, fn) {\n const $event = '$' + event;\n\n if (listeners[$event]) {\n listeners[$event].push(fn);\n } else {\n listeners[$event] = [fn];\n\n this._replayBuffer(event);\n }\n },\n\n once(event, fn) {\n const on = (...args) => {\n this.off(event, on);\n fn.apply(this, args);\n };\n\n this.on(event, on);\n },\n\n off(event, fn) {\n event = '$' + event;\n\n if (!arguments.length) {\n listeners = {};\n } else {\n const cbs = listeners[event];\n\n if (cbs) {\n if (!fn) {\n listeners[event] = null;\n } else {\n for (let i = 0, l = cbs.length; i < l; i++) {\n const cb = cbs[i];\n\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break;\n }\n }\n }\n }\n }\n },\n\n emit(event, ...args) {\n const $event = '$' + event;\n let cbs = listeners[$event];\n\n if (cbs) {\n cbs = cbs.slice();\n\n for (let i = 0, l = cbs.length; i < l; i++) {\n cbs[i].apply(this, args);\n }\n } else {\n this._buffer.push([event, ...args]);\n }\n }\n\n };\n hook.once('init', Vue => {\n hook.Vue = Vue;\n\n if (Vue) {\n Vue.prototype.$inspect = function () {\n const fn = target.__VUE_DEVTOOLS_INSPECT__;\n fn && fn(this);\n };\n }\n });\n hook.on('app:init', (app, version, types) => {\n const appRecord = {\n app,\n version,\n types\n };\n hook.apps.push(appRecord);\n hook.emit('app:add', appRecord);\n });\n hook.once('vuex:init', store => {\n hook.store = store;\n hook.initialState = clone(store.state);\n const origReplaceState = store.replaceState.bind(store);\n\n store.replaceState = state => {\n hook.initialState = clone(state);\n origReplaceState(state);\n }; // Dynamic modules\n\n\n let origRegister, origUnregister;\n\n if (store.registerModule) {\n hook.storeModules = [];\n origRegister = store.registerModule.bind(store);\n\n store.registerModule = (path, module, options) => {\n if (typeof path === 'string') path = [path];\n hook.storeModules.push({\n path,\n module,\n options\n });\n origRegister(path, module, options);\n\n if (false) {}\n };\n\n origUnregister = store.unregisterModule.bind(store);\n\n store.unregisterModule = path => {\n if (typeof path === 'string') path = [path];\n const key = path.join('/');\n const index = hook.storeModules.findIndex(m => m.path.join('/') === key);\n if (index !== -1) hook.storeModules.splice(index, 1);\n origUnregister(path);\n\n if (false) {}\n };\n }\n\n hook.flushStoreModules = () => {\n store.replaceState = origReplaceState;\n\n if (store.registerModule) {\n store.registerModule = origRegister;\n store.unregisterModule = origUnregister;\n }\n\n return hook.storeModules || [];\n };\n });\n }\n\n Object.defineProperty(target, '__VUE_DEVTOOLS_GLOBAL_HOOK__', {\n get() {\n return hook;\n }\n\n }); // Handle apps initialized before hook injection\n\n if (target.__VUE_DEVTOOLS_HOOK_REPLAY__) {\n try {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__.forEach(cb => cb(hook));\n\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = [];\n } catch (e) {\n console.error('[vue-devtools] Error during hook replay', e);\n }\n } // Clone deep utility for cloning initial state of the store\n // Forked from https://github.com/planttheidea/fast-copy\n // Last update: 2019-10-30\n // ⚠️ Don't forget to update `./hook.js`\n // utils\n\n\n const {\n toString: toStringFunction\n } = Function.prototype;\n const {\n create,\n defineProperty,\n getOwnPropertyDescriptor,\n getOwnPropertyNames,\n getOwnPropertySymbols,\n getPrototypeOf\n } = Object;\n const {\n hasOwnProperty,\n propertyIsEnumerable\n } = Object.prototype;\n /**\n * @enum\n *\n * @const {Object} SUPPORTS\n *\n * @property {boolean} SYMBOL_PROPERTIES are symbol properties supported\n * @property {boolean} WEAKSET is WeakSet supported\n */\n\n const SUPPORTS = {\n SYMBOL_PROPERTIES: typeof getOwnPropertySymbols === 'function',\n WEAKSET: typeof WeakSet === 'function'\n };\n /**\n * @function createCache\n *\n * @description\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\n\n const createCache = () => {\n if (SUPPORTS.WEAKSET) {\n return new WeakSet();\n }\n\n const object = create({\n add: value => object._values.push(value),\n has: value => !!~object._values.indexOf(value)\n });\n object._values = [];\n return object;\n };\n /**\n * @function getCleanClone\n *\n * @description\n * get an empty version of the object with the same prototype it has\n *\n * @param object the object to build a clean clone from\n * @param realm the realm the object resides in\n * @returns the empty cloned object\n */\n\n\n const getCleanClone = (object, realm) => {\n if (!object.constructor) {\n return create(null);\n } // eslint-disable-next-line no-proto\n\n\n const prototype = object.__proto__ || getPrototypeOf(object);\n\n if (object.constructor === realm.Object) {\n return prototype === realm.Object.prototype ? {} : create(prototype);\n }\n\n if (~toStringFunction.call(object.constructor).indexOf('[native code]')) {\n try {\n return new object.constructor();\n } catch (e) {// Error\n }\n }\n\n return create(prototype);\n };\n /**\n * @function getObjectCloneLoose\n *\n * @description\n * get a copy of the object based on loose rules, meaning all enumerable keys\n * and symbols are copied, but property descriptors are not considered\n *\n * @param object the object to clone\n * @param realm the realm the object resides in\n * @param handleCopy the function that handles copying the object\n * @returns the copied object\n */\n\n\n const getObjectCloneLoose = (object, realm, handleCopy, cache) => {\n const clone = getCleanClone(object, realm);\n\n for (const key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = handleCopy(object[key], cache);\n }\n }\n\n if (SUPPORTS.SYMBOL_PROPERTIES) {\n const symbols = getOwnPropertySymbols(object);\n\n if (symbols.length) {\n for (let index = 0, symbol; index < symbols.length; index++) {\n symbol = symbols[index];\n\n if (propertyIsEnumerable.call(object, symbol)) {\n clone[symbol] = handleCopy(object[symbol], cache);\n }\n }\n }\n }\n\n return clone;\n };\n /**\n * @function getObjectCloneStrict\n *\n * @description\n * get a copy of the object based on strict rules, meaning all keys and symbols\n * are copied based on the original property descriptors\n *\n * @param object the object to clone\n * @param realm the realm the object resides in\n * @param handleCopy the function that handles copying the object\n * @returns the copied object\n */\n\n\n const getObjectCloneStrict = (object, realm, handleCopy, cache) => {\n const clone = getCleanClone(object, realm);\n const properties = SUPPORTS.SYMBOL_PROPERTIES ? [].concat(getOwnPropertyNames(object), getOwnPropertySymbols(object)) : getOwnPropertyNames(object);\n\n if (properties.length) {\n for (let index = 0, property, descriptor; index < properties.length; index++) {\n property = properties[index];\n\n if (property !== 'callee' && property !== 'caller') {\n descriptor = getOwnPropertyDescriptor(object, property);\n descriptor.value = handleCopy(object[property], cache);\n defineProperty(clone, property, descriptor);\n }\n }\n }\n\n return clone;\n };\n /**\n * @function getRegExpFlags\n *\n * @description\n * get the flags to apply to the copied regexp\n *\n * @param regExp the regexp to get the flags of\n * @returns the flags for the regexp\n */\n\n\n const getRegExpFlags = regExp => {\n let flags = '';\n\n if (regExp.global) {\n flags += 'g';\n }\n\n if (regExp.ignoreCase) {\n flags += 'i';\n }\n\n if (regExp.multiline) {\n flags += 'm';\n }\n\n if (regExp.unicode) {\n flags += 'u';\n }\n\n if (regExp.sticky) {\n flags += 'y';\n }\n\n return flags;\n };\n\n const {\n isArray\n } = Array;\n\n const GLOBAL_THIS = (() => {\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof __webpack_require__.g !== 'undefined') {\n return __webpack_require__.g;\n }\n\n if (console && console.error) {\n console.error('Unable to locate global object, returning \"this\".');\n }\n })();\n /**\n * @function clone\n *\n * @description\n * copy an object deeply as much as possible\n *\n * If `strict` is applied, then all properties (including non-enumerable ones)\n * are copied with their original property descriptors on both objects and arrays.\n *\n * The object is compared to the global constructors in the `realm` provided,\n * and the native constructor is always used to ensure that extensions of native\n * objects (allows in ES2015+) are maintained.\n *\n * @param object the object to copy\n * @param [options] the options for copying with\n * @param [options.isStrict] should the copy be strict\n * @param [options.realm] the realm (this) object the object is copied from\n * @returns the copied object\n */\n\n\n function clone(object, options = null) {\n // manually coalesced instead of default parameters for performance\n const isStrict = !!(options && options.isStrict);\n const realm = options && options.realm || GLOBAL_THIS;\n const getObjectClone = isStrict ? getObjectCloneStrict : getObjectCloneLoose;\n /**\n * @function handleCopy\n *\n * @description\n * copy the object recursively based on its type\n *\n * @param object the object to copy\n * @returns the copied object\n */\n\n const handleCopy = (object, cache) => {\n if (!object || typeof object !== 'object' || cache.has(object)) {\n return object;\n } // DOM objects\n\n\n if (object instanceof HTMLElement) {\n return object.cloneNode(false);\n }\n\n const Constructor = object.constructor; // plain objects\n\n if (Constructor === realm.Object) {\n cache.add(object);\n return getObjectClone(object, realm, handleCopy, cache);\n }\n\n let clone; // arrays\n\n if (isArray(object)) {\n cache.add(object); // if strict, include non-standard properties\n\n if (isStrict) {\n return getObjectCloneStrict(object, realm, handleCopy, cache);\n }\n\n clone = new Constructor();\n\n for (let index = 0; index < object.length; index++) {\n clone[index] = handleCopy(object[index], cache);\n }\n\n return clone;\n } // dates\n\n\n if (object instanceof realm.Date) {\n return new Constructor(object.getTime());\n } // regexps\n\n\n if (object instanceof realm.RegExp) {\n clone = new Constructor(object.source, object.flags || getRegExpFlags(object));\n clone.lastIndex = object.lastIndex;\n return clone;\n } // maps\n\n\n if (realm.Map && object instanceof realm.Map) {\n cache.add(object);\n clone = new Constructor();\n object.forEach((value, key) => {\n clone.set(key, handleCopy(value, cache));\n });\n return clone;\n } // sets\n\n\n if (realm.Set && object instanceof realm.Set) {\n cache.add(object);\n clone = new Constructor();\n object.forEach(value => {\n clone.add(handleCopy(value, cache));\n });\n return clone;\n } // buffers (node-only)\n\n\n if (realm.Buffer && realm.Buffer.isBuffer(object)) {\n clone = realm.Buffer.allocUnsafe ? realm.Buffer.allocUnsafe(object.length) : new Constructor(object.length);\n object.copy(clone);\n return clone;\n } // arraybuffers / dataviews\n\n\n if (realm.ArrayBuffer) {\n // dataviews\n if (realm.ArrayBuffer.isView(object)) {\n return new Constructor(object.buffer.slice(0));\n } // arraybuffers\n\n\n if (object instanceof realm.ArrayBuffer) {\n return object.slice(0);\n }\n } // if the object cannot / should not be cloned, don't\n\n\n if ( // promise-like\n hasOwnProperty.call(object, 'then') && typeof object.then === 'function' || // errors\n object instanceof Error || // weakmaps\n realm.WeakMap && object instanceof realm.WeakMap || // weaksets\n realm.WeakSet && object instanceof realm.WeakSet) {\n return object;\n }\n\n cache.add(object); // assume anything left is a custom constructor\n\n return getObjectClone(object, realm, handleCopy, cache);\n };\n\n return handleCopy(object, createCache());\n }\n}\n\nexports.U = installHook;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNLENBQUMsTUFBUCxDQUFjLEtBQWQsQ0FBb0IsQ0FBcEIsQ0FBaEIsQ0FBUDtBQUNELFNBSm9CLENBTXJCOzs7QUFDQSxZQUFJLE1BQU0sWUFBWSxLQUFLLENBQUMsV0FBNUIsRUFBeUM7QUFDdkMsaUJBQU8sTUFBTSxDQUFDLEtBQVAsQ0FBYSxDQUFiLENBQVA7QUFDRDtBQUNGLE9BeEdDLENBMEdGOzs7QUFDQSxXQUNFO0FBQ0Msb0JBQWMsQ0FBQyxJQUFmLENBQW9CLE1BQXBCLEVBQTRCLE1BQTVCLEtBQXVDLE9BQU8sTUFBTSxDQUFDLElBQWQsS0FBdUIsVUFBL0QsSUFDQTtBQUNBLFlBQU0sWUFBWSxLQUZsQixJQUdBO0FBQ0MsV0FBSyxDQUFDLE9BQU4sSUFBaUIsTUFBTSxZQUFZLEtBQUssQ0FBQyxPQUoxQyxJQUtBO0FBQ0MsV0FBSyxDQUFDLE9BQU4sSUFBaUIsTUFBTSxZQUFZLEtBQUssQ0FBQyxPQVI1QyxFQVNFO0FBQ0EsZUFBTyxNQUFQO0FBQ0Q7O0FBRUQsV0FBSyxDQUFDLEdBQU4sQ0FBVSxNQUFWLEVBeEhFLENBMEhGOztBQUNBLGFBQU8sY0FBYyxDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLFVBQWhCLEVBQTRCLEtBQTVCLENBQXJCO0FBQ0QsS0EvSEQ7O0FBaUlBLFdBQU8sVUFBVSxDQUFDLE1BQUQsRUFBUyxXQUFXLEVBQXBCLENBQWpCO0FBQ0Q7QUFDRjs7QUFwb0JEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaG9vay50cz8yZjlhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLy8gdGhpcyBzY3JpcHQgaXMgaW5qZWN0ZWQgaW50byBldmVyeSBwYWdlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnN0YWxsSG9vayA9IHZvaWQgMDtcbi8qKlxuICogSW5zdGFsbCB0aGUgaG9vayBvbiB3aW5kb3csIHdoaWNoIGlzIGFuIGV2ZW50IGVtaXR0ZXIuXG4gKiBOb3RlIGJlY2F1c2UgQ2hyb21lIGNvbnRlbnQgc2NyaXB0cyBjYW5ub3QgZGlyZWN0bHkgbW9kaWZ5IHRoZSB3aW5kb3cgb2JqZWN0LFxuICogd2UgYXJlIGV2YWxpbmcgdGhpcyBmdW5jdGlvbiBieSBpbnNlcnRpbmcgYSBzY3JpcHQgdGFnLiBUaGF0J3Mgd2h5IHdlIGhhdmVcbiAqIHRvIGlubGluZSB0aGUgd2hvbGUgZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiBoZXJlLlxuICpcbiAqIEBwYXJhbSB7V2luZG93fGdsb2JhbH0gdGFyZ2V0XG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxIb29rKHRhcmdldCwgaXNJZnJhbWUgPSBmYWxzZSkge1xuICAgIGxldCBsaXN0ZW5lcnMgPSB7fTtcbiAgICBmdW5jdGlvbiBpbmplY3RJZnJhbWVIb29rKGlmcmFtZSkge1xuICAgICAgICBpZiAoaWZyYW1lLl9fdmRldnRvb2xzX19pbmplY3RlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmcmFtZS5fX3ZkZXZ0b29sc19faW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgaW5qZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93Ll9fVlVFX0RFVlRPT0xTX0lGUkFNRV9fID0gaWZyYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQgPSAnOygnICsgaW5zdGFsbEhvb2sudG9TdHJpbmcoKSArICcpKHdpbmRvdywgdHJ1ZSknO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW5qZWN0KCk7XG4gICAgICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IGluamVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSWdub3JlXG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGlmcmFtZUNoZWNrcyA9IDA7XG4gICAgZnVuY3Rpb24gaW5qZWN0VG9JZnJhbWVzKCkge1xuICAgICAgICBjb25zdCBpZnJhbWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lOm5vdChbZGF0YS12dWUtZGV2dG9vbHMtaWdub3JlXSknKTtcbiAgICAgICAgZm9yIChjb25zdCBpZnJhbWUgb2YgaWZyYW1lcykge1xuICAgICAgICAgICAgaW5qZWN0SWZyYW1lSG9vayhpZnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluamVjdFRvSWZyYW1lcygpO1xuICAgIGNvbnN0IGlmcmFtZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpbmplY3RUb0lmcmFtZXMoKTtcbiAgICAgICAgaWZyYW1lQ2hlY2tzKys7XG4gICAgICAgIGlmIChpZnJhbWVDaGVja3MgPj0gNSkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZnJhbWVUaW1lcik7XG4gICAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgJ19fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18nKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBob29rO1xuICAgIGlmIChpc0lmcmFtZSkge1xuICAgICAgICBjb25zdCBzZW5kVG9QYXJlbnQgPSBjYiA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvb2sgPSB3aW5kb3cucGFyZW50Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICAgICAgICAgICAgaWYgKGhvb2spIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoaG9vayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWUgRGV2dG9vbHNdIE5vIGhvb2sgaW4gcGFyZW50IHdpbmRvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbVnVlIERldnRvb2xzXSBGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIHRvIHBhcmVuZCB3aW5kb3cnLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaG9vayA9IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhY2Nlc3Nvci1wYWlyc1xuICAgICAgICAgICAgc2V0IFZ1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNlbmRUb1BhcmVudChob29rID0+IHsgaG9vay5WdWUgPSB2YWx1ZTsgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFjY2Vzc29yLXBhaXJzXG4gICAgICAgICAgICBzZXQgZW5hYmxlZCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNlbmRUb1BhcmVudChob29rID0+IHsgaG9vay5lbmFibGVkID0gdmFsdWU7IH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uKGV2ZW50LCBmbikge1xuICAgICAgICAgICAgICAgIHNlbmRUb1BhcmVudChob29rID0+IGhvb2sub24oZXZlbnQsIGZuKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25jZShldmVudCwgZm4pIHtcbiAgICAgICAgICAgICAgICBzZW5kVG9QYXJlbnQoaG9vayA9PiBob29rLm9uY2UoZXZlbnQsIGZuKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2ZmKGV2ZW50LCBmbikge1xuICAgICAgICAgICAgICAgIHNlbmRUb1BhcmVudChob29rID0+IGhvb2sub2ZmKGV2ZW50LCBmbikpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzZW5kVG9QYXJlbnQoaG9vayA9PiBob29rLmVtaXQoZXZlbnQsIC4uLmFyZ3MpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBob29rID0ge1xuICAgICAgICAgICAgVnVlOiBudWxsLFxuICAgICAgICAgICAgZW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX2J1ZmZlcjogW10sXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZTogbnVsbCxcbiAgICAgICAgICAgIHN0b3JlTW9kdWxlczogbnVsbCxcbiAgICAgICAgICAgIGZsdXNoU3RvcmVNb2R1bGVzOiBudWxsLFxuICAgICAgICAgICAgYXBwczogW10sXG4gICAgICAgICAgICBfcmVwbGF5QnVmZmVyKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5fYnVmZmVyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gYnVmZmVyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxBcmdzID0gYnVmZmVyW2ldO1xuICAgICAgICAgICAgICAgICAgICBhbGxBcmdzWzBdID09PSBldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1zcHJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFsbEFyZ3MpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2J1ZmZlci5wdXNoKGFsbEFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbihldmVudCwgZm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkZXZlbnQgPSAnJCcgKyBldmVudDtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzWyRldmVudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzWyRldmVudF0ucHVzaChmbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnNbJGV2ZW50XSA9IFtmbl07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxheUJ1ZmZlcihldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uY2UoZXZlbnQsIGZuKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb24gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgb24pO1xuICAgICAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub24oZXZlbnQsIG9uKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvZmYoZXZlbnQsIGZuKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSAnJCcgKyBldmVudDtcbiAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYnMgPSBsaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2IgPSBjYnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW1pdChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRldmVudCA9ICckJyArIGV2ZW50O1xuICAgICAgICAgICAgICAgIGxldCBjYnMgPSBsaXN0ZW5lcnNbJGV2ZW50XTtcbiAgICAgICAgICAgICAgICBpZiAoY2JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNicyA9IGNicy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNic1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnB1c2goW2V2ZW50LCAuLi5hcmdzXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaG9vay5vbmNlKCdpbml0JywgVnVlID0+IHtcbiAgICAgICAgICAgIGhvb2suVnVlID0gVnVlO1xuICAgICAgICAgICAgaWYgKFZ1ZSkge1xuICAgICAgICAgICAgICAgIFZ1ZS5wcm90b3R5cGUuJGluc3BlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0lOU1BFQ1RfXztcbiAgICAgICAgICAgICAgICAgICAgZm4gJiYgZm4odGhpcyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGhvb2sub24oJ2FwcDppbml0JywgKGFwcCwgdmVyc2lvbiwgdHlwZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgICB0eXBlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBob29rLmFwcHMucHVzaChhcHBSZWNvcmQpO1xuICAgICAgICAgICAgaG9vay5lbWl0KCdhcHA6YWRkJywgYXBwUmVjb3JkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhvb2sub25jZSgndnVleDppbml0Jywgc3RvcmUgPT4ge1xuICAgICAgICAgICAgaG9vay5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgaG9vay5pbml0aWFsU3RhdGUgPSBjbG9uZShzdG9yZS5zdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBvcmlnUmVwbGFjZVN0YXRlID0gc3RvcmUucmVwbGFjZVN0YXRlLmJpbmQoc3RvcmUpO1xuICAgICAgICAgICAgc3RvcmUucmVwbGFjZVN0YXRlID0gc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGhvb2suaW5pdGlhbFN0YXRlID0gY2xvbmUoc3RhdGUpO1xuICAgICAgICAgICAgICAgIG9yaWdSZXBsYWNlU3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIER5bmFtaWMgbW9kdWxlc1xuICAgICAgICAgICAgbGV0IG9yaWdSZWdpc3Rlciwgb3JpZ1VucmVnaXN0ZXI7XG4gICAgICAgICAgICBpZiAoc3RvcmUucmVnaXN0ZXJNb2R1bGUpIHtcbiAgICAgICAgICAgICAgICBob29rLnN0b3JlTW9kdWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIG9yaWdSZWdpc3RlciA9IHN0b3JlLnJlZ2lzdGVyTW9kdWxlLmJpbmQoc3RvcmUpO1xuICAgICAgICAgICAgICAgIHN0b3JlLnJlZ2lzdGVyTW9kdWxlID0gKHBhdGgsIG1vZHVsZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtwYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgaG9vay5zdG9yZU1vZHVsZXMucHVzaCh7IHBhdGgsIG1vZHVsZSwgb3B0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ1JlZ2lzdGVyKHBhdGgsIG1vZHVsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vhcmx5IHJlZ2lzdGVyIG1vZHVsZScsIHBhdGgsIG1vZHVsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9yaWdVbnJlZ2lzdGVyID0gc3RvcmUudW5yZWdpc3Rlck1vZHVsZS5iaW5kKHN0b3JlKTtcbiAgICAgICAgICAgICAgICBzdG9yZS51bnJlZ2lzdGVyTW9kdWxlID0gKHBhdGgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBbcGF0aF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhdGguam9pbignLycpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGhvb2suc3RvcmVNb2R1bGVzLmZpbmRJbmRleChtID0+IG0ucGF0aC5qb2luKCcvJykgPT09IGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICBob29rLnN0b3JlTW9kdWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICBvcmlnVW5yZWdpc3RlcihwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZWFybHkgdW5yZWdpc3RlciBtb2R1bGUnLCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBob29rLmZsdXNoU3RvcmVNb2R1bGVzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnJlcGxhY2VTdGF0ZSA9IG9yaWdSZXBsYWNlU3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHN0b3JlLnJlZ2lzdGVyTW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnJlZ2lzdGVyTW9kdWxlID0gb3JpZ1JlZ2lzdGVyO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS51bnJlZ2lzdGVyTW9kdWxlID0gb3JpZ1VucmVnaXN0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBob29rLnN0b3JlTW9kdWxlcyB8fCBbXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAnX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXycsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2s7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gSGFuZGxlIGFwcHMgaW5pdGlhbGl6ZWQgYmVmb3JlIGhvb2sgaW5qZWN0aW9uXG4gICAgaWYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXy5mb3JFYWNoKGNiID0+IGNiKGhvb2spKTtcbiAgICAgICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWUtZGV2dG9vbHNdIEVycm9yIGR1cmluZyBob29rIHJlcGxheScsIGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENsb25lIGRlZXAgdXRpbGl0eSBmb3IgY2xvbmluZyBpbml0aWFsIHN0YXRlIG9mIHRoZSBzdG9yZVxuICAgIC8vIEZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9wbGFudHRoZWlkZWEvZmFzdC1jb3B5XG4gICAgLy8gTGFzdCB1cGRhdGU6IDIwMTktMTAtMzBcbiAgICAvLyDimqDvuI8gRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBgLi9ob29rLmpzYFxuICAgIC8vIHV0aWxzXG4gICAgY29uc3QgeyB0b1N0cmluZzogdG9TdHJpbmdGdW5jdGlvbiB9ID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuICAgIGNvbnN0IHsgY3JlYXRlLCBkZWZpbmVQcm9wZXJ0eSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBnZXRPd25Qcm9wZXJ0eU5hbWVzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMsIGdldFByb3RvdHlwZU9mLCB9ID0gT2JqZWN0O1xuICAgIGNvbnN0IHsgaGFzT3duUHJvcGVydHksIHByb3BlcnR5SXNFbnVtZXJhYmxlIH0gPSBPYmplY3QucHJvdG90eXBlO1xuICAgIC8qKlxuICAgICAqIEBlbnVtXG4gICAgICpcbiAgICAgKiBAY29uc3Qge09iamVjdH0gU1VQUE9SVFNcbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gU1lNQk9MX1BST1BFUlRJRVMgYXJlIHN5bWJvbCBwcm9wZXJ0aWVzIHN1cHBvcnRlZFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gV0VBS1NFVCBpcyBXZWFrU2V0IHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNvbnN0IFNVUFBPUlRTID0ge1xuICAgICAgICBTWU1CT0xfUFJPUEVSVElFUzogdHlwZW9mIGdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgV0VBS1NFVDogdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicsXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gY3JlYXRlQ2FjaGVcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGdldCBhIG5ldyBjYWNoZSBvYmplY3QgdG8gcHJldmVudCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGNhY2hlIG9iamVjdFxuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZUNhY2hlID0gKCkgPT4ge1xuICAgICAgICBpZiAoU1VQUE9SVFMuV0VBS1NFVCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gY3JlYXRlKHtcbiAgICAgICAgICAgIGFkZDogKHZhbHVlKSA9PiBvYmplY3QuX3ZhbHVlcy5wdXNoKHZhbHVlKSxcbiAgICAgICAgICAgIGhhczogKHZhbHVlKSA9PiAhIX5vYmplY3QuX3ZhbHVlcy5pbmRleE9mKHZhbHVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdC5fdmFsdWVzID0gW107XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2xlYW5DbG9uZVxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogZ2V0IGFuIGVtcHR5IHZlcnNpb24gb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3RvdHlwZSBpdCBoYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB0byBidWlsZCBhIGNsZWFuIGNsb25lIGZyb21cbiAgICAgKiBAcGFyYW0gcmVhbG0gdGhlIHJlYWxtIHRoZSBvYmplY3QgcmVzaWRlcyBpblxuICAgICAqIEByZXR1cm5zIHRoZSBlbXB0eSBjbG9uZWQgb2JqZWN0XG4gICAgICovXG4gICAgY29uc3QgZ2V0Q2xlYW5DbG9uZSA9IChvYmplY3QsIHJlYWxtKSA9PiB7XG4gICAgICAgIGlmICghb2JqZWN0LmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICAgICAgICBjb25zdCBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fIHx8IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QuY29uc3RydWN0b3IgPT09IHJlYWxtLk9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZSA9PT0gcmVhbG0uT2JqZWN0LnByb3RvdHlwZSA/IHt9IDogY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKH50b1N0cmluZ0Z1bmN0aW9uLmNhbGwob2JqZWN0LmNvbnN0cnVjdG9yKS5pbmRleE9mKCdbbmF0aXZlIGNvZGVdJykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBvYmplY3QuY29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gRXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gZ2V0T2JqZWN0Q2xvbmVMb29zZVxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogZ2V0IGEgY29weSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIGxvb3NlIHJ1bGVzLCBtZWFuaW5nIGFsbCBlbnVtZXJhYmxlIGtleXNcbiAgICAgKiBhbmQgc3ltYm9scyBhcmUgY29waWVkLCBidXQgcHJvcGVydHkgZGVzY3JpcHRvcnMgYXJlIG5vdCBjb25zaWRlcmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3QgdG8gY2xvbmVcbiAgICAgKiBAcGFyYW0gcmVhbG0gdGhlIHJlYWxtIHRoZSBvYmplY3QgcmVzaWRlcyBpblxuICAgICAqIEBwYXJhbSBoYW5kbGVDb3B5IHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgY29weWluZyB0aGUgb2JqZWN0XG4gICAgICogQHJldHVybnMgdGhlIGNvcGllZCBvYmplY3RcbiAgICAgKi9cbiAgICBjb25zdCBnZXRPYmplY3RDbG9uZUxvb3NlID0gKG9iamVjdCwgcmVhbG0sIGhhbmRsZUNvcHksIGNhY2hlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZ2V0Q2xlYW5DbG9uZShvYmplY3QsIHJlYWxtKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBjbG9uZVtrZXldID0gaGFuZGxlQ29weShvYmplY3Rba2V5XSwgY2FjaGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChTVVBQT1JUUy5TWU1CT0xfUFJPUEVSVElFUykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwLCBzeW1ib2w7IGluZGV4IDwgc3ltYm9scy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9sc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVbc3ltYm9sXSA9IGhhbmRsZUNvcHkob2JqZWN0W3N5bWJvbF0sIGNhY2hlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gZ2V0T2JqZWN0Q2xvbmVTdHJpY3RcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGdldCBhIGNvcHkgb2YgdGhlIG9iamVjdCBiYXNlZCBvbiBzdHJpY3QgcnVsZXMsIG1lYW5pbmcgYWxsIGtleXMgYW5kIHN5bWJvbHNcbiAgICAgKiBhcmUgY29waWVkIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBkZXNjcmlwdG9yc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB0aGUgb2JqZWN0IHRvIGNsb25lXG4gICAgICogQHBhcmFtIHJlYWxtIHRoZSByZWFsbSB0aGUgb2JqZWN0IHJlc2lkZXMgaW5cbiAgICAgKiBAcGFyYW0gaGFuZGxlQ29weSB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGNvcHlpbmcgdGhlIG9iamVjdFxuICAgICAqIEByZXR1cm5zIHRoZSBjb3BpZWQgb2JqZWN0XG4gICAgICovXG4gICAgY29uc3QgZ2V0T2JqZWN0Q2xvbmVTdHJpY3QgPSAob2JqZWN0LCByZWFsbSwgaGFuZGxlQ29weSwgY2FjaGUpID0+IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBnZXRDbGVhbkNsb25lKG9iamVjdCwgcmVhbG0pO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gU1VQUE9SVFMuU1lNQk9MX1BST1BFUlRJRVNcbiAgICAgICAgICAgID8gW10uY29uY2F0KGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkpXG4gICAgICAgICAgICA6IGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDAsIHByb3BlcnR5LCBkZXNjcmlwdG9yOyBpbmRleCA8IHByb3BlcnRpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgIT09ICdjYWxsZWUnICYmIHByb3BlcnR5ICE9PSAnY2FsbGVyJykge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gaGFuZGxlQ29weShvYmplY3RbcHJvcGVydHldLCBjYWNoZSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KGNsb25lLCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBnZXRSZWdFeHBGbGFnc1xuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogZ2V0IHRoZSBmbGFncyB0byBhcHBseSB0byB0aGUgY29waWVkIHJlZ2V4cFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZ0V4cCB0aGUgcmVnZXhwIHRvIGdldCB0aGUgZmxhZ3Mgb2ZcbiAgICAgKiBAcmV0dXJucyB0aGUgZmxhZ3MgZm9yIHRoZSByZWdleHBcbiAgICAgKi9cbiAgICBjb25zdCBnZXRSZWdFeHBGbGFncyA9IChyZWdFeHApID0+IHtcbiAgICAgICAgbGV0IGZsYWdzID0gJyc7XG4gICAgICAgIGlmIChyZWdFeHAuZ2xvYmFsKSB7XG4gICAgICAgICAgICBmbGFncyArPSAnZyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZ0V4cC5pZ25vcmVDYXNlKSB7XG4gICAgICAgICAgICBmbGFncyArPSAnaSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZ0V4cC5tdWx0aWxpbmUpIHtcbiAgICAgICAgICAgIGZsYWdzICs9ICdtJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVnRXhwLnVuaWNvZGUpIHtcbiAgICAgICAgICAgIGZsYWdzICs9ICd1JztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVnRXhwLnN0aWNreSkge1xuICAgICAgICAgICAgZmxhZ3MgKz0gJ3knO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbGFncztcbiAgICB9O1xuICAgIGNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG4gICAgY29uc3QgR0xPQkFMX1RISVMgPSAoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCwgcmV0dXJuaW5nIFwidGhpc1wiLicpO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gY2xvbmVcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGNvcHkgYW4gb2JqZWN0IGRlZXBseSBhcyBtdWNoIGFzIHBvc3NpYmxlXG4gICAgICpcbiAgICAgKiBJZiBgc3RyaWN0YCBpcyBhcHBsaWVkLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIChpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgb25lcylcbiAgICAgKiBhcmUgY29waWVkIHdpdGggdGhlaXIgb3JpZ2luYWwgcHJvcGVydHkgZGVzY3JpcHRvcnMgb24gYm90aCBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBUaGUgb2JqZWN0IGlzIGNvbXBhcmVkIHRvIHRoZSBnbG9iYWwgY29uc3RydWN0b3JzIGluIHRoZSBgcmVhbG1gIHByb3ZpZGVkLFxuICAgICAqIGFuZCB0aGUgbmF0aXZlIGNvbnN0cnVjdG9yIGlzIGFsd2F5cyB1c2VkIHRvIGVuc3VyZSB0aGF0IGV4dGVuc2lvbnMgb2YgbmF0aXZlXG4gICAgICogb2JqZWN0cyAoYWxsb3dzIGluIEVTMjAxNSspIGFyZSBtYWludGFpbmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB0aGUgb2JqZWN0IHRvIGNvcHlcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGZvciBjb3B5aW5nIHdpdGhcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuaXNTdHJpY3RdIHNob3VsZCB0aGUgY29weSBiZSBzdHJpY3RcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucmVhbG1dIHRoZSByZWFsbSAodGhpcykgb2JqZWN0IHRoZSBvYmplY3QgaXMgY29waWVkIGZyb21cbiAgICAgKiBAcmV0dXJucyB0aGUgY29waWVkIG9iamVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKG9iamVjdCwgb3B0aW9ucyA9IG51bGwpIHtcbiAgICAgICAgLy8gbWFudWFsbHkgY29hbGVzY2VkIGluc3RlYWQgb2YgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICBjb25zdCBpc1N0cmljdCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5pc1N0cmljdCk7XG4gICAgICAgIGNvbnN0IHJlYWxtID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFsbSkgfHwgR0xPQkFMX1RISVM7XG4gICAgICAgIGNvbnN0IGdldE9iamVjdENsb25lID0gaXNTdHJpY3RcbiAgICAgICAgICAgID8gZ2V0T2JqZWN0Q2xvbmVTdHJpY3RcbiAgICAgICAgICAgIDogZ2V0T2JqZWN0Q2xvbmVMb29zZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBoYW5kbGVDb3B5XG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgKiBjb3B5IHRoZSBvYmplY3QgcmVjdXJzaXZlbHkgYmFzZWQgb24gaXRzIHR5cGVcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9iamVjdCB0aGUgb2JqZWN0IHRvIGNvcHlcbiAgICAgICAgICogQHJldHVybnMgdGhlIGNvcGllZCBvYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGhhbmRsZUNvcHkgPSAob2JqZWN0LCBjYWNoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgY2FjaGUuaGFzKG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRE9NIG9iamVjdHNcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IENvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgLy8gcGxhaW4gb2JqZWN0c1xuICAgICAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSByZWFsbS5PYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5hZGQob2JqZWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T2JqZWN0Q2xvbmUob2JqZWN0LCByZWFsbSwgaGFuZGxlQ29weSwgY2FjaGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNsb25lO1xuICAgICAgICAgICAgLy8gYXJyYXlzXG4gICAgICAgICAgICBpZiAoaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuYWRkKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgLy8gaWYgc3RyaWN0LCBpbmNsdWRlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPYmplY3RDbG9uZVN0cmljdChvYmplY3QsIHJlYWxtLCBoYW5kbGVDb3B5LCBjYWNoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsb25lID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVbaW5kZXhdID0gaGFuZGxlQ29weShvYmplY3RbaW5kZXhdLCBjYWNoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRhdGVzXG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgcmVhbG0uRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3Iob2JqZWN0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZWdleHBzXG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgcmVhbG0uUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUgPSBuZXcgQ29uc3RydWN0b3Iob2JqZWN0LnNvdXJjZSwgb2JqZWN0LmZsYWdzIHx8IGdldFJlZ0V4cEZsYWdzKG9iamVjdCkpO1xuICAgICAgICAgICAgICAgIGNsb25lLmxhc3RJbmRleCA9IG9iamVjdC5sYXN0SW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbWFwc1xuICAgICAgICAgICAgaWYgKHJlYWxtLk1hcCAmJiBvYmplY3QgaW5zdGFuY2VvZiByZWFsbS5NYXApIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5hZGQob2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjbG9uZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgICAgIG9iamVjdC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLnNldChrZXksIGhhbmRsZUNvcHkodmFsdWUsIGNhY2hlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2V0c1xuICAgICAgICAgICAgaWYgKHJlYWxtLlNldCAmJiBvYmplY3QgaW5zdGFuY2VvZiByZWFsbS5TZXQpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5hZGQob2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjbG9uZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgICAgIG9iamVjdC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5hZGQoaGFuZGxlQ29weSh2YWx1ZSwgY2FjaGUpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBidWZmZXJzIChub2RlLW9ubHkpXG4gICAgICAgICAgICBpZiAocmVhbG0uQnVmZmVyICYmIHJlYWxtLkJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUgPSByZWFsbS5CdWZmZXIuYWxsb2NVbnNhZmVcbiAgICAgICAgICAgICAgICAgICAgPyByZWFsbS5CdWZmZXIuYWxsb2NVbnNhZmUob2JqZWN0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29uc3RydWN0b3Iob2JqZWN0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmNvcHkoY2xvbmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFycmF5YnVmZmVycyAvIGRhdGF2aWV3c1xuICAgICAgICAgICAgaWYgKHJlYWxtLkFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgLy8gZGF0YXZpZXdzXG4gICAgICAgICAgICAgICAgaWYgKHJlYWxtLkFycmF5QnVmZmVyLmlzVmlldyhvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3Iob2JqZWN0LmJ1ZmZlci5zbGljZSgwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFycmF5YnVmZmVyc1xuICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiByZWFsbS5BcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LnNsaWNlKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHRoZSBvYmplY3QgY2Fubm90IC8gc2hvdWxkIG5vdCBiZSBjbG9uZWQsIGRvbid0XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBwcm9taXNlLWxpa2VcbiAgICAgICAgICAgIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ3RoZW4nKSAmJiB0eXBlb2Ygb2JqZWN0LnRoZW4gPT09ICdmdW5jdGlvbicpIHx8XG4gICAgICAgICAgICAgICAgLy8gZXJyb3JzXG4gICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgRXJyb3IgfHxcbiAgICAgICAgICAgICAgICAvLyB3ZWFrbWFwc1xuICAgICAgICAgICAgICAgIChyZWFsbS5XZWFrTWFwICYmIG9iamVjdCBpbnN0YW5jZW9mIHJlYWxtLldlYWtNYXApIHx8XG4gICAgICAgICAgICAgICAgLy8gd2Vha3NldHNcbiAgICAgICAgICAgICAgICAocmVhbG0uV2Vha1NldCAmJiBvYmplY3QgaW5zdGFuY2VvZiByZWFsbS5XZWFrU2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZS5hZGQob2JqZWN0KTtcbiAgICAgICAgICAgIC8vIGFzc3VtZSBhbnl0aGluZyBsZWZ0IGlzIGEgY3VzdG9tIGNvbnN0cnVjdG9yXG4gICAgICAgICAgICByZXR1cm4gZ2V0T2JqZWN0Q2xvbmUob2JqZWN0LCByZWFsbSwgaGFuZGxlQ29weSwgY2FjaGUpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaGFuZGxlQ29weShvYmplY3QsIGNyZWF0ZUNhY2hlKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuaW5zdGFsbEhvb2sgPSBpbnN0YWxsSG9vaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2suanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6793\n")},79310:(__unused_webpack_module,exports)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getCatchedGetters = exports.getCustomStoreDetails = exports.getCustomRouterDetails = exports.isVueInstance = exports.getCustomInstanceDetails = exports.getInstanceMap = exports.backendInjections = void 0;\nexports.backendInjections = {\n instanceMap: new Map(),\n isVueInstance: () => false,\n getCustomInstanceDetails: () => ({})\n};\n\nfunction getInstanceMap() {\n return exports.backendInjections.instanceMap;\n}\n\nexports.getInstanceMap = getInstanceMap;\n\nfunction getCustomInstanceDetails(instance) {\n return exports.backendInjections.getCustomInstanceDetails(instance);\n}\n\nexports.getCustomInstanceDetails = getCustomInstanceDetails;\n\nfunction isVueInstance(value) {\n return exports.backendInjections.isVueInstance(value);\n}\n\nexports.isVueInstance = isVueInstance; // @TODO refactor\n\nfunction getCustomRouterDetails(router) {\n return {\n _custom: {\n type: 'router',\n display: 'VueRouter',\n value: {\n options: router.options,\n currentRoute: router.currentRoute\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomRouterDetails = getCustomRouterDetails; // @TODO refactor\n\nfunction getCustomStoreDetails(store) {\n return {\n _custom: {\n type: 'store',\n display: 'Store',\n value: {\n state: store.state,\n getters: getCatchedGetters(store)\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomStoreDetails = getCustomStoreDetails; // @TODO refactor\n\nfunction getCatchedGetters(store) {\n const getters = {};\n const origGetters = store.getters || {};\n const keys = Object.keys(origGetters);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n Object.defineProperty(getters, key, {\n enumerable: true,\n get: () => {\n try {\n return origGetters[key];\n } catch (e) {\n return e;\n }\n }\n });\n }\n\n return getters;\n}\n\nexports.getCatchedGetters = getCatchedGetters;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkzMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWEsNEJBQW9CO0FBQy9CLGFBQVcsRUFBRSxJQUFJLEdBQUosRUFEa0I7QUFFL0IsZUFBYSxFQUFHLE1BQU0sS0FGUztBQUcvQiwwQkFBd0IsRUFBRyxPQUFPLEVBQVA7QUFISSxDQUFwQjs7QUFNYixTQUFnQixjQUFoQixHQUE4QjtBQUM1QixTQUFPLDBCQUFrQixXQUF6QjtBQUNEOztBQUZEOztBQUlBLFNBQWdCLHdCQUFoQixDQUEwQyxRQUExQyxFQUFrRDtBQUNoRCxTQUFPLDBCQUFrQix3QkFBbEIsQ0FBMkMsUUFBM0MsQ0FBUDtBQUNEOztBQUZEOztBQUlBLFNBQWdCLGFBQWhCLENBQStCLEtBQS9CLEVBQW9DO0FBQ2xDLFNBQU8sMEJBQWtCLGFBQWxCLENBQWdDLEtBQWhDLENBQVA7QUFDRDs7QUFGRCxzQyxDQUlBOztBQUNBLFNBQWdCLHNCQUFoQixDQUF3QyxNQUF4QyxFQUE4QztBQUM1QyxTQUFPO0FBQ0wsV0FBTyxFQUFFO0FBQ1AsVUFBSSxFQUFFLFFBREM7QUFFUCxhQUFPLEVBQUUsV0FGRjtBQUdQLFdBQUssRUFBRTtBQUNMLGVBQU8sRUFBRSxNQUFNLENBQUMsT0FEWDtBQUVMLG9CQUFZLEVBQUUsTUFBTSxDQUFDO0FBRmhCLE9BSEE7QUFPUCxZQUFNLEVBQUU7QUFDTixnQkFBUSxFQUFFO0FBREo7QUFQRDtBQURKLEdBQVA7QUFhRDs7QUFkRCx3RCxDQWdCQTs7QUFDQSxTQUFnQixxQkFBaEIsQ0FBdUMsS0FBdkMsRUFBNEM7QUFDMUMsU0FBTztBQUNMLFdBQU8sRUFBRTtBQUNQLFVBQUksRUFBRSxPQURDO0FBRVAsYUFBTyxFQUFFLE9BRkY7QUFHUCxXQUFLLEVBQUU7QUFDTCxhQUFLLEVBQUUsS0FBSyxDQUFDLEtBRFI7QUFFTCxlQUFPLEVBQUUsaUJBQWlCLENBQUMsS0FBRDtBQUZyQixPQUhBO0FBT1AsWUFBTSxFQUFFO0FBQ04sZ0JBQVEsRUFBRTtBQURKO0FBUEQ7QUFESixHQUFQO0FBYUQ7O0FBZEQsc0QsQ0FnQkE7O0FBQ0EsU0FBZ0IsaUJBQWhCLENBQW1DLEtBQW5DLEVBQXdDO0FBQ3RDLFFBQU0sT0FBTyxHQUFHLEVBQWhCO0FBRUEsUUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU4sSUFBaUIsRUFBckM7QUFDQSxRQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBUCxDQUFZLFdBQVosQ0FBYjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUF6QixFQUFpQyxDQUFDLEVBQWxDLEVBQXNDO0FBQ3BDLFVBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFELENBQWhCO0FBQ0EsVUFBTSxDQUFDLGNBQVAsQ0FBc0IsT0FBdEIsRUFBK0IsR0FBL0IsRUFBb0M7QUFDbEMsZ0JBQVUsRUFBRSxJQURzQjtBQUVsQyxTQUFHLEVBQUUsTUFBSztBQUNSLFlBQUk7QUFDRixpQkFBTyxXQUFXLENBQUMsR0FBRCxDQUFsQjtBQUNELFNBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNWLGlCQUFPLENBQVA7QUFDRDtBQUNGO0FBUmlDLEtBQXBDO0FBVUQ7O0FBRUQsU0FBTyxPQUFQO0FBQ0Q7O0FBcEJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYmFja2VuZC50cz9jNjQ2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDYXRjaGVkR2V0dGVycyA9IGV4cG9ydHMuZ2V0Q3VzdG9tU3RvcmVEZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21Sb3V0ZXJEZXRhaWxzID0gZXhwb3J0cy5pc1Z1ZUluc3RhbmNlID0gZXhwb3J0cy5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMgPSBleHBvcnRzLmdldEluc3RhbmNlTWFwID0gZXhwb3J0cy5iYWNrZW5kSW5qZWN0aW9ucyA9IHZvaWQgMDtcbmV4cG9ydHMuYmFja2VuZEluamVjdGlvbnMgPSB7XG4gICAgaW5zdGFuY2VNYXA6IG5ldyBNYXAoKSxcbiAgICBpc1Z1ZUluc3RhbmNlOiAoKCkgPT4gZmFsc2UpLFxuICAgIGdldEN1c3RvbUluc3RhbmNlRGV0YWlsczogKCgpID0+ICh7fSkpLFxufTtcbmZ1bmN0aW9uIGdldEluc3RhbmNlTWFwKCkge1xuICAgIHJldHVybiBleHBvcnRzLmJhY2tlbmRJbmplY3Rpb25zLmluc3RhbmNlTWFwO1xufVxuZXhwb3J0cy5nZXRJbnN0YW5jZU1hcCA9IGdldEluc3RhbmNlTWFwO1xuZnVuY3Rpb24gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuYmFja2VuZEluamVjdGlvbnMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlKTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuZnVuY3Rpb24gaXNWdWVJbnN0YW5jZSh2YWx1ZSkge1xuICAgIHJldHVybiBleHBvcnRzLmJhY2tlbmRJbmplY3Rpb25zLmlzVnVlSW5zdGFuY2UodmFsdWUpO1xufVxuZXhwb3J0cy5pc1Z1ZUluc3RhbmNlID0gaXNWdWVJbnN0YW5jZTtcbi8vIEBUT0RPIHJlZmFjdG9yXG5mdW5jdGlvbiBnZXRDdXN0b21Sb3V0ZXJEZXRhaWxzKHJvdXRlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdyb3V0ZXInLFxuICAgICAgICAgICAgZGlzcGxheTogJ1Z1ZVJvdXRlcicsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHJvdXRlci5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3V0ZTogcm91dGVyLmN1cnJlbnRSb3V0ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tUm91dGVyRGV0YWlscyA9IGdldEN1c3RvbVJvdXRlckRldGFpbHM7XG4vLyBAVE9ETyByZWZhY3RvclxuZnVuY3Rpb24gZ2V0Q3VzdG9tU3RvcmVEZXRhaWxzKHN0b3JlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ3N0b3JlJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdTdG9yZScsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBzdG9yZS5zdGF0ZSxcbiAgICAgICAgICAgICAgICBnZXR0ZXJzOiBnZXRDYXRjaGVkR2V0dGVycyhzdG9yZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVN0b3JlRGV0YWlscyA9IGdldEN1c3RvbVN0b3JlRGV0YWlscztcbi8vIEBUT0RPIHJlZmFjdG9yXG5mdW5jdGlvbiBnZXRDYXRjaGVkR2V0dGVycyhzdG9yZSkge1xuICAgIGNvbnN0IGdldHRlcnMgPSB7fTtcbiAgICBjb25zdCBvcmlnR2V0dGVycyA9IHN0b3JlLmdldHRlcnMgfHwge307XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9yaWdHZXR0ZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdldHRlcnMsIGtleSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnR2V0dGVyc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldHRlcnM7XG59XG5leHBvcnRzLmdldENhdGNoZWRHZXR0ZXJzID0gZ2V0Q2F0Y2hlZEdldHRlcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrZW5kLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79310\n")},47294:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.Bridge = void 0;\n\nconst events_1 = __webpack_require__(22699);\n\nconst BATCH_DURATION = 100;\n\nclass Bridge extends events_1.EventEmitter {\n constructor(wall) {\n super();\n this.setMaxListeners(Infinity);\n this.wall = wall;\n wall.listen(messages => {\n if (Array.isArray(messages)) {\n messages.forEach(message => this._emit(message));\n } else {\n this._emit(messages);\n }\n });\n this._batchingQueue = [];\n this._sendingQueue = [];\n this._receivingQueue = [];\n this._sending = false;\n this._time = null;\n }\n\n send(event, payload) {\n if (Array.isArray(payload)) {\n const lastIndex = payload.length - 1;\n payload.forEach((chunk, index) => {\n this._send({\n event,\n _chunk: chunk,\n last: index === lastIndex\n });\n });\n\n this._flush();\n } else if (this._time === null) {\n this._send([{\n event,\n payload\n }]);\n\n this._time = Date.now();\n } else {\n this._batchingQueue.push({\n event,\n payload\n });\n\n const now = Date.now();\n\n if (now - this._time > BATCH_DURATION) {\n this._flush();\n } else {\n this._timer = setTimeout(() => this._flush(), BATCH_DURATION);\n }\n }\n }\n /**\n * Log a message to the devtools background page.\n */\n\n\n log(message) {\n this.send('log', message);\n }\n\n _flush() {\n if (this._batchingQueue.length) this._send(this._batchingQueue);\n clearTimeout(this._timer);\n this._batchingQueue = [];\n this._time = null;\n } // @TODO types\n\n\n _emit(message) {\n if (typeof message === 'string') {\n this.emit(message);\n } else if (message._chunk) {\n this._receivingQueue.push(message._chunk);\n\n if (message.last) {\n this.emit(message.event, this._receivingQueue);\n this._receivingQueue = [];\n }\n } else if (message.event) {\n this.emit(message.event, message.payload);\n }\n } // @TODO types\n\n\n _send(messages) {\n this._sendingQueue.push(messages);\n\n this._nextSend();\n }\n\n _nextSend() {\n if (!this._sendingQueue.length || this._sending) return;\n this._sending = true;\n\n const messages = this._sendingQueue.shift();\n\n try {\n this.wall.send(messages);\n } catch (err) {\n if (err.message === 'Message length exceeded maximum allowed length.') {\n this._sendingQueue.splice(0, 0, messages.map(message => [message]));\n }\n }\n\n this._sending = false;\n requestAnimationFrame(() => this._nextSend());\n }\n\n}\n\nexports.Bridge = Bridge;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUwsR0FBdUIsRUFBdkI7QUFDRDtBQUNGLEtBTk0sTUFNQSxJQUFJLE9BQU8sQ0FBQyxLQUFaLEVBQW1CO0FBQ3hCLFdBQUssSUFBTCxDQUFVLE9BQU8sQ0FBQyxLQUFsQixFQUF5QixPQUFPLENBQUMsT0FBakM7QUFDRDtBQUNGLEdBcEZxQyxDQXNGdEM7OztBQUNBLE9BQUssQ0FBRSxRQUFGLEVBQVU7QUFDYixTQUFLLGFBQUwsQ0FBbUIsSUFBbkIsQ0FBd0IsUUFBeEI7O0FBQ0EsU0FBSyxTQUFMO0FBQ0Q7O0FBRUQsV0FBUztBQUNQLFFBQUksQ0FBQyxLQUFLLGFBQUwsQ0FBbUIsTUFBcEIsSUFBOEIsS0FBSyxRQUF2QyxFQUFpRDtBQUNqRCxTQUFLLFFBQUwsR0FBZ0IsSUFBaEI7O0FBQ0EsVUFBTSxRQUFRLEdBQUcsS0FBSyxhQUFMLENBQW1CLEtBQW5CLEVBQWpCOztBQUNBLFFBQUk7QUFDRixXQUFLLElBQUwsQ0FBVSxJQUFWLENBQWUsUUFBZjtBQUNELEtBRkQsQ0FFRSxPQUFPLEdBQVAsRUFBWTtBQUNaLFVBQUksR0FBRyxDQUFDLE9BQUosS0FBZ0IsaURBQXBCLEVBQXVFO0FBQ3JFLGFBQUssYUFBTCxDQUFtQixNQUFuQixDQUEwQixDQUExQixFQUE2QixDQUE3QixFQUFnQyxRQUFRLENBQUMsR0FBVCxDQUFhLE9BQU8sSUFBSSxDQUFDLE9BQUQsQ0FBeEIsQ0FBaEM7QUFDRDtBQUNGOztBQUNELFNBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLHlCQUFxQixDQUFDLE1BQU0sS0FBSyxTQUFMLEVBQVAsQ0FBckI7QUFDRDs7QUF6R3FDOztBQUF4QyIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2JyaWRnZS50cz9lZDlkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CcmlkZ2UgPSB2b2lkIDA7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBCQVRDSF9EVVJBVElPTiA9IDEwMDtcbmNsYXNzIEJyaWRnZSBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iod2FsbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNldE1heExpc3RlbmVycyhJbmZpbml0eSk7XG4gICAgICAgIHRoaXMud2FsbCA9IHdhbGw7XG4gICAgICAgIHdhbGwubGlzdGVuKG1lc3NhZ2VzID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB0aGlzLl9lbWl0KG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQobWVzc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fYmF0Y2hpbmdRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLl9zZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5fcmVjZWl2aW5nUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5fc2VuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90aW1lID0gbnVsbDtcbiAgICB9XG4gICAgc2VuZChldmVudCwgcGF5bG9hZCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gcGF5bG9hZC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgcGF5bG9hZC5mb3JFYWNoKChjaHVuaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIF9jaHVuazogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGluZGV4ID09PSBsYXN0SW5kZXgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fdGltZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fc2VuZChbeyBldmVudCwgcGF5bG9hZCB9XSk7XG4gICAgICAgICAgICB0aGlzLl90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2JhdGNoaW5nUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGlmIChub3cgLSB0aGlzLl90aW1lID4gQkFUQ0hfRFVSQVRJT04pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mbHVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2ZsdXNoKCksIEJBVENIX0RVUkFUSU9OKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBkZXZ0b29scyBiYWNrZ3JvdW5kIHBhZ2UuXG4gICAgICovXG4gICAgbG9nKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5zZW5kKCdsb2cnLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgX2ZsdXNoKCkge1xuICAgICAgICBpZiAodGhpcy5fYmF0Y2hpbmdRdWV1ZS5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHRoaXMuX2JhdGNoaW5nUXVldWUpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgICB0aGlzLl9iYXRjaGluZ1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX3RpbWUgPSBudWxsO1xuICAgIH1cbiAgICAvLyBAVE9ETyB0eXBlc1xuICAgIF9lbWl0KG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5lbWl0KG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UuX2NodW5rKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNlaXZpbmdRdWV1ZS5wdXNoKG1lc3NhZ2UuX2NodW5rKTtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmxhc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQobWVzc2FnZS5ldmVudCwgdGhpcy5fcmVjZWl2aW5nUXVldWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2VpdmluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5ldmVudCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KG1lc3NhZ2UuZXZlbnQsIG1lc3NhZ2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQFRPRE8gdHlwZXNcbiAgICBfc2VuZChtZXNzYWdlcykge1xuICAgICAgICB0aGlzLl9zZW5kaW5nUXVldWUucHVzaChtZXNzYWdlcyk7XG4gICAgICAgIHRoaXMuX25leHRTZW5kKCk7XG4gICAgfVxuICAgIF9uZXh0U2VuZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZW5kaW5nUXVldWUubGVuZ3RoIHx8IHRoaXMuX3NlbmRpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX3NlbmRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuX3NlbmRpbmdRdWV1ZS5zaGlmdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53YWxsLnNlbmQobWVzc2FnZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ01lc3NhZ2UgbGVuZ3RoIGV4Y2VlZGVkIG1heGltdW0gYWxsb3dlZCBsZW5ndGguJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbmRpbmdRdWV1ZS5zcGxpY2UoMCwgMCwgbWVzc2FnZXMubWFwKG1lc3NhZ2UgPT4gW21lc3NhZ2VdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5fbmV4dFNlbmQoKSk7XG4gICAgfVxufVxuZXhwb3J0cy5CcmlkZ2UgPSBCcmlkZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icmlkZ2UuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47294\n")},79410:(__unused_webpack_module,exports)=>{eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.HookEvents = exports.BridgeSubscriptions = exports.BridgeEvents = exports.BuiltinTabs = void 0;\nvar BuiltinTabs;\n\n(function (BuiltinTabs) {\n BuiltinTabs["COMPONENTS"] = "components";\n BuiltinTabs["TIMELINE"] = "timeline";\n BuiltinTabs["PLUGINS"] = "plugins";\n BuiltinTabs["SETTINGS"] = "settings";\n})(BuiltinTabs = exports.BuiltinTabs || (exports.BuiltinTabs = {}));\n\nvar BridgeEvents;\n\n(function (BridgeEvents) {\n // Misc\n BridgeEvents["TO_BACK_SUBSCRIBE"] = "b:subscribe";\n BridgeEvents["TO_BACK_UNSUBSCRIBE"] = "b:unsubscribe";\n /** Backend is ready */\n\n BridgeEvents["TO_FRONT_READY"] = "f:ready";\n /** Displays the "detected Vue" console log */\n\n BridgeEvents["TO_BACK_LOG_DETECTED_VUE"] = "b:log-detected-vue";\n /** Force refresh */\n\n BridgeEvents["TO_BACK_REFRESH"] = "b:refresh";\n /** Tab was switched */\n\n BridgeEvents["TO_BACK_TAB_SWITCH"] = "b:tab:switch";\n BridgeEvents["TO_BACK_LOG"] = "b:log"; // Apps\n\n /** App was registered */\n\n BridgeEvents["TO_FRONT_APP_ADD"] = "f:app:add";\n /** Get app list */\n\n BridgeEvents["TO_BACK_APP_LIST"] = "b:app:list";\n BridgeEvents["TO_FRONT_APP_LIST"] = "f:app:list";\n BridgeEvents["TO_FRONT_APP_REMOVE"] = "f:app:remove";\n BridgeEvents["TO_BACK_APP_SELECT"] = "b:app:select";\n BridgeEvents["TO_FRONT_APP_SELECTED"] = "f:app:selected"; // Components\n\n BridgeEvents["TO_BACK_COMPONENT_TREE"] = "b:component:tree";\n BridgeEvents["TO_FRONT_COMPONENT_TREE"] = "f:component:tree";\n BridgeEvents["TO_BACK_COMPONENT_SELECTED_DATA"] = "b:component:selected-data";\n BridgeEvents["TO_FRONT_COMPONENT_SELECTED_DATA"] = "f:component:selected-data";\n BridgeEvents["TO_BACK_COMPONENT_EXPAND"] = "b:component:expand";\n BridgeEvents["TO_FRONT_COMPONENT_EXPAND"] = "f:component:expand";\n BridgeEvents["TO_BACK_COMPONENT_SCROLL_TO"] = "b:component:scroll-to";\n BridgeEvents["TO_BACK_COMPONENT_FILTER"] = "b:component:filter";\n BridgeEvents["TO_BACK_COMPONENT_MOUSE_OVER"] = "b:component:mouse-over";\n BridgeEvents["TO_BACK_COMPONENT_MOUSE_OUT"] = "b:component:mouse-out";\n BridgeEvents["TO_BACK_COMPONENT_CONTEXT_MENU_TARGET"] = "b:component:context-menu-target";\n BridgeEvents["TO_BACK_COMPONENT_EDIT_STATE"] = "b:component:edit-state";\n BridgeEvents["TO_BACK_COMPONENT_PICK"] = "b:component:pick";\n BridgeEvents["TO_FRONT_COMPONENT_PICK"] = "f:component:pick";\n BridgeEvents["TO_BACK_COMPONENT_PICK_CANCELED"] = "b:component:pick-canceled";\n BridgeEvents["TO_FRONT_COMPONENT_PICK_CANCELED"] = "f:component:pick-canceled";\n BridgeEvents["TO_BACK_COMPONENT_INSPECT_DOM"] = "b:component:inspect-dom";\n BridgeEvents["TO_FRONT_COMPONENT_INSPECT_DOM"] = "f:component:inspect-dom";\n BridgeEvents["TO_BACK_COMPONENT_RENDER_CODE"] = "b:component:render-code";\n BridgeEvents["TO_FRONT_COMPONENT_RENDER_CODE"] = "f:component:render-code"; // Timeline\n\n BridgeEvents["TO_FRONT_TIMELINE_EVENT"] = "f:timeline:event";\n BridgeEvents["TO_BACK_TIMELINE_LAYER_LIST"] = "b:timeline:layer-list";\n BridgeEvents["TO_FRONT_TIMELINE_LAYER_LIST"] = "f:timeline:layer-list";\n BridgeEvents["TO_FRONT_TIMELINE_LAYER_ADD"] = "f:timeline:layer-add";\n BridgeEvents["TO_BACK_TIMELINE_SHOW_SCREENSHOT"] = "b:timeline:show-screenshot";\n BridgeEvents["TO_BACK_TIMELINE_CLEAR"] = "b:timeline:clear";\n BridgeEvents["TO_BACK_TIMELINE_EVENT_DATA"] = "b:timeline:event-data";\n BridgeEvents["TO_FRONT_TIMELINE_EVENT_DATA"] = "f:timeline:event-data";\n BridgeEvents["TO_BACK_TIMELINE_LAYER_LOAD_EVENTS"] = "b:timeline:layer-load-events";\n BridgeEvents["TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS"] = "f:timeline:layer-load-events";\n BridgeEvents["TO_BACK_TIMELINE_LOAD_MARKERS"] = "b:timeline:load-markers";\n BridgeEvents["TO_FRONT_TIMELINE_LOAD_MARKERS"] = "f:timeline:load-markers";\n BridgeEvents["TO_FRONT_TIMELINE_MARKER"] = "f:timeline:marker"; // Plugins\n\n BridgeEvents["TO_BACK_DEVTOOLS_PLUGIN_LIST"] = "b:devtools-plugin:list";\n BridgeEvents["TO_FRONT_DEVTOOLS_PLUGIN_LIST"] = "f:devtools-plugin:list";\n BridgeEvents["TO_FRONT_DEVTOOLS_PLUGIN_ADD"] = "f:devtools-plugin:add";\n BridgeEvents["TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED"] = "b:devtools-plugin:setting-updated"; // Custom inspectors\n\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_LIST"] = "b:custom-inspector:list";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_LIST"] = "f:custom-inspector:list";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_ADD"] = "f:custom-inspector:add";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_TREE"] = "b:custom-inspector:tree";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_TREE"] = "f:custom-inspector:tree";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_STATE"] = "b:custom-inspector:state";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_STATE"] = "f:custom-inspector:state";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE"] = "b:custom-inspector:edit-state";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_ACTION"] = "b:custom-inspector:action";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_SELECT_NODE"] = "f:custom-inspector:select-node"; // Custom state\n\n BridgeEvents["TO_BACK_CUSTOM_STATE_ACTION"] = "b:custom-state:action";\n})(BridgeEvents = exports.BridgeEvents || (exports.BridgeEvents = {}));\n\nvar BridgeSubscriptions;\n\n(function (BridgeSubscriptions) {\n BridgeSubscriptions["SELECTED_COMPONENT_DATA"] = "component:selected-data";\n BridgeSubscriptions["COMPONENT_TREE"] = "component:tree";\n})(BridgeSubscriptions = exports.BridgeSubscriptions || (exports.BridgeSubscriptions = {}));\n\nvar HookEvents;\n\n(function (HookEvents) {\n HookEvents["INIT"] = "init";\n HookEvents["APP_INIT"] = "app:init";\n HookEvents["APP_ADD"] = "app:add";\n HookEvents["APP_UNMOUNT"] = "app:unmount";\n HookEvents["COMPONENT_UPDATED"] = "component:updated";\n HookEvents["COMPONENT_ADDED"] = "component:added";\n HookEvents["COMPONENT_REMOVED"] = "component:removed";\n HookEvents["COMPONENT_EMIT"] = "component:emit";\n HookEvents["COMPONENT_HIGHLIGHT"] = "component:highlight";\n HookEvents["COMPONENT_UNHIGHLIGHT"] = "component:unhighlight";\n HookEvents["SETUP_DEVTOOLS_PLUGIN"] = "devtools-plugin:setup";\n HookEvents["TIMELINE_LAYER_ADDED"] = "timeline:layer-added";\n HookEvents["TIMELINE_EVENT_ADDED"] = "timeline:event-added";\n HookEvents["CUSTOM_INSPECTOR_ADD"] = "custom-inspector:add";\n HookEvents["CUSTOM_INSPECTOR_SEND_TREE"] = "custom-inspector:send-tree";\n HookEvents["CUSTOM_INSPECTOR_SEND_STATE"] = "custom-inspector:send-state";\n HookEvents["CUSTOM_INSPECTOR_SELECT_NODE"] = "custom-inspector:select-node";\n HookEvents["PERFORMANCE_START"] = "perf:start";\n HookEvents["PERFORMANCE_END"] = "perf:end";\n HookEvents["PLUGIN_SETTINGS_SET"] = "plugin:settings:set";\n /**\n * @deprecated\n */\n\n HookEvents["FLUSH"] = "flush";\n})(HookEvents = exports.HookEvents || (exports.HookEvents = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk0MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBWSxXQUFaOztBQUFBLFdBQVksV0FBWixFQUF1QjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxXQUFXLEdBQVgsOENBQVcsRUFBWCxDQUFaOztBQU9BLElBQVksWUFBWjs7QUFBQSxXQUFZLFlBQVosRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQSx3Q0Fac0IsQ0FjdEI7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQXRCc0IsQ0F3QnRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkVBNUNzQixDQThDdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBM0RzQixDQTZEdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0dBakVzQixDQW1FdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkZBN0VzQixDQStFdEI7O0FBQ0E7QUFDRCxDQWpGRCxFQUFZLFlBQVksR0FBWixnREFBWSxFQUFaLENBQVo7O0FBbUZBLElBQVksbUJBQVo7O0FBQUEsV0FBWSxtQkFBWixFQUErQjtBQUM3QjtBQUNBO0FBQ0QsQ0FIRCxFQUFZLG1CQUFtQixHQUFuQiw4REFBbUIsRUFBbkIsQ0FBWjs7QUFLQSxJQUFZLFVBQVo7O0FBQUEsV0FBWSxVQUFaLEVBQXNCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFRzs7QUFDSDtBQUNELENBekJELEVBQVksVUFBVSxHQUFWLDRDQUFVLEVBQVYsQ0FBWiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2NvbnN0cy50cz9kOTE4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ib29rRXZlbnRzID0gZXhwb3J0cy5CcmlkZ2VTdWJzY3JpcHRpb25zID0gZXhwb3J0cy5CcmlkZ2VFdmVudHMgPSBleHBvcnRzLkJ1aWx0aW5UYWJzID0gdm9pZCAwO1xudmFyIEJ1aWx0aW5UYWJzO1xuKGZ1bmN0aW9uIChCdWlsdGluVGFicykge1xuICAgIEJ1aWx0aW5UYWJzW1wiQ09NUE9ORU5UU1wiXSA9IFwiY29tcG9uZW50c1wiO1xuICAgIEJ1aWx0aW5UYWJzW1wiVElNRUxJTkVcIl0gPSBcInRpbWVsaW5lXCI7XG4gICAgQnVpbHRpblRhYnNbXCJQTFVHSU5TXCJdID0gXCJwbHVnaW5zXCI7XG4gICAgQnVpbHRpblRhYnNbXCJTRVRUSU5HU1wiXSA9IFwic2V0dGluZ3NcIjtcbn0pKEJ1aWx0aW5UYWJzID0gZXhwb3J0cy5CdWlsdGluVGFicyB8fCAoZXhwb3J0cy5CdWlsdGluVGFicyA9IHt9KSk7XG52YXIgQnJpZGdlRXZlbnRzO1xuKGZ1bmN0aW9uIChCcmlkZ2VFdmVudHMpIHtcbiAgICAvLyBNaXNjXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19TVUJTQ1JJQkVcIl0gPSBcImI6c3Vic2NyaWJlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19VTlNVQlNDUklCRVwiXSA9IFwiYjp1bnN1YnNjcmliZVwiO1xuICAgIC8qKiBCYWNrZW5kIGlzIHJlYWR5ICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfUkVBRFlcIl0gPSBcImY6cmVhZHlcIjtcbiAgICAvKiogRGlzcGxheXMgdGhlIFwiZGV0ZWN0ZWQgVnVlXCIgY29uc29sZSBsb2cgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0xPR19ERVRFQ1RFRF9WVUVcIl0gPSBcImI6bG9nLWRldGVjdGVkLXZ1ZVwiO1xuICAgIC8qKiBGb3JjZSByZWZyZXNoICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19SRUZSRVNIXCJdID0gXCJiOnJlZnJlc2hcIjtcbiAgICAvKiogVGFiIHdhcyBzd2l0Y2hlZCAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfVEFCX1NXSVRDSFwiXSA9IFwiYjp0YWI6c3dpdGNoXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19MT0dcIl0gPSBcImI6bG9nXCI7XG4gICAgLy8gQXBwc1xuICAgIC8qKiBBcHAgd2FzIHJlZ2lzdGVyZWQgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfQUREXCJdID0gXCJmOmFwcDphZGRcIjtcbiAgICAvKiogR2V0IGFwcCBsaXN0ICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19BUFBfTElTVFwiXSA9IFwiYjphcHA6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9MSVNUXCJdID0gXCJmOmFwcDpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQVBQX1JFTU9WRVwiXSA9IFwiZjphcHA6cmVtb3ZlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19BUFBfU0VMRUNUXCJdID0gXCJiOmFwcDpzZWxlY3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfU0VMRUNURURcIl0gPSBcImY6YXBwOnNlbGVjdGVkXCI7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUVcIl0gPSBcImI6Y29tcG9uZW50OnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVFJFRVwiXSA9IFwiZjpjb21wb25lbnQ6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEFcIl0gPSBcImI6Y29tcG9uZW50OnNlbGVjdGVkLWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQVwiXSA9IFwiZjpjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiYjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiZjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPXCJdID0gXCJiOmNvbXBvbmVudDpzY3JvbGwtdG9cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9GSUxURVJcIl0gPSBcImI6Y29tcG9uZW50OmZpbHRlclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVJcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW92ZXJcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVRcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW91dFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0NPTlRFWFRfTUVOVV9UQVJHRVRcIl0gPSBcImI6Y29tcG9uZW50OmNvbnRleHQtbWVudS10YXJnZXRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFXCJdID0gXCJiOmNvbXBvbmVudDplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS1wiXSA9IFwiYjpjb21wb25lbnQ6cGlja1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRFwiXSA9IFwiYjpjb21wb25lbnQ6cGljay1jYW5jZWxlZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVEXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrLWNhbmNlbGVkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET01cIl0gPSBcImI6Y29tcG9uZW50Omluc3BlY3QtZG9tXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NXCJdID0gXCJmOmNvbXBvbmVudDppbnNwZWN0LWRvbVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFXCJdID0gXCJiOmNvbXBvbmVudDpyZW5kZXItY29kZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERVwiXSA9IFwiZjpjb21wb25lbnQ6cmVuZGVyLWNvZGVcIjtcbiAgICAvLyBUaW1lbGluZVxuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0VWRU5UXCJdID0gXCJmOnRpbWVsaW5lOmV2ZW50XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJiOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9BRERcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItYWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9TSE9XX1NDUkVFTlNIT1RcIl0gPSBcImI6dGltZWxpbmU6c2hvdy1zY3JlZW5zaG90XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9DTEVBUlwiXSA9IFwiYjp0aW1lbGluZTpjbGVhclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiYjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiZjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MT0FEX0VWRU5UU1wiXSA9IFwiYjp0aW1lbGluZTpsYXllci1sb2FkLWV2ZW50c1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxvYWQtZXZlbnRzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MT0FEX01BUktFUlNcIl0gPSBcImI6dGltZWxpbmU6bG9hZC1tYXJrZXJzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTE9BRF9NQVJLRVJTXCJdID0gXCJmOnRpbWVsaW5lOmxvYWQtbWFya2Vyc1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX01BUktFUlwiXSA9IFwiZjp0aW1lbGluZTptYXJrZXJcIjtcbiAgICAvLyBQbHVnaW5zXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fTElTVFwiXSA9IFwiYjpkZXZ0b29scy1wbHVnaW46bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0RFVlRPT0xTX1BMVUdJTl9MSVNUXCJdID0gXCJmOmRldnRvb2xzLXBsdWdpbjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfREVWVE9PTFNfUExVR0lOX0FERFwiXSA9IFwiZjpkZXZ0b29scy1wbHVnaW46YWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fU0VUVElOR19VUERBVEVEXCJdID0gXCJiOmRldnRvb2xzLXBsdWdpbjpzZXR0aW5nLXVwZGF0ZWRcIjtcbiAgICAvLyBDdXN0b20gaW5zcGVjdG9yc1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNUXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfTElTVFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX0FERFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmFkZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfVFJFRVwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImY6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9FRElUX1NUQVRFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6ZWRpdC1zdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjphY3Rpb25cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6c2VsZWN0LW5vZGVcIjtcbiAgICAvLyBDdXN0b20gc3RhdGVcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9TVEFURV9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLXN0YXRlOmFjdGlvblwiO1xufSkoQnJpZGdlRXZlbnRzID0gZXhwb3J0cy5CcmlkZ2VFdmVudHMgfHwgKGV4cG9ydHMuQnJpZGdlRXZlbnRzID0ge30pKTtcbnZhciBCcmlkZ2VTdWJzY3JpcHRpb25zO1xuKGZ1bmN0aW9uIChCcmlkZ2VTdWJzY3JpcHRpb25zKSB7XG4gICAgQnJpZGdlU3Vic2NyaXB0aW9uc1tcIlNFTEVDVEVEX0NPTVBPTkVOVF9EQVRBXCJdID0gXCJjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZVN1YnNjcmlwdGlvbnNbXCJDT01QT05FTlRfVFJFRVwiXSA9IFwiY29tcG9uZW50OnRyZWVcIjtcbn0pKEJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgfHwgKGV4cG9ydHMuQnJpZGdlU3Vic2NyaXB0aW9ucyA9IHt9KSk7XG52YXIgSG9va0V2ZW50cztcbihmdW5jdGlvbiAoSG9va0V2ZW50cykge1xuICAgIEhvb2tFdmVudHNbXCJJTklUXCJdID0gXCJpbml0XCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9JTklUXCJdID0gXCJhcHA6aW5pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJBUFBfQUREXCJdID0gXCJhcHA6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9VTk1PVU5UXCJdID0gXCJhcHA6dW5tb3VudFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfVVBEQVRFRFwiXSA9IFwiY29tcG9uZW50OnVwZGF0ZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX0FEREVEXCJdID0gXCJjb21wb25lbnQ6YWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX1JFTU9WRURcIl0gPSBcImNvbXBvbmVudDpyZW1vdmVkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9FTUlUXCJdID0gXCJjb21wb25lbnQ6ZW1pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfSElHSExJR0hUXCJdID0gXCJjb21wb25lbnQ6aGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9VTkhJR0hMSUdIVFwiXSA9IFwiY29tcG9uZW50OnVuaGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIlNFVFVQX0RFVlRPT0xTX1BMVUdJTlwiXSA9IFwiZGV2dG9vbHMtcGx1Z2luOnNldHVwXCI7XG4gICAgSG9va0V2ZW50c1tcIlRJTUVMSU5FX0xBWUVSX0FEREVEXCJdID0gXCJ0aW1lbGluZTpsYXllci1hZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJUSU1FTElORV9FVkVOVF9BRERFRFwiXSA9IFwidGltZWxpbmU6ZXZlbnQtYWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ1VTVE9NX0lOU1BFQ1RPUl9BRERcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbmQtdHJlZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTkRfU1RBVEVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VuZC1zdGF0ZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbGVjdC1ub2RlXCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX1NUQVJUXCJdID0gXCJwZXJmOnN0YXJ0XCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX0VORFwiXSA9IFwicGVyZjplbmRcIjtcbiAgICBIb29rRXZlbnRzW1wiUExVR0lOX1NFVFRJTkdTX1NFVFwiXSA9IFwicGx1Z2luOnNldHRpbmdzOnNldFwiO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgSG9va0V2ZW50c1tcIkZMVVNIXCJdID0gXCJmbHVzaFwiO1xufSkoSG9va0V2ZW50cyA9IGV4cG9ydHMuSG9va0V2ZW50cyB8fCAoZXhwb3J0cy5Ib29rRXZlbnRzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79410\n')},38158:(__unused_webpack_module,exports)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.StateEditor = void 0;\n\nclass StateEditor {\n set(object, path, value, cb = null) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n while (sections.length > 1) {\n object = object[sections.shift()];\n\n if (this.isRef(object)) {\n object = this.getRefValue(object);\n }\n }\n\n const field = sections[0];\n\n if (cb) {\n cb(object, field, value);\n } else if (this.isRef(object[field])) {\n this.setRefValue(object[field], value);\n } else {\n object[field] = value;\n }\n }\n\n get(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (this.isRef(object)) {\n object = this.getRefValue(object);\n }\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n }\n\n has(object, path, parent = false) {\n if (typeof object === 'undefined') {\n return false;\n }\n\n const sections = Array.isArray(path) ? path.slice() : path.split('.');\n const size = !parent ? 1 : 2;\n\n while (object && sections.length > size) {\n object = object[sections.shift()];\n\n if (this.isRef(object)) {\n object = this.getRefValue(object);\n }\n }\n\n return object != null && Object.prototype.hasOwnProperty.call(object, sections[0]);\n }\n\n createDefaultSetCallback(state) {\n return (obj, field, value) => {\n if (state.remove || state.newKey) {\n if (Array.isArray(obj)) {\n obj.splice(field, 1);\n } else {\n delete obj[field];\n }\n }\n\n if (!state.remove) {\n const target = obj[state.newKey || field];\n\n if (this.isRef(target)) {\n this.setRefValue(target, value);\n } else {\n obj[state.newKey || field] = value;\n }\n }\n };\n }\n\n isRef(ref) {\n // To implement in subclass\n return false;\n }\n\n setRefValue(ref, value) {// To implement in subclass\n }\n\n getRefValue(ref) {\n // To implement in subclass\n return ref;\n }\n\n}\n\nexports.StateEditor = StateEditor;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQU0sS0FBTixFQUFhLEtBQWIsS0FBc0I7QUFDM0IsVUFBSSxLQUFLLENBQUMsTUFBTixJQUFnQixLQUFLLENBQUMsTUFBMUIsRUFBa0M7QUFDaEMsWUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QixhQUFHLENBQUMsTUFBSixDQUFXLEtBQVgsRUFBa0IsQ0FBbEI7QUFDRCxTQUZELE1BRU87QUFDTCxpQkFBTyxHQUFHLENBQUMsS0FBRCxDQUFWO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJLENBQUMsS0FBSyxDQUFDLE1BQVgsRUFBbUI7QUFDakIsY0FBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFOLElBQWdCLEtBQWpCLENBQWxCOztBQUNBLFlBQUksS0FBSyxLQUFMLENBQVcsTUFBWCxDQUFKLEVBQXdCO0FBQ3RCLGVBQUssV0FBTCxDQUFpQixNQUFqQixFQUF5QixLQUF6QjtBQUNELFNBRkQsTUFFTztBQUNMLGFBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTixJQUFnQixLQUFqQixDQUFILEdBQTZCLEtBQTdCO0FBQ0Q7QUFDRjtBQUNGLEtBaEJEO0FBaUJEOztBQUVELE9BQUssQ0FBRSxHQUFGLEVBQVU7QUFDYjtBQUNBLFdBQU8sS0FBUDtBQUNEOztBQUVELGFBQVcsQ0FBRSxHQUFGLEVBQVcsS0FBWCxFQUFxQixDQUM5QjtBQUNEOztBQUVELGFBQVcsQ0FBRSxHQUFGLEVBQVU7QUFDbkI7QUFDQSxXQUFPLEdBQVA7QUFDRDs7QUFqRnFCOztBQUF4QiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2VkaXQudHM/ZmVlNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RhdGVFZGl0b3IgPSB2b2lkIDA7XG5jbGFzcyBTdGF0ZUVkaXRvciB7XG4gICAgc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGNiID0gbnVsbCkge1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3NlY3Rpb25zLnNoaWZ0KCldO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWYob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIG9iamVjdCA9IHRoaXMuZ2V0UmVmVmFsdWUob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IHNlY3Rpb25zWzBdO1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKG9iamVjdCwgZmllbGQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzUmVmKG9iamVjdFtmaWVsZF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJlZlZhbHVlKG9iamVjdFtmaWVsZF0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9iamVjdFtmaWVsZF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdFtzZWN0aW9uc1tpXV07XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZihvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0ID0gdGhpcy5nZXRSZWZWYWx1ZShvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICAgIGhhcyhvYmplY3QsIHBhdGgsIHBhcmVudCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9ICFwYXJlbnQgPyAxIDogMjtcbiAgICAgICAgd2hpbGUgKG9iamVjdCAmJiBzZWN0aW9ucy5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3Rbc2VjdGlvbnMuc2hpZnQoKV07XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZihvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0ID0gdGhpcy5nZXRSZWZWYWx1ZShvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBzZWN0aW9uc1swXSk7XG4gICAgfVxuICAgIGNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayhzdGF0ZSkge1xuICAgICAgICByZXR1cm4gKG9iaiwgZmllbGQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVtb3ZlIHx8IHN0YXRlLm5ld0tleSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnNwbGljZShmaWVsZCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0YXRlLnJlbW92ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG9ialtzdGF0ZS5uZXdLZXkgfHwgZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmVmKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZWZWYWx1ZSh0YXJnZXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtzdGF0ZS5uZXdLZXkgfHwgZmllbGRdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpc1JlZihyZWYpIHtcbiAgICAgICAgLy8gVG8gaW1wbGVtZW50IGluIHN1YmNsYXNzXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0UmVmVmFsdWUocmVmLCB2YWx1ZSkge1xuICAgICAgICAvLyBUbyBpbXBsZW1lbnQgaW4gc3ViY2xhc3NcbiAgICB9XG4gICAgZ2V0UmVmVmFsdWUocmVmKSB7XG4gICAgICAgIC8vIFRvIGltcGxlbWVudCBpbiBzdWJjbGFzc1xuICAgICAgICByZXR1cm4gcmVmO1xuICAgIH1cbn1cbmV4cG9ydHMuU3RhdGVFZGl0b3IgPSBTdGF0ZUVkaXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVkaXQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///38158\n")},66210:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.initEnv = exports.keys = exports.isLinux = exports.isMac = exports.isWindows = exports.isFirefox = exports.isChrome = exports.target = exports.isBrowser = void 0;\nexports.isBrowser = typeof navigator !== 'undefined';\nexports.target = exports.isBrowser ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : {};\nexports.isChrome = typeof exports.target.chrome !== 'undefined' && !!exports.target.chrome.devtools;\nexports.isFirefox = exports.isBrowser && navigator.userAgent.indexOf('Firefox') > -1;\nexports.isWindows = exports.isBrowser && navigator.platform.indexOf('Win') === 0;\nexports.isMac = exports.isBrowser && navigator.platform === 'MacIntel';\nexports.isLinux = exports.isBrowser && navigator.platform.indexOf('Linux') === 0;\nexports.keys = {\n ctrl: exports.isMac ? '&#8984;' : 'Ctrl',\n shift: 'Shift',\n alt: exports.isMac ? '&#8997;' : 'Alt',\n del: 'Del',\n enter: 'Enter',\n esc: 'Esc'\n};\n\nfunction initEnv(Vue) {\n if (Vue.prototype.hasOwnProperty('$isChrome')) return;\n Object.defineProperties(Vue.prototype, {\n $isChrome: {\n get: () => exports.isChrome\n },\n $isFirefox: {\n get: () => exports.isFirefox\n },\n $isWindows: {\n get: () => exports.isWindows\n },\n $isMac: {\n get: () => exports.isMac\n },\n $isLinux: {\n get: () => exports.isLinux\n },\n $keys: {\n get: () => exports.keys\n }\n });\n if (exports.isWindows) document.body.classList.add('platform-windows');\n if (exports.isMac) document.body.classList.add('platform-mac');\n if (exports.isLinux) document.body.classList.add('platform-linux');\n}\n\nexports.initEnv = initEnv;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjYyMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWEsb0JBQVksT0FBTyxTQUFQLEtBQXFCLFdBQWpDO0FBQ0EsaUJBQWMsb0JBQ3ZCLE1BRHVCLEdBRXZCLE9BQU8scUJBQVAsS0FBa0IsV0FBbEIsR0FDRSxxQkFERixHQUVFLEVBSk87QUFLQSxtQkFBVyxPQUFPLGVBQU8sTUFBZCxLQUF5QixXQUF6QixJQUF3QyxDQUFDLENBQUMsZUFBTyxNQUFQLENBQWMsUUFBbkU7QUFDQSxvQkFBWSxxQkFBYSxTQUFTLENBQUMsU0FBVixDQUFvQixPQUFwQixDQUE0QixTQUE1QixJQUF5QyxDQUFDLENBQW5FO0FBQ0Esb0JBQVkscUJBQWEsU0FBUyxDQUFDLFFBQVYsQ0FBbUIsT0FBbkIsQ0FBMkIsS0FBM0IsTUFBc0MsQ0FBL0Q7QUFDQSxnQkFBUSxxQkFBYSxTQUFTLENBQUMsUUFBVixLQUF1QixVQUE1QztBQUNBLGtCQUFVLHFCQUFhLFNBQVMsQ0FBQyxRQUFWLENBQW1CLE9BQW5CLENBQTJCLE9BQTNCLE1BQXdDLENBQS9EO0FBQ0EsZUFBTztBQUNsQixNQUFJLEVBQUUsZ0JBQVEsU0FBUixHQUFvQixNQURSO0FBRWxCLE9BQUssRUFBRSxPQUZXO0FBR2xCLEtBQUcsRUFBRSxnQkFBUSxTQUFSLEdBQW9CLEtBSFA7QUFJbEIsS0FBRyxFQUFFLEtBSmE7QUFLbEIsT0FBSyxFQUFFLE9BTFc7QUFNbEIsS0FBRyxFQUFFO0FBTmEsQ0FBUDs7QUFTYixTQUFnQixPQUFoQixDQUF5QixHQUF6QixFQUE0QjtBQUMxQixNQUFJLEdBQUcsQ0FBQyxTQUFKLENBQWMsY0FBZCxDQUE2QixXQUE3QixDQUFKLEVBQStDO0FBRS9DLFFBQU0sQ0FBQyxnQkFBUCxDQUF3QixHQUFHLENBQUMsU0FBNUIsRUFBdUM7QUFDckMsYUFBUyxFQUFFO0FBQUUsU0FBRyxFQUFFLE1BQU07QUFBYixLQUQwQjtBQUVyQyxjQUFVLEVBQUU7QUFBRSxTQUFHLEVBQUUsTUFBTTtBQUFiLEtBRnlCO0FBR3JDLGNBQVUsRUFBRTtBQUFFLFNBQUcsRUFBRSxNQUFNO0FBQWIsS0FIeUI7QUFJckMsVUFBTSxFQUFFO0FBQUUsU0FBRyxFQUFFLE1BQU07QUFBYixLQUo2QjtBQUtyQyxZQUFRLEVBQUU7QUFBRSxTQUFHLEVBQUUsTUFBTTtBQUFiLEtBTDJCO0FBTXJDLFNBQUssRUFBRTtBQUFFLFNBQUcsRUFBRSxNQUFNO0FBQWI7QUFOOEIsR0FBdkM7QUFTQSxNQUFJLGlCQUFKLEVBQWUsUUFBUSxDQUFDLElBQVQsQ0FBYyxTQUFkLENBQXdCLEdBQXhCLENBQTRCLGtCQUE1QjtBQUNmLE1BQUksYUFBSixFQUFXLFFBQVEsQ0FBQyxJQUFULENBQWMsU0FBZCxDQUF3QixHQUF4QixDQUE0QixjQUE1QjtBQUNYLE1BQUksZUFBSixFQUFhLFFBQVEsQ0FBQyxJQUFULENBQWMsU0FBZCxDQUF3QixHQUF4QixDQUE0QixnQkFBNUI7QUFDZDs7QUFmRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2Vudi50cz8wMTQ3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbml0RW52ID0gZXhwb3J0cy5rZXlzID0gZXhwb3J0cy5pc0xpbnV4ID0gZXhwb3J0cy5pc01hYyA9IGV4cG9ydHMuaXNXaW5kb3dzID0gZXhwb3J0cy5pc0ZpcmVmb3ggPSBleHBvcnRzLmlzQ2hyb21lID0gZXhwb3J0cy50YXJnZXQgPSBleHBvcnRzLmlzQnJvd3NlciA9IHZvaWQgMDtcbmV4cG9ydHMuaXNCcm93c2VyID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCc7XG5leHBvcnRzLnRhcmdldCA9IGV4cG9ydHMuaXNCcm93c2VyXG4gICAgPyB3aW5kb3dcbiAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gZ2xvYmFsXG4gICAgICAgIDoge307XG5leHBvcnRzLmlzQ2hyb21lID0gdHlwZW9mIGV4cG9ydHMudGFyZ2V0LmNocm9tZSAhPT0gJ3VuZGVmaW5lZCcgJiYgISFleHBvcnRzLnRhcmdldC5jaHJvbWUuZGV2dG9vbHM7XG5leHBvcnRzLmlzRmlyZWZveCA9IGV4cG9ydHMuaXNCcm93c2VyICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTE7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSA9PT0gMDtcbmV4cG9ydHMuaXNNYWMgPSBleHBvcnRzLmlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdNYWNJbnRlbCc7XG5leHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZignTGludXgnKSA9PT0gMDtcbmV4cG9ydHMua2V5cyA9IHtcbiAgICBjdHJsOiBleHBvcnRzLmlzTWFjID8gJyYjODk4NDsnIDogJ0N0cmwnLFxuICAgIHNoaWZ0OiAnU2hpZnQnLFxuICAgIGFsdDogZXhwb3J0cy5pc01hYyA/ICcmIzg5OTc7JyA6ICdBbHQnLFxuICAgIGRlbDogJ0RlbCcsXG4gICAgZW50ZXI6ICdFbnRlcicsXG4gICAgZXNjOiAnRXNjJyxcbn07XG5mdW5jdGlvbiBpbml0RW52KFZ1ZSkge1xuICAgIGlmIChWdWUucHJvdG90eXBlLmhhc093blByb3BlcnR5KCckaXNDaHJvbWUnKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZ1ZS5wcm90b3R5cGUsIHtcbiAgICAgICAgJGlzQ2hyb21lOiB7IGdldDogKCkgPT4gZXhwb3J0cy5pc0Nocm9tZSB9LFxuICAgICAgICAkaXNGaXJlZm94OiB7IGdldDogKCkgPT4gZXhwb3J0cy5pc0ZpcmVmb3ggfSxcbiAgICAgICAgJGlzV2luZG93czogeyBnZXQ6ICgpID0+IGV4cG9ydHMuaXNXaW5kb3dzIH0sXG4gICAgICAgICRpc01hYzogeyBnZXQ6ICgpID0+IGV4cG9ydHMuaXNNYWMgfSxcbiAgICAgICAgJGlzTGludXg6IHsgZ2V0OiAoKSA9PiBleHBvcnRzLmlzTGludXggfSxcbiAgICAgICAgJGtleXM6IHsgZ2V0OiAoKSA9PiBleHBvcnRzLmtleXMgfSxcbiAgICB9KTtcbiAgICBpZiAoZXhwb3J0cy5pc1dpbmRvd3MpXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncGxhdGZvcm0td2luZG93cycpO1xuICAgIGlmIChleHBvcnRzLmlzTWFjKVxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3BsYXRmb3JtLW1hYycpO1xuICAgIGlmIChleHBvcnRzLmlzTGludXgpXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncGxhdGZvcm0tbGludXgnKTtcbn1cbmV4cG9ydHMuaW5pdEVudiA9IGluaXRFbnY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnYuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///66210\n")},27146:function(__unused_webpack_module,exports,__webpack_require__){eval('\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\n\n__exportStar(__webpack_require__(79310), exports);\n\n__exportStar(__webpack_require__(47294), exports);\n\n__exportStar(__webpack_require__(79410), exports);\n\n__exportStar(__webpack_require__(38158), exports);\n\n__exportStar(__webpack_require__(66210), exports);\n\n__exportStar(__webpack_require__(12074), exports);\n\n__exportStar(__webpack_require__(86798), exports);\n\n__exportStar(__webpack_require__(29556), exports);\n\n__exportStar(__webpack_require__(423), exports);\n\n__exportStar(__webpack_require__(58561), exports);\n\n__exportStar(__webpack_require__(34723), exports);\n\n__exportStar(__webpack_require__(76203), exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcxNDYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9iYWNrZW5kXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9icmlkZ2VcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnN0c1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZWRpdFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW52XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wbHVnaW4tcGVybWlzc2lvbnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BsdWdpbi1zZXR0aW5nc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NoZWxsXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdG9yYWdlXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2ZlclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27146\n')},12074:(__unused_webpack_module,exports,__webpack_require__)=>{eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.setPluginPermission = exports.hasPluginPermission = exports.PluginPermission = void 0;\n\nconst shared_data_1 = __webpack_require__(29556);\n\nvar PluginPermission;\n\n(function (PluginPermission) {\n PluginPermission["ENABLED"] = "enabled";\n PluginPermission["COMPONENTS"] = "components";\n PluginPermission["CUSTOM_INSPECTOR"] = "custom-inspector";\n PluginPermission["TIMELINE"] = "timeline";\n})(PluginPermission = exports.PluginPermission || (exports.PluginPermission = {}));\n\nfunction hasPluginPermission(pluginId, permission) {\n const result = shared_data_1.SharedData.pluginPermissions[`${pluginId}:${permission}`];\n if (result == null) return true;\n return !!result;\n}\n\nexports.hasPluginPermission = hasPluginPermission;\n\nfunction setPluginPermission(pluginId, permission, active) {\n shared_data_1.SharedData.pluginPermissions = { ...shared_data_1.SharedData.pluginPermissions,\n [`${pluginId}:${permission}`]: active\n };\n}\n\nexports.setPluginPermission = setPluginPermission;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIwNzQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBLElBQVksZ0JBQVo7O0FBQUEsV0FBWSxnQkFBWixFQUE0QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxnQkFBZ0IsR0FBaEIsd0RBQWdCLEVBQWhCLENBQVo7O0FBT0EsU0FBZ0IsbUJBQWhCLENBQXFDLFFBQXJDLEVBQXVELFVBQXZELEVBQW1GO0FBQ2pGLFFBQU0sTUFBTSxHQUFHLHlCQUFXLGlCQUFYLENBQTZCLEdBQUcsUUFBUSxJQUFJLFVBQVUsRUFBdEQsQ0FBZjtBQUNBLE1BQUksTUFBTSxJQUFJLElBQWQsRUFBb0IsT0FBTyxJQUFQO0FBQ3BCLFNBQU8sQ0FBQyxDQUFDLE1BQVQ7QUFDRDs7QUFKRDs7QUFNQSxTQUFnQixtQkFBaEIsQ0FBcUMsUUFBckMsRUFBdUQsVUFBdkQsRUFBcUYsTUFBckYsRUFBb0c7QUFDbEcsMkJBQVcsaUJBQVgsR0FBK0IsRUFDN0IsR0FBRyx5QkFBVyxpQkFEZTtBQUU3QixLQUFDLEdBQUcsUUFBUSxJQUFJLFVBQVUsRUFBMUIsR0FBK0I7QUFGRixHQUEvQjtBQUlEOztBQUxEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvcGx1Z2luLXBlcm1pc3Npb25zLnRzP2EzM2EiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldFBsdWdpblBlcm1pc3Npb24gPSBleHBvcnRzLmhhc1BsdWdpblBlcm1pc3Npb24gPSBleHBvcnRzLlBsdWdpblBlcm1pc3Npb24gPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfZGF0YV8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIik7XG52YXIgUGx1Z2luUGVybWlzc2lvbjtcbihmdW5jdGlvbiAoUGx1Z2luUGVybWlzc2lvbikge1xuICAgIFBsdWdpblBlcm1pc3Npb25bXCJFTkFCTEVEXCJdID0gXCJlbmFibGVkXCI7XG4gICAgUGx1Z2luUGVybWlzc2lvbltcIkNPTVBPTkVOVFNcIl0gPSBcImNvbXBvbmVudHNcIjtcbiAgICBQbHVnaW5QZXJtaXNzaW9uW1wiQ1VTVE9NX0lOU1BFQ1RPUlwiXSA9IFwiY3VzdG9tLWluc3BlY3RvclwiO1xuICAgIFBsdWdpblBlcm1pc3Npb25bXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbn0pKFBsdWdpblBlcm1pc3Npb24gPSBleHBvcnRzLlBsdWdpblBlcm1pc3Npb24gfHwgKGV4cG9ydHMuUGx1Z2luUGVybWlzc2lvbiA9IHt9KSk7XG5mdW5jdGlvbiBoYXNQbHVnaW5QZXJtaXNzaW9uKHBsdWdpbklkLCBwZXJtaXNzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gc2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLnBsdWdpblBlcm1pc3Npb25zW2Ake3BsdWdpbklkfToke3Blcm1pc3Npb259YF07XG4gICAgaWYgKHJlc3VsdCA9PSBudWxsKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gISFyZXN1bHQ7XG59XG5leHBvcnRzLmhhc1BsdWdpblBlcm1pc3Npb24gPSBoYXNQbHVnaW5QZXJtaXNzaW9uO1xuZnVuY3Rpb24gc2V0UGx1Z2luUGVybWlzc2lvbihwbHVnaW5JZCwgcGVybWlzc2lvbiwgYWN0aXZlKSB7XG4gICAgc2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLnBsdWdpblBlcm1pc3Npb25zID0ge1xuICAgICAgICAuLi5zaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEucGx1Z2luUGVybWlzc2lvbnMsXG4gICAgICAgIFtgJHtwbHVnaW5JZH06JHtwZXJtaXNzaW9ufWBdOiBhY3RpdmUsXG4gICAgfTtcbn1cbmV4cG9ydHMuc2V0UGx1Z2luUGVybWlzc2lvbiA9IHNldFBsdWdpblBlcm1pc3Npb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wbHVnaW4tcGVybWlzc2lvbnMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12074\n')},86798:(__unused_webpack_module,exports,__webpack_require__)=>{eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.getPluginDefaultSettings = exports.setPluginSettings = exports.getPluginSettings = void 0;\n\nconst shared_data_1 = __webpack_require__(29556);\n\nfunction getPluginSettings(pluginId, defaultSettings) {\n var _a;\n\n return { ...(defaultSettings !== null && defaultSettings !== void 0 ? defaultSettings : {}),\n ...((_a = shared_data_1.SharedData.pluginSettings[pluginId]) !== null && _a !== void 0 ? _a : {})\n };\n}\n\nexports.getPluginSettings = getPluginSettings;\n\nfunction setPluginSettings(pluginId, settings) {\n shared_data_1.SharedData.pluginSettings = { ...shared_data_1.SharedData.pluginSettings,\n [pluginId]: settings\n };\n}\n\nexports.setPluginSettings = setPluginSettings;\n\nfunction getPluginDefaultSettings(schema) {\n const result = {};\n\n if (schema) {\n for (const id in schema) {\n const item = schema[id];\n result[id] = item.defaultValue;\n }\n }\n\n return result;\n}\n\nexports.getPluginDefaultSettings = getPluginDefaultSettings;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODY3OTguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUdBLFNBQWdCLGlCQUFoQixDQUFnRixRQUFoRixFQUFrRyxlQUFsRyxFQUE2SDs7O0FBQzNILFNBQU8sRUFDTCxJQUFHLGVBQWUsU0FBZixtQkFBZSxXQUFmLHFCQUFtQixFQUF0QixDQURLO0FBRUwsUUFBRywrQkFBVyxjQUFYLENBQTBCLFFBQTFCLE9BQW1DLElBQW5DLElBQW1DLGFBQW5DLEdBQW1DLEVBQW5DLEdBQXVDLEVBQTFDO0FBRkssR0FBUDtBQUlEOztBQUxEOztBQU9BLFNBQWdCLGlCQUFoQixDQUFnRixRQUFoRixFQUFrRyxRQUFsRyxFQUFxSDtBQUNuSCwyQkFBVyxjQUFYLEdBQTRCLEVBQzFCLEdBQUcseUJBQVcsY0FEWTtBQUUxQixLQUFDLFFBQUQsR0FBWTtBQUZjLEdBQTVCO0FBSUQ7O0FBTEQ7O0FBT0EsU0FBZ0Isd0JBQWhCLENBQXVGLE1BQXZGLEVBQWlJO0FBQy9ILFFBQU0sTUFBTSxHQUF3QixFQUFwQzs7QUFDQSxNQUFJLE1BQUosRUFBWTtBQUNWLFNBQUssTUFBTSxFQUFYLElBQWlCLE1BQWpCLEVBQXlCO0FBQ3ZCLFlBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFELENBQW5CO0FBQ0EsWUFBTSxDQUFDLEVBQUQsQ0FBTixHQUFhLElBQUksQ0FBQyxZQUFsQjtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTyxNQUFQO0FBQ0Q7O0FBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9wbHVnaW4tc2V0dGluZ3MudHM/OTk2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzID0gZXhwb3J0cy5zZXRQbHVnaW5TZXR0aW5ncyA9IGV4cG9ydHMuZ2V0UGx1Z2luU2V0dGluZ3MgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfZGF0YV8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIik7XG5mdW5jdGlvbiBnZXRQbHVnaW5TZXR0aW5ncyhwbHVnaW5JZCwgZGVmYXVsdFNldHRpbmdzKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRTZXR0aW5ncyAhPT0gbnVsbCAmJiBkZWZhdWx0U2V0dGluZ3MgIT09IHZvaWQgMCA/IGRlZmF1bHRTZXR0aW5ncyA6IHt9LFxuICAgICAgICAuLi4oX2EgPSBzaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEucGx1Z2luU2V0dGluZ3NbcGx1Z2luSWRdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRQbHVnaW5TZXR0aW5ncyA9IGdldFBsdWdpblNldHRpbmdzO1xuZnVuY3Rpb24gc2V0UGx1Z2luU2V0dGluZ3MocGx1Z2luSWQsIHNldHRpbmdzKSB7XG4gICAgc2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLnBsdWdpblNldHRpbmdzID0ge1xuICAgICAgICAuLi5zaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEucGx1Z2luU2V0dGluZ3MsXG4gICAgICAgIFtwbHVnaW5JZF06IHNldHRpbmdzLFxuICAgIH07XG59XG5leHBvcnRzLnNldFBsdWdpblNldHRpbmdzID0gc2V0UGx1Z2luU2V0dGluZ3M7XG5mdW5jdGlvbiBnZXRQbHVnaW5EZWZhdWx0U2V0dGluZ3Moc2NoZW1hKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNjaGVtYVtpZF07XG4gICAgICAgICAgICByZXN1bHRbaWRdID0gaXRlbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzID0gZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Z2luLXNldHRpbmdzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86798\n')},29556:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SharedData = exports.watchSharedData = exports.destroySharedData = exports.onSharedDataInit = exports.initSharedData = void 0;\n\nconst storage_1 = __webpack_require__(58561);\n\nconst env_1 = __webpack_require__(66210); // Initial state\n\n\nconst internalSharedData = {\n openInEditorHost: '/',\n componentNameStyle: 'class',\n theme: 'auto',\n displayDensity: 'low',\n timeFormat: 'default',\n recordVuex: true,\n cacheVuexSnapshotsEvery: 50,\n cacheVuexSnapshotsLimit: 10,\n snapshotLoading: false,\n componentEventsEnabled: true,\n performanceMonitoringEnabled: true,\n editableProps: false,\n logDetected: true,\n vuexNewBackend: false,\n vuexAutoload: false,\n vuexGroupGettersByModule: true,\n showMenuScrollTip: true,\n timelineTimeGrid: true,\n timelineScreenshots: true,\n menuStepScrolling: env_1.isMac,\n pluginPermissions: {},\n pluginSettings: {},\n pageConfig: {},\n debugInfo: false\n};\nconst persisted = ['componentNameStyle', 'theme', 'displayDensity', 'recordVuex', 'editableProps', 'logDetected', 'vuexNewBackend', 'vuexAutoload', 'vuexGroupGettersByModule', 'timeFormat', 'showMenuScrollTip', 'timelineTimeGrid', 'timelineScreenshots', 'menuStepScrolling', 'pluginPermissions', 'pluginSettings', 'performanceMonitoringEnabled', 'componentEventsEnabled', 'debugInfo'];\nconst storageVersion = '6.0.0-alpha.1'; // ---- INTERNALS ---- //\n\nlet bridge; // List of fields to persist to storage (disabled if 'false')\n// This should be unique to each shared data client to prevent conflicts\n\nlet persist = false;\nlet data;\nlet initRetryInterval;\nlet initRetryCount = 0;\nconst initCbs = [];\n\nfunction initSharedData(params) {\n return new Promise(resolve => {\n // Mandatory params\n bridge = params.bridge;\n persist = !!params.persist;\n\n if (persist) {\n if (false) {} // Load persisted fields\n\n\n persisted.forEach(key => {\n const value = (0, storage_1.getStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`);\n\n if (value !== null) {\n internalSharedData[key] = value;\n }\n });\n bridge.on('shared-data:load', () => {\n // Send all fields\n Object.keys(internalSharedData).forEach(key => {\n sendValue(key, internalSharedData[key]);\n });\n bridge.send('shared-data:load-complete');\n });\n bridge.on('shared-data:init-complete', () => {\n if (false) {}\n\n clearInterval(initRetryInterval);\n resolve();\n });\n bridge.send('shared-data:master-init-waiting'); // In case backend init is executed after frontend\n\n bridge.on('shared-data:minion-init-waiting', () => {\n bridge.send('shared-data:master-init-waiting');\n });\n initRetryCount = 0;\n clearInterval(initRetryInterval);\n initRetryInterval = setInterval(() => {\n if (false) {}\n\n bridge.send('shared-data:master-init-waiting');\n initRetryCount++;\n\n if (initRetryCount > 30) {\n clearInterval(initRetryInterval);\n console.error('[shared data] Master init failed');\n }\n }, 2000);\n } else {\n if (false) {}\n\n bridge.on('shared-data:master-init-waiting', () => {\n if (false) {} // Load all persisted shared data\n\n\n bridge.send('shared-data:load');\n bridge.once('shared-data:load-complete', () => {\n if (false) {}\n\n bridge.send('shared-data:init-complete');\n resolve();\n });\n });\n bridge.send('shared-data:minion-init-waiting');\n }\n\n data = { ...internalSharedData\n };\n\n if (params.Vue) {\n data = params.Vue.observable(data);\n } // Update value from other shared data clients\n\n\n bridge.on('shared-data:set', ({\n key,\n value\n }) => {\n setValue(key, value);\n });\n initCbs.forEach(cb => cb());\n });\n}\n\nexports.initSharedData = initSharedData;\n\nfunction onSharedDataInit(cb) {\n initCbs.push(cb);\n return () => {\n const index = initCbs.indexOf(cb);\n if (index !== -1) initCbs.splice(index, 1);\n };\n}\n\nexports.onSharedDataInit = onSharedDataInit;\n\nfunction destroySharedData() {\n bridge.removeAllListeners('shared-data:set');\n watchers = {};\n}\n\nexports.destroySharedData = destroySharedData;\nlet watchers = {};\n\nfunction setValue(key, value) {\n // Storage\n if (persist && persisted.includes(key)) {\n (0, storage_1.setStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`, value);\n }\n\n const oldValue = data[key];\n data[key] = value;\n const handlers = watchers[key];\n\n if (handlers) {\n handlers.forEach(h => h(value, oldValue));\n } // Validate Proxy set trap\n\n\n return true;\n}\n\nfunction sendValue(key, value) {\n bridge && bridge.send('shared-data:set', {\n key,\n value\n });\n}\n\nfunction watchSharedData(prop, handler) {\n const list = watchers[prop] || (watchers[prop] = []);\n list.push(handler);\n return () => {\n const index = list.indexOf(handler);\n if (index !== -1) list.splice(index, 1);\n };\n}\n\nexports.watchSharedData = watchSharedData;\nconst proxy = {};\nObject.keys(internalSharedData).forEach(key => {\n Object.defineProperty(proxy, key, {\n configurable: false,\n get: () => data[key],\n set: value => {\n sendValue(key, value);\n setValue(key, value);\n }\n });\n});\nexports.SharedData = proxy;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YXRhLnRzP2QwYmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNoYXJlZERhdGEgPSBleHBvcnRzLndhdGNoU2hhcmVkRGF0YSA9IGV4cG9ydHMuZGVzdHJveVNoYXJlZERhdGEgPSBleHBvcnRzLm9uU2hhcmVkRGF0YUluaXQgPSBleHBvcnRzLmluaXRTaGFyZWREYXRhID0gdm9pZCAwO1xuY29uc3Qgc3RvcmFnZV8xID0gcmVxdWlyZShcIi4vc3RvcmFnZVwiKTtcbmNvbnN0IGVudl8xID0gcmVxdWlyZShcIi4vZW52XCIpO1xuLy8gSW5pdGlhbCBzdGF0ZVxuY29uc3QgaW50ZXJuYWxTaGFyZWREYXRhID0ge1xuICAgIG9wZW5JbkVkaXRvckhvc3Q6ICcvJyxcbiAgICBjb21wb25lbnROYW1lU3R5bGU6ICdjbGFzcycsXG4gICAgdGhlbWU6ICdhdXRvJyxcbiAgICBkaXNwbGF5RGVuc2l0eTogJ2xvdycsXG4gICAgdGltZUZvcm1hdDogJ2RlZmF1bHQnLFxuICAgIHJlY29yZFZ1ZXg6IHRydWUsXG4gICAgY2FjaGVWdWV4U25hcHNob3RzRXZlcnk6IDUwLFxuICAgIGNhY2hlVnVleFNuYXBzaG90c0xpbWl0OiAxMCxcbiAgICBzbmFwc2hvdExvYWRpbmc6IGZhbHNlLFxuICAgIGNvbXBvbmVudEV2ZW50c0VuYWJsZWQ6IHRydWUsXG4gICAgcGVyZm9ybWFuY2VNb25pdG9yaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICBlZGl0YWJsZVByb3BzOiBmYWxzZSxcbiAgICBsb2dEZXRlY3RlZDogdHJ1ZSxcbiAgICB2dWV4TmV3QmFja2VuZDogZmFsc2UsXG4gICAgdnVleEF1dG9sb2FkOiBmYWxzZSxcbiAgICB2dWV4R3JvdXBHZXR0ZXJzQnlNb2R1bGU6IHRydWUsXG4gICAgc2hvd01lbnVTY3JvbGxUaXA6IHRydWUsXG4gICAgdGltZWxpbmVUaW1lR3JpZDogdHJ1ZSxcbiAgICB0aW1lbGluZVNjcmVlbnNob3RzOiB0cnVlLFxuICAgIG1lbnVTdGVwU2Nyb2xsaW5nOiBlbnZfMS5pc01hYyxcbiAgICBwbHVnaW5QZXJtaXNzaW9uczoge30sXG4gICAgcGx1Z2luU2V0dGluZ3M6IHt9LFxuICAgIHBhZ2VDb25maWc6IHt9LFxuICAgIGRlYnVnSW5mbzogZmFsc2UsXG59O1xuY29uc3QgcGVyc2lzdGVkID0gW1xuICAgICdjb21wb25lbnROYW1lU3R5bGUnLFxuICAgICd0aGVtZScsXG4gICAgJ2Rpc3BsYXlEZW5zaXR5JyxcbiAgICAncmVjb3JkVnVleCcsXG4gICAgJ2VkaXRhYmxlUHJvcHMnLFxuICAgICdsb2dEZXRlY3RlZCcsXG4gICAgJ3Z1ZXhOZXdCYWNrZW5kJyxcbiAgICAndnVleEF1dG9sb2FkJyxcbiAgICAndnVleEdyb3VwR2V0dGVyc0J5TW9kdWxlJyxcbiAgICAndGltZUZvcm1hdCcsXG4gICAgJ3Nob3dNZW51U2Nyb2xsVGlwJyxcbiAgICAndGltZWxpbmVUaW1lR3JpZCcsXG4gICAgJ3RpbWVsaW5lU2NyZWVuc2hvdHMnLFxuICAgICdtZW51U3RlcFNjcm9sbGluZycsXG4gICAgJ3BsdWdpblBlcm1pc3Npb25zJyxcbiAgICAncGx1Z2luU2V0dGluZ3MnLFxuICAgICdwZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkJyxcbiAgICAnY29tcG9uZW50RXZlbnRzRW5hYmxlZCcsXG4gICAgJ2RlYnVnSW5mbycsXG5dO1xuY29uc3Qgc3RvcmFnZVZlcnNpb24gPSAnNi4wLjAtYWxwaGEuMSc7XG4vLyAtLS0tIElOVEVSTkFMUyAtLS0tIC8vXG5sZXQgYnJpZGdlO1xuLy8gTGlzdCBvZiBmaWVsZHMgdG8gcGVyc2lzdCB0byBzdG9yYWdlIChkaXNhYmxlZCBpZiAnZmFsc2UnKVxuLy8gVGhpcyBzaG91bGQgYmUgdW5pcXVlIHRvIGVhY2ggc2hhcmVkIGRhdGEgY2xpZW50IHRvIHByZXZlbnQgY29uZmxpY3RzXG5sZXQgcGVyc2lzdCA9IGZhbHNlO1xubGV0IGRhdGE7XG5sZXQgaW5pdFJldHJ5SW50ZXJ2YWw7XG5sZXQgaW5pdFJldHJ5Q291bnQgPSAwO1xuY29uc3QgaW5pdENicyA9IFtdO1xuZnVuY3Rpb24gaW5pdFNoYXJlZERhdGEocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIE1hbmRhdG9yeSBwYXJhbXNcbiAgICAgICAgYnJpZGdlID0gcGFyYW1zLmJyaWRnZTtcbiAgICAgICAgcGVyc2lzdCA9ICEhcGFyYW1zLnBlcnNpc3Q7XG4gICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgaW4gcHJvZ3Jlc3MuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIExvYWQgcGVyc2lzdGVkIGZpZWxkc1xuICAgICAgICAgICAgcGVyc2lzdGVkLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICgwLCBzdG9yYWdlXzEuZ2V0U3RvcmFnZSkoYHZ1ZS1kZXZ0b29scy0ke3N0b3JhZ2VWZXJzaW9ufTpzaGFyZWQtZGF0YToke2tleX1gKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGFyZWREYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6bG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTZW5kIGFsbCBmaWVsZHNcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpbnRlcm5hbFNoYXJlZERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFZhbHVlKGtleSwgaW50ZXJuYWxTaGFyZWREYXRhW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTpsb2FkLWNvbXBsZXRlJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6aW5pdC1jb21wbGV0ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCBjb21wbGV0ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGluaXRSZXRyeUludGVydmFsKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptYXN0ZXItaW5pdC13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIGJhY2tlbmQgaW5pdCBpcyBleGVjdXRlZCBhZnRlciBmcm9udGVuZFxuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTptaW5pb24taW5pdC13YWl0aW5nJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptYXN0ZXItaW5pdC13YWl0aW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluaXRSZXRyeUNvdW50ID0gMDtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgaW5pdFJldHJ5SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgcmV0cnlpbmcuLi4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICBpbml0UmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgICAgIGlmIChpbml0UmV0cnlDb3VudCA+IDMwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbc2hhcmVkIGRhdGFdIE1hc3RlciBpbml0IGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1pbmlvbiBpbml0IGluIHByb2dyZXNzLi4uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGxvYWRpbmcgZGF0YS4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMb2FkIGFsbCBwZXJzaXN0ZWQgc2hhcmVkIGRhdGFcbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bG9hZCcpO1xuICAgICAgICAgICAgICAgIGJyaWRnZS5vbmNlKCdzaGFyZWQtZGF0YTpsb2FkLWNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1pbmlvbiBpbml0IGNvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOmluaXQtY29tcGxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bWluaW9uLWluaXQtd2FpdGluZycpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAuLi5pbnRlcm5hbFNoYXJlZERhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChwYXJhbXMuVnVlKSB7XG4gICAgICAgICAgICBkYXRhID0gcGFyYW1zLlZ1ZS5vYnNlcnZhYmxlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSB2YWx1ZSBmcm9tIG90aGVyIHNoYXJlZCBkYXRhIGNsaWVudHNcbiAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTpzZXQnLCAoeyBrZXksIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHNldFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaW5pdENicy5mb3JFYWNoKGNiID0+IGNiKCkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0U2hhcmVkRGF0YSA9IGluaXRTaGFyZWREYXRhO1xuZnVuY3Rpb24gb25TaGFyZWREYXRhSW5pdChjYikge1xuICAgIGluaXRDYnMucHVzaChjYik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbml0Q2JzLmluZGV4T2YoY2IpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgaW5pdENicy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH07XG59XG5leHBvcnRzLm9uU2hhcmVkRGF0YUluaXQgPSBvblNoYXJlZERhdGFJbml0O1xuZnVuY3Rpb24gZGVzdHJveVNoYXJlZERhdGEoKSB7XG4gICAgYnJpZGdlLnJlbW92ZUFsbExpc3RlbmVycygnc2hhcmVkLWRhdGE6c2V0Jyk7XG4gICAgd2F0Y2hlcnMgPSB7fTtcbn1cbmV4cG9ydHMuZGVzdHJveVNoYXJlZERhdGEgPSBkZXN0cm95U2hhcmVkRGF0YTtcbmxldCB3YXRjaGVycyA9IHt9O1xuZnVuY3Rpb24gc2V0VmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIC8vIFN0b3JhZ2VcbiAgICBpZiAocGVyc2lzdCAmJiBwZXJzaXN0ZWQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAoMCwgc3RvcmFnZV8xLnNldFN0b3JhZ2UpKGB2dWUtZGV2dG9vbHMtJHtzdG9yYWdlVmVyc2lvbn06c2hhcmVkLWRhdGE6JHtrZXl9YCwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBvbGRWYWx1ZSA9IGRhdGFba2V5XTtcbiAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICBjb25zdCBoYW5kbGVycyA9IHdhdGNoZXJzW2tleV07XG4gICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGhhbmRsZXJzLmZvckVhY2goaCA9PiBoKHZhbHVlLCBvbGRWYWx1ZSkpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBQcm94eSBzZXQgdHJhcFxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gc2VuZFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBicmlkZ2UgJiYgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOnNldCcsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdhdGNoU2hhcmVkRGF0YShwcm9wLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgbGlzdCA9IHdhdGNoZXJzW3Byb3BdIHx8ICh3YXRjaGVyc1twcm9wXSA9IFtdKTtcbiAgICBsaXN0LnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgfTtcbn1cbmV4cG9ydHMud2F0Y2hTaGFyZWREYXRhID0gd2F0Y2hTaGFyZWREYXRhO1xuY29uc3QgcHJveHkgPSB7fTtcbk9iamVjdC5rZXlzKGludGVybmFsU2hhcmVkRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGdldDogKCkgPT4gZGF0YVtrZXldLFxuICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgc2VuZFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydHMuU2hhcmVkRGF0YSA9IHByb3h5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmVkLWRhdGEuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29556\n")},423:(I,g)=>{Object.defineProperty(g,"__esModule",{value:!0})},58561:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.clearStorage = exports.removeStorage = exports.setStorage = exports.getStorage = exports.initStorage = void 0;\n\nconst env_1 = __webpack_require__(66210); // If we can, we use the browser extension API to store data\n// it's async though, so we synchronize changes from an intermediate\n// storageData object\n\n\nconst useStorage = typeof env_1.target.chrome !== 'undefined' && typeof env_1.target.chrome.storage !== 'undefined';\nlet storageData = null;\n\nfunction initStorage() {\n return new Promise(resolve => {\n if (useStorage) {\n env_1.target.chrome.storage.local.get(null, result => {\n storageData = result;\n resolve();\n });\n } else {\n storageData = {};\n resolve();\n }\n });\n}\n\nexports.initStorage = initStorage;\n\nfunction getStorage(key, defaultValue = null) {\n checkStorage();\n\n if (useStorage) {\n return getDefaultValue(storageData[key], defaultValue);\n } else {\n try {\n return getDefaultValue(JSON.parse(localStorage.getItem(key)), defaultValue);\n } catch (e) {}\n }\n}\n\nexports.getStorage = getStorage;\n\nfunction setStorage(key, val) {\n checkStorage();\n\n if (useStorage) {\n storageData[key] = val;\n env_1.target.chrome.storage.local.set({\n [key]: val\n });\n } else {\n try {\n localStorage.setItem(key, JSON.stringify(val));\n } catch (e) {}\n }\n}\n\nexports.setStorage = setStorage;\n\nfunction removeStorage(key) {\n checkStorage();\n\n if (useStorage) {\n delete storageData[key];\n env_1.target.chrome.storage.local.remove([key]);\n } else {\n try {\n localStorage.removeItem(key);\n } catch (e) {}\n }\n}\n\nexports.removeStorage = removeStorage;\n\nfunction clearStorage() {\n checkStorage();\n\n if (useStorage) {\n storageData = {};\n env_1.target.chrome.storage.local.clear();\n } else {\n try {\n localStorage.clear();\n } catch (e) {}\n }\n}\n\nexports.clearStorage = clearStorage;\n\nfunction checkStorage() {\n if (!storageData) {\n throw new Error('Storage wasn\\'t initialized with \\'init()\\'');\n }\n}\n\nfunction getDefaultValue(value, defaultValue) {\n if (value == null) {\n return defaultValue;\n }\n\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUksSUFBYixFQUFtQjtBQUNqQixXQUFPLFlBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQVA7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3N0b3JhZ2UudHM/NTMyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2xlYXJTdG9yYWdlID0gZXhwb3J0cy5yZW1vdmVTdG9yYWdlID0gZXhwb3J0cy5zZXRTdG9yYWdlID0gZXhwb3J0cy5nZXRTdG9yYWdlID0gZXhwb3J0cy5pbml0U3RvcmFnZSA9IHZvaWQgMDtcbmNvbnN0IGVudl8xID0gcmVxdWlyZShcIi4vZW52XCIpO1xuLy8gSWYgd2UgY2FuLCB3ZSB1c2UgdGhlIGJyb3dzZXIgZXh0ZW5zaW9uIEFQSSB0byBzdG9yZSBkYXRhXG4vLyBpdCdzIGFzeW5jIHRob3VnaCwgc28gd2Ugc3luY2hyb25pemUgY2hhbmdlcyBmcm9tIGFuIGludGVybWVkaWF0ZVxuLy8gc3RvcmFnZURhdGEgb2JqZWN0XG5jb25zdCB1c2VTdG9yYWdlID0gdHlwZW9mIGVudl8xLnRhcmdldC5jaHJvbWUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBlbnZfMS50YXJnZXQuY2hyb21lLnN0b3JhZ2UgIT09ICd1bmRlZmluZWQnO1xubGV0IHN0b3JhZ2VEYXRhID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRTdG9yYWdlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBpZiAodXNlU3RvcmFnZSkge1xuICAgICAgICAgICAgZW52XzEudGFyZ2V0LmNocm9tZS5zdG9yYWdlLmxvY2FsLmdldChudWxsLCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2VEYXRhID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RvcmFnZURhdGEgPSB7fTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0U3RvcmFnZSA9IGluaXRTdG9yYWdlO1xuZnVuY3Rpb24gZ2V0U3RvcmFnZShrZXksIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcbiAgICBjaGVja1N0b3JhZ2UoKTtcbiAgICBpZiAodXNlU3RvcmFnZSkge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKHN0b3JhZ2VEYXRhW2tleV0sIGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHRWYWx1ZShKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICB9XG59XG5leHBvcnRzLmdldFN0b3JhZ2UgPSBnZXRTdG9yYWdlO1xuZnVuY3Rpb24gc2V0U3RvcmFnZShrZXksIHZhbCkge1xuICAgIGNoZWNrU3RvcmFnZSgpO1xuICAgIGlmICh1c2VTdG9yYWdlKSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhW2tleV0gPSB2YWw7XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoeyBba2V5XTogdmFsIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHsgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2V0U3RvcmFnZSA9IHNldFN0b3JhZ2U7XG5mdW5jdGlvbiByZW1vdmVTdG9yYWdlKGtleSkge1xuICAgIGNoZWNrU3RvcmFnZSgpO1xuICAgIGlmICh1c2VTdG9yYWdlKSB7XG4gICAgICAgIGRlbGV0ZSBzdG9yYWdlRGF0YVtrZXldO1xuICAgICAgICBlbnZfMS50YXJnZXQuY2hyb21lLnN0b3JhZ2UubG9jYWwucmVtb3ZlKFtrZXldKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICB9XG59XG5leHBvcnRzLnJlbW92ZVN0b3JhZ2UgPSByZW1vdmVTdG9yYWdlO1xuZnVuY3Rpb24gY2xlYXJTdG9yYWdlKCkge1xuICAgIGNoZWNrU3RvcmFnZSgpO1xuICAgIGlmICh1c2VTdG9yYWdlKSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhID0ge307XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuc3RvcmFnZS5sb2NhbC5jbGVhcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICB9XG59XG5leHBvcnRzLmNsZWFyU3RvcmFnZSA9IGNsZWFyU3RvcmFnZTtcbmZ1bmN0aW9uIGNoZWNrU3RvcmFnZSgpIHtcbiAgICBpZiAoIXN0b3JhZ2VEYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3RvcmFnZSB3YXNuXFwndCBpbml0aWFsaXplZCB3aXRoIFxcJ2luaXQoKVxcJycpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RvcmFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58561\n")},34723:(__unused_webpack_module,exports)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.stringifyStrictCircularAutoChunks = exports.parseCircularAutoChunks = exports.stringifyCircularAutoChunks = void 0;\nconst MAX_SERIALIZED_SIZE = 512 * 1024; // 1MB\n\nfunction encode(data, replacer, list, seen) {\n let stored, key, value, i, l;\n const seenIndex = seen.get(data);\n\n if (seenIndex != null) {\n return seenIndex;\n }\n\n const index = list.length;\n const proto = Object.prototype.toString.call(data);\n\n if (proto === '[object Object]') {\n stored = {};\n seen.set(data, index);\n list.push(stored);\n const keys = Object.keys(data);\n\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n value = data[key];\n if (replacer) value = replacer.call(data, key, value);\n stored[key] = encode(value, replacer, list, seen);\n }\n } else if (proto === '[object Array]') {\n stored = [];\n seen.set(data, index);\n list.push(stored);\n\n for (i = 0, l = data.length; i < l; i++) {\n value = data[i];\n if (replacer) value = replacer.call(data, i, value);\n stored[i] = encode(value, replacer, list, seen);\n }\n } else {\n list.push(data);\n }\n\n return index;\n}\n\nfunction decode(list, reviver) {\n let i = list.length;\n let j, k, data, key, value, proto;\n\n while (i--) {\n data = list[i];\n proto = Object.prototype.toString.call(data);\n\n if (proto === '[object Object]') {\n const keys = Object.keys(data);\n\n for (j = 0, k = keys.length; j < k; j++) {\n key = keys[j];\n value = list[data[key]];\n if (reviver) value = reviver.call(data, key, value);\n data[key] = value;\n }\n } else if (proto === '[object Array]') {\n for (j = 0, k = data.length; j < k; j++) {\n value = list[data[j]];\n if (reviver) value = reviver.call(data, j, value);\n data[j] = value;\n }\n }\n }\n}\n\nfunction stringifyCircularAutoChunks(data, replacer = null, space = null) {\n let result;\n\n try {\n result = arguments.length === 1 ? JSON.stringify(data) // @ts-ignore\n : JSON.stringify(data, replacer, space);\n } catch (e) {\n result = stringifyStrictCircularAutoChunks(data, replacer, space);\n }\n\n if (result.length > MAX_SERIALIZED_SIZE) {\n const chunkCount = Math.ceil(result.length / MAX_SERIALIZED_SIZE);\n const chunks = [];\n\n for (let i = 0; i < chunkCount; i++) {\n chunks.push(result.slice(i * MAX_SERIALIZED_SIZE, (i + 1) * MAX_SERIALIZED_SIZE));\n }\n\n return chunks;\n }\n\n return result;\n}\n\nexports.stringifyCircularAutoChunks = stringifyCircularAutoChunks;\n\nfunction parseCircularAutoChunks(data, reviver = null) {\n if (Array.isArray(data)) {\n data = data.join('');\n }\n\n const hasCircular = /^\\s/.test(data);\n\n if (!hasCircular) {\n return arguments.length === 1 ? JSON.parse(data) // @ts-ignore\n : JSON.parse(data, reviver);\n } else {\n const list = JSON.parse(data);\n decode(list, reviver);\n return list[0];\n }\n}\n\nexports.parseCircularAutoChunks = parseCircularAutoChunks;\n\nfunction stringifyStrictCircularAutoChunks(data, replacer = null, space = null) {\n const list = [];\n encode(data, replacer, list, new Map());\n return space ? ' ' + JSON.stringify(list, null, space) : ' ' + JSON.stringify(list);\n}\n\nexports.stringifyStrictCircularAutoChunks = stringifyStrictCircularAutoChunks;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUksR0FBRyxJQUFJLENBQUMsS0FBTCxDQUFXLElBQVgsQ0FBYjtBQUNBLFVBQU0sQ0FBQyxJQUFELEVBQU8sT0FBUCxDQUFOO0FBQ0EsV0FBTyxJQUFJLENBQUMsQ0FBRCxDQUFYO0FBQ0Q7QUFDRjs7QUFmRDs7QUFpQkEsU0FBZ0IsaUNBQWhCLENBQW1ELElBQW5ELEVBQThELFdBQXdELElBQXRILEVBQTRILFFBQWdCLElBQTVJLEVBQWdKO0FBQzlJLFFBQU0sSUFBSSxHQUFHLEVBQWI7QUFDQSxRQUFNLENBQUMsSUFBRCxFQUFPLFFBQVAsRUFBaUIsSUFBakIsRUFBdUIsSUFBSSxHQUFKLEVBQXZCLENBQU47QUFDQSxTQUFPLEtBQUssR0FDUixNQUFNLElBQUksQ0FBQyxTQUFMLENBQWUsSUFBZixFQUFxQixJQUFyQixFQUEyQixLQUEzQixDQURFLEdBRVIsTUFBTSxJQUFJLENBQUMsU0FBTCxDQUFlLElBQWYsQ0FGVjtBQUdEOztBQU5EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvdHJhbnNmZXIudHM/ODdkZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5naWZ5U3RyaWN0Q2lyY3VsYXJBdXRvQ2h1bmtzID0gZXhwb3J0cy5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcyA9IGV4cG9ydHMuc3RyaW5naWZ5Q2lyY3VsYXJBdXRvQ2h1bmtzID0gdm9pZCAwO1xuY29uc3QgTUFYX1NFUklBTElaRURfU0laRSA9IDUxMiAqIDEwMjQ7IC8vIDFNQlxuZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcGxhY2VyLCBsaXN0LCBzZWVuKSB7XG4gICAgbGV0IHN0b3JlZCwga2V5LCB2YWx1ZSwgaSwgbDtcbiAgICBjb25zdCBzZWVuSW5kZXggPSBzZWVuLmdldChkYXRhKTtcbiAgICBpZiAoc2VlbkluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHNlZW5JbmRleDtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKTtcbiAgICBpZiAocHJvdG8gPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHN0b3JlZCA9IHt9O1xuICAgICAgICBzZWVuLnNldChkYXRhLCBpbmRleCk7XG4gICAgICAgIGxpc3QucHVzaChzdG9yZWQpO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbChkYXRhLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHN0b3JlZFtrZXldID0gZW5jb2RlKHZhbHVlLCByZXBsYWNlciwgbGlzdCwgc2Vlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgc3RvcmVkID0gW107XG4gICAgICAgIHNlZW4uc2V0KGRhdGEsIGluZGV4KTtcbiAgICAgICAgbGlzdC5wdXNoKHN0b3JlZCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBkYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2ldO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbChkYXRhLCBpLCB2YWx1ZSk7XG4gICAgICAgICAgICBzdG9yZWRbaV0gPSBlbmNvZGUodmFsdWUsIHJlcGxhY2VyLCBsaXN0LCBzZWVuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGlzdC5wdXNoKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBkZWNvZGUobGlzdCwgcmV2aXZlcikge1xuICAgIGxldCBpID0gbGlzdC5sZW5ndGg7XG4gICAgbGV0IGosIGssIGRhdGEsIGtleSwgdmFsdWUsIHByb3RvO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgZGF0YSA9IGxpc3RbaV07XG4gICAgICAgIHByb3RvID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuICAgICAgICBpZiAocHJvdG8gPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgICAgICBmb3IgKGogPSAwLCBrID0ga2V5cy5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGlzdFtkYXRhW2tleV1dO1xuICAgICAgICAgICAgICAgIGlmIChyZXZpdmVyKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldml2ZXIuY2FsbChkYXRhLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm90byA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgayA9IGRhdGEubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsaXN0W2RhdGFbal1dO1xuICAgICAgICAgICAgICAgIGlmIChyZXZpdmVyKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldml2ZXIuY2FsbChkYXRhLCBqLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZGF0YVtqXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5Q2lyY3VsYXJBdXRvQ2h1bmtzKGRhdGEsIHJlcGxhY2VyID0gbnVsbCwgc3BhY2UgPSBudWxsKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGRhdGEsIHJlcGxhY2VyLCBzcGFjZSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeVN0cmljdENpcmN1bGFyQXV0b0NodW5rcyhkYXRhLCByZXBsYWNlciwgc3BhY2UpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IE1BWF9TRVJJQUxJWkVEX1NJWkUpIHtcbiAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gTUFYX1NFUklBTElaRURfU0laRSk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gocmVzdWx0LnNsaWNlKGkgKiBNQVhfU0VSSUFMSVpFRF9TSVpFLCAoaSArIDEpICogTUFYX1NFUklBTElaRURfU0laRSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaHVua3M7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnN0cmluZ2lmeUNpcmN1bGFyQXV0b0NodW5rcyA9IHN0cmluZ2lmeUNpcmN1bGFyQXV0b0NodW5rcztcbmZ1bmN0aW9uIHBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzKGRhdGEsIHJldml2ZXIgPSBudWxsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEuam9pbignJyk7XG4gICAgfVxuICAgIGNvbnN0IGhhc0NpcmN1bGFyID0gL15cXHMvLnRlc3QoZGF0YSk7XG4gICAgaWYgKCFoYXNDaXJjdWxhcikge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICA6IEpTT04ucGFyc2UoZGF0YSwgcmV2aXZlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgZGVjb2RlKGxpc3QsIHJldml2ZXIpO1xuICAgICAgICByZXR1cm4gbGlzdFswXTtcbiAgICB9XG59XG5leHBvcnRzLnBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzID0gcGFyc2VDaXJjdWxhckF1dG9DaHVua3M7XG5mdW5jdGlvbiBzdHJpbmdpZnlTdHJpY3RDaXJjdWxhckF1dG9DaHVua3MoZGF0YSwgcmVwbGFjZXIgPSBudWxsLCBzcGFjZSA9IG51bGwpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgZW5jb2RlKGRhdGEsIHJlcGxhY2VyLCBsaXN0LCBuZXcgTWFwKCkpO1xuICAgIHJldHVybiBzcGFjZVxuICAgICAgICA/ICcgJyArIEpTT04uc3RyaW5naWZ5KGxpc3QsIG51bGwsIHNwYWNlKVxuICAgICAgICA6ICcgJyArIEpTT04uc3RyaW5naWZ5KGxpc3QpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnlTdHJpY3RDaXJjdWxhckF1dG9DaHVua3MgPSBzdHJpbmdpZnlTdHJpY3RDaXJjdWxhckF1dG9DaHVua3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc2Zlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34723\n")},76203:function(__unused_webpack_module,exports,__webpack_require__){eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.isEmptyObject = exports.copyToClipboard = exports.escape = exports.openInEditor = exports.focusInput = exports.simpleGet = exports.sortByKey = exports.searchDeepInObject = exports.isPlainObject = exports.revive = exports.parse = exports.getCustomRefDetails = exports.getCustomHTMLElementDetails = exports.getCustomFunctionDetails = exports.getCustomComponentDefinitionDetails = exports.getComponentName = exports.reviveSet = exports.getCustomSetDetails = exports.reviveMap = exports.getCustomMapDetails = exports.stringify = exports.specialTokenToString = exports.MAX_ARRAY_SIZE = exports.MAX_STRING_SIZE = exports.SPECIAL_TOKENS = exports.NAN = exports.NEGATIVE_INFINITY = exports.INFINITY = exports.UNDEFINED = exports.inDoc = exports.getComponentDisplayName = exports.kebabize = exports.camelize = exports.classify = void 0;\n\nconst path_1 = __importDefault(__webpack_require__(21023));\n\nconst transfer_1 = __webpack_require__(34723);\n\nconst backend_1 = __webpack_require__(79310);\n\nconst shared_data_1 = __webpack_require__(29556);\n\nconst env_1 = __webpack_require__(66210);\n\nfunction cached(fn) {\n const cache = Object.create(null);\n return function cachedFn(str) {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nexports.classify = cached(str => {\n // fix: str.replace may causes '\"replace\" is not a function' exception.\n // This bug may causes the UI 'Component Filter' to not work properly\n // e.g. The type of 'str' is Number.\n // So need cover 'str' to String.\n return str && ('' + str).replace(classifyRE, toUpper);\n});\nconst camelizeRE = /-(\\w)/g;\nexports.camelize = cached(str => {\n return str && str.replace(camelizeRE, toUpper);\n});\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nexports.kebabize = cached(str => {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n});\n\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n}\n\nfunction getComponentDisplayName(originalName, style = 'class') {\n switch (style) {\n case 'class':\n return (0, exports.classify)(originalName);\n\n case 'kebab':\n return (0, exports.kebabize)(originalName);\n\n case 'original':\n default:\n return originalName;\n }\n}\n\nexports.getComponentDisplayName = getComponentDisplayName;\n\nfunction inDoc(node) {\n if (!node) return false;\n const doc = node.ownerDocument.documentElement;\n const parent = node.parentNode;\n return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n}\n\nexports.inDoc = inDoc;\n/**\n * Stringify/parse data using CircularJSON.\n */\n\nexports.UNDEFINED = '__vue_devtool_undefined__';\nexports.INFINITY = '__vue_devtool_infinity__';\nexports.NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__';\nexports.NAN = '__vue_devtool_nan__';\nexports.SPECIAL_TOKENS = {\n true: true,\n false: false,\n undefined: exports.UNDEFINED,\n null: null,\n '-Infinity': exports.NEGATIVE_INFINITY,\n Infinity: exports.INFINITY,\n NaN: exports.NAN\n};\nexports.MAX_STRING_SIZE = 10000;\nexports.MAX_ARRAY_SIZE = 5000;\n\nfunction specialTokenToString(value) {\n if (value === null) {\n return 'null';\n } else if (value === exports.UNDEFINED) {\n return 'undefined';\n } else if (value === exports.NAN) {\n return 'NaN';\n } else if (value === exports.INFINITY) {\n return 'Infinity';\n } else if (value === exports.NEGATIVE_INFINITY) {\n return '-Infinity';\n }\n\n return false;\n}\n\nexports.specialTokenToString = specialTokenToString;\n/**\n * Needed to prevent stack overflow\n * while replacing complex objects\n * like components because we create\n * new objects with the CustomValue API\n * (.i.e `{ _custom: { ... } }`)\n */\n\nclass EncodeCache {\n constructor() {\n this.map = new Map();\n }\n /**\n * Returns a result unique to each input data\n * @param {*} data Input data\n * @param {*} factory Function used to create the unique result\n */\n\n\n cache(data, factory) {\n const cached = this.map.get(data);\n\n if (cached) {\n return cached;\n } else {\n const result = factory(data);\n this.map.set(data, result);\n return result;\n }\n }\n\n clear() {\n this.map.clear();\n }\n\n}\n\nconst encodeCache = new EncodeCache();\n\nclass ReviveCache {\n constructor(maxSize) {\n this.maxSize = maxSize;\n this.map = new Map();\n this.index = 0;\n this.size = 0;\n }\n\n cache(value) {\n const currentIndex = this.index;\n this.map.set(currentIndex, value);\n this.size++;\n\n if (this.size > this.maxSize) {\n this.map.delete(currentIndex - this.size);\n this.size--;\n }\n\n this.index++;\n return currentIndex;\n }\n\n read(id) {\n return this.map.get(id);\n }\n\n}\n\nconst reviveCache = new ReviveCache(1000);\n\nfunction stringify(data) {\n // Create a fresh cache for each serialization\n encodeCache.clear();\n return (0, transfer_1.stringifyCircularAutoChunks)(data, replacer);\n}\n\nexports.stringify = stringify;\n\nfunction replacer(key) {\n // @ts-ignore\n const val = this[key];\n const type = typeof val;\n\n if (Array.isArray(val)) {\n const l = val.length;\n\n if (l > exports.MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, exports.MAX_ARRAY_SIZE)\n };\n }\n\n return val;\n } else if (typeof val === 'string') {\n if (val.length > exports.MAX_STRING_SIZE) {\n return val.substring(0, exports.MAX_STRING_SIZE) + `... (${val.length} total length)`;\n } else {\n return val;\n }\n } else if (type === 'undefined') {\n return exports.UNDEFINED;\n } else if (val === Infinity) {\n return exports.INFINITY;\n } else if (val === -Infinity) {\n return exports.NEGATIVE_INFINITY;\n } else if (type === 'function') {\n return getCustomFunctionDetails(val);\n } else if (type === 'symbol') {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (val !== null && type === 'object') {\n const proto = Object.prototype.toString.call(val);\n\n if (proto === '[object Map]') {\n return encodeCache.cache(val, () => getCustomMapDetails(val));\n } else if (proto === '[object Set]') {\n return encodeCache.cache(val, () => getCustomSetDetails(val));\n } else if (proto === '[object RegExp]') {\n // special handling of native type\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === '[object Date]') {\n return `[native Date ${Date.prototype.toString.call(val)}]`;\n } else if (proto === '[object Error]') {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (val.state && val._vm) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomStoreDetails)(val));\n } else if (val.constructor && val.constructor.name === 'VueRouter') {\n return encodeCache.cache(val, () => (0, backend_1.getCustomRouterDetails)(val));\n } else if ((0, backend_1.isVueInstance)(val)) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomInstanceDetails)(val));\n } else if (typeof val.render === 'function') {\n return encodeCache.cache(val, () => getCustomComponentDefinitionDetails(val));\n } else if (val.constructor && val.constructor.name === 'VNode') {\n return `[native VNode <${val.tag}>]`;\n } else if (val instanceof HTMLElement) {\n return encodeCache.cache(val, () => getCustomHTMLElementDetails(val));\n }\n } else if (Number.isNaN(val)) {\n return exports.NAN;\n }\n\n return sanitize(val);\n}\n\nfunction getCustomMapDetails(val) {\n const list = [];\n val.forEach((value, key) => list.push({\n key,\n value\n }));\n return {\n _custom: {\n type: 'map',\n display: 'Map',\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomMapDetails = getCustomMapDetails;\n\nfunction reviveMap(val) {\n const result = new Map();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const {\n key,\n value\n } = list[i];\n result.set(key, revive(value));\n }\n\n return result;\n}\n\nexports.reviveMap = reviveMap;\n\nfunction getCustomSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: 'set',\n display: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\n\nexports.getCustomSetDetails = getCustomSetDetails;\n\nfunction reviveSet(val) {\n const result = new Set();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n\n return result;\n}\n\nexports.reviveSet = reviveSet; // Use a custom basename functions instead of the shimed version\n// because it doesn't work on Windows\n\nfunction basename(filename, ext) {\n return path_1.default.basename(filename.replace(/^[a-zA-Z]:/, '').replace(/\\\\/g, '/'), ext);\n}\n\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n\n if (name) {\n return name;\n }\n\n const file = options.__file; // injected by vue-loader\n\n if (file) {\n return (0, exports.classify)(basename(file, '.vue'));\n }\n}\n\nexports.getComponentName = getComponentName;\n\nfunction getCustomComponentDefinitionDetails(def) {\n let display = getComponentName(def);\n\n if (display) {\n if (def.name && def.__file) {\n display += ` <span>(${def.__file})</span>`;\n }\n } else {\n display = '<i>Unknown Component</i>';\n }\n\n return {\n _custom: {\n type: 'component-definition',\n display,\n tooltip: 'Component definition',\n ...(def.__file ? {\n file: def.__file\n } : {})\n }\n };\n}\n\nexports.getCustomComponentDefinitionDetails = getCustomComponentDefinitionDetails; // eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction getCustomFunctionDetails(func) {\n let string = '';\n let matches = null;\n\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {// Func is probably a Proxy, which can break Function.prototype.toString()\n } // Trim any excess whitespace from the argument string\n\n\n const match = matches && matches[0];\n const args = typeof match === 'string' ? `(${match.substring(1, match.length - 2).split(',').map(a => a.trim()).join(', ')})` : '(?)';\n const name = typeof func.name === 'string' ? func.name : '';\n return {\n _custom: {\n type: 'function',\n display: `<span>f</span> ${escape(name)}${args}`,\n _reviveId: reviveCache.cache(func)\n }\n };\n}\n\nexports.getCustomFunctionDetails = getCustomFunctionDetails;\n\nfunction getCustomHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"opacity-30\">&lt;</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">&gt;</span>`,\n value: namedNodeMapToObject(value.attributes),\n actions: [{\n icon: 'input',\n tooltip: 'Log element to console',\n action: () => {\n // eslint-disable-next-line no-console\n console.log(value);\n }\n }]\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"text-blue-500\">${String(value)}</span>`\n }\n };\n }\n}\n\nexports.getCustomHTMLElementDetails = getCustomHTMLElementDetails;\n\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n\n return result;\n}\n\nfunction getCustomRefDetails(instance, key, ref) {\n let value;\n\n if (Array.isArray(ref)) {\n value = ref.map(r => getCustomRefDetails(instance, key, r)).map(data => data.value);\n } else {\n let name;\n\n if (ref._isVue) {\n name = getComponentName(ref.$options);\n } else {\n name = ref.tagName.toLowerCase();\n }\n\n value = {\n _custom: {\n display: `&lt;${name}` + (ref.id ? ` <span class=\"attr-title\">id</span>=\"${ref.id}\"` : '') + (ref.className ? ` <span class=\"attr-title\">class</span>=\"${ref.className}\"` : '') + '&gt;',\n uid: instance.__VUE_DEVTOOLS_UID__,\n type: 'reference'\n }\n };\n }\n\n return {\n type: '$refs',\n key: key,\n value,\n editable: false\n };\n}\n\nexports.getCustomRefDetails = getCustomRefDetails;\n\nfunction parse(data, revive = false) {\n return revive ? (0, transfer_1.parseCircularAutoChunks)(data, reviver) : (0, transfer_1.parseCircularAutoChunks)(data);\n}\n\nexports.parse = parse;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>((.|\\s)*))?\\]$/;\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\n\nfunction reviver(key, val) {\n return revive(val);\n}\n\nfunction revive(val) {\n if (val === exports.UNDEFINED) {\n return undefined;\n } else if (val === exports.INFINITY) {\n return Infinity;\n } else if (val === exports.NEGATIVE_INFINITY) {\n return -Infinity;\n } else if (val === exports.NAN) {\n return NaN;\n } else if (val && val._custom) {\n const {\n _custom: custom\n } = val;\n\n if (custom.type === 'component') {\n return (0, backend_1.getInstanceMap)().get(custom.id);\n } else if (custom.type === 'map') {\n return reviveMap(val);\n } else if (custom.type === 'set') {\n return reviveSet(val);\n } else if (custom._reviveId) {\n return reviveCache.read(custom._reviveId);\n } else {\n return revive(custom.value);\n }\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string,, details] = specialTypeRE.exec(val);\n const result = new window[type](string);\n\n if (type === 'Error' && details) {\n result.stack = details;\n }\n\n return result;\n } else {\n return val;\n }\n}\n\nexports.revive = revive;\n/**\n * Sanitize data to be posted to the other side.\n * Since the message posted is sent with structured clone,\n * we need to filter out any types that might cause an error.\n *\n * @param {*} data\n * @return {*}\n */\n\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n // handle types that will probably cause issues in\n // the structured clone\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n\nfunction isPrimitive(data) {\n if (data == null) {\n return true;\n }\n\n const type = typeof data;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n/**\n * Searches a key or value in the object, with a maximum deepness\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction searchDeepInObject(obj, searchTerm) {\n const seen = new Map();\n const result = internalSearchObject(obj, searchTerm.toLowerCase(), seen, 0);\n seen.clear();\n return result;\n}\n\nexports.searchDeepInObject = searchDeepInObject;\nconst SEARCH_MAX_DEPTH = 10;\n/**\n * Executes a search on each field of the provided object\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\nfunction internalSearchObject(obj, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n const keys = Object.keys(obj);\n let key, value;\n\n for (let i = 0; i < keys.length; i++) {\n key = keys[i];\n value = obj[key];\n match = internalSearchCheck(searchTerm, key, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Executes a search on each value of the provided array\n * @param {*} array Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchArray(array, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n let value;\n\n for (let i = 0; i < array.length; i++) {\n value = array[i];\n match = internalSearchCheck(searchTerm, null, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Checks if the provided field matches the search terms\n * @param {string} searchTerm Search string\n * @param {string} key Field key (null if from array)\n * @param {*} value Field value\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchCheck(searchTerm, key, value, seen, depth) {\n let match = false;\n let result;\n\n if (key === '_custom') {\n key = value.display;\n value = value.value;\n }\n\n (result = specialTokenToString(value)) && (value = result);\n\n if (key && compare(key, searchTerm)) {\n match = true;\n seen.set(value, true);\n } else if (seen.has(value)) {\n match = seen.get(value);\n } else if (Array.isArray(value)) {\n seen.set(value, null);\n match = internalSearchArray(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (isPlainObject(value)) {\n seen.set(value, null);\n match = internalSearchObject(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (compare(value, searchTerm)) {\n match = true;\n seen.set(value, true);\n }\n\n return match;\n}\n/**\n * Compares two values\n * @param {*} value Mixed type value that will be cast to string\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction compare(value, searchTerm) {\n return ('' + value).toLowerCase().indexOf(searchTerm) !== -1;\n}\n\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key) return -1;\n if (a.key > b.key) return 1;\n return 0;\n });\n}\n\nexports.sortByKey = sortByKey;\n\nfunction simpleGet(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n}\n\nexports.simpleGet = simpleGet;\n\nfunction focusInput(el) {\n el.focus();\n el.setSelectionRange(0, el.value.length);\n}\n\nexports.focusInput = focusInput;\n\nfunction openInEditor(file) {\n // Console display\n const fileName = file.replace(/\\\\/g, '\\\\\\\\');\n const src = `fetch('${shared_data_1.SharedData.openInEditorHost}__open-in-editor?file=${encodeURI(file)}').then(response => {\n if (response.ok) {\n console.log('File ${fileName} opened in editor')\n } else {\n const msg = 'Opening component ${fileName} failed'\n const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}\n if (target.__VUE_DEVTOOLS_TOAST__) {\n target.__VUE_DEVTOOLS_TOAST__(msg, 'error')\n } else {\n console.log('%c' + msg, 'color:red')\n }\n console.log('Check the setup of your project, see https://devtools.vuejs.org/guide/open-in-editor.html')\n }\n })`;\n\n if (env_1.isChrome) {\n env_1.target.chrome.devtools.inspectedWindow.eval(src);\n } else {\n // eslint-disable-next-line no-eval\n eval(src);\n }\n}\n\nexports.openInEditor = openInEditor;\nconst ESC = {\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n '&': '&amp;'\n};\n\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, escapeChar);\n}\n\nexports.escape = escape;\n\nfunction escapeChar(a) {\n return ESC[a] || a;\n}\n\nfunction copyToClipboard(state) {\n if (typeof document === 'undefined') return;\n const dummyTextArea = document.createElement('textarea');\n dummyTextArea.textContent = stringify(state);\n document.body.appendChild(dummyTextArea);\n dummyTextArea.select();\n document.execCommand('copy');\n document.body.removeChild(dummyTextArea);\n}\n\nexports.copyToClipboard = copyToClipboard;\n\nfunction isEmptyObject(obj) {\n return obj === exports.UNDEFINED || !obj || Object.keys(obj).length === 0;\n}\n\nexports.isEmptyObject = isEmptyObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBSjtBQUNEO0FBQ0Y7O0FBdkJEO0FBeUJBLE1BQU0sR0FBRyxHQUFHO0FBQ1YsT0FBSyxNQURLO0FBRVYsT0FBSyxNQUZLO0FBR1YsT0FBSyxRQUhLO0FBSVYsT0FBSztBQUpLLENBQVo7O0FBT0EsU0FBZ0IsTUFBaEIsQ0FBd0IsQ0FBeEIsRUFBeUI7QUFDdkIsU0FBTyxDQUFDLENBQUMsT0FBRixDQUFVLFNBQVYsRUFBcUIsVUFBckIsQ0FBUDtBQUNEOztBQUZEOztBQUlBLFNBQVMsVUFBVCxDQUFxQixDQUFyQixFQUFzQjtBQUNwQixTQUFPLEdBQUcsQ0FBQyxDQUFELENBQUgsSUFBVSxDQUFqQjtBQUNEOztBQUVELFNBQWdCLGVBQWhCLENBQWlDLEtBQWpDLEVBQXNDO0FBQ3BDLE1BQUksT0FBTyxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ3JDLFFBQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFULENBQXVCLFVBQXZCLENBQXRCO0FBQ0EsZUFBYSxDQUFDLFdBQWQsR0FBNEIsU0FBUyxDQUFDLEtBQUQsQ0FBckM7QUFDQSxVQUFRLENBQUMsSUFBVCxDQUFjLFdBQWQsQ0FBMEIsYUFBMUI7QUFDQSxlQUFhLENBQUMsTUFBZDtBQUNBLFVBQVEsQ0FBQyxXQUFULENBQXFCLE1BQXJCO0FBQ0EsVUFBUSxDQUFDLElBQVQsQ0FBYyxXQUFkLENBQTBCLGFBQTFCO0FBQ0Q7O0FBUkQ7O0FBVUEsU0FBZ0IsYUFBaEIsQ0FBK0IsR0FBL0IsRUFBa0M7QUFDaEMsU0FBTyxHQUFHLEtBQUssaUJBQVIsSUFBcUIsQ0FBQyxHQUF0QixJQUE2QixNQUFNLENBQUMsSUFBUCxDQUFZLEdBQVosRUFBaUIsTUFBakIsS0FBNEIsQ0FBaEU7QUFDRDs7QUFGRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3V0aWwudHM/YTY0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGV4cG9ydHMuY29weVRvQ2xpcGJvYXJkID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLm9wZW5JbkVkaXRvciA9IGV4cG9ydHMuZm9jdXNJbnB1dCA9IGV4cG9ydHMuc2ltcGxlR2V0ID0gZXhwb3J0cy5zb3J0QnlLZXkgPSBleHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IGV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGV4cG9ydHMucmV2aXZlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tSFRNTEVsZW1lbnREZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBleHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZXhwb3J0cy5yZXZpdmVTZXQgPSBleHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBleHBvcnRzLnJldml2ZU1hcCA9IGV4cG9ydHMuZ2V0Q3VzdG9tTWFwRGV0YWlscyA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zcGVjaWFsVG9rZW5Ub1N0cmluZyA9IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUgPSBleHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IGV4cG9ydHMuU1BFQ0lBTF9UT0tFTlMgPSBleHBvcnRzLk5BTiA9IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSBleHBvcnRzLklORklOSVRZID0gZXhwb3J0cy5VTkRFRklORUQgPSBleHBvcnRzLmluRG9jID0gZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGV4cG9ydHMua2ViYWJpemUgPSBleHBvcnRzLmNhbWVsaXplID0gZXhwb3J0cy5jbGFzc2lmeSA9IHZvaWQgMDtcbmNvbnN0IHBhdGhfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgc2hhcmVkX2RhdGFfMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1kYXRhXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG5mdW5jdGlvbiBjYWNoZWQoZm4pIHtcbiAgICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuKHN0cikge1xuICAgICAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gICAgfTtcbn1cbmNvbnN0IGNsYXNzaWZ5UkUgPSAvKD86XnxbLV8vXSkoXFx3KS9nO1xuZXhwb3J0cy5jbGFzc2lmeSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgLy8gZml4OiBzdHIucmVwbGFjZSBtYXkgY2F1c2VzICdcInJlcGxhY2VcIiBpcyBub3QgYSBmdW5jdGlvbicgZXhjZXB0aW9uLlxuICAgIC8vIFRoaXMgYnVnIG1heSBjYXVzZXMgdGhlIFVJICdDb21wb25lbnQgRmlsdGVyJyB0byBub3Qgd29yayBwcm9wZXJseVxuICAgIC8vIGUuZy4gVGhlIHR5cGUgb2YgJ3N0cicgaXMgTnVtYmVyLlxuICAgIC8vIFNvIG5lZWQgY292ZXIgJ3N0cicgdG8gU3RyaW5nLlxuICAgIHJldHVybiBzdHIgJiYgKCcnICsgc3RyKS5yZXBsYWNlKGNsYXNzaWZ5UkUsIHRvVXBwZXIpO1xufSk7XG5jb25zdCBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xuZXhwb3J0cy5jYW1lbGl6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCB0b1VwcGVyKTtcbn0pO1xuY29uc3Qga2ViYWJpemVSRSA9IC8oW2EtejAtOV0pKFtBLVpdKS9nO1xuZXhwb3J0cy5rZWJhYml6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHJcbiAgICAgICAgLnJlcGxhY2Uoa2ViYWJpemVSRSwgKF8sIGxvd2VyQ2FzZUNoYXJhY3RlciwgdXBwZXJDYXNlTGV0dGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBgJHtsb3dlckNhc2VDaGFyYWN0ZXJ9LSR7dXBwZXJDYXNlTGV0dGVyfWA7XG4gICAgfSlcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG59KTtcbmZ1bmN0aW9uIHRvVXBwZXIoXywgYykge1xuICAgIHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnREaXNwbGF5TmFtZShvcmlnaW5hbE5hbWUsIHN0eWxlID0gJ2NsYXNzJykge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmNsYXNzaWZ5KShvcmlnaW5hbE5hbWUpO1xuICAgICAgICBjYXNlICdrZWJhYic6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMua2ViYWJpemUpKG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIGNhc2UgJ29yaWdpbmFsJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWU7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGdldENvbXBvbmVudERpc3BsYXlOYW1lO1xuZnVuY3Rpb24gaW5Eb2Mobm9kZSkge1xuICAgIGlmICghbm9kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRvYyA9IG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIHJldHVybiBkb2MgPT09IG5vZGUgfHxcbiAgICAgICAgZG9jID09PSBwYXJlbnQgfHxcbiAgICAgICAgISEocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMSAmJiAoZG9jLmNvbnRhaW5zKHBhcmVudCkpKTtcbn1cbmV4cG9ydHMuaW5Eb2MgPSBpbkRvYztcbi8qKlxuICogU3RyaW5naWZ5L3BhcnNlIGRhdGEgdXNpbmcgQ2lyY3VsYXJKU09OLlxuICovXG5leHBvcnRzLlVOREVGSU5FRCA9ICdfX3Z1ZV9kZXZ0b29sX3VuZGVmaW5lZF9fJztcbmV4cG9ydHMuSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9uZWdhdGl2ZV9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkFOID0gJ19fdnVlX2RldnRvb2xfbmFuX18nO1xuZXhwb3J0cy5TUEVDSUFMX1RPS0VOUyA9IHtcbiAgICB0cnVlOiB0cnVlLFxuICAgIGZhbHNlOiBmYWxzZSxcbiAgICB1bmRlZmluZWQ6IGV4cG9ydHMuVU5ERUZJTkVELFxuICAgIG51bGw6IG51bGwsXG4gICAgJy1JbmZpbml0eSc6IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgSW5maW5pdHk6IGV4cG9ydHMuSU5GSU5JVFksXG4gICAgTmFOOiBleHBvcnRzLk5BTixcbn07XG5leHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IDEwMDAwO1xuZXhwb3J0cy5NQVhfQVJSQVlfU0laRSA9IDUwMDA7XG5mdW5jdGlvbiBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5VTkRFRklORUQpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5OQU4pIHtcbiAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNwZWNpYWxUb2tlblRvU3RyaW5nID0gc3BlY2lhbFRva2VuVG9TdHJpbmc7XG4vKipcbiAqIE5lZWRlZCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93XG4gKiB3aGlsZSByZXBsYWNpbmcgY29tcGxleCBvYmplY3RzXG4gKiBsaWtlIGNvbXBvbmVudHMgYmVjYXVzZSB3ZSBjcmVhdGVcbiAqIG5ldyBvYmplY3RzIHdpdGggdGhlIEN1c3RvbVZhbHVlIEFQSVxuICogKC5pLmUgYHsgX2N1c3RvbTogeyAuLi4gfSB9YClcbiAqL1xuY2xhc3MgRW5jb2RlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlc3VsdCB1bmlxdWUgdG8gZWFjaCBpbnB1dCBkYXRhXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIElucHV0IGRhdGFcbiAgICAgKiBAcGFyYW0geyp9IGZhY3RvcnkgRnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVuaXF1ZSByZXN1bHRcbiAgICAgKi9cbiAgICBjYWNoZShkYXRhLCBmYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWFwLmdldChkYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZhY3RvcnkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgfVxufVxuY29uc3QgZW5jb2RlQ2FjaGUgPSBuZXcgRW5jb2RlQ2FjaGUoKTtcbmNsYXNzIFJldml2ZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplKSB7XG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG4gICAgY2FjaGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgdGhpcy5tYXAuc2V0KGN1cnJlbnRJbmRleCwgdmFsdWUpO1xuICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGN1cnJlbnRJbmRleCAtIHRoaXMuc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnNpemUtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIHJlYWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChpZCk7XG4gICAgfVxufVxuY29uc3QgcmV2aXZlQ2FjaGUgPSBuZXcgUmV2aXZlQ2FjaGUoMTAwMCk7XG5mdW5jdGlvbiBzdHJpbmdpZnkoZGF0YSkge1xuICAgIC8vIENyZWF0ZSBhIGZyZXNoIGNhY2hlIGZvciBlYWNoIHNlcmlhbGl6YXRpb25cbiAgICBlbmNvZGVDYWNoZS5jbGVhcigpO1xuICAgIHJldHVybiAoMCwgdHJhbnNmZXJfMS5zdHJpbmdpZnlDaXJjdWxhckF1dG9DaHVua3MpKGRhdGEsIHJlcGxhY2VyKTtcbn1cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZnVuY3Rpb24gcmVwbGFjZXIoa2V5KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHZhbCA9IHRoaXNba2V5XTtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGNvbnN0IGwgPSB2YWwubGVuZ3RoO1xuICAgICAgICBpZiAobCA+IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgX2lzQXJyYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBsLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB2YWwuc2xpY2UoMCwgZXhwb3J0cy5NQVhfQVJSQVlfU0laRSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gZXhwb3J0cy5NQVhfU1RSSU5HX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc3Vic3RyaW5nKDAsIGV4cG9ydHMuTUFYX1NUUklOR19TSVpFKSArIGAuLi4gKCR7KHZhbC5sZW5ndGgpfSB0b3RhbCBsZW5ndGgpYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVU5ERUZJTkVEO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLklORklOSVRZO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKHZhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiBgW25hdGl2ZSBTeW1ib2wgJHtTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKX1dYDtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsICE9PSBudWxsICYmIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCk7XG4gICAgICAgIGlmIChwcm90byA9PT0gJ1tvYmplY3QgTWFwXScpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbU1hcERldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IFNldF0nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBvZiBuYXRpdmUgdHlwZVxuICAgICAgICAgICAgcmV0dXJuIGBbbmF0aXZlIFJlZ0V4cCAke1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBEYXRlICR7RGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBFcnJvcl0nKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgRXJyb3IgJHt2YWwubWVzc2FnZX08PiR7dmFsLnN0YWNrfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5zdGF0ZSAmJiB2YWwuX3ZtKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiAoMCwgYmFja2VuZF8xLmdldEN1c3RvbVN0b3JlRGV0YWlscykodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVnVlUm91dGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gKDAsIGJhY2tlbmRfMS5nZXRDdXN0b21Sb3V0ZXJEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoMCwgYmFja2VuZF8xLmlzVnVlSW5zdGFuY2UpKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+ICgwLCBiYWNrZW5kXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVk5vZGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgVk5vZGUgPCR7dmFsLnRhZ30+XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNOYU4odmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5OQU47XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGl6ZSh2YWwpO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tTWFwRGV0YWlscyh2YWwpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgdmFsLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGxpc3QucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdtYXAnLFxuICAgICAgICAgICAgZGlzcGxheTogJ01hcCcsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbU1hcERldGFpbHMgPSBnZXRDdXN0b21NYXBEZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlTWFwKHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LnNldChrZXksIHJldml2ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZXZpdmVNYXAgPSByZXZpdmVNYXA7XG5mdW5jdGlvbiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkge1xuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5mcm9tKHZhbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ3NldCcsXG4gICAgICAgICAgICBkaXNwbGF5OiBgU2V0WyR7bGlzdC5sZW5ndGh9XWAsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBnZXRDdXN0b21TZXREZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlU2V0KHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LmFkZChyZXZpdmUodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmV2aXZlU2V0ID0gcmV2aXZlU2V0O1xuLy8gVXNlIGEgY3VzdG9tIGJhc2VuYW1lIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzaGltZWQgdmVyc2lvblxuLy8gYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmsgb24gV2luZG93c1xuZnVuY3Rpb24gYmFzZW5hbWUoZmlsZW5hbWUsIGV4dCkge1xuICAgIHJldHVybiBwYXRoXzEuZGVmYXVsdC5iYXNlbmFtZShmaWxlbmFtZS5yZXBsYWNlKC9eW2EtekEtWl06LywgJycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSwgZXh0KTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUob3B0aW9ucykge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLl9fZmlsZTsgLy8gaW5qZWN0ZWQgYnkgdnVlLWxvYWRlclxuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5jbGFzc2lmeSkoYmFzZW5hbWUoZmlsZSwgJy52dWUnKSk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZTtcbmZ1bmN0aW9uIGdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzKGRlZikge1xuICAgIGxldCBkaXNwbGF5ID0gZ2V0Q29tcG9uZW50TmFtZShkZWYpO1xuICAgIGlmIChkaXNwbGF5KSB7XG4gICAgICAgIGlmIChkZWYubmFtZSAmJiBkZWYuX19maWxlKSB7XG4gICAgICAgICAgICBkaXNwbGF5ICs9IGAgPHNwYW4+KCR7ZGVmLl9fZmlsZX0pPC9zcGFuPmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICB0b29sdGlwOiAnQ29tcG9uZW50IGRlZmluaXRpb24nLFxuICAgICAgICAgICAgLi4uZGVmLl9fZmlsZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBmaWxlOiBkZWYuX19maWxlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHM7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKGZ1bmMpIHtcbiAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgbGV0IG1hdGNoZXMgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIHN0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICBtYXRjaGVzID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaC5jYWxsKHN0cmluZywgL1xcKFtcXHNcXFNdKj9cXCkvKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRnVuYyBpcyBwcm9iYWJseSBhIFByb3h5LCB3aGljaCBjYW4gYnJlYWsgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClcbiAgICB9XG4gICAgLy8gVHJpbSBhbnkgZXhjZXNzIHdoaXRlc3BhY2UgZnJvbSB0aGUgYXJndW1lbnQgc3RyaW5nXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgY29uc3QgYXJncyA9IHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBgKCR7bWF0Y2guc3Vic3RyaW5nKDEsIG1hdGNoLmxlbmd0aCAtIDIpLnNwbGl0KCcsJykubWFwKGEgPT4gYS50cmltKCkpLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnKD8pJztcbiAgICBjb25zdCBuYW1lID0gdHlwZW9mIGZ1bmMubmFtZSA9PT0gJ3N0cmluZycgPyBmdW5jLm5hbWUgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuPmY8L3NwYW4+ICR7ZXNjYXBlKG5hbWUpfSR7YXJnc31gLFxuICAgICAgICAgICAgX3Jldml2ZUlkOiByZXZpdmVDYWNoZS5jYWNoZShmdW5jKSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHM7XG5mdW5jdGlvbiBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHModmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwXCI+JHt2YWx1ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZndDs8L3NwYW4+YCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZWROb2RlTWFwVG9PYmplY3QodmFsdWUuYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0xvZyBlbGVtZW50IHRvIGNvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwidGV4dC1ibHVlLTUwMFwiPiR7U3RyaW5nKHZhbHVlKX08L3NwYW4+YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHMgPSBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHM7XG5mdW5jdGlvbiBuYW1lZE5vZGVNYXBUb09iamVjdChtYXApIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBsID0gbWFwLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbWFwLml0ZW0oaSk7XG4gICAgICAgIHJlc3VsdFtub2RlLm5hbWVdID0gbm9kZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldEN1c3RvbVJlZkRldGFpbHMoaW5zdGFuY2UsIGtleSwgcmVmKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZikpIHtcbiAgICAgICAgdmFsdWUgPSByZWYubWFwKChyKSA9PiBnZXRDdXN0b21SZWZEZXRhaWxzKGluc3RhbmNlLCBrZXksIHIpKS5tYXAoZGF0YSA9PiBkYXRhLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBuYW1lO1xuICAgICAgICBpZiAocmVmLl9pc1Z1ZSkge1xuICAgICAgICAgICAgbmFtZSA9IGdldENvbXBvbmVudE5hbWUocmVmLiRvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSByZWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAmbHQ7JHtuYW1lfWAgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmlkID8gYCA8c3BhbiBjbGFzcz1cImF0dHItdGl0bGVcIj5pZDwvc3Bhbj49XCIke3JlZi5pZH1cImAgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmNsYXNzTmFtZSA/IGAgPHNwYW4gY2xhc3M9XCJhdHRyLXRpdGxlXCI+Y2xhc3M8L3NwYW4+PVwiJHtyZWYuY2xhc3NOYW1lfVwiYCA6ICcnKSArICcmZ3Q7JyxcbiAgICAgICAgICAgICAgICB1aWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZWZlcmVuY2UnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJyRyZWZzJyxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGdldEN1c3RvbVJlZkRldGFpbHM7XG5mdW5jdGlvbiBwYXJzZShkYXRhLCByZXZpdmUgPSBmYWxzZSkge1xuICAgIHJldHVybiByZXZpdmVcbiAgICAgICAgPyAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSwgcmV2aXZlcilcbiAgICAgICAgOiAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5jb25zdCBzcGVjaWFsVHlwZVJFID0gL15cXFtuYXRpdmUgKFxcdyspICguKj8pKDw+KCgufFxccykqKSk/XFxdJC87XG5jb25zdCBzeW1ib2xSRSA9IC9eXFxbbmF0aXZlIFN5bWJvbCBTeW1ib2xcXCgoLiopXFwpXFxdJC87XG5mdW5jdGlvbiByZXZpdmVyKGtleSwgdmFsKSB7XG4gICAgcmV0dXJuIHJldml2ZSh2YWwpO1xufVxuZnVuY3Rpb24gcmV2aXZlKHZhbCkge1xuICAgIGlmICh2YWwgPT09IGV4cG9ydHMuVU5ERUZJTkVEKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IGV4cG9ydHMuTkFOKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCAmJiB2YWwuX2N1c3RvbSkge1xuICAgICAgICBjb25zdCB7IF9jdXN0b206IGN1c3RvbSB9ID0gdmFsO1xuICAgICAgICBpZiAoY3VzdG9tLnR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGJhY2tlbmRfMS5nZXRJbnN0YW5jZU1hcCkoKS5nZXQoY3VzdG9tLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVNYXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVTZXQodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20uX3Jldml2ZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV2aXZlQ2FjaGUucmVhZChjdXN0b20uX3Jldml2ZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmUoY3VzdG9tLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzeW1ib2xSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgc3RyaW5nXSA9IHN5bWJvbFJFLmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3Ioc3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3BlY2lhbFR5cGVSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgdHlwZSwgc3RyaW5nLCAsIGRldGFpbHNdID0gc3BlY2lhbFR5cGVSRS5leGVjKHZhbCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyB3aW5kb3dbdHlwZV0oc3RyaW5nKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdFcnJvcicgJiYgZGV0YWlscykge1xuICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZGV0YWlscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5leHBvcnRzLnJldml2ZSA9IHJldml2ZTtcbi8qKlxuICogU2FuaXRpemUgZGF0YSB0byBiZSBwb3N0ZWQgdG8gdGhlIG90aGVyIHNpZGUuXG4gKiBTaW5jZSB0aGUgbWVzc2FnZSBwb3N0ZWQgaXMgc2VudCB3aXRoIHN0cnVjdHVyZWQgY2xvbmUsXG4gKiB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgYW55IHR5cGVzIHRoYXQgbWlnaHQgY2F1c2UgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZShkYXRhKSB7XG4gICAgaWYgKCFpc1ByaW1pdGl2ZShkYXRhKSAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShkYXRhKSAmJlxuICAgICAgICAhaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgICAgICAvLyBoYW5kbGUgdHlwZXMgdGhhdCB3aWxsIHByb2JhYmx5IGNhdXNlIGlzc3VlcyBpblxuICAgICAgICAvLyB0aGUgc3RydWN0dXJlZCBjbG9uZVxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7XG4gICAgcmV0dXJuICh0eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlID09PSAnYm9vbGVhbicpO1xufVxuLyoqXG4gKiBTZWFyY2hlcyBhIGtleSBvciB2YWx1ZSBpbiB0aGUgb2JqZWN0LCB3aXRoIGEgbWF4aW11bSBkZWVwbmVzc1xuICogQHBhcmFtIHsqfSBvYmogU2VhcmNoIHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBzZWFyY2hEZWVwSW5PYmplY3Qob2JqLCBzZWFyY2hUZXJtKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbFNlYXJjaE9iamVjdChvYmosIHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSwgc2VlbiwgMCk7XG4gICAgc2Vlbi5jbGVhcigpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IHNlYXJjaERlZXBJbk9iamVjdDtcbmNvbnN0IFNFQVJDSF9NQVhfREVQVEggPSAxMDtcbi8qKlxuICogRXhlY3V0ZXMgYSBzZWFyY2ggb24gZWFjaCBmaWVsZCBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0XG4gKiBAcGFyYW0geyp9IG9iaiBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hPYmplY3Qob2JqLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IFNFQVJDSF9NQVhfREVQVEgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIGtleSwgdmFsdWUsIHNlZW4sIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBhIHNlYXJjaCBvbiBlYWNoIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBhcnJheVxuICogQHBhcmFtIHsqfSBhcnJheSBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hBcnJheShhcnJheSwgc2VhcmNoVGVybSwgc2VlbiwgZGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBTRUFSQ0hfTUFYX0RFUFRIKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBhcnJheVtpXTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIG51bGwsIHZhbHVlLCBzZWVuLCBkZXB0aCArIDEpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBmaWVsZCBtYXRjaGVzIHRoZSBzZWFyY2ggdGVybXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgRmllbGQga2V5IChudWxsIGlmIGZyb20gYXJyYXkpXG4gKiBAcGFyYW0geyp9IHZhbHVlIEZpZWxkIHZhbHVlXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hDaGVjayhzZWFyY2hUZXJtLCBrZXksIHZhbHVlLCBzZWVuLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGtleSA9PT0gJ19jdXN0b20nKSB7XG4gICAgICAgIGtleSA9IHZhbHVlLmRpc3BsYXk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICAgIChyZXN1bHQgPSBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkpICYmICh2YWx1ZSA9IHJlc3VsdCk7XG4gICAgaWYgKGtleSAmJiBjb21wYXJlKGtleSwgc2VhcmNoVGVybSkpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICBtYXRjaCA9IHNlZW4uZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQXJyYXkodmFsdWUsIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG1hdGNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoT2JqZWN0KHZhbHVlLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCk7XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBtYXRjaCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbXBhcmUodmFsdWUsIHNlYXJjaFRlcm0pKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgTWl4ZWQgdHlwZSB2YWx1ZSB0aGF0IHdpbGwgYmUgY2FzdCB0byBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gY29tcGFyZSh2YWx1ZSwgc2VhcmNoVGVybSkge1xuICAgIHJldHVybiAoJycgKyB2YWx1ZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRlcm0pICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHNvcnRCeUtleShzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEua2V5IDwgYi5rZXkpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhLmtleSA+IGIua2V5KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zb3J0QnlLZXkgPSBzb3J0QnlLZXk7XG5mdW5jdGlvbiBzaW1wbGVHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtzZWN0aW9uc1tpXV07XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5leHBvcnRzLnNpbXBsZUdldCA9IHNpbXBsZUdldDtcbmZ1bmN0aW9uIGZvY3VzSW5wdXQoZWwpIHtcbiAgICBlbC5mb2N1cygpO1xuICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIGVsLnZhbHVlLmxlbmd0aCk7XG59XG5leHBvcnRzLmZvY3VzSW5wdXQgPSBmb2N1c0lucHV0O1xuZnVuY3Rpb24gb3BlbkluRWRpdG9yKGZpbGUpIHtcbiAgICAvLyBDb25zb2xlIGRpc3BsYXlcbiAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKTtcbiAgICBjb25zdCBzcmMgPSBgZmV0Y2goJyR7c2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLm9wZW5JbkVkaXRvckhvc3R9X19vcGVuLWluLWVkaXRvcj9maWxlPSR7ZW5jb2RlVVJJKGZpbGUpfScpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5sb2coJ0ZpbGUgJHtmaWxlTmFtZX0gb3BlbmVkIGluIGVkaXRvcicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdPcGVuaW5nIGNvbXBvbmVudCAke2ZpbGVOYW1lfSBmYWlsZWQnXG4gICAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDoge31cbiAgICAgIGlmICh0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXykge1xuICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXyhtc2csICdlcnJvcicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnJWMnICsgbXNnLCAnY29sb3I6cmVkJylcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdDaGVjayB0aGUgc2V0dXAgb2YgeW91ciBwcm9qZWN0LCBzZWUgaHR0cHM6Ly9kZXZ0b29scy52dWVqcy5vcmcvZ3VpZGUvb3Blbi1pbi1lZGl0b3IuaHRtbCcpXG4gICAgfVxuICB9KWA7XG4gICAgaWYgKGVudl8xLmlzQ2hyb21lKSB7XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuZGV2dG9vbHMuaW5zcGVjdGVkV2luZG93LmV2YWwoc3JjKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1ldmFsXG4gICAgICAgIGV2YWwoc3JjKTtcbiAgICB9XG59XG5leHBvcnRzLm9wZW5JbkVkaXRvciA9IG9wZW5JbkVkaXRvcjtcbmNvbnN0IEVTQyA9IHtcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAnJic6ICcmYW1wOycsXG59O1xuZnVuY3Rpb24gZXNjYXBlKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9bPD5cIiZdL2csIGVzY2FwZUNoYXIpO1xufVxuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5mdW5jdGlvbiBlc2NhcGVDaGFyKGEpIHtcbiAgICByZXR1cm4gRVNDW2FdIHx8IGE7XG59XG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQoc3RhdGUpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGR1bW15VGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGR1bW15VGV4dEFyZWEudGV4dENvbnRlbnQgPSBzdHJpbmdpZnkoc3RhdGUpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG4gICAgZHVtbXlUZXh0QXJlYS5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG59XG5leHBvcnRzLmNvcHlUb0NsaXBib2FyZCA9IGNvcHlUb0NsaXBib2FyZDtcbmZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gZXhwb3J0cy5VTkRFRklORUQgfHwgIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGlzRW1wdHlPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76203\n")},85628:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{eval("/* harmony import */ var _back_hook__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6793);\n/* harmony import */ var _vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27146);\n/* harmony import */ var _vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1__);\n\n\n(0,_back_hook__WEBPACK_IMPORTED_MODULE_0__/* .installHook */ .U)(_vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1__.target);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU2MjguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUVBQSxnRUFBVyxDQUFDQyw4REFBRCxDQUFYIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uL3NyYy9ob29rLmpzPzg3Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zdGFsbEhvb2sgfSBmcm9tICdAYmFjay9ob29rJ1xuaW1wb3J0IHsgdGFyZ2V0IH0gZnJvbSAnQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHMnXG5cbmluc3RhbGxIb29rKHRhcmdldClcbiJdLCJuYW1lcyI6WyJpbnN0YWxsSG9vayIsInRhcmdldCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///85628\n")},22699:module=>{eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVE7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMseUJBQXlCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhEQUE4RCxZQUFZO0FBQzFFO0FBQ0EsOERBQThELFlBQVk7QUFDMUU7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxZQUFZO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanM/YWY2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22699\n")},21023:module=>{eval("// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GO0FBQ3BGO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhEQUE4RDs7QUFFOUQ7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanM/YTBkNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAncGF0aCcgbW9kdWxlIGV4dHJhY3RlZCBmcm9tIE5vZGUuanMgdjguMTEuMSAob25seSB0aGUgcG9zaXggcGFydClcbi8vIHRyYW5zcGxpdGVkIHdpdGggQmFiZWxcblxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShwYXRoKSk7XG4gIH1cbn1cblxuLy8gUmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIHdpdGggZGlyZWN0b3J5IG5hbWVzXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIHZhciBsYXN0U2xhc2ggPSAtMTtcbiAgdmFyIGRvdHMgPSAwO1xuICB2YXIgY29kZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpXG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgY29kZSA9IDQ3IC8qLyovO1xuICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaSAtIDEgfHwgZG90cyA9PT0gMSkge1xuICAgICAgICAvLyBOT09QXG4gICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaSAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSA0NiAvKi4qLyB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMikgIT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJlcyArPSAnLy4uJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSAnLi4nO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKVxuICAgICAgICAgIHJlcyArPSAnLycgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpIC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICBkb3RzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ2IC8qLiovICYmIGRvdHMgIT09IC0xKSB7XG4gICAgICArK2RvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gX2Zvcm1hdChzZXAsIHBhdGhPYmplY3QpIHtcbiAgdmFyIGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDtcbiAgdmFyIGJhc2UgPSBwYXRoT2JqZWN0LmJhc2UgfHwgKHBhdGhPYmplY3QubmFtZSB8fCAnJykgKyAocGF0aE9iamVjdC5leHQgfHwgJycpO1xuICBpZiAoIWRpcikge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG4gIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkge1xuICAgIHJldHVybiBkaXIgKyBiYXNlO1xuICB9XG4gIHJldHVybiBkaXIgKyBzZXAgKyBiYXNlO1xufVxuXG52YXIgcG9zaXggPSB7XG4gIC8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSgpIHtcbiAgICB2YXIgcmVzb2x2ZWRQYXRoID0gJyc7XG4gICAgdmFyIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcbiAgICB2YXIgY3dkO1xuXG4gICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICAgIHZhciBwYXRoO1xuICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgcGF0aCA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoY3dkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgcGF0aCA9IGN3ZDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gICAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmdQb3NpeChyZXNvbHZlZFBhdGgsICFyZXNvbHZlZEFic29sdXRlKTtcblxuICAgIGlmIChyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfSBlbHNlIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcuJztcbiAgICB9XG4gIH0sXG5cbiAgbm9ybWFsaXplOiBmdW5jdGlvbiBub3JtYWxpemUocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7XG5cbiAgICB2YXIgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHRyYWlsaW5nU2VwYXJhdG9yID0gcGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3IC8qLyovO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gICAgcGF0aCA9IG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHBhdGgsICFpc0Fic29sdXRlKTtcblxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgcGF0aCA9ICcuJztcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9ICcvJztcblxuICAgIGlmIChpc0Fic29sdXRlKSByZXR1cm4gJy8nICsgcGF0aDtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBpc0Fic29sdXRlOiBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIHJldHVybiBwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgfSxcblxuICBqb2luOiBmdW5jdGlvbiBqb2luKCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuICcuJztcbiAgICB2YXIgam9pbmVkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgYXNzZXJ0UGF0aChhcmcpO1xuICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICBqb2luZWQgPSBhcmc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBqb2luZWQgKz0gJy8nICsgYXJnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gJy4nO1xuICAgIHJldHVybiBwb3NpeC5ub3JtYWxpemUoam9pbmVkKTtcbiAgfSxcblxuICByZWxhdGl2ZTogZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSwgdG8pIHtcbiAgICBhc3NlcnRQYXRoKGZyb20pO1xuICAgIGFzc2VydFBhdGgodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICBmcm9tID0gcG9zaXgucmVzb2x2ZShmcm9tKTtcbiAgICB0byA9IHBvc2l4LnJlc29sdmUodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gICAgdmFyIGZyb21TdGFydCA9IDE7XG4gICAgZm9yICg7IGZyb21TdGFydCA8IGZyb20ubGVuZ3RoOyArK2Zyb21TdGFydCkge1xuICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSA0NyAvKi8qLylcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmcm9tRW5kID0gZnJvbS5sZW5ndGg7XG4gICAgdmFyIGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gICAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICAgIHZhciB0b1N0YXJ0ID0gMTtcbiAgICBmb3IgKDsgdG9TdGFydCA8IHRvLmxlbmd0aDsgKyt0b1N0YXJ0KSB7XG4gICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgdG9FbmQgPSB0by5sZW5ndGg7XG4gICAgdmFyIHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gICAgLy8gQ29tcGFyZSBwYXRocyB0byBmaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBwYXRoIGZyb20gcm9vdFxuICAgIHZhciBsZW5ndGggPSBmcm9tTGVuIDwgdG9MZW4gPyBmcm9tTGVuIDogdG9MZW47XG4gICAgdmFyIGxhc3RDb21tb25TZXAgPSAtMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPD0gbGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID09PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGB0b2AuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6J1xuICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpICsgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3RcbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvJzsgdG89Jy9mb28nXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyL2Jheic7IHRvPScvZm9vL2JhcidcbiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vJzsgdG89Jy8nXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgICB2YXIgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgICBpZiAoZnJvbUNvZGUgIT09IHRvQ29kZSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gNDcgLyovKi8pXG4gICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcmVsYXRpdmUgcGF0aCBiYXNlZCBvbiB0aGUgcGF0aCBkaWZmZXJlbmNlIGJldHdlZW4gYHRvYFxuICAgIC8vIGFuZCBgZnJvbWBcbiAgICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICAgIGlmIChpID09PSBmcm9tRW5kIHx8IGZyb20uY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApXG4gICAgICAgICAgb3V0ICs9ICcuLic7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXQgKz0gJy8uLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzdGx5LCBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGRlc3RpbmF0aW9uIChgdG9gKSBwYXRoIHRoYXQgY29tZXMgYWZ0ZXJcbiAgICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgICBpZiAob3V0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApO1xuICAgIGVsc2Uge1xuICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwO1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IDQ3IC8qLyovKVxuICAgICAgICArK3RvU3RhcnQ7XG4gICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gICAgfVxuICB9LFxuXG4gIF9tYWtlTG9uZzogZnVuY3Rpb24gX21ha2VMb25nKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBkaXJuYW1lOiBmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIGhhc1Jvb3QgPyAnLycgOiAnLic7XG4gICAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSByZXR1cm4gJy8vJztcbiAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBlbmQpO1xuICB9LFxuXG4gIGJhc2VuYW1lOiBmdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBleHQpIHtcbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aC5sZW5ndGggJiYgZXh0ID09PSBwYXRoKSByZXR1cm4gJyc7XG4gICAgICB2YXIgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7XG4gICAgICB2YXIgZmlyc3ROb25TbGFzaEVuZCA9IC0xO1xuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkge1xuICAgICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIHJlbWVtYmVyIHRoaXMgaW5kZXggaW4gY2FzZVxuICAgICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nXG4gICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggdGhlIGV4cGxpY2l0IGV4dGVuc2lvblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHtcbiAgICAgICAgICAgICAgaWYgKC0tZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIGV4dGVuc2lvbiwgc28gbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyIHBhdGhcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgICBleHRJZHggPSAtMTtcbiAgICAgICAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7ZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aC5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiAnJztcbiAgICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgfSxcblxuICBleHRuYW1lOiBmdW5jdGlvbiBleHRuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIHZhciBzdGFydERvdCA9IC0xO1xuICAgIHZhciBzdGFydFBhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gICAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgICB2YXIgcHJlRG90U3RhdGUgPSAwO1xuICAgIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKVxuICAgICAgICAgICAgc3RhcnREb3QgPSBpO1xuICAgICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKVxuICAgICAgICAgICAgcHJlRG90U3RhdGUgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAgICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgICAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfSxcblxuICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0KSB7XG4gICAgaWYgKHBhdGhPYmplY3QgPT09IG51bGwgfHwgdHlwZW9mIHBhdGhPYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHBhdGhPYmplY3QpO1xuICAgIH1cbiAgICByZXR1cm4gX2Zvcm1hdCgnLycsIHBhdGhPYmplY3QpO1xuICB9LFxuXG4gIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIHZhciByZXQgPSB7IHJvb3Q6ICcnLCBkaXI6ICcnLCBiYXNlOiAnJywgZXh0OiAnJywgbmFtZTogJycgfTtcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiByZXQ7XG4gICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGlzQWJzb2x1dGUgPSBjb2RlID09PSA0NyAvKi8qLztcbiAgICB2YXIgc3RhcnQ7XG4gICAgaWYgKGlzQWJzb2x1dGUpIHtcbiAgICAgIHJldC5yb290ID0gJy8nO1xuICAgICAgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHZhciBzdGFydERvdCA9IC0xO1xuICAgIHZhciBzdGFydFBhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICB2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTtcblxuICAgIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICAgIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG5cbiAgICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gICAgZm9yICg7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7ZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHByZURvdFN0YXRlID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7XG4gICAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIGVuZCk7ZWxzZSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2UoMSwgZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gJy8nO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBzZXA6ICcvJyxcbiAgZGVsaW1pdGVyOiAnOicsXG4gIHdpbjMyOiBudWxsLFxuICBwb3NpeDogbnVsbFxufTtcblxucG9zaXgucG9zaXggPSBwb3NpeDtcblxubW9kdWxlLmV4cG9ydHMgPSBwb3NpeDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21023\n")}},__webpack_module_cache__={};function __webpack_require__(I){var g=__webpack_module_cache__[I];if(void 0!==g)return g.exports;var Q=__webpack_module_cache__[I]={exports:{}};return __webpack_modules__[I].call(Q.exports,Q,Q.exports,__webpack_require__),Q.exports}(()=>{__webpack_require__.n=I=>{var g=I&&I.__esModule?()=>I["default"]:()=>I;return __webpack_require__.d(g,{a:g}),g}})(),(()=>{__webpack_require__.d=(I,g)=>{for(var Q in g)__webpack_require__.o(g,Q)&&!__webpack_require__.o(I,Q)&&Object.defineProperty(I,Q,{enumerable:!0,get:g[Q]})}})(),(()=>{__webpack_require__.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(I){if("object"===typeof window)return window}}()})(),(()=>{__webpack_require__.o=(I,g)=>Object.prototype.hasOwnProperty.call(I,g)})();var __webpack_exports__=__webpack_require__(85628)})();
1
+ (()=>{"use strict";var __webpack_modules__={6793:(__unused_webpack_module,exports,__webpack_require__)=>{eval("var __webpack_unused_export__;\n // this script is injected into every page.\n\n__webpack_unused_export__ = ({\n value: true\n});\nexports.U = void 0;\n/**\n * Install the hook on window, which is an event emitter.\n * Note because Chrome content scripts cannot directly modify the window object,\n * we are evaling this function by inserting a script tag. That's why we have\n * to inline the whole event emitter implementation here.\n *\n * @param {Window|global} target\n */\n\nfunction installHook(target, isIframe = false) {\n const devtoolsVersion = '6.0';\n let listeners = {};\n\n function injectIframeHook(iframe) {\n if (iframe.__vdevtools__injected) return;\n\n try {\n iframe.__vdevtools__injected = true;\n\n const inject = () => {\n try {\n iframe.contentWindow.__VUE_DEVTOOLS_IFRAME__ = iframe;\n const script = iframe.contentDocument.createElement('script');\n script.textContent = ';(' + installHook.toString() + ')(window, true)';\n iframe.contentDocument.documentElement.appendChild(script);\n script.parentNode.removeChild(script);\n } catch (e) {// Ignore\n }\n };\n\n inject();\n iframe.addEventListener('load', () => inject());\n } catch (e) {// Ignore\n }\n }\n\n let iframeChecks = 0;\n\n function injectToIframes() {\n const iframes = document.querySelectorAll('iframe:not([data-vue-devtools-ignore])');\n\n for (const iframe of iframes) {\n injectIframeHook(iframe);\n }\n }\n\n injectToIframes();\n const iframeTimer = setInterval(() => {\n injectToIframes();\n iframeChecks++;\n\n if (iframeChecks >= 5) {\n clearInterval(iframeTimer);\n }\n }, 1000);\n\n if (Object.prototype.hasOwnProperty.call(target, '__VUE_DEVTOOLS_GLOBAL_HOOK__')) {\n if (target.__VUE_DEVTOOLS_GLOBAL_HOOK__.devtoolsVersion !== devtoolsVersion) {\n console.error(`Another version of Vue Devtools seems to be installed. Please enable only one version at a time.`);\n }\n\n return;\n }\n\n let hook;\n\n if (isIframe) {\n const sendToParent = cb => {\n try {\n const hook = window.parent.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook) {\n cb(hook);\n } else {\n console.warn('[Vue Devtools] No hook in parent window');\n }\n } catch (e) {\n console.warn('[Vue Devtools] Failed to send message to parend window', e);\n }\n };\n\n hook = {\n devtoolsVersion,\n\n // eslint-disable-next-line accessor-pairs\n set Vue(value) {\n sendToParent(hook => {\n hook.Vue = value;\n });\n },\n\n // eslint-disable-next-line accessor-pairs\n set enabled(value) {\n sendToParent(hook => {\n hook.enabled = value;\n });\n },\n\n on(event, fn) {\n sendToParent(hook => hook.on(event, fn));\n },\n\n once(event, fn) {\n sendToParent(hook => hook.once(event, fn));\n },\n\n off(event, fn) {\n sendToParent(hook => hook.off(event, fn));\n },\n\n emit(event, ...args) {\n sendToParent(hook => hook.emit(event, ...args));\n }\n\n };\n } else {\n hook = {\n devtoolsVersion,\n Vue: null,\n enabled: undefined,\n _buffer: [],\n store: null,\n initialState: null,\n storeModules: null,\n flushStoreModules: null,\n apps: [],\n\n _replayBuffer(event) {\n const buffer = this._buffer;\n this._buffer = [];\n\n for (let i = 0, l = buffer.length; i < l; i++) {\n const allArgs = buffer[i];\n allArgs[0] === event // eslint-disable-next-line prefer-spread\n ? this.emit.apply(this, allArgs) : this._buffer.push(allArgs);\n }\n },\n\n on(event, fn) {\n const $event = '$' + event;\n\n if (listeners[$event]) {\n listeners[$event].push(fn);\n } else {\n listeners[$event] = [fn];\n\n this._replayBuffer(event);\n }\n },\n\n once(event, fn) {\n const on = (...args) => {\n this.off(event, on);\n return fn.apply(this, args);\n };\n\n this.on(event, on);\n },\n\n off(event, fn) {\n event = '$' + event;\n\n if (!arguments.length) {\n listeners = {};\n } else {\n const cbs = listeners[event];\n\n if (cbs) {\n if (!fn) {\n listeners[event] = null;\n } else {\n for (let i = 0, l = cbs.length; i < l; i++) {\n const cb = cbs[i];\n\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break;\n }\n }\n }\n }\n }\n },\n\n emit(event, ...args) {\n const $event = '$' + event;\n let cbs = listeners[$event];\n\n if (cbs) {\n cbs = cbs.slice();\n\n for (let i = 0, l = cbs.length; i < l; i++) {\n try {\n const result = cbs[i].apply(this, args);\n\n if (typeof (result === null || result === void 0 ? void 0 : result.catch) === 'function') {\n result.catch(e => {\n console.error(`[Hook] Error in async event handler for ${event} with args:`, args);\n console.error(e);\n });\n }\n } catch (e) {\n console.error(`[Hook] Error in event handler for ${event} with args:`, args);\n console.error(e);\n }\n }\n } else {\n this._buffer.push([event, ...args]);\n }\n }\n\n };\n hook.once('init', Vue => {\n hook.Vue = Vue;\n\n if (Vue) {\n Vue.prototype.$inspect = function () {\n const fn = target.__VUE_DEVTOOLS_INSPECT__;\n fn && fn(this);\n };\n }\n });\n hook.on('app:init', (app, version, types) => {\n const appRecord = {\n app,\n version,\n types\n };\n hook.apps.push(appRecord);\n hook.emit('app:add', appRecord);\n });\n hook.once('vuex:init', store => {\n hook.store = store;\n hook.initialState = clone(store.state);\n const origReplaceState = store.replaceState.bind(store);\n\n store.replaceState = state => {\n hook.initialState = clone(state);\n origReplaceState(state);\n }; // Dynamic modules\n\n\n let origRegister, origUnregister;\n\n if (store.registerModule) {\n hook.storeModules = [];\n origRegister = store.registerModule.bind(store);\n\n store.registerModule = (path, module, options) => {\n if (typeof path === 'string') path = [path];\n hook.storeModules.push({\n path,\n module,\n options\n });\n origRegister(path, module, options);\n\n if (false) {}\n };\n\n origUnregister = store.unregisterModule.bind(store);\n\n store.unregisterModule = path => {\n if (typeof path === 'string') path = [path];\n const key = path.join('/');\n const index = hook.storeModules.findIndex(m => m.path.join('/') === key);\n if (index !== -1) hook.storeModules.splice(index, 1);\n origUnregister(path);\n\n if (false) {}\n };\n }\n\n hook.flushStoreModules = () => {\n store.replaceState = origReplaceState;\n\n if (store.registerModule) {\n store.registerModule = origRegister;\n store.unregisterModule = origUnregister;\n }\n\n return hook.storeModules || [];\n };\n });\n }\n\n Object.defineProperty(target, '__VUE_DEVTOOLS_GLOBAL_HOOK__', {\n get() {\n return hook;\n }\n\n }); // Handle apps initialized before hook injection\n\n if (target.__VUE_DEVTOOLS_HOOK_REPLAY__) {\n try {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__.forEach(cb => cb(hook));\n\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = [];\n } catch (e) {\n console.error('[vue-devtools] Error during hook replay', e);\n }\n } // Clone deep utility for cloning initial state of the store\n // Forked from https://github.com/planttheidea/fast-copy\n // Last update: 2019-10-30\n // ⚠️ Don't forget to update `./hook.js`\n // utils\n\n\n const {\n toString: toStringFunction\n } = Function.prototype;\n const {\n create,\n defineProperty,\n getOwnPropertyDescriptor,\n getOwnPropertyNames,\n getOwnPropertySymbols,\n getPrototypeOf\n } = Object;\n const {\n hasOwnProperty,\n propertyIsEnumerable\n } = Object.prototype;\n /**\n * @enum\n *\n * @const {Object} SUPPORTS\n *\n * @property {boolean} SYMBOL_PROPERTIES are symbol properties supported\n * @property {boolean} WEAKSET is WeakSet supported\n */\n\n const SUPPORTS = {\n SYMBOL_PROPERTIES: typeof getOwnPropertySymbols === 'function',\n WEAKSET: typeof WeakSet === 'function'\n };\n /**\n * @function createCache\n *\n * @description\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\n\n const createCache = () => {\n if (SUPPORTS.WEAKSET) {\n return new WeakSet();\n }\n\n const object = create({\n add: value => object._values.push(value),\n has: value => !!~object._values.indexOf(value)\n });\n object._values = [];\n return object;\n };\n /**\n * @function getCleanClone\n *\n * @description\n * get an empty version of the object with the same prototype it has\n *\n * @param object the object to build a clean clone from\n * @param realm the realm the object resides in\n * @returns the empty cloned object\n */\n\n\n const getCleanClone = (object, realm) => {\n if (!object.constructor) {\n return create(null);\n } // eslint-disable-next-line no-proto\n\n\n const prototype = object.__proto__ || getPrototypeOf(object);\n\n if (object.constructor === realm.Object) {\n return prototype === realm.Object.prototype ? {} : create(prototype);\n }\n\n if (~toStringFunction.call(object.constructor).indexOf('[native code]')) {\n try {\n return new object.constructor();\n } catch (e) {// Error\n }\n }\n\n return create(prototype);\n };\n /**\n * @function getObjectCloneLoose\n *\n * @description\n * get a copy of the object based on loose rules, meaning all enumerable keys\n * and symbols are copied, but property descriptors are not considered\n *\n * @param object the object to clone\n * @param realm the realm the object resides in\n * @param handleCopy the function that handles copying the object\n * @returns the copied object\n */\n\n\n const getObjectCloneLoose = (object, realm, handleCopy, cache) => {\n const clone = getCleanClone(object, realm);\n\n for (const key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = handleCopy(object[key], cache);\n }\n }\n\n if (SUPPORTS.SYMBOL_PROPERTIES) {\n const symbols = getOwnPropertySymbols(object);\n\n if (symbols.length) {\n for (let index = 0, symbol; index < symbols.length; index++) {\n symbol = symbols[index];\n\n if (propertyIsEnumerable.call(object, symbol)) {\n clone[symbol] = handleCopy(object[symbol], cache);\n }\n }\n }\n }\n\n return clone;\n };\n /**\n * @function getObjectCloneStrict\n *\n * @description\n * get a copy of the object based on strict rules, meaning all keys and symbols\n * are copied based on the original property descriptors\n *\n * @param object the object to clone\n * @param realm the realm the object resides in\n * @param handleCopy the function that handles copying the object\n * @returns the copied object\n */\n\n\n const getObjectCloneStrict = (object, realm, handleCopy, cache) => {\n const clone = getCleanClone(object, realm);\n const properties = SUPPORTS.SYMBOL_PROPERTIES ? [].concat(getOwnPropertyNames(object), getOwnPropertySymbols(object)) : getOwnPropertyNames(object);\n\n if (properties.length) {\n for (let index = 0, property, descriptor; index < properties.length; index++) {\n property = properties[index];\n\n if (property !== 'callee' && property !== 'caller') {\n descriptor = getOwnPropertyDescriptor(object, property);\n descriptor.value = handleCopy(object[property], cache);\n defineProperty(clone, property, descriptor);\n }\n }\n }\n\n return clone;\n };\n /**\n * @function getRegExpFlags\n *\n * @description\n * get the flags to apply to the copied regexp\n *\n * @param regExp the regexp to get the flags of\n * @returns the flags for the regexp\n */\n\n\n const getRegExpFlags = regExp => {\n let flags = '';\n\n if (regExp.global) {\n flags += 'g';\n }\n\n if (regExp.ignoreCase) {\n flags += 'i';\n }\n\n if (regExp.multiline) {\n flags += 'm';\n }\n\n if (regExp.unicode) {\n flags += 'u';\n }\n\n if (regExp.sticky) {\n flags += 'y';\n }\n\n return flags;\n };\n\n const {\n isArray\n } = Array;\n\n const GLOBAL_THIS = (() => {\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof __webpack_require__.g !== 'undefined') {\n return __webpack_require__.g;\n }\n\n if (console && console.error) {\n console.error('Unable to locate global object, returning \"this\".');\n }\n })();\n /**\n * @function clone\n *\n * @description\n * copy an object deeply as much as possible\n *\n * If `strict` is applied, then all properties (including non-enumerable ones)\n * are copied with their original property descriptors on both objects and arrays.\n *\n * The object is compared to the global constructors in the `realm` provided,\n * and the native constructor is always used to ensure that extensions of native\n * objects (allows in ES2015+) are maintained.\n *\n * @param object the object to copy\n * @param [options] the options for copying with\n * @param [options.isStrict] should the copy be strict\n * @param [options.realm] the realm (this) object the object is copied from\n * @returns the copied object\n */\n\n\n function clone(object, options = null) {\n // manually coalesced instead of default parameters for performance\n const isStrict = !!(options && options.isStrict);\n const realm = options && options.realm || GLOBAL_THIS;\n const getObjectClone = isStrict ? getObjectCloneStrict : getObjectCloneLoose;\n /**\n * @function handleCopy\n *\n * @description\n * copy the object recursively based on its type\n *\n * @param object the object to copy\n * @returns the copied object\n */\n\n const handleCopy = (object, cache) => {\n if (!object || typeof object !== 'object' || cache.has(object)) {\n return object;\n } // DOM objects\n\n\n if (object instanceof HTMLElement) {\n return object.cloneNode(false);\n }\n\n const Constructor = object.constructor; // plain objects\n\n if (Constructor === realm.Object) {\n cache.add(object);\n return getObjectClone(object, realm, handleCopy, cache);\n }\n\n let clone; // arrays\n\n if (isArray(object)) {\n cache.add(object); // if strict, include non-standard properties\n\n if (isStrict) {\n return getObjectCloneStrict(object, realm, handleCopy, cache);\n }\n\n clone = new Constructor();\n\n for (let index = 0; index < object.length; index++) {\n clone[index] = handleCopy(object[index], cache);\n }\n\n return clone;\n } // dates\n\n\n if (object instanceof realm.Date) {\n return new Constructor(object.getTime());\n } // regexps\n\n\n if (object instanceof realm.RegExp) {\n clone = new Constructor(object.source, object.flags || getRegExpFlags(object));\n clone.lastIndex = object.lastIndex;\n return clone;\n } // maps\n\n\n if (realm.Map && object instanceof realm.Map) {\n cache.add(object);\n clone = new Constructor();\n object.forEach((value, key) => {\n clone.set(key, handleCopy(value, cache));\n });\n return clone;\n } // sets\n\n\n if (realm.Set && object instanceof realm.Set) {\n cache.add(object);\n clone = new Constructor();\n object.forEach(value => {\n clone.add(handleCopy(value, cache));\n });\n return clone;\n } // buffers (node-only)\n\n\n if (realm.Buffer && realm.Buffer.isBuffer(object)) {\n clone = realm.Buffer.allocUnsafe ? realm.Buffer.allocUnsafe(object.length) : new Constructor(object.length);\n object.copy(clone);\n return clone;\n } // arraybuffers / dataviews\n\n\n if (realm.ArrayBuffer) {\n // dataviews\n if (realm.ArrayBuffer.isView(object)) {\n return new Constructor(object.buffer.slice(0));\n } // arraybuffers\n\n\n if (object instanceof realm.ArrayBuffer) {\n return object.slice(0);\n }\n } // if the object cannot / should not be cloned, don't\n\n\n if ( // promise-like\n hasOwnProperty.call(object, 'then') && typeof object.then === 'function' || // errors\n object instanceof Error || // weakmaps\n realm.WeakMap && object instanceof realm.WeakMap || // weaksets\n realm.WeakSet && object instanceof realm.WeakSet) {\n return object;\n }\n\n cache.add(object); // assume anything left is a custom constructor\n\n return getObjectClone(object, realm, handleCopy, cache);\n };\n\n return handleCopy(object, createCache());\n }\n}\n\nexports.U = installHook;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0MsV0FBSyxDQUFDLE9BQU4sSUFBaUIsTUFBTSxZQUFZLEtBQUssQ0FBQyxPQVI1QyxFQVNFO0FBQ0EsZUFBTyxNQUFQO0FBQ0Q7O0FBRUQsV0FBSyxDQUFDLEdBQU4sQ0FBVSxNQUFWLEVBeEhFLENBMEhGOztBQUNBLGFBQU8sY0FBYyxDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLFVBQWhCLEVBQTRCLEtBQTVCLENBQXJCO0FBQ0QsS0EvSEQ7O0FBaUlBLFdBQU8sVUFBVSxDQUFDLE1BQUQsRUFBUyxXQUFXLEVBQXBCLENBQWpCO0FBQ0Q7QUFDRjs7QUF2cEJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaG9vay50cz8yZjlhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLy8gdGhpcyBzY3JpcHQgaXMgaW5qZWN0ZWQgaW50byBldmVyeSBwYWdlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnN0YWxsSG9vayA9IHZvaWQgMDtcbi8qKlxuICogSW5zdGFsbCB0aGUgaG9vayBvbiB3aW5kb3csIHdoaWNoIGlzIGFuIGV2ZW50IGVtaXR0ZXIuXG4gKiBOb3RlIGJlY2F1c2UgQ2hyb21lIGNvbnRlbnQgc2NyaXB0cyBjYW5ub3QgZGlyZWN0bHkgbW9kaWZ5IHRoZSB3aW5kb3cgb2JqZWN0LFxuICogd2UgYXJlIGV2YWxpbmcgdGhpcyBmdW5jdGlvbiBieSBpbnNlcnRpbmcgYSBzY3JpcHQgdGFnLiBUaGF0J3Mgd2h5IHdlIGhhdmVcbiAqIHRvIGlubGluZSB0aGUgd2hvbGUgZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiBoZXJlLlxuICpcbiAqIEBwYXJhbSB7V2luZG93fGdsb2JhbH0gdGFyZ2V0XG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxIb29rKHRhcmdldCwgaXNJZnJhbWUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGRldnRvb2xzVmVyc2lvbiA9ICc2LjAnO1xuICAgIGxldCBsaXN0ZW5lcnMgPSB7fTtcbiAgICBmdW5jdGlvbiBpbmplY3RJZnJhbWVIb29rKGlmcmFtZSkge1xuICAgICAgICBpZiAoaWZyYW1lLl9fdmRldnRvb2xzX19pbmplY3RlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmcmFtZS5fX3ZkZXZ0b29sc19faW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgaW5qZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93Ll9fVlVFX0RFVlRPT0xTX0lGUkFNRV9fID0gaWZyYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQgPSAnOygnICsgaW5zdGFsbEhvb2sudG9TdHJpbmcoKSArICcpKHdpbmRvdywgdHJ1ZSknO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW5qZWN0KCk7XG4gICAgICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IGluamVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSWdub3JlXG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGlmcmFtZUNoZWNrcyA9IDA7XG4gICAgZnVuY3Rpb24gaW5qZWN0VG9JZnJhbWVzKCkge1xuICAgICAgICBjb25zdCBpZnJhbWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lOm5vdChbZGF0YS12dWUtZGV2dG9vbHMtaWdub3JlXSknKTtcbiAgICAgICAgZm9yIChjb25zdCBpZnJhbWUgb2YgaWZyYW1lcykge1xuICAgICAgICAgICAgaW5qZWN0SWZyYW1lSG9vayhpZnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluamVjdFRvSWZyYW1lcygpO1xuICAgIGNvbnN0IGlmcmFtZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpbmplY3RUb0lmcmFtZXMoKTtcbiAgICAgICAgaWZyYW1lQ2hlY2tzKys7XG4gICAgICAgIGlmIChpZnJhbWVDaGVja3MgPj0gNSkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZnJhbWVUaW1lcik7XG4gICAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgJ19fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18nKSkge1xuICAgICAgICBpZiAodGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uZGV2dG9vbHNWZXJzaW9uICE9PSBkZXZ0b29sc1ZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFub3RoZXIgdmVyc2lvbiBvZiBWdWUgRGV2dG9vbHMgc2VlbXMgdG8gYmUgaW5zdGFsbGVkLiBQbGVhc2UgZW5hYmxlIG9ubHkgb25lIHZlcnNpb24gYXQgYSB0aW1lLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGhvb2s7XG4gICAgaWYgKGlzSWZyYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbmRUb1BhcmVudCA9IGNiID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG9vayA9IHdpbmRvdy5wYXJlbnQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgICAgICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgICAgICAgICBjYihob29rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1Z1ZSBEZXZ0b29sc10gTm8gaG9vayBpbiBwYXJlbnQgd2luZG93Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWUgRGV2dG9vbHNdIEZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gcGFyZW5kIHdpbmRvdycsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBob29rID0ge1xuICAgICAgICAgICAgZGV2dG9vbHNWZXJzaW9uLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFjY2Vzc29yLXBhaXJzXG4gICAgICAgICAgICBzZXQgVnVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VuZFRvUGFyZW50KGhvb2sgPT4geyBob29rLlZ1ZSA9IHZhbHVlOyB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYWNjZXNzb3ItcGFpcnNcbiAgICAgICAgICAgIHNldCBlbmFibGVkKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VuZFRvUGFyZW50KGhvb2sgPT4geyBob29rLmVuYWJsZWQgPSB2YWx1ZTsgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb24oZXZlbnQsIGZuKSB7XG4gICAgICAgICAgICAgICAgc2VuZFRvUGFyZW50KGhvb2sgPT4gaG9vay5vbihldmVudCwgZm4pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbmNlKGV2ZW50LCBmbikge1xuICAgICAgICAgICAgICAgIHNlbmRUb1BhcmVudChob29rID0+IGhvb2sub25jZShldmVudCwgZm4pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvZmYoZXZlbnQsIGZuKSB7XG4gICAgICAgICAgICAgICAgc2VuZFRvUGFyZW50KGhvb2sgPT4gaG9vay5vZmYoZXZlbnQsIGZuKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW1pdChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIHNlbmRUb1BhcmVudChob29rID0+IGhvb2suZW1pdChldmVudCwgLi4uYXJncykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGhvb2sgPSB7XG4gICAgICAgICAgICBkZXZ0b29sc1ZlcnNpb24sXG4gICAgICAgICAgICBWdWU6IG51bGwsXG4gICAgICAgICAgICBlbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBfYnVmZmVyOiBbXSxcbiAgICAgICAgICAgIHN0b3JlOiBudWxsLFxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiBudWxsLFxuICAgICAgICAgICAgc3RvcmVNb2R1bGVzOiBudWxsLFxuICAgICAgICAgICAgZmx1c2hTdG9yZU1vZHVsZXM6IG51bGwsXG4gICAgICAgICAgICBhcHBzOiBbXSxcbiAgICAgICAgICAgIF9yZXBsYXlCdWZmZXIoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLl9idWZmZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBidWZmZXIubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbEFyZ3MgPSBidWZmZXJbaV07XG4gICAgICAgICAgICAgICAgICAgIGFsbEFyZ3NbMF0gPT09IGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXNwcmVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmVtaXQuYXBwbHkodGhpcywgYWxsQXJncylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYnVmZmVyLnB1c2goYWxsQXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uKGV2ZW50LCBmbikge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRldmVudCA9ICckJyArIGV2ZW50O1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbJGV2ZW50XSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnNbJGV2ZW50XS5wdXNoKGZuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyc1skZXZlbnRdID0gW2ZuXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGF5QnVmZmVyKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25jZShldmVudCwgZm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub24oZXZlbnQsIG9uKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvZmYoZXZlbnQsIGZuKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSAnJCcgKyBldmVudDtcbiAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYnMgPSBsaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2IgPSBjYnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW1pdChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRldmVudCA9ICckJyArIGV2ZW50O1xuICAgICAgICAgICAgICAgIGxldCBjYnMgPSBsaXN0ZW5lcnNbJGV2ZW50XTtcbiAgICAgICAgICAgICAgICBpZiAoY2JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNicyA9IGNicy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2JzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5jYXRjaCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgW0hvb2tdIEVycm9yIGluIGFzeW5jIGV2ZW50IGhhbmRsZXIgZm9yICR7ZXZlbnR9IHdpdGggYXJnczpgLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgW0hvb2tdIEVycm9yIGluIGV2ZW50IGhhbmRsZXIgZm9yICR7ZXZlbnR9IHdpdGggYXJnczpgLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXIucHVzaChbZXZlbnQsIC4uLmFyZ3NdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBob29rLm9uY2UoJ2luaXQnLCBWdWUgPT4ge1xuICAgICAgICAgICAgaG9vay5WdWUgPSBWdWU7XG4gICAgICAgICAgICBpZiAoVnVlKSB7XG4gICAgICAgICAgICAgICAgVnVlLnByb3RvdHlwZS4kaW5zcGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm4gPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfSU5TUEVDVF9fO1xuICAgICAgICAgICAgICAgICAgICBmbiAmJiBmbih0aGlzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaG9vay5vbignYXBwOmluaXQnLCAoYXBwLCB2ZXJzaW9uLCB0eXBlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGhvb2suYXBwcy5wdXNoKGFwcFJlY29yZCk7XG4gICAgICAgICAgICBob29rLmVtaXQoJ2FwcDphZGQnLCBhcHBSZWNvcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaG9vay5vbmNlKCd2dWV4OmluaXQnLCBzdG9yZSA9PiB7XG4gICAgICAgICAgICBob29rLnN0b3JlID0gc3RvcmU7XG4gICAgICAgICAgICBob29rLmluaXRpYWxTdGF0ZSA9IGNsb25lKHN0b3JlLnN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdSZXBsYWNlU3RhdGUgPSBzdG9yZS5yZXBsYWNlU3RhdGUuYmluZChzdG9yZSk7XG4gICAgICAgICAgICBzdG9yZS5yZXBsYWNlU3RhdGUgPSBzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgaG9vay5pbml0aWFsU3RhdGUgPSBjbG9uZShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3JpZ1JlcGxhY2VTdGF0ZShzdGF0ZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gRHluYW1pYyBtb2R1bGVzXG4gICAgICAgICAgICBsZXQgb3JpZ1JlZ2lzdGVyLCBvcmlnVW5yZWdpc3RlcjtcbiAgICAgICAgICAgIGlmIChzdG9yZS5yZWdpc3Rlck1vZHVsZSkge1xuICAgICAgICAgICAgICAgIGhvb2suc3RvcmVNb2R1bGVzID0gW107XG4gICAgICAgICAgICAgICAgb3JpZ1JlZ2lzdGVyID0gc3RvcmUucmVnaXN0ZXJNb2R1bGUuYmluZChzdG9yZSk7XG4gICAgICAgICAgICAgICAgc3RvcmUucmVnaXN0ZXJNb2R1bGUgPSAocGF0aCwgbW9kdWxlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gW3BhdGhdO1xuICAgICAgICAgICAgICAgICAgICBob29rLnN0b3JlTW9kdWxlcy5wdXNoKHsgcGF0aCwgbW9kdWxlLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgICAgICBvcmlnUmVnaXN0ZXIocGF0aCwgbW9kdWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZWFybHkgcmVnaXN0ZXIgbW9kdWxlJywgcGF0aCwgbW9kdWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb3JpZ1VucmVnaXN0ZXIgPSBzdG9yZS51bnJlZ2lzdGVyTW9kdWxlLmJpbmQoc3RvcmUpO1xuICAgICAgICAgICAgICAgIHN0b3JlLnVucmVnaXN0ZXJNb2R1bGUgPSAocGF0aCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtwYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGF0aC5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaG9vay5zdG9yZU1vZHVsZXMuZmluZEluZGV4KG0gPT4gbS5wYXRoLmpvaW4oJy8nKSA9PT0ga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2suc3RvcmVNb2R1bGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdVbnJlZ2lzdGVyKHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlYXJseSB1bnJlZ2lzdGVyIG1vZHVsZScsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhvb2suZmx1c2hTdG9yZU1vZHVsZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUucmVwbGFjZVN0YXRlID0gb3JpZ1JlcGxhY2VTdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmUucmVnaXN0ZXJNb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUucmVnaXN0ZXJNb2R1bGUgPSBvcmlnUmVnaXN0ZXI7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnVucmVnaXN0ZXJNb2R1bGUgPSBvcmlnVW5yZWdpc3RlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvb2suc3RvcmVNb2R1bGVzIHx8IFtdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICdfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9vaztcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICAvLyBIYW5kbGUgYXBwcyBpbml0aWFsaXplZCBiZWZvcmUgaG9vayBpbmplY3Rpb25cbiAgICBpZiAodGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX18pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fLmZvckVhY2goY2IgPT4gY2IoaG9vaykpO1xuICAgICAgICAgICAgdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX18gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3Z1ZS1kZXZ0b29sc10gRXJyb3IgZHVyaW5nIGhvb2sgcmVwbGF5JywgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2xvbmUgZGVlcCB1dGlsaXR5IGZvciBjbG9uaW5nIGluaXRpYWwgc3RhdGUgb2YgdGhlIHN0b3JlXG4gICAgLy8gRm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3BsYW50dGhlaWRlYS9mYXN0LWNvcHlcbiAgICAvLyBMYXN0IHVwZGF0ZTogMjAxOS0xMC0zMFxuICAgIC8vIOKaoO+4jyBEb24ndCBmb3JnZXQgdG8gdXBkYXRlIGAuL2hvb2suanNgXG4gICAgLy8gdXRpbHNcbiAgICBjb25zdCB7IHRvU3RyaW5nOiB0b1N0cmluZ0Z1bmN0aW9uIH0gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4gICAgY29uc3QgeyBjcmVhdGUsIGRlZmluZVByb3BlcnR5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIGdldE93blByb3BlcnR5TmFtZXMsIGdldE93blByb3BlcnR5U3ltYm9scywgZ2V0UHJvdG90eXBlT2YsIH0gPSBPYmplY3Q7XG4gICAgY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSwgcHJvcGVydHlJc0VudW1lcmFibGUgfSA9IE9iamVjdC5wcm90b3R5cGU7XG4gICAgLyoqXG4gICAgICogQGVudW1cbiAgICAgKlxuICAgICAqIEBjb25zdCB7T2JqZWN0fSBTVVBQT1JUU1xuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBTWU1CT0xfUFJPUEVSVElFUyBhcmUgc3ltYm9sIHByb3BlcnRpZXMgc3VwcG9ydGVkXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBXRUFLU0VUIGlzIFdlYWtTZXQgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY29uc3QgU1VQUE9SVFMgPSB7XG4gICAgICAgIFNZTUJPTF9QUk9QRVJUSUVTOiB0eXBlb2YgZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nLFxuICAgICAgICBXRUFLU0VUOiB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBjcmVhdGVDYWNoZVxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogZ2V0IGEgbmV3IGNhY2hlIG9iamVjdCB0byBwcmV2ZW50IGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgY2FjaGUgb2JqZWN0XG4gICAgICovXG4gICAgY29uc3QgY3JlYXRlQ2FjaGUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChTVVBQT1JUUy5XRUFLU0VUKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFdlYWtTZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYmplY3QgPSBjcmVhdGUoe1xuICAgICAgICAgICAgYWRkOiAodmFsdWUpID0+IG9iamVjdC5fdmFsdWVzLnB1c2godmFsdWUpLFxuICAgICAgICAgICAgaGFzOiAodmFsdWUpID0+ICEhfm9iamVjdC5fdmFsdWVzLmluZGV4T2YodmFsdWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgb2JqZWN0Ll92YWx1ZXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBnZXRDbGVhbkNsb25lXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBnZXQgYW4gZW1wdHkgdmVyc2lvbiBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvdG90eXBlIGl0IGhhc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB0aGUgb2JqZWN0IHRvIGJ1aWxkIGEgY2xlYW4gY2xvbmUgZnJvbVxuICAgICAqIEBwYXJhbSByZWFsbSB0aGUgcmVhbG0gdGhlIG9iamVjdCByZXNpZGVzIGluXG4gICAgICogQHJldHVybnMgdGhlIGVtcHR5IGNsb25lZCBvYmplY3RcbiAgICAgKi9cbiAgICBjb25zdCBnZXRDbGVhbkNsb25lID0gKG9iamVjdCwgcmVhbG0pID0+IHtcbiAgICAgICAgaWYgKCFvYmplY3QuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gICAgICAgIGNvbnN0IHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX18gfHwgZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gcmVhbG0uT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlID09PSByZWFsbS5PYmplY3QucHJvdG90eXBlID8ge30gOiBjcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAofnRvU3RyaW5nRnVuY3Rpb24uY2FsbChvYmplY3QuY29uc3RydWN0b3IpLmluZGV4T2YoJ1tuYXRpdmUgY29kZV0nKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IG9iamVjdC5jb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBFcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGUocHJvdG90eXBlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBnZXRPYmplY3RDbG9uZUxvb3NlXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBnZXQgYSBjb3B5IG9mIHRoZSBvYmplY3QgYmFzZWQgb24gbG9vc2UgcnVsZXMsIG1lYW5pbmcgYWxsIGVudW1lcmFibGUga2V5c1xuICAgICAqIGFuZCBzeW1ib2xzIGFyZSBjb3BpZWQsIGJ1dCBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBhcmUgbm90IGNvbnNpZGVyZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB0byBjbG9uZVxuICAgICAqIEBwYXJhbSByZWFsbSB0aGUgcmVhbG0gdGhlIG9iamVjdCByZXNpZGVzIGluXG4gICAgICogQHBhcmFtIGhhbmRsZUNvcHkgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBjb3B5aW5nIHRoZSBvYmplY3RcbiAgICAgKiBAcmV0dXJucyB0aGUgY29waWVkIG9iamVjdFxuICAgICAqL1xuICAgIGNvbnN0IGdldE9iamVjdENsb25lTG9vc2UgPSAob2JqZWN0LCByZWFsbSwgaGFuZGxlQ29weSwgY2FjaGUpID0+IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBnZXRDbGVhbkNsb25lKG9iamVjdCwgcmVhbG0pO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgIGNsb25lW2tleV0gPSBoYW5kbGVDb3B5KG9iamVjdFtrZXldLCBjYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFNVUFBPUlRTLlNZTUJPTF9QUk9QRVJUSUVTKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoc3ltYm9scy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDAsIHN5bWJvbDsgaW5kZXggPCBzeW1ib2xzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZVtzeW1ib2xdID0gaGFuZGxlQ29weShvYmplY3Rbc3ltYm9sXSwgY2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBnZXRPYmplY3RDbG9uZVN0cmljdFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogZ2V0IGEgY29weSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHN0cmljdCBydWxlcywgbWVhbmluZyBhbGwga2V5cyBhbmQgc3ltYm9sc1xuICAgICAqIGFyZSBjb3BpZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIHByb3BlcnR5IGRlc2NyaXB0b3JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3QgdG8gY2xvbmVcbiAgICAgKiBAcGFyYW0gcmVhbG0gdGhlIHJlYWxtIHRoZSBvYmplY3QgcmVzaWRlcyBpblxuICAgICAqIEBwYXJhbSBoYW5kbGVDb3B5IHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgY29weWluZyB0aGUgb2JqZWN0XG4gICAgICogQHJldHVybnMgdGhlIGNvcGllZCBvYmplY3RcbiAgICAgKi9cbiAgICBjb25zdCBnZXRPYmplY3RDbG9uZVN0cmljdCA9IChvYmplY3QsIHJlYWxtLCBoYW5kbGVDb3B5LCBjYWNoZSkgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGdldENsZWFuQ2xvbmUob2JqZWN0LCByZWFsbSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBTVVBQT1JUUy5TWU1CT0xfUFJPUEVSVElFU1xuICAgICAgICAgICAgPyBbXS5jb25jYXQoZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSlcbiAgICAgICAgICAgIDogZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMCwgcHJvcGVydHksIGRlc2NyaXB0b3I7IGluZGV4IDwgcHJvcGVydGllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPT0gJ2NhbGxlZScgJiYgcHJvcGVydHkgIT09ICdjYWxsZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBoYW5kbGVDb3B5KG9iamVjdFtwcm9wZXJ0eV0sIGNhY2hlKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkoY2xvbmUsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uIGdldFJlZ0V4cEZsYWdzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBnZXQgdGhlIGZsYWdzIHRvIGFwcGx5IHRvIHRoZSBjb3BpZWQgcmVnZXhwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVnRXhwIHRoZSByZWdleHAgdG8gZ2V0IHRoZSBmbGFncyBvZlxuICAgICAqIEByZXR1cm5zIHRoZSBmbGFncyBmb3IgdGhlIHJlZ2V4cFxuICAgICAqL1xuICAgIGNvbnN0IGdldFJlZ0V4cEZsYWdzID0gKHJlZ0V4cCkgPT4ge1xuICAgICAgICBsZXQgZmxhZ3MgPSAnJztcbiAgICAgICAgaWYgKHJlZ0V4cC5nbG9iYWwpIHtcbiAgICAgICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVnRXhwLmlnbm9yZUNhc2UpIHtcbiAgICAgICAgICAgIGZsYWdzICs9ICdpJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVnRXhwLm11bHRpbGluZSkge1xuICAgICAgICAgICAgZmxhZ3MgKz0gJ20nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWdFeHAudW5pY29kZSkge1xuICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWdFeHAuc3RpY2t5KSB7XG4gICAgICAgICAgICBmbGFncyArPSAneSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZsYWdzO1xuICAgIH07XG4gICAgY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcbiAgICBjb25zdCBHTE9CQUxfVEhJUyA9ICgoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0LCByZXR1cm5pbmcgXCJ0aGlzXCIuJyk7XG4gICAgICAgIH1cbiAgICB9KSgpO1xuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBjbG9uZVxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogY29weSBhbiBvYmplY3QgZGVlcGx5IGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICAgKlxuICAgICAqIElmIGBzdHJpY3RgIGlzIGFwcGxpZWQsIHRoZW4gYWxsIHByb3BlcnRpZXMgKGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBvbmVzKVxuICAgICAqIGFyZSBjb3BpZWQgd2l0aCB0aGVpciBvcmlnaW5hbCBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBvbiBib3RoIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICAgKlxuICAgICAqIFRoZSBvYmplY3QgaXMgY29tcGFyZWQgdG8gdGhlIGdsb2JhbCBjb25zdHJ1Y3RvcnMgaW4gdGhlIGByZWFsbWAgcHJvdmlkZWQsXG4gICAgICogYW5kIHRoZSBuYXRpdmUgY29uc3RydWN0b3IgaXMgYWx3YXlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgZXh0ZW5zaW9ucyBvZiBuYXRpdmVcbiAgICAgKiBvYmplY3RzIChhbGxvd3MgaW4gRVMyMDE1KykgYXJlIG1haW50YWluZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3QgdG8gY29weVxuICAgICAqIEBwYXJhbSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgZm9yIGNvcHlpbmcgd2l0aFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5pc1N0cmljdF0gc2hvdWxkIHRoZSBjb3B5IGJlIHN0cmljdFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZWFsbV0gdGhlIHJlYWxtICh0aGlzKSBvYmplY3QgdGhlIG9iamVjdCBpcyBjb3BpZWQgZnJvbVxuICAgICAqIEByZXR1cm5zIHRoZSBjb3BpZWQgb2JqZWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmUob2JqZWN0LCBvcHRpb25zID0gbnVsbCkge1xuICAgICAgICAvLyBtYW51YWxseSBjb2FsZXNjZWQgaW5zdGVhZCBvZiBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgIGNvbnN0IGlzU3RyaWN0ID0gISEob3B0aW9ucyAmJiBvcHRpb25zLmlzU3RyaWN0KTtcbiAgICAgICAgY29uc3QgcmVhbG0gPSAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWxtKSB8fCBHTE9CQUxfVEhJUztcbiAgICAgICAgY29uc3QgZ2V0T2JqZWN0Q2xvbmUgPSBpc1N0cmljdFxuICAgICAgICAgICAgPyBnZXRPYmplY3RDbG9uZVN0cmljdFxuICAgICAgICAgICAgOiBnZXRPYmplY3RDbG9uZUxvb3NlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmN0aW9uIGhhbmRsZUNvcHlcbiAgICAgICAgICpcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAqIGNvcHkgdGhlIG9iamVjdCByZWN1cnNpdmVseSBiYXNlZCBvbiBpdHMgdHlwZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3QgdG8gY29weVxuICAgICAgICAgKiBAcmV0dXJucyB0aGUgY29waWVkIG9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgaGFuZGxlQ29weSA9IChvYmplY3QsIGNhY2hlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBjYWNoZS5oYXMob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBET00gb2JqZWN0c1xuICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgQ29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAvLyBwbGFpbiBvYmplY3RzXG4gICAgICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IHJlYWxtLk9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmFkZChvYmplY3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRPYmplY3RDbG9uZShvYmplY3QsIHJlYWxtLCBoYW5kbGVDb3B5LCBjYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2xvbmU7XG4gICAgICAgICAgICAvLyBhcnJheXNcbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5hZGQob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAvLyBpZiBzdHJpY3QsIGluY2x1ZGUgbm9uLXN0YW5kYXJkIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE9iamVjdENsb25lU3RyaWN0KG9iamVjdCwgcmVhbG0sIGhhbmRsZUNvcHksIGNhY2hlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2xvbmUgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZVtpbmRleF0gPSBoYW5kbGVDb3B5KG9iamVjdFtpbmRleF0sIGNhY2hlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiByZWFsbS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihvYmplY3QuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlZ2V4cHNcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiByZWFsbS5SZWdFeHApIHtcbiAgICAgICAgICAgICAgICBjbG9uZSA9IG5ldyBDb25zdHJ1Y3RvcihvYmplY3Quc291cmNlLCBvYmplY3QuZmxhZ3MgfHwgZ2V0UmVnRXhwRmxhZ3Mob2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgY2xvbmUubGFzdEluZGV4ID0gb2JqZWN0Lmxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtYXBzXG4gICAgICAgICAgICBpZiAocmVhbG0uTWFwICYmIG9iamVjdCBpbnN0YW5jZW9mIHJlYWxtLk1hcCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmFkZChvYmplY3QpO1xuICAgICAgICAgICAgICAgIGNsb25lID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuc2V0KGtleSwgaGFuZGxlQ29weSh2YWx1ZSwgY2FjaGUpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzZXRzXG4gICAgICAgICAgICBpZiAocmVhbG0uU2V0ICYmIG9iamVjdCBpbnN0YW5jZW9mIHJlYWxtLlNldCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmFkZChvYmplY3QpO1xuICAgICAgICAgICAgICAgIGNsb25lID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmFkZChoYW5kbGVDb3B5KHZhbHVlLCBjYWNoZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJ1ZmZlcnMgKG5vZGUtb25seSlcbiAgICAgICAgICAgIGlmIChyZWFsbS5CdWZmZXIgJiYgcmVhbG0uQnVmZmVyLmlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjbG9uZSA9IHJlYWxtLkJ1ZmZlci5hbGxvY1Vuc2FmZVxuICAgICAgICAgICAgICAgICAgICA/IHJlYWxtLkJ1ZmZlci5hbGxvY1Vuc2FmZShvYmplY3QubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25zdHJ1Y3RvcihvYmplY3QubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBvYmplY3QuY29weShjbG9uZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXJyYXlidWZmZXJzIC8gZGF0YXZpZXdzXG4gICAgICAgICAgICBpZiAocmVhbG0uQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBkYXRhdmlld3NcbiAgICAgICAgICAgICAgICBpZiAocmVhbG0uQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihvYmplY3QuYnVmZmVyLnNsaWNlKDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXJyYXlidWZmZXJzXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIHJlYWxtLkFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Quc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhlIG9iamVjdCBjYW5ub3QgLyBzaG91bGQgbm90IGJlIGNsb25lZCwgZG9uJ3RcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHByb21pc2UtbGlrZVxuICAgICAgICAgICAgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAndGhlbicpICYmIHR5cGVvZiBvYmplY3QudGhlbiA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICAgICAgICAgICAvLyBlcnJvcnNcbiAgICAgICAgICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fFxuICAgICAgICAgICAgICAgIC8vIHdlYWttYXBzXG4gICAgICAgICAgICAgICAgKHJlYWxtLldlYWtNYXAgJiYgb2JqZWN0IGluc3RhbmNlb2YgcmVhbG0uV2Vha01hcCkgfHxcbiAgICAgICAgICAgICAgICAvLyB3ZWFrc2V0c1xuICAgICAgICAgICAgICAgIChyZWFsbS5XZWFrU2V0ICYmIG9iamVjdCBpbnN0YW5jZW9mIHJlYWxtLldlYWtTZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhY2hlLmFkZChvYmplY3QpO1xuICAgICAgICAgICAgLy8gYXNzdW1lIGFueXRoaW5nIGxlZnQgaXMgYSBjdXN0b20gY29uc3RydWN0b3JcbiAgICAgICAgICAgIHJldHVybiBnZXRPYmplY3RDbG9uZShvYmplY3QsIHJlYWxtLCBoYW5kbGVDb3B5LCBjYWNoZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBoYW5kbGVDb3B5KG9iamVjdCwgY3JlYXRlQ2FjaGUoKSk7XG4gICAgfVxufVxuZXhwb3J0cy5pbnN0YWxsSG9vayA9IGluc3RhbGxIb29rO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9vay5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6793\n")},79310:(__unused_webpack_module,exports)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getCatchedGetters = exports.getCustomStoreDetails = exports.getCustomRouterDetails = exports.isVueInstance = exports.getCustomInstanceDetails = exports.getInstanceMap = exports.backendInjections = void 0;\nexports.backendInjections = {\n instanceMap: new Map(),\n isVueInstance: () => false,\n getCustomInstanceDetails: () => ({})\n};\n\nfunction getInstanceMap() {\n return exports.backendInjections.instanceMap;\n}\n\nexports.getInstanceMap = getInstanceMap;\n\nfunction getCustomInstanceDetails(instance) {\n return exports.backendInjections.getCustomInstanceDetails(instance);\n}\n\nexports.getCustomInstanceDetails = getCustomInstanceDetails;\n\nfunction isVueInstance(value) {\n return exports.backendInjections.isVueInstance(value);\n}\n\nexports.isVueInstance = isVueInstance; // @TODO refactor\n\nfunction getCustomRouterDetails(router) {\n return {\n _custom: {\n type: 'router',\n display: 'VueRouter',\n value: {\n options: router.options,\n currentRoute: router.currentRoute\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomRouterDetails = getCustomRouterDetails; // @TODO refactor\n\nfunction getCustomStoreDetails(store) {\n return {\n _custom: {\n type: 'store',\n display: 'Store',\n value: {\n state: store.state,\n getters: getCatchedGetters(store)\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomStoreDetails = getCustomStoreDetails; // @TODO refactor\n\nfunction getCatchedGetters(store) {\n const getters = {};\n const origGetters = store.getters || {};\n const keys = Object.keys(origGetters);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n Object.defineProperty(getters, key, {\n enumerable: true,\n get: () => {\n try {\n return origGetters[key];\n } catch (e) {\n return e;\n }\n }\n });\n }\n\n return getters;\n}\n\nexports.getCatchedGetters = getCatchedGetters;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkzMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWEsNEJBQW9CO0FBQy9CLGFBQVcsRUFBRSxJQUFJLEdBQUosRUFEa0I7QUFFL0IsZUFBYSxFQUFHLE1BQU0sS0FGUztBQUcvQiwwQkFBd0IsRUFBRyxPQUFPLEVBQVA7QUFISSxDQUFwQjs7QUFNYixTQUFnQixjQUFoQixHQUE4QjtBQUM1QixTQUFPLDBCQUFrQixXQUF6QjtBQUNEOztBQUZEOztBQUlBLFNBQWdCLHdCQUFoQixDQUEwQyxRQUExQyxFQUFrRDtBQUNoRCxTQUFPLDBCQUFrQix3QkFBbEIsQ0FBMkMsUUFBM0MsQ0FBUDtBQUNEOztBQUZEOztBQUlBLFNBQWdCLGFBQWhCLENBQStCLEtBQS9CLEVBQW9DO0FBQ2xDLFNBQU8sMEJBQWtCLGFBQWxCLENBQWdDLEtBQWhDLENBQVA7QUFDRDs7QUFGRCxzQyxDQUlBOztBQUNBLFNBQWdCLHNCQUFoQixDQUF3QyxNQUF4QyxFQUE4QztBQUM1QyxTQUFPO0FBQ0wsV0FBTyxFQUFFO0FBQ1AsVUFBSSxFQUFFLFFBREM7QUFFUCxhQUFPLEVBQUUsV0FGRjtBQUdQLFdBQUssRUFBRTtBQUNMLGVBQU8sRUFBRSxNQUFNLENBQUMsT0FEWDtBQUVMLG9CQUFZLEVBQUUsTUFBTSxDQUFDO0FBRmhCLE9BSEE7QUFPUCxZQUFNLEVBQUU7QUFDTixnQkFBUSxFQUFFO0FBREo7QUFQRDtBQURKLEdBQVA7QUFhRDs7QUFkRCx3RCxDQWdCQTs7QUFDQSxTQUFnQixxQkFBaEIsQ0FBdUMsS0FBdkMsRUFBNEM7QUFDMUMsU0FBTztBQUNMLFdBQU8sRUFBRTtBQUNQLFVBQUksRUFBRSxPQURDO0FBRVAsYUFBTyxFQUFFLE9BRkY7QUFHUCxXQUFLLEVBQUU7QUFDTCxhQUFLLEVBQUUsS0FBSyxDQUFDLEtBRFI7QUFFTCxlQUFPLEVBQUUsaUJBQWlCLENBQUMsS0FBRDtBQUZyQixPQUhBO0FBT1AsWUFBTSxFQUFFO0FBQ04sZ0JBQVEsRUFBRTtBQURKO0FBUEQ7QUFESixHQUFQO0FBYUQ7O0FBZEQsc0QsQ0FnQkE7O0FBQ0EsU0FBZ0IsaUJBQWhCLENBQW1DLEtBQW5DLEVBQXdDO0FBQ3RDLFFBQU0sT0FBTyxHQUFHLEVBQWhCO0FBRUEsUUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU4sSUFBaUIsRUFBckM7QUFDQSxRQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBUCxDQUFZLFdBQVosQ0FBYjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUF6QixFQUFpQyxDQUFDLEVBQWxDLEVBQXNDO0FBQ3BDLFVBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFELENBQWhCO0FBQ0EsVUFBTSxDQUFDLGNBQVAsQ0FBc0IsT0FBdEIsRUFBK0IsR0FBL0IsRUFBb0M7QUFDbEMsZ0JBQVUsRUFBRSxJQURzQjtBQUVsQyxTQUFHLEVBQUUsTUFBSztBQUNSLFlBQUk7QUFDRixpQkFBTyxXQUFXLENBQUMsR0FBRCxDQUFsQjtBQUNELFNBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNWLGlCQUFPLENBQVA7QUFDRDtBQUNGO0FBUmlDLEtBQXBDO0FBVUQ7O0FBRUQsU0FBTyxPQUFQO0FBQ0Q7O0FBcEJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYmFja2VuZC50cz9jNjQ2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDYXRjaGVkR2V0dGVycyA9IGV4cG9ydHMuZ2V0Q3VzdG9tU3RvcmVEZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21Sb3V0ZXJEZXRhaWxzID0gZXhwb3J0cy5pc1Z1ZUluc3RhbmNlID0gZXhwb3J0cy5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMgPSBleHBvcnRzLmdldEluc3RhbmNlTWFwID0gZXhwb3J0cy5iYWNrZW5kSW5qZWN0aW9ucyA9IHZvaWQgMDtcbmV4cG9ydHMuYmFja2VuZEluamVjdGlvbnMgPSB7XG4gICAgaW5zdGFuY2VNYXA6IG5ldyBNYXAoKSxcbiAgICBpc1Z1ZUluc3RhbmNlOiAoKCkgPT4gZmFsc2UpLFxuICAgIGdldEN1c3RvbUluc3RhbmNlRGV0YWlsczogKCgpID0+ICh7fSkpLFxufTtcbmZ1bmN0aW9uIGdldEluc3RhbmNlTWFwKCkge1xuICAgIHJldHVybiBleHBvcnRzLmJhY2tlbmRJbmplY3Rpb25zLmluc3RhbmNlTWFwO1xufVxuZXhwb3J0cy5nZXRJbnN0YW5jZU1hcCA9IGdldEluc3RhbmNlTWFwO1xuZnVuY3Rpb24gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuYmFja2VuZEluamVjdGlvbnMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlKTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuZnVuY3Rpb24gaXNWdWVJbnN0YW5jZSh2YWx1ZSkge1xuICAgIHJldHVybiBleHBvcnRzLmJhY2tlbmRJbmplY3Rpb25zLmlzVnVlSW5zdGFuY2UodmFsdWUpO1xufVxuZXhwb3J0cy5pc1Z1ZUluc3RhbmNlID0gaXNWdWVJbnN0YW5jZTtcbi8vIEBUT0RPIHJlZmFjdG9yXG5mdW5jdGlvbiBnZXRDdXN0b21Sb3V0ZXJEZXRhaWxzKHJvdXRlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdyb3V0ZXInLFxuICAgICAgICAgICAgZGlzcGxheTogJ1Z1ZVJvdXRlcicsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHJvdXRlci5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3V0ZTogcm91dGVyLmN1cnJlbnRSb3V0ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tUm91dGVyRGV0YWlscyA9IGdldEN1c3RvbVJvdXRlckRldGFpbHM7XG4vLyBAVE9ETyByZWZhY3RvclxuZnVuY3Rpb24gZ2V0Q3VzdG9tU3RvcmVEZXRhaWxzKHN0b3JlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ3N0b3JlJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdTdG9yZScsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBzdG9yZS5zdGF0ZSxcbiAgICAgICAgICAgICAgICBnZXR0ZXJzOiBnZXRDYXRjaGVkR2V0dGVycyhzdG9yZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVN0b3JlRGV0YWlscyA9IGdldEN1c3RvbVN0b3JlRGV0YWlscztcbi8vIEBUT0RPIHJlZmFjdG9yXG5mdW5jdGlvbiBnZXRDYXRjaGVkR2V0dGVycyhzdG9yZSkge1xuICAgIGNvbnN0IGdldHRlcnMgPSB7fTtcbiAgICBjb25zdCBvcmlnR2V0dGVycyA9IHN0b3JlLmdldHRlcnMgfHwge307XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9yaWdHZXR0ZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdldHRlcnMsIGtleSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnR2V0dGVyc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldHRlcnM7XG59XG5leHBvcnRzLmdldENhdGNoZWRHZXR0ZXJzID0gZ2V0Q2F0Y2hlZEdldHRlcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrZW5kLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79310\n")},47294:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.Bridge = void 0;\n\nconst events_1 = __webpack_require__(22699);\n\nconst BATCH_DURATION = 100;\n\nclass Bridge extends events_1.EventEmitter {\n constructor(wall) {\n super();\n this.setMaxListeners(Infinity);\n this.wall = wall;\n wall.listen(messages => {\n if (Array.isArray(messages)) {\n messages.forEach(message => this._emit(message));\n } else {\n this._emit(messages);\n }\n });\n this._batchingQueue = [];\n this._sendingQueue = [];\n this._receivingQueue = [];\n this._sending = false;\n this._time = null;\n }\n\n on(event, listener) {\n const wrappedListener = async (...args) => {\n try {\n await listener(...args);\n } catch (e) {\n console.error(`[Bridge] Error in listener for event ${event.toString()} with args:`, args);\n console.error(e);\n }\n };\n\n return super.on(event, wrappedListener);\n }\n\n send(event, payload) {\n if (Array.isArray(payload)) {\n const lastIndex = payload.length - 1;\n payload.forEach((chunk, index) => {\n this._send({\n event,\n _chunk: chunk,\n last: index === lastIndex\n });\n });\n\n this._flush();\n } else if (this._time === null) {\n this._send([{\n event,\n payload\n }]);\n\n this._time = Date.now();\n } else {\n this._batchingQueue.push({\n event,\n payload\n });\n\n const now = Date.now();\n\n if (now - this._time > BATCH_DURATION) {\n this._flush();\n } else {\n this._timer = setTimeout(() => this._flush(), BATCH_DURATION);\n }\n }\n }\n /**\n * Log a message to the devtools background page.\n */\n\n\n log(message) {\n this.send('log', message);\n }\n\n _flush() {\n if (this._batchingQueue.length) this._send(this._batchingQueue);\n clearTimeout(this._timer);\n this._batchingQueue = [];\n this._time = null;\n } // @TODO types\n\n\n _emit(message) {\n if (typeof message === 'string') {\n this.emit(message);\n } else if (message._chunk) {\n this._receivingQueue.push(message._chunk);\n\n if (message.last) {\n this.emit(message.event, this._receivingQueue);\n this._receivingQueue = [];\n }\n } else if (message.event) {\n this.emit(message.event, message.payload);\n }\n } // @TODO types\n\n\n _send(messages) {\n this._sendingQueue.push(messages);\n\n this._nextSend();\n }\n\n _nextSend() {\n if (!this._sendingQueue.length || this._sending) return;\n this._sending = true;\n\n const messages = this._sendingQueue.shift();\n\n try {\n this.wall.send(messages);\n } catch (err) {\n if (err.message === 'Message length exceeded maximum allowed length.') {\n this._sendingQueue.splice(0, 0, messages.map(message => [message]));\n }\n }\n\n this._sending = false;\n requestAnimationFrame(() => this._nextSend());\n }\n\n}\n\nexports.Bridge = Bridge;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWEsT0FBTyxJQUFJLENBQUMsT0FBRCxDQUF4QixDQUFoQztBQUNEO0FBQ0Y7O0FBQ0QsU0FBSyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EseUJBQXFCLENBQUMsTUFBTSxLQUFLLFNBQUwsRUFBUCxDQUFyQjtBQUNEOztBQXJIcUM7O0FBQXhDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYnJpZGdlLnRzP2VkOWQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJyaWRnZSA9IHZvaWQgMDtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IEJBVENIX0RVUkFUSU9OID0gMTAwO1xuY2xhc3MgQnJpZGdlIGV4dGVuZHMgZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih3YWxsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2V0TWF4TGlzdGVuZXJzKEluZmluaXR5KTtcbiAgICAgICAgdGhpcy53YWxsID0gd2FsbDtcbiAgICAgICAgd2FsbC5saXN0ZW4obWVzc2FnZXMgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZXMpKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHRoaXMuX2VtaXQobWVzc2FnZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdChtZXNzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9iYXRjaGluZ1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX3NlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLl9yZWNlaXZpbmdRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLl9zZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RpbWUgPSBudWxsO1xuICAgIH1cbiAgICBvbihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtCcmlkZ2VdIEVycm9yIGluIGxpc3RlbmVyIGZvciBldmVudCAke2V2ZW50LnRvU3RyaW5nKCl9IHdpdGggYXJnczpgLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3VwZXIub24oZXZlbnQsIHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgfVxuICAgIHNlbmQoZXZlbnQsIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHBheWxvYWQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHBheWxvYWQuZm9yRWFjaCgoY2h1bmssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBfY2h1bms6IGNodW5rLFxuICAgICAgICAgICAgICAgICAgICBsYXN0OiBpbmRleCA9PT0gbGFzdEluZGV4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3RpbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbmQoW3sgZXZlbnQsIHBheWxvYWQgfV0pO1xuICAgICAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9iYXRjaGluZ1F1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBpZiAobm93IC0gdGhpcy5fdGltZSA+IEJBVENIX0RVUkFUSU9OKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmx1c2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9mbHVzaCgpLCBCQVRDSF9EVVJBVElPTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGEgbWVzc2FnZSB0byB0aGUgZGV2dG9vbHMgYmFja2dyb3VuZCBwYWdlLlxuICAgICAqL1xuICAgIGxvZyhtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc2VuZCgnbG9nJywgbWVzc2FnZSk7XG4gICAgfVxuICAgIF9mbHVzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JhdGNoaW5nUXVldWUubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5fc2VuZCh0aGlzLl9iYXRjaGluZ1F1ZXVlKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgICAgdGhpcy5fYmF0Y2hpbmdRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLl90aW1lID0gbnVsbDtcbiAgICB9XG4gICAgLy8gQFRPRE8gdHlwZXNcbiAgICBfZW1pdChtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLl9jaHVuaykge1xuICAgICAgICAgICAgdGhpcy5fcmVjZWl2aW5nUXVldWUucHVzaChtZXNzYWdlLl9jaHVuayk7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS5sYXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KG1lc3NhZ2UuZXZlbnQsIHRoaXMuX3JlY2VpdmluZ1F1ZXVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWNlaXZpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UuZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChtZXNzYWdlLmV2ZW50LCBtZXNzYWdlLnBheWxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEBUT0RPIHR5cGVzXG4gICAgX3NlbmQobWVzc2FnZXMpIHtcbiAgICAgICAgdGhpcy5fc2VuZGluZ1F1ZXVlLnB1c2gobWVzc2FnZXMpO1xuICAgICAgICB0aGlzLl9uZXh0U2VuZCgpO1xuICAgIH1cbiAgICBfbmV4dFNlbmQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2VuZGluZ1F1ZXVlLmxlbmd0aCB8fCB0aGlzLl9zZW5kaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLl9zZW5kaW5nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud2FsbC5zZW5kKG1lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdNZXNzYWdlIGxlbmd0aCBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoLicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZW5kaW5nUXVldWUuc3BsaWNlKDAsIDAsIG1lc3NhZ2VzLm1hcChtZXNzYWdlID0+IFttZXNzYWdlXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuX25leHRTZW5kKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQnJpZGdlID0gQnJpZGdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJpZGdlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47294\n")},79410:(__unused_webpack_module,exports)=>{eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.HookEvents = exports.BridgeSubscriptions = exports.BridgeEvents = exports.BuiltinTabs = void 0;\nvar BuiltinTabs;\n\n(function (BuiltinTabs) {\n BuiltinTabs["COMPONENTS"] = "components";\n BuiltinTabs["TIMELINE"] = "timeline";\n BuiltinTabs["PLUGINS"] = "plugins";\n BuiltinTabs["SETTINGS"] = "settings";\n})(BuiltinTabs = exports.BuiltinTabs || (exports.BuiltinTabs = {}));\n\nvar BridgeEvents;\n\n(function (BridgeEvents) {\n // Misc\n BridgeEvents["TO_BACK_SUBSCRIBE"] = "b:subscribe";\n BridgeEvents["TO_BACK_UNSUBSCRIBE"] = "b:unsubscribe";\n /** Backend is ready */\n\n BridgeEvents["TO_FRONT_READY"] = "f:ready";\n /** Displays the "detected Vue" console log */\n\n BridgeEvents["TO_BACK_LOG_DETECTED_VUE"] = "b:log-detected-vue";\n /** Force refresh */\n\n BridgeEvents["TO_BACK_REFRESH"] = "b:refresh";\n /** Tab was switched */\n\n BridgeEvents["TO_BACK_TAB_SWITCH"] = "b:tab:switch";\n BridgeEvents["TO_BACK_LOG"] = "b:log"; // Apps\n\n /** App was registered */\n\n BridgeEvents["TO_FRONT_APP_ADD"] = "f:app:add";\n /** Get app list */\n\n BridgeEvents["TO_BACK_APP_LIST"] = "b:app:list";\n BridgeEvents["TO_FRONT_APP_LIST"] = "f:app:list";\n BridgeEvents["TO_FRONT_APP_REMOVE"] = "f:app:remove";\n BridgeEvents["TO_BACK_APP_SELECT"] = "b:app:select";\n BridgeEvents["TO_FRONT_APP_SELECTED"] = "f:app:selected";\n BridgeEvents["TO_BACK_SCAN_LEGACY_APPS"] = "b:app:scan-legacy"; // Components\n\n BridgeEvents["TO_BACK_COMPONENT_TREE"] = "b:component:tree";\n BridgeEvents["TO_FRONT_COMPONENT_TREE"] = "f:component:tree";\n BridgeEvents["TO_BACK_COMPONENT_SELECTED_DATA"] = "b:component:selected-data";\n BridgeEvents["TO_FRONT_COMPONENT_SELECTED_DATA"] = "f:component:selected-data";\n BridgeEvents["TO_BACK_COMPONENT_EXPAND"] = "b:component:expand";\n BridgeEvents["TO_FRONT_COMPONENT_EXPAND"] = "f:component:expand";\n BridgeEvents["TO_BACK_COMPONENT_SCROLL_TO"] = "b:component:scroll-to";\n BridgeEvents["TO_BACK_COMPONENT_FILTER"] = "b:component:filter";\n BridgeEvents["TO_BACK_COMPONENT_MOUSE_OVER"] = "b:component:mouse-over";\n BridgeEvents["TO_BACK_COMPONENT_MOUSE_OUT"] = "b:component:mouse-out";\n BridgeEvents["TO_BACK_COMPONENT_CONTEXT_MENU_TARGET"] = "b:component:context-menu-target";\n BridgeEvents["TO_BACK_COMPONENT_EDIT_STATE"] = "b:component:edit-state";\n BridgeEvents["TO_BACK_COMPONENT_PICK"] = "b:component:pick";\n BridgeEvents["TO_FRONT_COMPONENT_PICK"] = "f:component:pick";\n BridgeEvents["TO_BACK_COMPONENT_PICK_CANCELED"] = "b:component:pick-canceled";\n BridgeEvents["TO_FRONT_COMPONENT_PICK_CANCELED"] = "f:component:pick-canceled";\n BridgeEvents["TO_BACK_COMPONENT_INSPECT_DOM"] = "b:component:inspect-dom";\n BridgeEvents["TO_FRONT_COMPONENT_INSPECT_DOM"] = "f:component:inspect-dom";\n BridgeEvents["TO_BACK_COMPONENT_RENDER_CODE"] = "b:component:render-code";\n BridgeEvents["TO_FRONT_COMPONENT_RENDER_CODE"] = "f:component:render-code"; // Timeline\n\n BridgeEvents["TO_FRONT_TIMELINE_EVENT"] = "f:timeline:event";\n BridgeEvents["TO_BACK_TIMELINE_LAYER_LIST"] = "b:timeline:layer-list";\n BridgeEvents["TO_FRONT_TIMELINE_LAYER_LIST"] = "f:timeline:layer-list";\n BridgeEvents["TO_FRONT_TIMELINE_LAYER_ADD"] = "f:timeline:layer-add";\n BridgeEvents["TO_BACK_TIMELINE_SHOW_SCREENSHOT"] = "b:timeline:show-screenshot";\n BridgeEvents["TO_BACK_TIMELINE_CLEAR"] = "b:timeline:clear";\n BridgeEvents["TO_BACK_TIMELINE_EVENT_DATA"] = "b:timeline:event-data";\n BridgeEvents["TO_FRONT_TIMELINE_EVENT_DATA"] = "f:timeline:event-data";\n BridgeEvents["TO_BACK_TIMELINE_LAYER_LOAD_EVENTS"] = "b:timeline:layer-load-events";\n BridgeEvents["TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS"] = "f:timeline:layer-load-events";\n BridgeEvents["TO_BACK_TIMELINE_LOAD_MARKERS"] = "b:timeline:load-markers";\n BridgeEvents["TO_FRONT_TIMELINE_LOAD_MARKERS"] = "f:timeline:load-markers";\n BridgeEvents["TO_FRONT_TIMELINE_MARKER"] = "f:timeline:marker"; // Plugins\n\n BridgeEvents["TO_BACK_DEVTOOLS_PLUGIN_LIST"] = "b:devtools-plugin:list";\n BridgeEvents["TO_FRONT_DEVTOOLS_PLUGIN_LIST"] = "f:devtools-plugin:list";\n BridgeEvents["TO_FRONT_DEVTOOLS_PLUGIN_ADD"] = "f:devtools-plugin:add";\n BridgeEvents["TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED"] = "b:devtools-plugin:setting-updated"; // Custom inspectors\n\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_LIST"] = "b:custom-inspector:list";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_LIST"] = "f:custom-inspector:list";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_ADD"] = "f:custom-inspector:add";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_TREE"] = "b:custom-inspector:tree";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_TREE"] = "f:custom-inspector:tree";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_STATE"] = "b:custom-inspector:state";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_STATE"] = "f:custom-inspector:state";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE"] = "b:custom-inspector:edit-state";\n BridgeEvents["TO_BACK_CUSTOM_INSPECTOR_ACTION"] = "b:custom-inspector:action";\n BridgeEvents["TO_FRONT_CUSTOM_INSPECTOR_SELECT_NODE"] = "f:custom-inspector:select-node"; // Custom state\n\n BridgeEvents["TO_BACK_CUSTOM_STATE_ACTION"] = "b:custom-state:action";\n})(BridgeEvents = exports.BridgeEvents || (exports.BridgeEvents = {}));\n\nvar BridgeSubscriptions;\n\n(function (BridgeSubscriptions) {\n BridgeSubscriptions["SELECTED_COMPONENT_DATA"] = "component:selected-data";\n BridgeSubscriptions["COMPONENT_TREE"] = "component:tree";\n})(BridgeSubscriptions = exports.BridgeSubscriptions || (exports.BridgeSubscriptions = {}));\n\nvar HookEvents;\n\n(function (HookEvents) {\n HookEvents["INIT"] = "init";\n HookEvents["APP_INIT"] = "app:init";\n HookEvents["APP_ADD"] = "app:add";\n HookEvents["APP_UNMOUNT"] = "app:unmount";\n HookEvents["COMPONENT_UPDATED"] = "component:updated";\n HookEvents["COMPONENT_ADDED"] = "component:added";\n HookEvents["COMPONENT_REMOVED"] = "component:removed";\n HookEvents["COMPONENT_EMIT"] = "component:emit";\n HookEvents["COMPONENT_HIGHLIGHT"] = "component:highlight";\n HookEvents["COMPONENT_UNHIGHLIGHT"] = "component:unhighlight";\n HookEvents["SETUP_DEVTOOLS_PLUGIN"] = "devtools-plugin:setup";\n HookEvents["TIMELINE_LAYER_ADDED"] = "timeline:layer-added";\n HookEvents["TIMELINE_EVENT_ADDED"] = "timeline:event-added";\n HookEvents["CUSTOM_INSPECTOR_ADD"] = "custom-inspector:add";\n HookEvents["CUSTOM_INSPECTOR_SEND_TREE"] = "custom-inspector:send-tree";\n HookEvents["CUSTOM_INSPECTOR_SEND_STATE"] = "custom-inspector:send-state";\n HookEvents["CUSTOM_INSPECTOR_SELECT_NODE"] = "custom-inspector:select-node";\n HookEvents["PERFORMANCE_START"] = "perf:start";\n HookEvents["PERFORMANCE_END"] = "perf:end";\n HookEvents["PLUGIN_SETTINGS_SET"] = "plugin:settings:set";\n /**\n * @deprecated\n */\n\n HookEvents["FLUSH"] = "flush";\n})(HookEvents = exports.HookEvents || (exports.HookEvents = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk0MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBWSxXQUFaOztBQUFBLFdBQVksV0FBWixFQUF1QjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxXQUFXLEdBQVgsOENBQVcsRUFBWCxDQUFaOztBQU9BLElBQVksWUFBWjs7QUFBQSxXQUFZLFlBQVosRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQSx3Q0Fac0IsQ0FjdEI7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBdkJzQixDQXlCdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUE3Q3NCLENBK0N0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUE1RHNCLENBOER0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnR0FsRXNCLENBb0V0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkE5RXNCLENBZ0Z0Qjs7QUFDQTtBQUNELENBbEZELEVBQVksWUFBWSxHQUFaLGdEQUFZLEVBQVosQ0FBWjs7QUFvRkEsSUFBWSxtQkFBWjs7QUFBQSxXQUFZLG1CQUFaLEVBQStCO0FBQzdCO0FBQ0E7QUFDRCxDQUhELEVBQVksbUJBQW1CLEdBQW5CLDhEQUFtQixFQUFuQixDQUFaOztBQUtBLElBQVksVUFBWjs7QUFBQSxXQUFZLFVBQVosRUFBc0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVHOztBQUNIO0FBQ0QsQ0F6QkQsRUFBWSxVQUFVLEdBQVYsNENBQVUsRUFBVixDQUFaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvY29uc3RzLnRzP2Q5MTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvb2tFdmVudHMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyA9IGV4cG9ydHMuQnVpbHRpblRhYnMgPSB2b2lkIDA7XG52YXIgQnVpbHRpblRhYnM7XG4oZnVuY3Rpb24gKEJ1aWx0aW5UYWJzKSB7XG4gICAgQnVpbHRpblRhYnNbXCJDT01QT05FTlRTXCJdID0gXCJjb21wb25lbnRzXCI7XG4gICAgQnVpbHRpblRhYnNbXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbiAgICBCdWlsdGluVGFic1tcIlBMVUdJTlNcIl0gPSBcInBsdWdpbnNcIjtcbiAgICBCdWlsdGluVGFic1tcIlNFVFRJTkdTXCJdID0gXCJzZXR0aW5nc1wiO1xufSkoQnVpbHRpblRhYnMgPSBleHBvcnRzLkJ1aWx0aW5UYWJzIHx8IChleHBvcnRzLkJ1aWx0aW5UYWJzID0ge30pKTtcbnZhciBCcmlkZ2VFdmVudHM7XG4oZnVuY3Rpb24gKEJyaWRnZUV2ZW50cykge1xuICAgIC8vIE1pc2NcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NVQlNDUklCRVwiXSA9IFwiYjpzdWJzY3JpYmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1VOU1VCU0NSSUJFXCJdID0gXCJiOnVuc3Vic2NyaWJlXCI7XG4gICAgLyoqIEJhY2tlbmQgaXMgcmVhZHkgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9SRUFEWVwiXSA9IFwiZjpyZWFkeVwiO1xuICAgIC8qKiBEaXNwbGF5cyB0aGUgXCJkZXRlY3RlZCBWdWVcIiBjb25zb2xlIGxvZyAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfTE9HX0RFVEVDVEVEX1ZVRVwiXSA9IFwiYjpsb2ctZGV0ZWN0ZWQtdnVlXCI7XG4gICAgLyoqIEZvcmNlIHJlZnJlc2ggKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1JFRlJFU0hcIl0gPSBcImI6cmVmcmVzaFwiO1xuICAgIC8qKiBUYWIgd2FzIHN3aXRjaGVkICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19UQUJfU1dJVENIXCJdID0gXCJiOnRhYjpzd2l0Y2hcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0xPR1wiXSA9IFwiYjpsb2dcIjtcbiAgICAvLyBBcHBzXG4gICAgLyoqIEFwcCB3YXMgcmVnaXN0ZXJlZCAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9BRERcIl0gPSBcImY6YXBwOmFkZFwiO1xuICAgIC8qKiBHZXQgYXBwIGxpc3QgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9MSVNUXCJdID0gXCJiOmFwcDpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQVBQX0xJU1RcIl0gPSBcImY6YXBwOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfUkVNT1ZFXCJdID0gXCJmOmFwcDpyZW1vdmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9TRUxFQ1RcIl0gPSBcImI6YXBwOnNlbGVjdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9TRUxFQ1RFRFwiXSA9IFwiZjphcHA6c2VsZWN0ZWRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NDQU5fTEVHQUNZX0FQUFNcIl0gPSBcImI6YXBwOnNjYW4tbGVnYWN5XCI7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUVcIl0gPSBcImI6Y29tcG9uZW50OnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVFJFRVwiXSA9IFwiZjpjb21wb25lbnQ6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEFcIl0gPSBcImI6Y29tcG9uZW50OnNlbGVjdGVkLWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQVwiXSA9IFwiZjpjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiYjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiZjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPXCJdID0gXCJiOmNvbXBvbmVudDpzY3JvbGwtdG9cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9GSUxURVJcIl0gPSBcImI6Y29tcG9uZW50OmZpbHRlclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVJcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW92ZXJcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVRcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW91dFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0NPTlRFWFRfTUVOVV9UQVJHRVRcIl0gPSBcImI6Y29tcG9uZW50OmNvbnRleHQtbWVudS10YXJnZXRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFXCJdID0gXCJiOmNvbXBvbmVudDplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS1wiXSA9IFwiYjpjb21wb25lbnQ6cGlja1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRFwiXSA9IFwiYjpjb21wb25lbnQ6cGljay1jYW5jZWxlZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVEXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrLWNhbmNlbGVkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET01cIl0gPSBcImI6Y29tcG9uZW50Omluc3BlY3QtZG9tXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NXCJdID0gXCJmOmNvbXBvbmVudDppbnNwZWN0LWRvbVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFXCJdID0gXCJiOmNvbXBvbmVudDpyZW5kZXItY29kZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERVwiXSA9IFwiZjpjb21wb25lbnQ6cmVuZGVyLWNvZGVcIjtcbiAgICAvLyBUaW1lbGluZVxuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0VWRU5UXCJdID0gXCJmOnRpbWVsaW5lOmV2ZW50XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJiOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9BRERcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItYWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9TSE9XX1NDUkVFTlNIT1RcIl0gPSBcImI6dGltZWxpbmU6c2hvdy1zY3JlZW5zaG90XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9DTEVBUlwiXSA9IFwiYjp0aW1lbGluZTpjbGVhclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiYjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiZjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MT0FEX0VWRU5UU1wiXSA9IFwiYjp0aW1lbGluZTpsYXllci1sb2FkLWV2ZW50c1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxvYWQtZXZlbnRzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MT0FEX01BUktFUlNcIl0gPSBcImI6dGltZWxpbmU6bG9hZC1tYXJrZXJzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTE9BRF9NQVJLRVJTXCJdID0gXCJmOnRpbWVsaW5lOmxvYWQtbWFya2Vyc1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX01BUktFUlwiXSA9IFwiZjp0aW1lbGluZTptYXJrZXJcIjtcbiAgICAvLyBQbHVnaW5zXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fTElTVFwiXSA9IFwiYjpkZXZ0b29scy1wbHVnaW46bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0RFVlRPT0xTX1BMVUdJTl9MSVNUXCJdID0gXCJmOmRldnRvb2xzLXBsdWdpbjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfREVWVE9PTFNfUExVR0lOX0FERFwiXSA9IFwiZjpkZXZ0b29scy1wbHVnaW46YWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fU0VUVElOR19VUERBVEVEXCJdID0gXCJiOmRldnRvb2xzLXBsdWdpbjpzZXR0aW5nLXVwZGF0ZWRcIjtcbiAgICAvLyBDdXN0b20gaW5zcGVjdG9yc1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNUXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfTElTVFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX0FERFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmFkZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfVFJFRVwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImY6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9FRElUX1NUQVRFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6ZWRpdC1zdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjphY3Rpb25cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6c2VsZWN0LW5vZGVcIjtcbiAgICAvLyBDdXN0b20gc3RhdGVcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9TVEFURV9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLXN0YXRlOmFjdGlvblwiO1xufSkoQnJpZGdlRXZlbnRzID0gZXhwb3J0cy5CcmlkZ2VFdmVudHMgfHwgKGV4cG9ydHMuQnJpZGdlRXZlbnRzID0ge30pKTtcbnZhciBCcmlkZ2VTdWJzY3JpcHRpb25zO1xuKGZ1bmN0aW9uIChCcmlkZ2VTdWJzY3JpcHRpb25zKSB7XG4gICAgQnJpZGdlU3Vic2NyaXB0aW9uc1tcIlNFTEVDVEVEX0NPTVBPTkVOVF9EQVRBXCJdID0gXCJjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZVN1YnNjcmlwdGlvbnNbXCJDT01QT05FTlRfVFJFRVwiXSA9IFwiY29tcG9uZW50OnRyZWVcIjtcbn0pKEJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgfHwgKGV4cG9ydHMuQnJpZGdlU3Vic2NyaXB0aW9ucyA9IHt9KSk7XG52YXIgSG9va0V2ZW50cztcbihmdW5jdGlvbiAoSG9va0V2ZW50cykge1xuICAgIEhvb2tFdmVudHNbXCJJTklUXCJdID0gXCJpbml0XCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9JTklUXCJdID0gXCJhcHA6aW5pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJBUFBfQUREXCJdID0gXCJhcHA6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9VTk1PVU5UXCJdID0gXCJhcHA6dW5tb3VudFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfVVBEQVRFRFwiXSA9IFwiY29tcG9uZW50OnVwZGF0ZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX0FEREVEXCJdID0gXCJjb21wb25lbnQ6YWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX1JFTU9WRURcIl0gPSBcImNvbXBvbmVudDpyZW1vdmVkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9FTUlUXCJdID0gXCJjb21wb25lbnQ6ZW1pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfSElHSExJR0hUXCJdID0gXCJjb21wb25lbnQ6aGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9VTkhJR0hMSUdIVFwiXSA9IFwiY29tcG9uZW50OnVuaGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIlNFVFVQX0RFVlRPT0xTX1BMVUdJTlwiXSA9IFwiZGV2dG9vbHMtcGx1Z2luOnNldHVwXCI7XG4gICAgSG9va0V2ZW50c1tcIlRJTUVMSU5FX0xBWUVSX0FEREVEXCJdID0gXCJ0aW1lbGluZTpsYXllci1hZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJUSU1FTElORV9FVkVOVF9BRERFRFwiXSA9IFwidGltZWxpbmU6ZXZlbnQtYWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ1VTVE9NX0lOU1BFQ1RPUl9BRERcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbmQtdHJlZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTkRfU1RBVEVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VuZC1zdGF0ZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbGVjdC1ub2RlXCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX1NUQVJUXCJdID0gXCJwZXJmOnN0YXJ0XCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX0VORFwiXSA9IFwicGVyZjplbmRcIjtcbiAgICBIb29rRXZlbnRzW1wiUExVR0lOX1NFVFRJTkdTX1NFVFwiXSA9IFwicGx1Z2luOnNldHRpbmdzOnNldFwiO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgSG9va0V2ZW50c1tcIkZMVVNIXCJdID0gXCJmbHVzaFwiO1xufSkoSG9va0V2ZW50cyA9IGV4cG9ydHMuSG9va0V2ZW50cyB8fCAoZXhwb3J0cy5Ib29rRXZlbnRzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79410\n')},38158:(__unused_webpack_module,exports)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.StateEditor = void 0;\n\nclass StateEditor {\n set(object, path, value, cb = null) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n while (sections.length > 1) {\n object = object[sections.shift()];\n\n if (this.isRef(object)) {\n object = this.getRefValue(object);\n }\n }\n\n const field = sections[0];\n\n if (cb) {\n cb(object, field, value);\n } else if (this.isRef(object[field])) {\n this.setRefValue(object[field], value);\n } else {\n object[field] = value;\n }\n }\n\n get(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (this.isRef(object)) {\n object = this.getRefValue(object);\n }\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n }\n\n has(object, path, parent = false) {\n if (typeof object === 'undefined') {\n return false;\n }\n\n const sections = Array.isArray(path) ? path.slice() : path.split('.');\n const size = !parent ? 1 : 2;\n\n while (object && sections.length > size) {\n object = object[sections.shift()];\n\n if (this.isRef(object)) {\n object = this.getRefValue(object);\n }\n }\n\n return object != null && Object.prototype.hasOwnProperty.call(object, sections[0]);\n }\n\n createDefaultSetCallback(state) {\n return (obj, field, value) => {\n if (state.remove || state.newKey) {\n if (Array.isArray(obj)) {\n obj.splice(field, 1);\n } else {\n delete obj[field];\n }\n }\n\n if (!state.remove) {\n const target = obj[state.newKey || field];\n\n if (this.isRef(target)) {\n this.setRefValue(target, value);\n } else {\n obj[state.newKey || field] = value;\n }\n }\n };\n }\n\n isRef(ref) {\n // To implement in subclass\n return false;\n }\n\n setRefValue(ref, value) {// To implement in subclass\n }\n\n getRefValue(ref) {\n // To implement in subclass\n return ref;\n }\n\n}\n\nexports.StateEditor = StateEditor;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQU0sS0FBTixFQUFhLEtBQWIsS0FBc0I7QUFDM0IsVUFBSSxLQUFLLENBQUMsTUFBTixJQUFnQixLQUFLLENBQUMsTUFBMUIsRUFBa0M7QUFDaEMsWUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QixhQUFHLENBQUMsTUFBSixDQUFXLEtBQVgsRUFBa0IsQ0FBbEI7QUFDRCxTQUZELE1BRU87QUFDTCxpQkFBTyxHQUFHLENBQUMsS0FBRCxDQUFWO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJLENBQUMsS0FBSyxDQUFDLE1BQVgsRUFBbUI7QUFDakIsY0FBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFOLElBQWdCLEtBQWpCLENBQWxCOztBQUNBLFlBQUksS0FBSyxLQUFMLENBQVcsTUFBWCxDQUFKLEVBQXdCO0FBQ3RCLGVBQUssV0FBTCxDQUFpQixNQUFqQixFQUF5QixLQUF6QjtBQUNELFNBRkQsTUFFTztBQUNMLGFBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTixJQUFnQixLQUFqQixDQUFILEdBQTZCLEtBQTdCO0FBQ0Q7QUFDRjtBQUNGLEtBaEJEO0FBaUJEOztBQUVELE9BQUssQ0FBRSxHQUFGLEVBQVU7QUFDYjtBQUNBLFdBQU8sS0FBUDtBQUNEOztBQUVELGFBQVcsQ0FBRSxHQUFGLEVBQVcsS0FBWCxFQUFxQixDQUM5QjtBQUNEOztBQUVELGFBQVcsQ0FBRSxHQUFGLEVBQVU7QUFDbkI7QUFDQSxXQUFPLEdBQVA7QUFDRDs7QUFqRnFCOztBQUF4QiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2VkaXQudHM/ZmVlNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RhdGVFZGl0b3IgPSB2b2lkIDA7XG5jbGFzcyBTdGF0ZUVkaXRvciB7XG4gICAgc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGNiID0gbnVsbCkge1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3NlY3Rpb25zLnNoaWZ0KCldO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWYob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIG9iamVjdCA9IHRoaXMuZ2V0UmVmVmFsdWUob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IHNlY3Rpb25zWzBdO1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKG9iamVjdCwgZmllbGQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzUmVmKG9iamVjdFtmaWVsZF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJlZlZhbHVlKG9iamVjdFtmaWVsZF0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9iamVjdFtmaWVsZF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdFtzZWN0aW9uc1tpXV07XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZihvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0ID0gdGhpcy5nZXRSZWZWYWx1ZShvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICAgIGhhcyhvYmplY3QsIHBhdGgsIHBhcmVudCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9ICFwYXJlbnQgPyAxIDogMjtcbiAgICAgICAgd2hpbGUgKG9iamVjdCAmJiBzZWN0aW9ucy5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3Rbc2VjdGlvbnMuc2hpZnQoKV07XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZihvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0ID0gdGhpcy5nZXRSZWZWYWx1ZShvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBzZWN0aW9uc1swXSk7XG4gICAgfVxuICAgIGNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayhzdGF0ZSkge1xuICAgICAgICByZXR1cm4gKG9iaiwgZmllbGQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVtb3ZlIHx8IHN0YXRlLm5ld0tleSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnNwbGljZShmaWVsZCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0YXRlLnJlbW92ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG9ialtzdGF0ZS5uZXdLZXkgfHwgZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmVmKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZWZWYWx1ZSh0YXJnZXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtzdGF0ZS5uZXdLZXkgfHwgZmllbGRdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpc1JlZihyZWYpIHtcbiAgICAgICAgLy8gVG8gaW1wbGVtZW50IGluIHN1YmNsYXNzXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0UmVmVmFsdWUocmVmLCB2YWx1ZSkge1xuICAgICAgICAvLyBUbyBpbXBsZW1lbnQgaW4gc3ViY2xhc3NcbiAgICB9XG4gICAgZ2V0UmVmVmFsdWUocmVmKSB7XG4gICAgICAgIC8vIFRvIGltcGxlbWVudCBpbiBzdWJjbGFzc1xuICAgICAgICByZXR1cm4gcmVmO1xuICAgIH1cbn1cbmV4cG9ydHMuU3RhdGVFZGl0b3IgPSBTdGF0ZUVkaXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVkaXQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///38158\n")},66210:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.initEnv = exports.keys = exports.isLinux = exports.isMac = exports.isWindows = exports.isFirefox = exports.isChrome = exports.target = exports.isBrowser = void 0;\nexports.isBrowser = typeof navigator !== 'undefined';\nexports.target = exports.isBrowser ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : {};\nexports.isChrome = typeof exports.target.chrome !== 'undefined' && !!exports.target.chrome.devtools;\nexports.isFirefox = exports.isBrowser && navigator.userAgent.indexOf('Firefox') > -1;\nexports.isWindows = exports.isBrowser && navigator.platform.indexOf('Win') === 0;\nexports.isMac = exports.isBrowser && navigator.platform === 'MacIntel';\nexports.isLinux = exports.isBrowser && navigator.platform.indexOf('Linux') === 0;\nexports.keys = {\n ctrl: exports.isMac ? '&#8984;' : 'Ctrl',\n shift: 'Shift',\n alt: exports.isMac ? '&#8997;' : 'Alt',\n del: 'Del',\n enter: 'Enter',\n esc: 'Esc'\n};\n\nfunction initEnv(Vue) {\n if (Vue.prototype.hasOwnProperty('$isChrome')) return;\n Object.defineProperties(Vue.prototype, {\n $isChrome: {\n get: () => exports.isChrome\n },\n $isFirefox: {\n get: () => exports.isFirefox\n },\n $isWindows: {\n get: () => exports.isWindows\n },\n $isMac: {\n get: () => exports.isMac\n },\n $isLinux: {\n get: () => exports.isLinux\n },\n $keys: {\n get: () => exports.keys\n }\n });\n if (exports.isWindows) document.body.classList.add('platform-windows');\n if (exports.isMac) document.body.classList.add('platform-mac');\n if (exports.isLinux) document.body.classList.add('platform-linux');\n}\n\nexports.initEnv = initEnv;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjYyMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWEsb0JBQVksT0FBTyxTQUFQLEtBQXFCLFdBQWpDO0FBQ0EsaUJBQWMsb0JBQ3ZCLE1BRHVCLEdBRXZCLE9BQU8scUJBQVAsS0FBa0IsV0FBbEIsR0FDRSxxQkFERixHQUVFLEVBSk87QUFLQSxtQkFBVyxPQUFPLGVBQU8sTUFBZCxLQUF5QixXQUF6QixJQUF3QyxDQUFDLENBQUMsZUFBTyxNQUFQLENBQWMsUUFBbkU7QUFDQSxvQkFBWSxxQkFBYSxTQUFTLENBQUMsU0FBVixDQUFvQixPQUFwQixDQUE0QixTQUE1QixJQUF5QyxDQUFDLENBQW5FO0FBQ0Esb0JBQVkscUJBQWEsU0FBUyxDQUFDLFFBQVYsQ0FBbUIsT0FBbkIsQ0FBMkIsS0FBM0IsTUFBc0MsQ0FBL0Q7QUFDQSxnQkFBUSxxQkFBYSxTQUFTLENBQUMsUUFBVixLQUF1QixVQUE1QztBQUNBLGtCQUFVLHFCQUFhLFNBQVMsQ0FBQyxRQUFWLENBQW1CLE9BQW5CLENBQTJCLE9BQTNCLE1BQXdDLENBQS9EO0FBQ0EsZUFBTztBQUNsQixNQUFJLEVBQUUsZ0JBQVEsU0FBUixHQUFvQixNQURSO0FBRWxCLE9BQUssRUFBRSxPQUZXO0FBR2xCLEtBQUcsRUFBRSxnQkFBUSxTQUFSLEdBQW9CLEtBSFA7QUFJbEIsS0FBRyxFQUFFLEtBSmE7QUFLbEIsT0FBSyxFQUFFLE9BTFc7QUFNbEIsS0FBRyxFQUFFO0FBTmEsQ0FBUDs7QUFTYixTQUFnQixPQUFoQixDQUF5QixHQUF6QixFQUE0QjtBQUMxQixNQUFJLEdBQUcsQ0FBQyxTQUFKLENBQWMsY0FBZCxDQUE2QixXQUE3QixDQUFKLEVBQStDO0FBRS9DLFFBQU0sQ0FBQyxnQkFBUCxDQUF3QixHQUFHLENBQUMsU0FBNUIsRUFBdUM7QUFDckMsYUFBUyxFQUFFO0FBQUUsU0FBRyxFQUFFLE1BQU07QUFBYixLQUQwQjtBQUVyQyxjQUFVLEVBQUU7QUFBRSxTQUFHLEVBQUUsTUFBTTtBQUFiLEtBRnlCO0FBR3JDLGNBQVUsRUFBRTtBQUFFLFNBQUcsRUFBRSxNQUFNO0FBQWIsS0FIeUI7QUFJckMsVUFBTSxFQUFFO0FBQUUsU0FBRyxFQUFFLE1BQU07QUFBYixLQUo2QjtBQUtyQyxZQUFRLEVBQUU7QUFBRSxTQUFHLEVBQUUsTUFBTTtBQUFiLEtBTDJCO0FBTXJDLFNBQUssRUFBRTtBQUFFLFNBQUcsRUFBRSxNQUFNO0FBQWI7QUFOOEIsR0FBdkM7QUFTQSxNQUFJLGlCQUFKLEVBQWUsUUFBUSxDQUFDLElBQVQsQ0FBYyxTQUFkLENBQXdCLEdBQXhCLENBQTRCLGtCQUE1QjtBQUNmLE1BQUksYUFBSixFQUFXLFFBQVEsQ0FBQyxJQUFULENBQWMsU0FBZCxDQUF3QixHQUF4QixDQUE0QixjQUE1QjtBQUNYLE1BQUksZUFBSixFQUFhLFFBQVEsQ0FBQyxJQUFULENBQWMsU0FBZCxDQUF3QixHQUF4QixDQUE0QixnQkFBNUI7QUFDZDs7QUFmRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2Vudi50cz8wMTQ3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbml0RW52ID0gZXhwb3J0cy5rZXlzID0gZXhwb3J0cy5pc0xpbnV4ID0gZXhwb3J0cy5pc01hYyA9IGV4cG9ydHMuaXNXaW5kb3dzID0gZXhwb3J0cy5pc0ZpcmVmb3ggPSBleHBvcnRzLmlzQ2hyb21lID0gZXhwb3J0cy50YXJnZXQgPSBleHBvcnRzLmlzQnJvd3NlciA9IHZvaWQgMDtcbmV4cG9ydHMuaXNCcm93c2VyID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCc7XG5leHBvcnRzLnRhcmdldCA9IGV4cG9ydHMuaXNCcm93c2VyXG4gICAgPyB3aW5kb3dcbiAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gZ2xvYmFsXG4gICAgICAgIDoge307XG5leHBvcnRzLmlzQ2hyb21lID0gdHlwZW9mIGV4cG9ydHMudGFyZ2V0LmNocm9tZSAhPT0gJ3VuZGVmaW5lZCcgJiYgISFleHBvcnRzLnRhcmdldC5jaHJvbWUuZGV2dG9vbHM7XG5leHBvcnRzLmlzRmlyZWZveCA9IGV4cG9ydHMuaXNCcm93c2VyICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTE7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSA9PT0gMDtcbmV4cG9ydHMuaXNNYWMgPSBleHBvcnRzLmlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdNYWNJbnRlbCc7XG5leHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZignTGludXgnKSA9PT0gMDtcbmV4cG9ydHMua2V5cyA9IHtcbiAgICBjdHJsOiBleHBvcnRzLmlzTWFjID8gJyYjODk4NDsnIDogJ0N0cmwnLFxuICAgIHNoaWZ0OiAnU2hpZnQnLFxuICAgIGFsdDogZXhwb3J0cy5pc01hYyA/ICcmIzg5OTc7JyA6ICdBbHQnLFxuICAgIGRlbDogJ0RlbCcsXG4gICAgZW50ZXI6ICdFbnRlcicsXG4gICAgZXNjOiAnRXNjJyxcbn07XG5mdW5jdGlvbiBpbml0RW52KFZ1ZSkge1xuICAgIGlmIChWdWUucHJvdG90eXBlLmhhc093blByb3BlcnR5KCckaXNDaHJvbWUnKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZ1ZS5wcm90b3R5cGUsIHtcbiAgICAgICAgJGlzQ2hyb21lOiB7IGdldDogKCkgPT4gZXhwb3J0cy5pc0Nocm9tZSB9LFxuICAgICAgICAkaXNGaXJlZm94OiB7IGdldDogKCkgPT4gZXhwb3J0cy5pc0ZpcmVmb3ggfSxcbiAgICAgICAgJGlzV2luZG93czogeyBnZXQ6ICgpID0+IGV4cG9ydHMuaXNXaW5kb3dzIH0sXG4gICAgICAgICRpc01hYzogeyBnZXQ6ICgpID0+IGV4cG9ydHMuaXNNYWMgfSxcbiAgICAgICAgJGlzTGludXg6IHsgZ2V0OiAoKSA9PiBleHBvcnRzLmlzTGludXggfSxcbiAgICAgICAgJGtleXM6IHsgZ2V0OiAoKSA9PiBleHBvcnRzLmtleXMgfSxcbiAgICB9KTtcbiAgICBpZiAoZXhwb3J0cy5pc1dpbmRvd3MpXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncGxhdGZvcm0td2luZG93cycpO1xuICAgIGlmIChleHBvcnRzLmlzTWFjKVxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3BsYXRmb3JtLW1hYycpO1xuICAgIGlmIChleHBvcnRzLmlzTGludXgpXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncGxhdGZvcm0tbGludXgnKTtcbn1cbmV4cG9ydHMuaW5pdEVudiA9IGluaXRFbnY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnYuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///66210\n")},27146:function(__unused_webpack_module,exports,__webpack_require__){eval('\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\n\n__exportStar(__webpack_require__(79310), exports);\n\n__exportStar(__webpack_require__(47294), exports);\n\n__exportStar(__webpack_require__(79410), exports);\n\n__exportStar(__webpack_require__(38158), exports);\n\n__exportStar(__webpack_require__(66210), exports);\n\n__exportStar(__webpack_require__(12074), exports);\n\n__exportStar(__webpack_require__(86798), exports);\n\n__exportStar(__webpack_require__(29556), exports);\n\n__exportStar(__webpack_require__(423), exports);\n\n__exportStar(__webpack_require__(58561), exports);\n\n__exportStar(__webpack_require__(34723), exports);\n\n__exportStar(__webpack_require__(76203), exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcxNDYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9iYWNrZW5kXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9icmlkZ2VcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnN0c1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZWRpdFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZW52XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wbHVnaW4tcGVybWlzc2lvbnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BsdWdpbi1zZXR0aW5nc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3NoZWxsXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdG9yYWdlXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFuc2ZlclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27146\n')},12074:(__unused_webpack_module,exports,__webpack_require__)=>{eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.setPluginPermission = exports.hasPluginPermission = exports.PluginPermission = void 0;\n\nconst shared_data_1 = __webpack_require__(29556);\n\nvar PluginPermission;\n\n(function (PluginPermission) {\n PluginPermission["ENABLED"] = "enabled";\n PluginPermission["COMPONENTS"] = "components";\n PluginPermission["CUSTOM_INSPECTOR"] = "custom-inspector";\n PluginPermission["TIMELINE"] = "timeline";\n})(PluginPermission = exports.PluginPermission || (exports.PluginPermission = {}));\n\nfunction hasPluginPermission(pluginId, permission) {\n const result = shared_data_1.SharedData.pluginPermissions[`${pluginId}:${permission}`];\n if (result == null) return true;\n return !!result;\n}\n\nexports.hasPluginPermission = hasPluginPermission;\n\nfunction setPluginPermission(pluginId, permission, active) {\n shared_data_1.SharedData.pluginPermissions = { ...shared_data_1.SharedData.pluginPermissions,\n [`${pluginId}:${permission}`]: active\n };\n}\n\nexports.setPluginPermission = setPluginPermission;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIwNzQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBLElBQVksZ0JBQVo7O0FBQUEsV0FBWSxnQkFBWixFQUE0QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxnQkFBZ0IsR0FBaEIsd0RBQWdCLEVBQWhCLENBQVo7O0FBT0EsU0FBZ0IsbUJBQWhCLENBQXFDLFFBQXJDLEVBQXVELFVBQXZELEVBQW1GO0FBQ2pGLFFBQU0sTUFBTSxHQUFHLHlCQUFXLGlCQUFYLENBQTZCLEdBQUcsUUFBUSxJQUFJLFVBQVUsRUFBdEQsQ0FBZjtBQUNBLE1BQUksTUFBTSxJQUFJLElBQWQsRUFBb0IsT0FBTyxJQUFQO0FBQ3BCLFNBQU8sQ0FBQyxDQUFDLE1BQVQ7QUFDRDs7QUFKRDs7QUFNQSxTQUFnQixtQkFBaEIsQ0FBcUMsUUFBckMsRUFBdUQsVUFBdkQsRUFBcUYsTUFBckYsRUFBb0c7QUFDbEcsMkJBQVcsaUJBQVgsR0FBK0IsRUFDN0IsR0FBRyx5QkFBVyxpQkFEZTtBQUU3QixLQUFDLEdBQUcsUUFBUSxJQUFJLFVBQVUsRUFBMUIsR0FBK0I7QUFGRixHQUEvQjtBQUlEOztBQUxEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvcGx1Z2luLXBlcm1pc3Npb25zLnRzP2EzM2EiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldFBsdWdpblBlcm1pc3Npb24gPSBleHBvcnRzLmhhc1BsdWdpblBlcm1pc3Npb24gPSBleHBvcnRzLlBsdWdpblBlcm1pc3Npb24gPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfZGF0YV8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIik7XG52YXIgUGx1Z2luUGVybWlzc2lvbjtcbihmdW5jdGlvbiAoUGx1Z2luUGVybWlzc2lvbikge1xuICAgIFBsdWdpblBlcm1pc3Npb25bXCJFTkFCTEVEXCJdID0gXCJlbmFibGVkXCI7XG4gICAgUGx1Z2luUGVybWlzc2lvbltcIkNPTVBPTkVOVFNcIl0gPSBcImNvbXBvbmVudHNcIjtcbiAgICBQbHVnaW5QZXJtaXNzaW9uW1wiQ1VTVE9NX0lOU1BFQ1RPUlwiXSA9IFwiY3VzdG9tLWluc3BlY3RvclwiO1xuICAgIFBsdWdpblBlcm1pc3Npb25bXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbn0pKFBsdWdpblBlcm1pc3Npb24gPSBleHBvcnRzLlBsdWdpblBlcm1pc3Npb24gfHwgKGV4cG9ydHMuUGx1Z2luUGVybWlzc2lvbiA9IHt9KSk7XG5mdW5jdGlvbiBoYXNQbHVnaW5QZXJtaXNzaW9uKHBsdWdpbklkLCBwZXJtaXNzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gc2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLnBsdWdpblBlcm1pc3Npb25zW2Ake3BsdWdpbklkfToke3Blcm1pc3Npb259YF07XG4gICAgaWYgKHJlc3VsdCA9PSBudWxsKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gISFyZXN1bHQ7XG59XG5leHBvcnRzLmhhc1BsdWdpblBlcm1pc3Npb24gPSBoYXNQbHVnaW5QZXJtaXNzaW9uO1xuZnVuY3Rpb24gc2V0UGx1Z2luUGVybWlzc2lvbihwbHVnaW5JZCwgcGVybWlzc2lvbiwgYWN0aXZlKSB7XG4gICAgc2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLnBsdWdpblBlcm1pc3Npb25zID0ge1xuICAgICAgICAuLi5zaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEucGx1Z2luUGVybWlzc2lvbnMsXG4gICAgICAgIFtgJHtwbHVnaW5JZH06JHtwZXJtaXNzaW9ufWBdOiBhY3RpdmUsXG4gICAgfTtcbn1cbmV4cG9ydHMuc2V0UGx1Z2luUGVybWlzc2lvbiA9IHNldFBsdWdpblBlcm1pc3Npb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wbHVnaW4tcGVybWlzc2lvbnMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12074\n')},86798:(__unused_webpack_module,exports,__webpack_require__)=>{eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.getPluginDefaultSettings = exports.setPluginSettings = exports.getPluginSettings = void 0;\n\nconst shared_data_1 = __webpack_require__(29556);\n\nfunction getPluginSettings(pluginId, defaultSettings) {\n var _a;\n\n return { ...(defaultSettings !== null && defaultSettings !== void 0 ? defaultSettings : {}),\n ...((_a = shared_data_1.SharedData.pluginSettings[pluginId]) !== null && _a !== void 0 ? _a : {})\n };\n}\n\nexports.getPluginSettings = getPluginSettings;\n\nfunction setPluginSettings(pluginId, settings) {\n shared_data_1.SharedData.pluginSettings = { ...shared_data_1.SharedData.pluginSettings,\n [pluginId]: settings\n };\n}\n\nexports.setPluginSettings = setPluginSettings;\n\nfunction getPluginDefaultSettings(schema) {\n const result = {};\n\n if (schema) {\n for (const id in schema) {\n const item = schema[id];\n result[id] = item.defaultValue;\n }\n }\n\n return result;\n}\n\nexports.getPluginDefaultSettings = getPluginDefaultSettings;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODY3OTguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUdBLFNBQWdCLGlCQUFoQixDQUFnRixRQUFoRixFQUFrRyxlQUFsRyxFQUE2SDs7O0FBQzNILFNBQU8sRUFDTCxJQUFHLGVBQWUsU0FBZixtQkFBZSxXQUFmLHFCQUFtQixFQUF0QixDQURLO0FBRUwsUUFBRywrQkFBVyxjQUFYLENBQTBCLFFBQTFCLE9BQW1DLElBQW5DLElBQW1DLGFBQW5DLEdBQW1DLEVBQW5DLEdBQXVDLEVBQTFDO0FBRkssR0FBUDtBQUlEOztBQUxEOztBQU9BLFNBQWdCLGlCQUFoQixDQUFnRixRQUFoRixFQUFrRyxRQUFsRyxFQUFxSDtBQUNuSCwyQkFBVyxjQUFYLEdBQTRCLEVBQzFCLEdBQUcseUJBQVcsY0FEWTtBQUUxQixLQUFDLFFBQUQsR0FBWTtBQUZjLEdBQTVCO0FBSUQ7O0FBTEQ7O0FBT0EsU0FBZ0Isd0JBQWhCLENBQXVGLE1BQXZGLEVBQWlJO0FBQy9ILFFBQU0sTUFBTSxHQUF3QixFQUFwQzs7QUFDQSxNQUFJLE1BQUosRUFBWTtBQUNWLFNBQUssTUFBTSxFQUFYLElBQWlCLE1BQWpCLEVBQXlCO0FBQ3ZCLFlBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFELENBQW5CO0FBQ0EsWUFBTSxDQUFDLEVBQUQsQ0FBTixHQUFhLElBQUksQ0FBQyxZQUFsQjtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTyxNQUFQO0FBQ0Q7O0FBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9wbHVnaW4tc2V0dGluZ3MudHM/OTk2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzID0gZXhwb3J0cy5zZXRQbHVnaW5TZXR0aW5ncyA9IGV4cG9ydHMuZ2V0UGx1Z2luU2V0dGluZ3MgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfZGF0YV8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIik7XG5mdW5jdGlvbiBnZXRQbHVnaW5TZXR0aW5ncyhwbHVnaW5JZCwgZGVmYXVsdFNldHRpbmdzKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRTZXR0aW5ncyAhPT0gbnVsbCAmJiBkZWZhdWx0U2V0dGluZ3MgIT09IHZvaWQgMCA/IGRlZmF1bHRTZXR0aW5ncyA6IHt9LFxuICAgICAgICAuLi4oX2EgPSBzaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEucGx1Z2luU2V0dGluZ3NbcGx1Z2luSWRdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRQbHVnaW5TZXR0aW5ncyA9IGdldFBsdWdpblNldHRpbmdzO1xuZnVuY3Rpb24gc2V0UGx1Z2luU2V0dGluZ3MocGx1Z2luSWQsIHNldHRpbmdzKSB7XG4gICAgc2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLnBsdWdpblNldHRpbmdzID0ge1xuICAgICAgICAuLi5zaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEucGx1Z2luU2V0dGluZ3MsXG4gICAgICAgIFtwbHVnaW5JZF06IHNldHRpbmdzLFxuICAgIH07XG59XG5leHBvcnRzLnNldFBsdWdpblNldHRpbmdzID0gc2V0UGx1Z2luU2V0dGluZ3M7XG5mdW5jdGlvbiBnZXRQbHVnaW5EZWZhdWx0U2V0dGluZ3Moc2NoZW1hKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNjaGVtYVtpZF07XG4gICAgICAgICAgICByZXN1bHRbaWRdID0gaXRlbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzID0gZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Z2luLXNldHRpbmdzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86798\n')},29556:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SharedData = exports.watchSharedData = exports.destroySharedData = exports.onSharedDataInit = exports.initSharedData = void 0;\n\nconst storage_1 = __webpack_require__(58561);\n\nconst env_1 = __webpack_require__(66210); // Initial state\n\n\nconst internalSharedData = {\n openInEditorHost: '/',\n componentNameStyle: 'class',\n theme: 'auto',\n displayDensity: 'low',\n timeFormat: 'default',\n recordVuex: true,\n cacheVuexSnapshotsEvery: 50,\n cacheVuexSnapshotsLimit: 10,\n snapshotLoading: false,\n componentEventsEnabled: true,\n performanceMonitoringEnabled: true,\n editableProps: false,\n logDetected: true,\n vuexNewBackend: false,\n vuexAutoload: false,\n vuexGroupGettersByModule: true,\n showMenuScrollTip: true,\n timelineTimeGrid: true,\n timelineScreenshots: true,\n menuStepScrolling: env_1.isMac,\n pluginPermissions: {},\n pluginSettings: {},\n pageConfig: {},\n legacyApps: false,\n debugInfo: false\n};\nconst persisted = ['componentNameStyle', 'theme', 'displayDensity', 'recordVuex', 'editableProps', 'logDetected', 'vuexNewBackend', 'vuexAutoload', 'vuexGroupGettersByModule', 'timeFormat', 'showMenuScrollTip', 'timelineTimeGrid', 'timelineScreenshots', 'menuStepScrolling', 'pluginPermissions', 'pluginSettings', 'performanceMonitoringEnabled', 'componentEventsEnabled', 'debugInfo'];\nconst storageVersion = '6.0.0-alpha.1'; // ---- INTERNALS ---- //\n\nlet bridge; // List of fields to persist to storage (disabled if 'false')\n// This should be unique to each shared data client to prevent conflicts\n\nlet persist = false;\nlet data;\nlet initRetryInterval;\nlet initRetryCount = 0;\nconst initCbs = [];\n\nfunction initSharedData(params) {\n return new Promise(resolve => {\n // Mandatory params\n bridge = params.bridge;\n persist = !!params.persist;\n\n if (persist) {\n if (false) {} // Load persisted fields\n\n\n persisted.forEach(key => {\n const value = (0, storage_1.getStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`);\n\n if (value !== null) {\n internalSharedData[key] = value;\n }\n });\n bridge.on('shared-data:load', () => {\n // Send all fields\n Object.keys(internalSharedData).forEach(key => {\n sendValue(key, internalSharedData[key]);\n });\n bridge.send('shared-data:load-complete');\n });\n bridge.on('shared-data:init-complete', () => {\n if (false) {}\n\n clearInterval(initRetryInterval);\n resolve();\n });\n bridge.send('shared-data:master-init-waiting'); // In case backend init is executed after frontend\n\n bridge.on('shared-data:minion-init-waiting', () => {\n bridge.send('shared-data:master-init-waiting');\n });\n initRetryCount = 0;\n clearInterval(initRetryInterval);\n initRetryInterval = setInterval(() => {\n if (false) {}\n\n bridge.send('shared-data:master-init-waiting');\n initRetryCount++;\n\n if (initRetryCount > 30) {\n clearInterval(initRetryInterval);\n console.error('[shared data] Master init failed');\n }\n }, 2000);\n } else {\n if (false) {}\n\n bridge.on('shared-data:master-init-waiting', () => {\n if (false) {} // Load all persisted shared data\n\n\n bridge.send('shared-data:load');\n bridge.once('shared-data:load-complete', () => {\n if (false) {}\n\n bridge.send('shared-data:init-complete');\n resolve();\n });\n });\n bridge.send('shared-data:minion-init-waiting');\n }\n\n data = { ...internalSharedData\n };\n\n if (params.Vue) {\n data = params.Vue.observable(data);\n } // Update value from other shared data clients\n\n\n bridge.on('shared-data:set', ({\n key,\n value\n }) => {\n setValue(key, value);\n });\n initCbs.forEach(cb => cb());\n });\n}\n\nexports.initSharedData = initSharedData;\n\nfunction onSharedDataInit(cb) {\n initCbs.push(cb);\n return () => {\n const index = initCbs.indexOf(cb);\n if (index !== -1) initCbs.splice(index, 1);\n };\n}\n\nexports.onSharedDataInit = onSharedDataInit;\n\nfunction destroySharedData() {\n bridge.removeAllListeners('shared-data:set');\n watchers = {};\n}\n\nexports.destroySharedData = destroySharedData;\nlet watchers = {};\n\nfunction setValue(key, value) {\n // Storage\n if (persist && persisted.includes(key)) {\n (0, storage_1.setStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`, value);\n }\n\n const oldValue = data[key];\n data[key] = value;\n const handlers = watchers[key];\n\n if (handlers) {\n handlers.forEach(h => h(value, oldValue));\n } // Validate Proxy set trap\n\n\n return true;\n}\n\nfunction sendValue(key, value) {\n bridge && bridge.send('shared-data:set', {\n key,\n value\n });\n}\n\nfunction watchSharedData(prop, handler) {\n const list = watchers[prop] || (watchers[prop] = []);\n list.push(handler);\n return () => {\n const index = list.indexOf(handler);\n if (index !== -1) list.splice(index, 1);\n };\n}\n\nexports.watchSharedData = watchSharedData;\nconst proxy = {};\nObject.keys(internalSharedData).forEach(key => {\n Object.defineProperty(proxy, key, {\n configurable: false,\n get: () => data[key],\n set: value => {\n sendValue(key, value);\n setValue(key, value);\n }\n });\n});\nexports.SharedData = proxy;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZXZ0b29scy8uLi9zcmMvc2hhcmVkLWRhdGEudHM/ZDBiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2hhcmVkRGF0YSA9IGV4cG9ydHMud2F0Y2hTaGFyZWREYXRhID0gZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IGV4cG9ydHMuaW5pdFNoYXJlZERhdGEgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9zdG9yYWdlXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG4vLyBJbml0aWFsIHN0YXRlXG5jb25zdCBpbnRlcm5hbFNoYXJlZERhdGEgPSB7XG4gICAgb3BlbkluRWRpdG9ySG9zdDogJy8nLFxuICAgIGNvbXBvbmVudE5hbWVTdHlsZTogJ2NsYXNzJyxcbiAgICB0aGVtZTogJ2F1dG8nLFxuICAgIGRpc3BsYXlEZW5zaXR5OiAnbG93JyxcbiAgICB0aW1lRm9ybWF0OiAnZGVmYXVsdCcsXG4gICAgcmVjb3JkVnVleDogdHJ1ZSxcbiAgICBjYWNoZVZ1ZXhTbmFwc2hvdHNFdmVyeTogNTAsXG4gICAgY2FjaGVWdWV4U25hcHNob3RzTGltaXQ6IDEwLFxuICAgIHNuYXBzaG90TG9hZGluZzogZmFsc2UsXG4gICAgY29tcG9uZW50RXZlbnRzRW5hYmxlZDogdHJ1ZSxcbiAgICBwZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkOiB0cnVlLFxuICAgIGVkaXRhYmxlUHJvcHM6IGZhbHNlLFxuICAgIGxvZ0RldGVjdGVkOiB0cnVlLFxuICAgIHZ1ZXhOZXdCYWNrZW5kOiBmYWxzZSxcbiAgICB2dWV4QXV0b2xvYWQ6IGZhbHNlLFxuICAgIHZ1ZXhHcm91cEdldHRlcnNCeU1vZHVsZTogdHJ1ZSxcbiAgICBzaG93TWVudVNjcm9sbFRpcDogdHJ1ZSxcbiAgICB0aW1lbGluZVRpbWVHcmlkOiB0cnVlLFxuICAgIHRpbWVsaW5lU2NyZWVuc2hvdHM6IHRydWUsXG4gICAgbWVudVN0ZXBTY3JvbGxpbmc6IGVudl8xLmlzTWFjLFxuICAgIHBsdWdpblBlcm1pc3Npb25zOiB7fSxcbiAgICBwbHVnaW5TZXR0aW5nczoge30sXG4gICAgcGFnZUNvbmZpZzoge30sXG4gICAgbGVnYWN5QXBwczogZmFsc2UsXG4gICAgZGVidWdJbmZvOiBmYWxzZSxcbn07XG5jb25zdCBwZXJzaXN0ZWQgPSBbXG4gICAgJ2NvbXBvbmVudE5hbWVTdHlsZScsXG4gICAgJ3RoZW1lJyxcbiAgICAnZGlzcGxheURlbnNpdHknLFxuICAgICdyZWNvcmRWdWV4JyxcbiAgICAnZWRpdGFibGVQcm9wcycsXG4gICAgJ2xvZ0RldGVjdGVkJyxcbiAgICAndnVleE5ld0JhY2tlbmQnLFxuICAgICd2dWV4QXV0b2xvYWQnLFxuICAgICd2dWV4R3JvdXBHZXR0ZXJzQnlNb2R1bGUnLFxuICAgICd0aW1lRm9ybWF0JyxcbiAgICAnc2hvd01lbnVTY3JvbGxUaXAnLFxuICAgICd0aW1lbGluZVRpbWVHcmlkJyxcbiAgICAndGltZWxpbmVTY3JlZW5zaG90cycsXG4gICAgJ21lbnVTdGVwU2Nyb2xsaW5nJyxcbiAgICAncGx1Z2luUGVybWlzc2lvbnMnLFxuICAgICdwbHVnaW5TZXR0aW5ncycsXG4gICAgJ3BlcmZvcm1hbmNlTW9uaXRvcmluZ0VuYWJsZWQnLFxuICAgICdjb21wb25lbnRFdmVudHNFbmFibGVkJyxcbiAgICAnZGVidWdJbmZvJyxcbl07XG5jb25zdCBzdG9yYWdlVmVyc2lvbiA9ICc2LjAuMC1hbHBoYS4xJztcbi8vIC0tLS0gSU5URVJOQUxTIC0tLS0gLy9cbmxldCBicmlkZ2U7XG4vLyBMaXN0IG9mIGZpZWxkcyB0byBwZXJzaXN0IHRvIHN0b3JhZ2UgKGRpc2FibGVkIGlmICdmYWxzZScpXG4vLyBUaGlzIHNob3VsZCBiZSB1bmlxdWUgdG8gZWFjaCBzaGFyZWQgZGF0YSBjbGllbnQgdG8gcHJldmVudCBjb25mbGljdHNcbmxldCBwZXJzaXN0ID0gZmFsc2U7XG5sZXQgZGF0YTtcbmxldCBpbml0UmV0cnlJbnRlcnZhbDtcbmxldCBpbml0UmV0cnlDb3VudCA9IDA7XG5jb25zdCBpbml0Q2JzID0gW107XG5mdW5jdGlvbiBpbml0U2hhcmVkRGF0YShwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgLy8gTWFuZGF0b3J5IHBhcmFtc1xuICAgICAgICBicmlkZ2UgPSBwYXJhbXMuYnJpZGdlO1xuICAgICAgICBwZXJzaXN0ID0gISFwYXJhbXMucGVyc2lzdDtcbiAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCBpbiBwcm9ncmVzcy4uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9hZCBwZXJzaXN0ZWQgZmllbGRzXG4gICAgICAgICAgICBwZXJzaXN0ZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKDAsIHN0b3JhZ2VfMS5nZXRTdG9yYWdlKShgdnVlLWRldnRvb2xzLSR7c3RvcmFnZVZlcnNpb259OnNoYXJlZC1kYXRhOiR7a2V5fWApO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTpsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNlbmQgYWxsIGZpZWxkc1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGludGVybmFsU2hhcmVkRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTppbml0LWNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1hc3RlciBpbml0IGNvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgYmFja2VuZCBpbml0IGlzIGV4ZWN1dGVkIGFmdGVyIGZyb250ZW5kXG4gICAgICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOm1pbmlvbi1pbml0LXdhaXRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5pdFJldHJ5Q291bnQgPSAwO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICBpbml0UmV0cnlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCByZXRyeWluZy4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIGluaXRSZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKGluaXRSZXRyeUNvdW50ID4gMzApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgaW4gcHJvZ3Jlc3MuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNaW5pb24gbG9hZGluZyBkYXRhLi4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExvYWQgYWxsIHBlcnNpc3RlZCBzaGFyZWQgZGF0YVxuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTpsb2FkJyk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLm9uY2UoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgY29tcGxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6aW5pdC1jb21wbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptaW5pb24taW5pdC13YWl0aW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmludGVybmFsU2hhcmVkRGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHBhcmFtcy5WdWUpIHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJhbXMuVnVlLm9ic2VydmFibGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHZhbHVlIGZyb20gb3RoZXIgc2hhcmVkIGRhdGEgY2xpZW50c1xuICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOnNldCcsICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbml0Q2JzLmZvckVhY2goY2IgPT4gY2IoKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRTaGFyZWREYXRhID0gaW5pdFNoYXJlZERhdGE7XG5mdW5jdGlvbiBvblNoYXJlZERhdGFJbml0KGNiKSB7XG4gICAgaW5pdENicy5wdXNoKGNiKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGluaXRDYnMuaW5kZXhPZihjYik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBpbml0Q2JzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfTtcbn1cbmV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IG9uU2hhcmVkRGF0YUluaXQ7XG5mdW5jdGlvbiBkZXN0cm95U2hhcmVkRGF0YSgpIHtcbiAgICBicmlkZ2UucmVtb3ZlQWxsTGlzdGVuZXJzKCdzaGFyZWQtZGF0YTpzZXQnKTtcbiAgICB3YXRjaGVycyA9IHt9O1xufVxuZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGRlc3Ryb3lTaGFyZWREYXRhO1xubGV0IHdhdGNoZXJzID0ge307XG5mdW5jdGlvbiBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgLy8gU3RvcmFnZVxuICAgIGlmIChwZXJzaXN0ICYmIHBlcnNpc3RlZC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICgwLCBzdG9yYWdlXzEuc2V0U3RvcmFnZSkoYHZ1ZS1kZXZ0b29scy0ke3N0b3JhZ2VWZXJzaW9ufTpzaGFyZWQtZGF0YToke2tleX1gLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9sZFZhbHVlID0gZGF0YVtrZXldO1xuICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgIGNvbnN0IGhhbmRsZXJzID0gd2F0Y2hlcnNba2V5XTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChoID0+IGgodmFsdWUsIG9sZFZhbHVlKSk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIFByb3h5IHNldCB0cmFwXG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBzZW5kVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGJyaWRnZSAmJiBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6c2V0Jywge1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gd2F0Y2hTaGFyZWREYXRhKHByb3AsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBsaXN0ID0gd2F0Y2hlcnNbcHJvcF0gfHwgKHdhdGNoZXJzW3Byb3BdID0gW10pO1xuICAgIGxpc3QucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xufVxuZXhwb3J0cy53YXRjaFNoYXJlZERhdGEgPSB3YXRjaFNoYXJlZERhdGE7XG5jb25zdCBwcm94eSA9IHt9O1xuT2JqZWN0LmtleXMoaW50ZXJuYWxTaGFyZWREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBkYXRhW2tleV0sXG4gICAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuZXhwb3J0cy5TaGFyZWREYXRhID0gcHJveHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtZGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29556\n")},423:(I,Q)=>{Object.defineProperty(Q,"__esModule",{value:!0})},58561:(__unused_webpack_module,exports,__webpack_require__)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.clearStorage = exports.removeStorage = exports.setStorage = exports.getStorage = exports.initStorage = void 0;\n\nconst env_1 = __webpack_require__(66210); // If we can, we use the browser extension API to store data\n// it's async though, so we synchronize changes from an intermediate\n// storageData object\n\n\nconst useStorage = typeof env_1.target.chrome !== 'undefined' && typeof env_1.target.chrome.storage !== 'undefined';\nlet storageData = null;\n\nfunction initStorage() {\n return new Promise(resolve => {\n if (useStorage) {\n env_1.target.chrome.storage.local.get(null, result => {\n storageData = result;\n resolve();\n });\n } else {\n storageData = {};\n resolve();\n }\n });\n}\n\nexports.initStorage = initStorage;\n\nfunction getStorage(key, defaultValue = null) {\n checkStorage();\n\n if (useStorage) {\n return getDefaultValue(storageData[key], defaultValue);\n } else {\n try {\n return getDefaultValue(JSON.parse(localStorage.getItem(key)), defaultValue);\n } catch (e) {}\n }\n}\n\nexports.getStorage = getStorage;\n\nfunction setStorage(key, val) {\n checkStorage();\n\n if (useStorage) {\n storageData[key] = val;\n env_1.target.chrome.storage.local.set({\n [key]: val\n });\n } else {\n try {\n localStorage.setItem(key, JSON.stringify(val));\n } catch (e) {}\n }\n}\n\nexports.setStorage = setStorage;\n\nfunction removeStorage(key) {\n checkStorage();\n\n if (useStorage) {\n delete storageData[key];\n env_1.target.chrome.storage.local.remove([key]);\n } else {\n try {\n localStorage.removeItem(key);\n } catch (e) {}\n }\n}\n\nexports.removeStorage = removeStorage;\n\nfunction clearStorage() {\n checkStorage();\n\n if (useStorage) {\n storageData = {};\n env_1.target.chrome.storage.local.clear();\n } else {\n try {\n localStorage.clear();\n } catch (e) {}\n }\n}\n\nexports.clearStorage = clearStorage;\n\nfunction checkStorage() {\n if (!storageData) {\n throw new Error('Storage wasn\\'t initialized with \\'init()\\'');\n }\n}\n\nfunction getDefaultValue(value, defaultValue) {\n if (value == null) {\n return defaultValue;\n }\n\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUksSUFBYixFQUFtQjtBQUNqQixXQUFPLFlBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQVA7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3N0b3JhZ2UudHM/NTMyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2xlYXJTdG9yYWdlID0gZXhwb3J0cy5yZW1vdmVTdG9yYWdlID0gZXhwb3J0cy5zZXRTdG9yYWdlID0gZXhwb3J0cy5nZXRTdG9yYWdlID0gZXhwb3J0cy5pbml0U3RvcmFnZSA9IHZvaWQgMDtcbmNvbnN0IGVudl8xID0gcmVxdWlyZShcIi4vZW52XCIpO1xuLy8gSWYgd2UgY2FuLCB3ZSB1c2UgdGhlIGJyb3dzZXIgZXh0ZW5zaW9uIEFQSSB0byBzdG9yZSBkYXRhXG4vLyBpdCdzIGFzeW5jIHRob3VnaCwgc28gd2Ugc3luY2hyb25pemUgY2hhbmdlcyBmcm9tIGFuIGludGVybWVkaWF0ZVxuLy8gc3RvcmFnZURhdGEgb2JqZWN0XG5jb25zdCB1c2VTdG9yYWdlID0gdHlwZW9mIGVudl8xLnRhcmdldC5jaHJvbWUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBlbnZfMS50YXJnZXQuY2hyb21lLnN0b3JhZ2UgIT09ICd1bmRlZmluZWQnO1xubGV0IHN0b3JhZ2VEYXRhID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRTdG9yYWdlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBpZiAodXNlU3RvcmFnZSkge1xuICAgICAgICAgICAgZW52XzEudGFyZ2V0LmNocm9tZS5zdG9yYWdlLmxvY2FsLmdldChudWxsLCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2VEYXRhID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RvcmFnZURhdGEgPSB7fTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0U3RvcmFnZSA9IGluaXRTdG9yYWdlO1xuZnVuY3Rpb24gZ2V0U3RvcmFnZShrZXksIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcbiAgICBjaGVja1N0b3JhZ2UoKTtcbiAgICBpZiAodXNlU3RvcmFnZSkge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKHN0b3JhZ2VEYXRhW2tleV0sIGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHRWYWx1ZShKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICB9XG59XG5leHBvcnRzLmdldFN0b3JhZ2UgPSBnZXRTdG9yYWdlO1xuZnVuY3Rpb24gc2V0U3RvcmFnZShrZXksIHZhbCkge1xuICAgIGNoZWNrU3RvcmFnZSgpO1xuICAgIGlmICh1c2VTdG9yYWdlKSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhW2tleV0gPSB2YWw7XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoeyBba2V5XTogdmFsIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHsgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2V0U3RvcmFnZSA9IHNldFN0b3JhZ2U7XG5mdW5jdGlvbiByZW1vdmVTdG9yYWdlKGtleSkge1xuICAgIGNoZWNrU3RvcmFnZSgpO1xuICAgIGlmICh1c2VTdG9yYWdlKSB7XG4gICAgICAgIGRlbGV0ZSBzdG9yYWdlRGF0YVtrZXldO1xuICAgICAgICBlbnZfMS50YXJnZXQuY2hyb21lLnN0b3JhZ2UubG9jYWwucmVtb3ZlKFtrZXldKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICB9XG59XG5leHBvcnRzLnJlbW92ZVN0b3JhZ2UgPSByZW1vdmVTdG9yYWdlO1xuZnVuY3Rpb24gY2xlYXJTdG9yYWdlKCkge1xuICAgIGNoZWNrU3RvcmFnZSgpO1xuICAgIGlmICh1c2VTdG9yYWdlKSB7XG4gICAgICAgIHN0b3JhZ2VEYXRhID0ge307XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuc3RvcmFnZS5sb2NhbC5jbGVhcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICB9XG59XG5leHBvcnRzLmNsZWFyU3RvcmFnZSA9IGNsZWFyU3RvcmFnZTtcbmZ1bmN0aW9uIGNoZWNrU3RvcmFnZSgpIHtcbiAgICBpZiAoIXN0b3JhZ2VEYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3RvcmFnZSB3YXNuXFwndCBpbml0aWFsaXplZCB3aXRoIFxcJ2luaXQoKVxcJycpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RvcmFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58561\n")},34723:(__unused_webpack_module,exports)=>{eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.stringifyStrictCircularAutoChunks = exports.parseCircularAutoChunks = exports.stringifyCircularAutoChunks = void 0;\nconst MAX_SERIALIZED_SIZE = 512 * 1024; // 1MB\n\nfunction encode(data, replacer, list, seen) {\n let stored, key, value, i, l;\n const seenIndex = seen.get(data);\n\n if (seenIndex != null) {\n return seenIndex;\n }\n\n const index = list.length;\n const proto = Object.prototype.toString.call(data);\n\n if (proto === '[object Object]') {\n stored = {};\n seen.set(data, index);\n list.push(stored);\n const keys = Object.keys(data);\n\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n value = data[key];\n if (replacer) value = replacer.call(data, key, value);\n stored[key] = encode(value, replacer, list, seen);\n }\n } else if (proto === '[object Array]') {\n stored = [];\n seen.set(data, index);\n list.push(stored);\n\n for (i = 0, l = data.length; i < l; i++) {\n value = data[i];\n if (replacer) value = replacer.call(data, i, value);\n stored[i] = encode(value, replacer, list, seen);\n }\n } else {\n list.push(data);\n }\n\n return index;\n}\n\nfunction decode(list, reviver) {\n let i = list.length;\n let j, k, data, key, value, proto;\n\n while (i--) {\n data = list[i];\n proto = Object.prototype.toString.call(data);\n\n if (proto === '[object Object]') {\n const keys = Object.keys(data);\n\n for (j = 0, k = keys.length; j < k; j++) {\n key = keys[j];\n value = list[data[key]];\n if (reviver) value = reviver.call(data, key, value);\n data[key] = value;\n }\n } else if (proto === '[object Array]') {\n for (j = 0, k = data.length; j < k; j++) {\n value = list[data[j]];\n if (reviver) value = reviver.call(data, j, value);\n data[j] = value;\n }\n }\n }\n}\n\nfunction stringifyCircularAutoChunks(data, replacer = null, space = null) {\n let result;\n\n try {\n result = arguments.length === 1 ? JSON.stringify(data) // @ts-ignore\n : JSON.stringify(data, replacer, space);\n } catch (e) {\n result = stringifyStrictCircularAutoChunks(data, replacer, space);\n }\n\n if (result.length > MAX_SERIALIZED_SIZE) {\n const chunkCount = Math.ceil(result.length / MAX_SERIALIZED_SIZE);\n const chunks = [];\n\n for (let i = 0; i < chunkCount; i++) {\n chunks.push(result.slice(i * MAX_SERIALIZED_SIZE, (i + 1) * MAX_SERIALIZED_SIZE));\n }\n\n return chunks;\n }\n\n return result;\n}\n\nexports.stringifyCircularAutoChunks = stringifyCircularAutoChunks;\n\nfunction parseCircularAutoChunks(data, reviver = null) {\n if (Array.isArray(data)) {\n data = data.join('');\n }\n\n const hasCircular = /^\\s/.test(data);\n\n if (!hasCircular) {\n return arguments.length === 1 ? JSON.parse(data) // @ts-ignore\n : JSON.parse(data, reviver);\n } else {\n const list = JSON.parse(data);\n decode(list, reviver);\n return list[0];\n }\n}\n\nexports.parseCircularAutoChunks = parseCircularAutoChunks;\n\nfunction stringifyStrictCircularAutoChunks(data, replacer = null, space = null) {\n const list = [];\n encode(data, replacer, list, new Map());\n return space ? ' ' + JSON.stringify(list, null, space) : ' ' + JSON.stringify(list);\n}\n\nexports.stringifyStrictCircularAutoChunks = stringifyStrictCircularAutoChunks;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUksR0FBRyxJQUFJLENBQUMsS0FBTCxDQUFXLElBQVgsQ0FBYjtBQUNBLFVBQU0sQ0FBQyxJQUFELEVBQU8sT0FBUCxDQUFOO0FBQ0EsV0FBTyxJQUFJLENBQUMsQ0FBRCxDQUFYO0FBQ0Q7QUFDRjs7QUFmRDs7QUFpQkEsU0FBZ0IsaUNBQWhCLENBQW1ELElBQW5ELEVBQThELFdBQXdELElBQXRILEVBQTRILFFBQWdCLElBQTVJLEVBQWdKO0FBQzlJLFFBQU0sSUFBSSxHQUFHLEVBQWI7QUFDQSxRQUFNLENBQUMsSUFBRCxFQUFPLFFBQVAsRUFBaUIsSUFBakIsRUFBdUIsSUFBSSxHQUFKLEVBQXZCLENBQU47QUFDQSxTQUFPLEtBQUssR0FDUixNQUFNLElBQUksQ0FBQyxTQUFMLENBQWUsSUFBZixFQUFxQixJQUFyQixFQUEyQixLQUEzQixDQURFLEdBRVIsTUFBTSxJQUFJLENBQUMsU0FBTCxDQUFlLElBQWYsQ0FGVjtBQUdEOztBQU5EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvdHJhbnNmZXIudHM/ODdkZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5naWZ5U3RyaWN0Q2lyY3VsYXJBdXRvQ2h1bmtzID0gZXhwb3J0cy5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcyA9IGV4cG9ydHMuc3RyaW5naWZ5Q2lyY3VsYXJBdXRvQ2h1bmtzID0gdm9pZCAwO1xuY29uc3QgTUFYX1NFUklBTElaRURfU0laRSA9IDUxMiAqIDEwMjQ7IC8vIDFNQlxuZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcGxhY2VyLCBsaXN0LCBzZWVuKSB7XG4gICAgbGV0IHN0b3JlZCwga2V5LCB2YWx1ZSwgaSwgbDtcbiAgICBjb25zdCBzZWVuSW5kZXggPSBzZWVuLmdldChkYXRhKTtcbiAgICBpZiAoc2VlbkluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHNlZW5JbmRleDtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKTtcbiAgICBpZiAocHJvdG8gPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHN0b3JlZCA9IHt9O1xuICAgICAgICBzZWVuLnNldChkYXRhLCBpbmRleCk7XG4gICAgICAgIGxpc3QucHVzaChzdG9yZWQpO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbChkYXRhLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHN0b3JlZFtrZXldID0gZW5jb2RlKHZhbHVlLCByZXBsYWNlciwgbGlzdCwgc2Vlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgc3RvcmVkID0gW107XG4gICAgICAgIHNlZW4uc2V0KGRhdGEsIGluZGV4KTtcbiAgICAgICAgbGlzdC5wdXNoKHN0b3JlZCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBkYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2ldO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbChkYXRhLCBpLCB2YWx1ZSk7XG4gICAgICAgICAgICBzdG9yZWRbaV0gPSBlbmNvZGUodmFsdWUsIHJlcGxhY2VyLCBsaXN0LCBzZWVuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGlzdC5wdXNoKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBkZWNvZGUobGlzdCwgcmV2aXZlcikge1xuICAgIGxldCBpID0gbGlzdC5sZW5ndGg7XG4gICAgbGV0IGosIGssIGRhdGEsIGtleSwgdmFsdWUsIHByb3RvO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgZGF0YSA9IGxpc3RbaV07XG4gICAgICAgIHByb3RvID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuICAgICAgICBpZiAocHJvdG8gPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgICAgICBmb3IgKGogPSAwLCBrID0ga2V5cy5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGlzdFtkYXRhW2tleV1dO1xuICAgICAgICAgICAgICAgIGlmIChyZXZpdmVyKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldml2ZXIuY2FsbChkYXRhLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm90byA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgayA9IGRhdGEubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsaXN0W2RhdGFbal1dO1xuICAgICAgICAgICAgICAgIGlmIChyZXZpdmVyKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldml2ZXIuY2FsbChkYXRhLCBqLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZGF0YVtqXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5Q2lyY3VsYXJBdXRvQ2h1bmtzKGRhdGEsIHJlcGxhY2VyID0gbnVsbCwgc3BhY2UgPSBudWxsKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGRhdGEsIHJlcGxhY2VyLCBzcGFjZSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeVN0cmljdENpcmN1bGFyQXV0b0NodW5rcyhkYXRhLCByZXBsYWNlciwgc3BhY2UpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IE1BWF9TRVJJQUxJWkVEX1NJWkUpIHtcbiAgICAgICAgY29uc3QgY2h1bmtDb3VudCA9IE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gTUFYX1NFUklBTElaRURfU0laRSk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gocmVzdWx0LnNsaWNlKGkgKiBNQVhfU0VSSUFMSVpFRF9TSVpFLCAoaSArIDEpICogTUFYX1NFUklBTElaRURfU0laRSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaHVua3M7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnN0cmluZ2lmeUNpcmN1bGFyQXV0b0NodW5rcyA9IHN0cmluZ2lmeUNpcmN1bGFyQXV0b0NodW5rcztcbmZ1bmN0aW9uIHBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzKGRhdGEsIHJldml2ZXIgPSBudWxsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEuam9pbignJyk7XG4gICAgfVxuICAgIGNvbnN0IGhhc0NpcmN1bGFyID0gL15cXHMvLnRlc3QoZGF0YSk7XG4gICAgaWYgKCFoYXNDaXJjdWxhcikge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICA6IEpTT04ucGFyc2UoZGF0YSwgcmV2aXZlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgZGVjb2RlKGxpc3QsIHJldml2ZXIpO1xuICAgICAgICByZXR1cm4gbGlzdFswXTtcbiAgICB9XG59XG5leHBvcnRzLnBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzID0gcGFyc2VDaXJjdWxhckF1dG9DaHVua3M7XG5mdW5jdGlvbiBzdHJpbmdpZnlTdHJpY3RDaXJjdWxhckF1dG9DaHVua3MoZGF0YSwgcmVwbGFjZXIgPSBudWxsLCBzcGFjZSA9IG51bGwpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgZW5jb2RlKGRhdGEsIHJlcGxhY2VyLCBsaXN0LCBuZXcgTWFwKCkpO1xuICAgIHJldHVybiBzcGFjZVxuICAgICAgICA/ICcgJyArIEpTT04uc3RyaW5naWZ5KGxpc3QsIG51bGwsIHNwYWNlKVxuICAgICAgICA6ICcgJyArIEpTT04uc3RyaW5naWZ5KGxpc3QpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnlTdHJpY3RDaXJjdWxhckF1dG9DaHVua3MgPSBzdHJpbmdpZnlTdHJpY3RDaXJjdWxhckF1dG9DaHVua3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc2Zlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34723\n")},76203:function(__unused_webpack_module,exports,__webpack_require__){eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.isEmptyObject = exports.copyToClipboard = exports.escape = exports.openInEditor = exports.focusInput = exports.simpleGet = exports.sortByKey = exports.searchDeepInObject = exports.isPlainObject = exports.revive = exports.parse = exports.getCustomRefDetails = exports.getCustomHTMLElementDetails = exports.getCustomFunctionDetails = exports.getCustomComponentDefinitionDetails = exports.getComponentName = exports.reviveSet = exports.getCustomSetDetails = exports.reviveMap = exports.getCustomMapDetails = exports.stringify = exports.specialTokenToString = exports.MAX_ARRAY_SIZE = exports.MAX_STRING_SIZE = exports.SPECIAL_TOKENS = exports.NAN = exports.NEGATIVE_INFINITY = exports.INFINITY = exports.UNDEFINED = exports.inDoc = exports.getComponentDisplayName = exports.kebabize = exports.camelize = exports.classify = void 0;\n\nconst path_1 = __importDefault(__webpack_require__(21023));\n\nconst transfer_1 = __webpack_require__(34723);\n\nconst backend_1 = __webpack_require__(79310);\n\nconst shared_data_1 = __webpack_require__(29556);\n\nconst env_1 = __webpack_require__(66210);\n\nfunction cached(fn) {\n const cache = Object.create(null);\n return function cachedFn(str) {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nexports.classify = cached(str => {\n // fix: str.replace may causes '\"replace\" is not a function' exception.\n // This bug may causes the UI 'Component Filter' to not work properly\n // e.g. The type of 'str' is Number.\n // So need cover 'str' to String.\n return str && ('' + str).replace(classifyRE, toUpper);\n});\nconst camelizeRE = /-(\\w)/g;\nexports.camelize = cached(str => {\n return str && str.replace(camelizeRE, toUpper);\n});\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nexports.kebabize = cached(str => {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n});\n\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n}\n\nfunction getComponentDisplayName(originalName, style = 'class') {\n switch (style) {\n case 'class':\n return (0, exports.classify)(originalName);\n\n case 'kebab':\n return (0, exports.kebabize)(originalName);\n\n case 'original':\n default:\n return originalName;\n }\n}\n\nexports.getComponentDisplayName = getComponentDisplayName;\n\nfunction inDoc(node) {\n if (!node) return false;\n const doc = node.ownerDocument.documentElement;\n const parent = node.parentNode;\n return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n}\n\nexports.inDoc = inDoc;\n/**\n * Stringify/parse data using CircularJSON.\n */\n\nexports.UNDEFINED = '__vue_devtool_undefined__';\nexports.INFINITY = '__vue_devtool_infinity__';\nexports.NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__';\nexports.NAN = '__vue_devtool_nan__';\nexports.SPECIAL_TOKENS = {\n true: true,\n false: false,\n undefined: exports.UNDEFINED,\n null: null,\n '-Infinity': exports.NEGATIVE_INFINITY,\n Infinity: exports.INFINITY,\n NaN: exports.NAN\n};\nexports.MAX_STRING_SIZE = 10000;\nexports.MAX_ARRAY_SIZE = 5000;\n\nfunction specialTokenToString(value) {\n if (value === null) {\n return 'null';\n } else if (value === exports.UNDEFINED) {\n return 'undefined';\n } else if (value === exports.NAN) {\n return 'NaN';\n } else if (value === exports.INFINITY) {\n return 'Infinity';\n } else if (value === exports.NEGATIVE_INFINITY) {\n return '-Infinity';\n }\n\n return false;\n}\n\nexports.specialTokenToString = specialTokenToString;\n/**\n * Needed to prevent stack overflow\n * while replacing complex objects\n * like components because we create\n * new objects with the CustomValue API\n * (.i.e `{ _custom: { ... } }`)\n */\n\nclass EncodeCache {\n constructor() {\n this.map = new Map();\n }\n /**\n * Returns a result unique to each input data\n * @param {*} data Input data\n * @param {*} factory Function used to create the unique result\n */\n\n\n cache(data, factory) {\n const cached = this.map.get(data);\n\n if (cached) {\n return cached;\n } else {\n const result = factory(data);\n this.map.set(data, result);\n return result;\n }\n }\n\n clear() {\n this.map.clear();\n }\n\n}\n\nconst encodeCache = new EncodeCache();\n\nclass ReviveCache {\n constructor(maxSize) {\n this.maxSize = maxSize;\n this.map = new Map();\n this.index = 0;\n this.size = 0;\n }\n\n cache(value) {\n const currentIndex = this.index;\n this.map.set(currentIndex, value);\n this.size++;\n\n if (this.size > this.maxSize) {\n this.map.delete(currentIndex - this.size);\n this.size--;\n }\n\n this.index++;\n return currentIndex;\n }\n\n read(id) {\n return this.map.get(id);\n }\n\n}\n\nconst reviveCache = new ReviveCache(1000);\n\nfunction stringify(data) {\n // Create a fresh cache for each serialization\n encodeCache.clear();\n return (0, transfer_1.stringifyCircularAutoChunks)(data, replacer);\n}\n\nexports.stringify = stringify;\n\nfunction replacer(key) {\n // @ts-ignore\n const val = this[key];\n const type = typeof val;\n\n if (Array.isArray(val)) {\n const l = val.length;\n\n if (l > exports.MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, exports.MAX_ARRAY_SIZE)\n };\n }\n\n return val;\n } else if (typeof val === 'string') {\n if (val.length > exports.MAX_STRING_SIZE) {\n return val.substring(0, exports.MAX_STRING_SIZE) + `... (${val.length} total length)`;\n } else {\n return val;\n }\n } else if (type === 'undefined') {\n return exports.UNDEFINED;\n } else if (val === Infinity) {\n return exports.INFINITY;\n } else if (val === -Infinity) {\n return exports.NEGATIVE_INFINITY;\n } else if (type === 'function') {\n return getCustomFunctionDetails(val);\n } else if (type === 'symbol') {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (val !== null && type === 'object') {\n const proto = Object.prototype.toString.call(val);\n\n if (proto === '[object Map]') {\n return encodeCache.cache(val, () => getCustomMapDetails(val));\n } else if (proto === '[object Set]') {\n return encodeCache.cache(val, () => getCustomSetDetails(val));\n } else if (proto === '[object RegExp]') {\n // special handling of native type\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === '[object Date]') {\n return `[native Date ${Date.prototype.toString.call(val)}]`;\n } else if (proto === '[object Error]') {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (val.state && val._vm) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomStoreDetails)(val));\n } else if (val.constructor && val.constructor.name === 'VueRouter') {\n return encodeCache.cache(val, () => (0, backend_1.getCustomRouterDetails)(val));\n } else if ((0, backend_1.isVueInstance)(val)) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomInstanceDetails)(val));\n } else if (typeof val.render === 'function') {\n return encodeCache.cache(val, () => getCustomComponentDefinitionDetails(val));\n } else if (val.constructor && val.constructor.name === 'VNode') {\n return `[native VNode <${val.tag}>]`;\n } else if (val instanceof HTMLElement) {\n return encodeCache.cache(val, () => getCustomHTMLElementDetails(val));\n }\n } else if (Number.isNaN(val)) {\n return exports.NAN;\n }\n\n return sanitize(val);\n}\n\nfunction getCustomMapDetails(val) {\n const list = [];\n val.forEach((value, key) => list.push({\n key,\n value\n }));\n return {\n _custom: {\n type: 'map',\n display: 'Map',\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomMapDetails = getCustomMapDetails;\n\nfunction reviveMap(val) {\n const result = new Map();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const {\n key,\n value\n } = list[i];\n result.set(key, revive(value));\n }\n\n return result;\n}\n\nexports.reviveMap = reviveMap;\n\nfunction getCustomSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: 'set',\n display: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\n\nexports.getCustomSetDetails = getCustomSetDetails;\n\nfunction reviveSet(val) {\n const result = new Set();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n\n return result;\n}\n\nexports.reviveSet = reviveSet; // Use a custom basename functions instead of the shimed version\n// because it doesn't work on Windows\n\nfunction basename(filename, ext) {\n return path_1.default.basename(filename.replace(/^[a-zA-Z]:/, '').replace(/\\\\/g, '/'), ext);\n}\n\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n\n if (name) {\n return name;\n }\n\n const file = options.__file; // injected by vue-loader\n\n if (file) {\n return (0, exports.classify)(basename(file, '.vue'));\n }\n}\n\nexports.getComponentName = getComponentName;\n\nfunction getCustomComponentDefinitionDetails(def) {\n let display = getComponentName(def);\n\n if (display) {\n if (def.name && def.__file) {\n display += ` <span>(${def.__file})</span>`;\n }\n } else {\n display = '<i>Unknown Component</i>';\n }\n\n return {\n _custom: {\n type: 'component-definition',\n display,\n tooltip: 'Component definition',\n ...(def.__file ? {\n file: def.__file\n } : {})\n }\n };\n}\n\nexports.getCustomComponentDefinitionDetails = getCustomComponentDefinitionDetails; // eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction getCustomFunctionDetails(func) {\n let string = '';\n let matches = null;\n\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {// Func is probably a Proxy, which can break Function.prototype.toString()\n } // Trim any excess whitespace from the argument string\n\n\n const match = matches && matches[0];\n const args = typeof match === 'string' ? `(${match.substring(1, match.length - 2).split(',').map(a => a.trim()).join(', ')})` : '(?)';\n const name = typeof func.name === 'string' ? func.name : '';\n return {\n _custom: {\n type: 'function',\n display: `<span>f</span> ${escape(name)}${args}`,\n _reviveId: reviveCache.cache(func)\n }\n };\n}\n\nexports.getCustomFunctionDetails = getCustomFunctionDetails;\n\nfunction getCustomHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"opacity-30\">&lt;</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">&gt;</span>`,\n value: namedNodeMapToObject(value.attributes),\n actions: [{\n icon: 'input',\n tooltip: 'Log element to console',\n action: () => {\n // eslint-disable-next-line no-console\n console.log(value);\n }\n }]\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"text-blue-500\">${String(value)}</span>`\n }\n };\n }\n}\n\nexports.getCustomHTMLElementDetails = getCustomHTMLElementDetails;\n\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n\n return result;\n}\n\nfunction getCustomRefDetails(instance, key, ref) {\n let value;\n\n if (Array.isArray(ref)) {\n value = ref.map(r => getCustomRefDetails(instance, key, r)).map(data => data.value);\n } else {\n let name;\n\n if (ref._isVue) {\n name = getComponentName(ref.$options);\n } else {\n name = ref.tagName.toLowerCase();\n }\n\n value = {\n _custom: {\n display: `&lt;${name}` + (ref.id ? ` <span class=\"attr-title\">id</span>=\"${ref.id}\"` : '') + (ref.className ? ` <span class=\"attr-title\">class</span>=\"${ref.className}\"` : '') + '&gt;',\n uid: instance.__VUE_DEVTOOLS_UID__,\n type: 'reference'\n }\n };\n }\n\n return {\n type: '$refs',\n key: key,\n value,\n editable: false\n };\n}\n\nexports.getCustomRefDetails = getCustomRefDetails;\n\nfunction parse(data, revive = false) {\n return revive ? (0, transfer_1.parseCircularAutoChunks)(data, reviver) : (0, transfer_1.parseCircularAutoChunks)(data);\n}\n\nexports.parse = parse;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>((.|\\s)*))?\\]$/;\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\n\nfunction reviver(key, val) {\n return revive(val);\n}\n\nfunction revive(val) {\n if (val === exports.UNDEFINED) {\n return undefined;\n } else if (val === exports.INFINITY) {\n return Infinity;\n } else if (val === exports.NEGATIVE_INFINITY) {\n return -Infinity;\n } else if (val === exports.NAN) {\n return NaN;\n } else if (val && val._custom) {\n const {\n _custom: custom\n } = val;\n\n if (custom.type === 'component') {\n return (0, backend_1.getInstanceMap)().get(custom.id);\n } else if (custom.type === 'map') {\n return reviveMap(val);\n } else if (custom.type === 'set') {\n return reviveSet(val);\n } else if (custom._reviveId) {\n return reviveCache.read(custom._reviveId);\n } else {\n return revive(custom.value);\n }\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string,, details] = specialTypeRE.exec(val);\n const result = new window[type](string);\n\n if (type === 'Error' && details) {\n result.stack = details;\n }\n\n return result;\n } else {\n return val;\n }\n}\n\nexports.revive = revive;\n/**\n * Sanitize data to be posted to the other side.\n * Since the message posted is sent with structured clone,\n * we need to filter out any types that might cause an error.\n *\n * @param {*} data\n * @return {*}\n */\n\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n // handle types that will probably cause issues in\n // the structured clone\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n\nfunction isPrimitive(data) {\n if (data == null) {\n return true;\n }\n\n const type = typeof data;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n/**\n * Searches a key or value in the object, with a maximum deepness\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction searchDeepInObject(obj, searchTerm) {\n const seen = new Map();\n const result = internalSearchObject(obj, searchTerm.toLowerCase(), seen, 0);\n seen.clear();\n return result;\n}\n\nexports.searchDeepInObject = searchDeepInObject;\nconst SEARCH_MAX_DEPTH = 10;\n/**\n * Executes a search on each field of the provided object\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\nfunction internalSearchObject(obj, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n const keys = Object.keys(obj);\n let key, value;\n\n for (let i = 0; i < keys.length; i++) {\n key = keys[i];\n value = obj[key];\n match = internalSearchCheck(searchTerm, key, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Executes a search on each value of the provided array\n * @param {*} array Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchArray(array, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n let value;\n\n for (let i = 0; i < array.length; i++) {\n value = array[i];\n match = internalSearchCheck(searchTerm, null, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Checks if the provided field matches the search terms\n * @param {string} searchTerm Search string\n * @param {string} key Field key (null if from array)\n * @param {*} value Field value\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchCheck(searchTerm, key, value, seen, depth) {\n let match = false;\n let result;\n\n if (key === '_custom') {\n key = value.display;\n value = value.value;\n }\n\n (result = specialTokenToString(value)) && (value = result);\n\n if (key && compare(key, searchTerm)) {\n match = true;\n seen.set(value, true);\n } else if (seen.has(value)) {\n match = seen.get(value);\n } else if (Array.isArray(value)) {\n seen.set(value, null);\n match = internalSearchArray(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (isPlainObject(value)) {\n seen.set(value, null);\n match = internalSearchObject(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (compare(value, searchTerm)) {\n match = true;\n seen.set(value, true);\n }\n\n return match;\n}\n/**\n * Compares two values\n * @param {*} value Mixed type value that will be cast to string\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction compare(value, searchTerm) {\n return ('' + value).toLowerCase().indexOf(searchTerm) !== -1;\n}\n\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key) return -1;\n if (a.key > b.key) return 1;\n return 0;\n });\n}\n\nexports.sortByKey = sortByKey;\n\nfunction simpleGet(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n}\n\nexports.simpleGet = simpleGet;\n\nfunction focusInput(el) {\n el.focus();\n el.setSelectionRange(0, el.value.length);\n}\n\nexports.focusInput = focusInput;\n\nfunction openInEditor(file) {\n // Console display\n const fileName = file.replace(/\\\\/g, '\\\\\\\\');\n const src = `fetch('${shared_data_1.SharedData.openInEditorHost}__open-in-editor?file=${encodeURI(file)}').then(response => {\n if (response.ok) {\n console.log('File ${fileName} opened in editor')\n } else {\n const msg = 'Opening component ${fileName} failed'\n const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}\n if (target.__VUE_DEVTOOLS_TOAST__) {\n target.__VUE_DEVTOOLS_TOAST__(msg, 'error')\n } else {\n console.log('%c' + msg, 'color:red')\n }\n console.log('Check the setup of your project, see https://devtools.vuejs.org/guide/open-in-editor.html')\n }\n })`;\n\n if (env_1.isChrome) {\n env_1.target.chrome.devtools.inspectedWindow.eval(src);\n } else {\n // eslint-disable-next-line no-eval\n eval(src);\n }\n}\n\nexports.openInEditor = openInEditor;\nconst ESC = {\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n '&': '&amp;'\n};\n\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, escapeChar);\n}\n\nexports.escape = escape;\n\nfunction escapeChar(a) {\n return ESC[a] || a;\n}\n\nfunction copyToClipboard(state) {\n if (typeof document === 'undefined') return;\n const dummyTextArea = document.createElement('textarea');\n dummyTextArea.textContent = stringify(state);\n document.body.appendChild(dummyTextArea);\n dummyTextArea.select();\n document.execCommand('copy');\n document.body.removeChild(dummyTextArea);\n}\n\nexports.copyToClipboard = copyToClipboard;\n\nfunction isEmptyObject(obj) {\n return obj === exports.UNDEFINED || !obj || Object.keys(obj).length === 0;\n}\n\nexports.isEmptyObject = isEmptyObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYyMDMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQU9BOztBQUNBOztBQUVBLFNBQVMsTUFBVCxDQUFpQixFQUFqQixFQUFtQjtBQUNqQixRQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBUCxDQUFjLElBQWQsQ0FBZDtBQUNBLFNBQU8sU0FBUyxRQUFULENBQW1CLEdBQW5CLEVBQXNCO0FBQzNCLFVBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFELENBQWpCO0FBQ0EsV0FBTyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUQsQ0FBTCxHQUFhLEVBQUUsQ0FBQyxHQUFELENBQXBCLENBQVY7QUFDRCxHQUhEO0FBSUQ7O0FBRUQsTUFBTSxVQUFVLEdBQUcsa0JBQW5CO0FBQ2EsbUJBQVcsTUFBTSxDQUFFLEdBQUQsSUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFOLEVBQVcsT0FBWCxDQUFtQixVQUFuQixFQUErQixPQUEvQixDQUFkO0FBQ0QsQ0FONkIsQ0FBakI7QUFRYixNQUFNLFVBQVUsR0FBRyxRQUFuQjtBQUNhLG1CQUFXLE1BQU0sQ0FBRSxHQUFELElBQVE7QUFDckMsU0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQUosQ0FBWSxVQUFaLEVBQXdCLE9BQXhCLENBQWQ7QUFDRCxDQUY2QixDQUFqQjtBQUliLE1BQU0sVUFBVSxHQUFHLG9CQUFuQjtBQUNhLG1CQUFXLE1BQU0sQ0FBRSxHQUFELElBQVE7QUFDckMsU0FBTyxHQUFHLElBQUksR0FBRyxDQUNkLE9BRFcsQ0FDSCxVQURHLEVBQ1MsQ0FBQyxDQUFELEVBQUksa0JBQUosRUFBd0IsZUFBeEIsS0FBMkM7QUFDOUQsV0FBTyxHQUFHLGtCQUFrQixJQUFJLGVBQWUsRUFBL0M7QUFDRCxHQUhXLEVBSVgsV0FKVyxFQUFkO0FBS0QsQ0FONkIsQ0FBakI7O0FBUWIsU0FBUyxPQUFULENBQWtCLENBQWxCLEVBQXFCLENBQXJCLEVBQXNCO0FBQ3BCLFNBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFGLEVBQUgsR0FBcUIsRUFBN0I7QUFDRDs7QUFFRCxTQUFnQix1QkFBaEIsQ0FBeUMsWUFBekMsRUFBdUQsS0FBSyxHQUFHLE9BQS9ELEVBQXNFO0FBQ3BFLFVBQVEsS0FBUjtBQUNFLFNBQUssT0FBTDtBQUNFLGFBQU8sc0JBQVMsWUFBVCxDQUFQOztBQUNGLFNBQUssT0FBTDtBQUNFLGFBQU8sc0JBQVMsWUFBVCxDQUFQOztBQUNGLFNBQUssVUFBTDtBQUNBO0FBQ0UsYUFBTyxZQUFQO0FBUEo7QUFTRDs7QUFWRDs7QUFZQSxTQUFnQixLQUFoQixDQUF1QixJQUF2QixFQUEyQjtBQUN6QixNQUFJLENBQUMsSUFBTCxFQUFXLE9BQU8sS0FBUDtBQUNYLFFBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFMLENBQW1CLGVBQS9CO0FBQ0EsUUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQXBCO0FBQ0EsU0FBTyxHQUFHLEtBQUssSUFBUixJQUNMLEdBQUcsS0FBSyxNQURILElBRUwsQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUCxLQUFvQixDQUE5QixJQUFvQyxHQUFHLENBQUMsUUFBSixDQUFhLE1BQWIsQ0FBdEMsQ0FGSDtBQUdEOztBQVBEO0FBU0E7O0FBRUc7O0FBRVUsb0JBQVksMkJBQVo7QUFDQSxtQkFBVywwQkFBWDtBQUNBLDRCQUFvQixtQ0FBcEI7QUFDQSxjQUFNLHFCQUFOO0FBRUEseUJBQWlCO0FBQzVCLE1BQUksRUFBRSxJQURzQjtBQUU1QixPQUFLLEVBQUUsS0FGcUI7QUFHNUIsV0FBUyxFQUFFLGlCQUhpQjtBQUk1QixNQUFJLEVBQUUsSUFKc0I7QUFLNUIsZUFBYSx5QkFMZTtBQU01QixVQUFRLEVBQUUsZ0JBTmtCO0FBTzVCLEtBQUcsRUFBRTtBQVB1QixDQUFqQjtBQVVBLDBCQUFrQixLQUFsQjtBQUNBLHlCQUFpQixJQUFqQjs7QUFFYixTQUFnQixvQkFBaEIsQ0FBc0MsS0FBdEMsRUFBMkM7QUFDekMsTUFBSSxLQUFLLEtBQUssSUFBZCxFQUFvQjtBQUNsQixXQUFPLE1BQVA7QUFDRCxHQUZELE1BRU8sSUFBSSxLQUFLLEtBQUssaUJBQWQsRUFBeUI7QUFDOUIsV0FBTyxXQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksS0FBSyxLQUFLLFdBQWQsRUFBbUI7QUFDeEIsV0FBTyxLQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksS0FBSyxLQUFLLGdCQUFkLEVBQXdCO0FBQzdCLFdBQU8sVUFBUDtBQUNELEdBRk0sTUFFQSxJQUFJLEtBQUssS0FBSyx5QkFBZCxFQUFpQztBQUN0QyxXQUFPLFdBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQVA7QUFDRDs7QUFiRDtBQWVBOzs7Ozs7QUFNRzs7QUFDSCxNQUFNLFdBQU4sQ0FBaUI7QUFHZjtBQUNFLFNBQUssR0FBTCxHQUFXLElBQUksR0FBSixFQUFYO0FBQ0Q7QUFFRDs7OztBQUlHOzs7QUFDSCxPQUFLLENBQWtCLElBQWxCLEVBQStCLE9BQS9CLEVBQWdFO0FBQ25FLFVBQU0sTUFBTSxHQUFZLEtBQUssR0FBTCxDQUFTLEdBQVQsQ0FBYSxJQUFiLENBQXhCOztBQUNBLFFBQUksTUFBSixFQUFZO0FBQ1YsYUFBTyxNQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsWUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUQsQ0FBdEI7QUFDQSxXQUFLLEdBQUwsQ0FBUyxHQUFULENBQWEsSUFBYixFQUFtQixNQUFuQjtBQUNBLGFBQU8sTUFBUDtBQUNEO0FBQ0Y7O0FBRUQsT0FBSztBQUNILFNBQUssR0FBTCxDQUFTLEtBQVQ7QUFDRDs7QUF6QmM7O0FBNEJqQixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQUosRUFBcEI7O0FBRUEsTUFBTSxXQUFOLENBQWlCO0FBTWYsY0FBYSxPQUFiLEVBQTRCO0FBQzFCLFNBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxTQUFLLEdBQUwsR0FBVyxJQUFJLEdBQUosRUFBWDtBQUNBLFNBQUssS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLLElBQUwsR0FBWSxDQUFaO0FBQ0Q7O0FBRUQsT0FBSyxDQUFFLEtBQUYsRUFBWTtBQUNmLFVBQU0sWUFBWSxHQUFHLEtBQUssS0FBMUI7QUFDQSxTQUFLLEdBQUwsQ0FBUyxHQUFULENBQWEsWUFBYixFQUEyQixLQUEzQjtBQUNBLFNBQUssSUFBTDs7QUFDQSxRQUFJLEtBQUssSUFBTCxHQUFZLEtBQUssT0FBckIsRUFBOEI7QUFDNUIsV0FBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixZQUFZLEdBQUcsS0FBSyxJQUFwQztBQUNBLFdBQUssSUFBTDtBQUNEOztBQUNELFNBQUssS0FBTDtBQUNBLFdBQU8sWUFBUDtBQUNEOztBQUVELE1BQUksQ0FBRSxFQUFGLEVBQVk7QUFDZCxXQUFPLEtBQUssR0FBTCxDQUFTLEdBQVQsQ0FBYSxFQUFiLENBQVA7QUFDRDs7QUEzQmM7O0FBOEJqQixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQUosQ0FBZ0IsSUFBaEIsQ0FBcEI7O0FBRUEsU0FBZ0IsU0FBaEIsQ0FBMkIsSUFBM0IsRUFBK0I7QUFDN0I7QUFDQSxhQUFXLENBQUMsS0FBWjtBQUNBLFNBQU8sNENBQTRCLElBQTVCLEVBQWtDLFFBQWxDLENBQVA7QUFDRDs7QUFKRDs7QUFNQSxTQUFTLFFBQVQsQ0FBbUIsR0FBbkIsRUFBc0I7QUFDcEI7QUFDQSxRQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUwsQ0FBWjtBQUNBLFFBQU0sSUFBSSxHQUFHLE9BQU8sR0FBcEI7O0FBQ0EsTUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QixVQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBZDs7QUFDQSxRQUFJLENBQUMsR0FBRyxzQkFBUixFQUF3QjtBQUN0QixhQUFPO0FBQ0wsZ0JBQVEsRUFBRSxJQURMO0FBRUwsY0FBTSxFQUFFLENBRkg7QUFHTCxhQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUosQ0FBVSxDQUFWLEVBQWEsc0JBQWI7QUFIRixPQUFQO0FBS0Q7O0FBQ0QsV0FBTyxHQUFQO0FBQ0QsR0FWRCxNQVVPLElBQUksT0FBTyxHQUFQLEtBQWUsUUFBbkIsRUFBNkI7QUFDbEMsUUFBSSxHQUFHLENBQUMsTUFBSixHQUFhLHVCQUFqQixFQUFrQztBQUNoQyxhQUFPLEdBQUcsQ0FBQyxTQUFKLENBQWMsQ0FBZCxFQUFpQix1QkFBakIsSUFBb0MsUUFBUyxHQUFHLENBQUMsTUFBTyxnQkFBL0Q7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEdBQVA7QUFDRDtBQUNGLEdBTk0sTUFNQSxJQUFJLElBQUksS0FBSyxXQUFiLEVBQTBCO0FBQy9CLFdBQU8saUJBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUssUUFBWixFQUFzQjtBQUMzQixXQUFPLGdCQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksR0FBRyxLQUFLLENBQUMsUUFBYixFQUF1QjtBQUM1QixXQUFPLHlCQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksSUFBSSxLQUFLLFVBQWIsRUFBeUI7QUFDOUIsV0FBTyx3QkFBd0IsQ0FBQyxHQUFELENBQS9CO0FBQ0QsR0FGTSxNQUVBLElBQUksSUFBSSxLQUFLLFFBQWIsRUFBdUI7QUFDNUIsV0FBTyxrQkFBa0IsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsR0FBL0IsQ0FBbUMsR0FBNUQ7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUssSUFBUixJQUFnQixJQUFJLEtBQUssUUFBN0IsRUFBdUM7QUFDNUMsVUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsR0FBL0IsQ0FBZDs7QUFDQSxRQUFJLEtBQUssS0FBSyxjQUFkLEVBQThCO0FBQzVCLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxtQkFBbUIsQ0FBQyxHQUFELENBQWhELENBQVA7QUFDRCxLQUZELE1BRU8sSUFBSSxLQUFLLEtBQUssY0FBZCxFQUE4QjtBQUNuQyxhQUFPLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLEVBQXVCLE1BQU0sbUJBQW1CLENBQUMsR0FBRCxDQUFoRCxDQUFQO0FBQ0QsS0FGTSxNQUVBLElBQUksS0FBSyxLQUFLLGlCQUFkLEVBQWlDO0FBQ3RDO0FBQ0EsYUFBTyxrQkFBa0IsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsR0FBL0IsQ0FBbUMsR0FBNUQ7QUFDRCxLQUhNLE1BR0EsSUFBSSxLQUFLLEtBQUssZUFBZCxFQUErQjtBQUNwQyxhQUFPLGdCQUFnQixJQUFJLENBQUMsU0FBTCxDQUFlLFFBQWYsQ0FBd0IsSUFBeEIsQ0FBNkIsR0FBN0IsQ0FBaUMsR0FBeEQ7QUFDRCxLQUZNLE1BRUEsSUFBSSxLQUFLLEtBQUssZ0JBQWQsRUFBZ0M7QUFDckMsYUFBTyxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFqRDtBQUNELEtBRk0sTUFFQSxJQUFJLEdBQUcsQ0FBQyxLQUFKLElBQWEsR0FBRyxDQUFDLEdBQXJCLEVBQTBCO0FBQy9CLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxxQ0FBc0IsR0FBdEIsQ0FBN0IsQ0FBUDtBQUNELEtBRk0sTUFFQSxJQUFJLEdBQUcsQ0FBQyxXQUFKLElBQW1CLEdBQUcsQ0FBQyxXQUFKLENBQWdCLElBQWhCLEtBQXlCLFdBQWhELEVBQTZEO0FBQ2xFLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxzQ0FBdUIsR0FBdkIsQ0FBN0IsQ0FBUDtBQUNELEtBRk0sTUFFQSxJQUFJLDZCQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUM3QixhQUFPLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLEVBQXVCLE1BQU0sd0NBQXlCLEdBQXpCLENBQTdCLENBQVA7QUFDRCxLQUZNLE1BRUEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFYLEtBQXNCLFVBQTFCLEVBQXNDO0FBQzNDLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxtQ0FBbUMsQ0FBQyxHQUFELENBQWhFLENBQVA7QUFDRCxLQUZNLE1BRUEsSUFBSSxHQUFHLENBQUMsV0FBSixJQUFtQixHQUFHLENBQUMsV0FBSixDQUFnQixJQUFoQixLQUF5QixPQUFoRCxFQUF5RDtBQUM5RCxhQUFPLGtCQUFrQixHQUFHLENBQUMsR0FBRyxJQUFoQztBQUNELEtBRk0sTUFFQSxJQUFJLEdBQUcsWUFBWSxXQUFuQixFQUFnQztBQUNyQyxhQUFPLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLEVBQXVCLE1BQU0sMkJBQTJCLENBQUMsR0FBRCxDQUF4RCxDQUFQO0FBQ0Q7QUFDRixHQTFCTSxNQTBCQSxJQUFJLE1BQU0sQ0FBQyxLQUFQLENBQWEsR0FBYixDQUFKLEVBQXVCO0FBQzVCLFdBQU8sV0FBUDtBQUNEOztBQUNELFNBQU8sUUFBUSxDQUFDLEdBQUQsQ0FBZjtBQUNEOztBQUVELFNBQWdCLG1CQUFoQixDQUFxQyxHQUFyQyxFQUF3QztBQUN0QyxRQUFNLElBQUksR0FBRyxFQUFiO0FBQ0EsS0FBRyxDQUFDLE9BQUosQ0FDRSxDQUFDLEtBQUQsRUFBUSxHQUFSLEtBQWdCLElBQUksQ0FBQyxJQUFMLENBQVU7QUFDeEIsT0FEd0I7QUFFeEI7QUFGd0IsR0FBVixDQURsQjtBQU1BLFNBQU87QUFDTCxXQUFPLEVBQUU7QUFDUCxVQUFJLEVBQUUsS0FEQztBQUVQLGFBQU8sRUFBRSxLQUZGO0FBR1AsV0FBSyxFQUFFLElBSEE7QUFJUCxjQUFRLEVBQUUsSUFKSDtBQUtQLFlBQU0sRUFBRTtBQUNOLGdCQUFRLEVBQUU7QUFESjtBQUxEO0FBREosR0FBUDtBQVdEOztBQW5CRDs7QUFxQkEsU0FBZ0IsU0FBaEIsQ0FBMkIsR0FBM0IsRUFBOEI7QUFDNUIsUUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFKLEVBQWY7QUFDQSxRQUFNLElBQUksR0FBRyxHQUFHLENBQUMsT0FBSixDQUFZLEtBQXpCOztBQUNBLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBYixFQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQXpCLEVBQWlDLENBQUMsRUFBbEMsRUFBc0M7QUFDcEMsVUFBTTtBQUFFLFNBQUY7QUFBTztBQUFQLFFBQWlCLElBQUksQ0FBQyxDQUFELENBQTNCO0FBQ0EsVUFBTSxDQUFDLEdBQVAsQ0FBVyxHQUFYLEVBQWdCLE1BQU0sQ0FBQyxLQUFELENBQXRCO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFQO0FBQ0Q7O0FBUkQ7O0FBVUEsU0FBZ0IsbUJBQWhCLENBQXFDLEdBQXJDLEVBQXdDO0FBQ3RDLFFBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFOLENBQVcsR0FBWCxDQUFiO0FBQ0EsU0FBTztBQUNMLFdBQU8sRUFBRTtBQUNQLFVBQUksRUFBRSxLQURDO0FBRVAsYUFBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FGcEI7QUFHUCxXQUFLLEVBQUUsSUFIQTtBQUlQLGNBQVEsRUFBRTtBQUpIO0FBREosR0FBUDtBQVFEOztBQVZEOztBQVlBLFNBQWdCLFNBQWhCLENBQTJCLEdBQTNCLEVBQThCO0FBQzVCLFFBQU0sTUFBTSxHQUFHLElBQUksR0FBSixFQUFmO0FBQ0EsUUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQUosQ0FBWSxLQUF6Qjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUF6QixFQUFpQyxDQUFDLEVBQWxDLEVBQXNDO0FBQ3BDLFVBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFELENBQWxCO0FBQ0EsVUFBTSxDQUFDLEdBQVAsQ0FBVyxNQUFNLENBQUMsS0FBRCxDQUFqQjtBQUNEOztBQUNELFNBQU8sTUFBUDtBQUNEOztBQVJELDhCLENBVUE7QUFDQTs7QUFDQSxTQUFTLFFBQVQsQ0FBbUIsUUFBbkIsRUFBNkIsR0FBN0IsRUFBZ0M7QUFDOUIsU0FBTyxlQUFLLFFBQUwsQ0FDTCxRQUFRLENBQUMsT0FBVCxDQUFpQixZQUFqQixFQUErQixFQUEvQixFQUFtQyxPQUFuQyxDQUEyQyxLQUEzQyxFQUFrRCxHQUFsRCxDQURLLEVBRUwsR0FGSyxDQUFQO0FBSUQ7O0FBRUQsU0FBZ0IsZ0JBQWhCLENBQWtDLE9BQWxDLEVBQXlDO0FBQ3ZDLFFBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFSLElBQXVCLE9BQU8sQ0FBQyxJQUEvQixJQUF1QyxPQUFPLENBQUMsYUFBNUQ7O0FBQ0EsTUFBSSxJQUFKLEVBQVU7QUFDUixXQUFPLElBQVA7QUFDRDs7QUFDRCxRQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBckIsQ0FMdUMsQ0FLWDs7QUFDNUIsTUFBSSxJQUFKLEVBQVU7QUFDUixXQUFPLHNCQUFTLFFBQVEsQ0FBQyxJQUFELEVBQU8sTUFBUCxDQUFqQixDQUFQO0FBQ0Q7QUFDRjs7QUFURDs7QUFXQSxTQUFnQixtQ0FBaEIsQ0FBcUQsR0FBckQsRUFBd0Q7QUFDdEQsTUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRCxDQUE5Qjs7QUFDQSxNQUFJLE9BQUosRUFBYTtBQUNYLFFBQUksR0FBRyxDQUFDLElBQUosSUFBWSxHQUFHLENBQUMsTUFBcEIsRUFBNEI7QUFDMUIsYUFBTyxJQUFJLFdBQVcsR0FBRyxDQUFDLE1BQU0sVUFBaEM7QUFDRDtBQUNGLEdBSkQsTUFJTztBQUNMLFdBQU8sR0FBRywwQkFBVjtBQUNEOztBQUNELFNBQU87QUFDTCxXQUFPLEVBQUU7QUFDUCxVQUFJLEVBQUUsc0JBREM7QUFFUCxhQUZPO0FBR1AsYUFBTyxFQUFFLHNCQUhGO0FBSVAsVUFBRyxHQUFHLENBQUMsTUFBSixHQUNDO0FBQ0UsWUFBSSxFQUFFLEdBQUcsQ0FBQztBQURaLE9BREQsR0FJQyxFQUpKO0FBSk87QUFESixHQUFQO0FBWUQ7O0FBckJELGtGLENBdUJBOztBQUNBLFNBQWdCLHdCQUFoQixDQUEwQyxJQUExQyxFQUF3RDtBQUN0RCxNQUFJLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSSxPQUFPLEdBQUcsSUFBZDs7QUFDQSxNQUFJO0FBQ0YsVUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFULENBQW1CLFFBQW5CLENBQTRCLElBQTVCLENBQWlDLElBQWpDLENBQVQ7QUFDQSxXQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsS0FBakIsQ0FBdUIsSUFBdkIsQ0FBNEIsTUFBNUIsRUFBb0MsY0FBcEMsQ0FBVjtBQUNELEdBSEQsQ0FHRSxPQUFPLENBQVAsRUFBVSxDQUNWO0FBQ0QsR0FScUQsQ0FTdEQ7OztBQUNBLFFBQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBRCxDQUFoQztBQUNBLFFBQU0sSUFBSSxHQUFHLE9BQU8sS0FBUCxLQUFpQixRQUFqQixHQUNULElBQUksS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsQ0FBaEIsRUFBbUIsS0FBSyxDQUFDLE1BQU4sR0FBZSxDQUFsQyxFQUFxQyxLQUFyQyxDQUEyQyxHQUEzQyxFQUFnRCxHQUFoRCxDQUFvRCxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUYsRUFBekQsRUFBbUUsSUFBbkUsQ0FBd0UsSUFBeEUsQ0FBNkUsR0FEeEUsR0FFVCxLQUZKO0FBR0EsUUFBTSxJQUFJLEdBQUcsT0FBTyxJQUFJLENBQUMsSUFBWixLQUFxQixRQUFyQixHQUFnQyxJQUFJLENBQUMsSUFBckMsR0FBNEMsRUFBekQ7QUFDQSxTQUFPO0FBQ0wsV0FBTyxFQUFFO0FBQ1AsVUFBSSxFQUFFLFVBREM7QUFFUCxhQUFPLEVBQUUsa0JBQWtCLE1BQU0sQ0FBQyxJQUFELENBQU0sR0FBRyxJQUFJLEVBRnZDO0FBR1AsZUFBUyxFQUFFLFdBQVcsQ0FBQyxLQUFaLENBQWtCLElBQWxCO0FBSEo7QUFESixHQUFQO0FBT0Q7O0FBdEJEOztBQXdCQSxTQUFnQiwyQkFBaEIsQ0FBNkMsS0FBN0MsRUFBK0Q7QUFDN0QsTUFBSTtBQUNGLFdBQU87QUFDTCxhQUFPLEVBQUU7QUFDUCxZQUFJLEVBQUUsYUFEQztBQUVQLGVBQU8sRUFBRSxtRUFBbUUsS0FBSyxDQUFDLE9BQU4sQ0FBYyxXQUFkLEVBQTJCLDZDQUZoRztBQUdQLGFBQUssRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBUCxDQUhwQjtBQUlQLGVBQU8sRUFBRSxDQUNQO0FBQ0UsY0FBSSxFQUFFLE9BRFI7QUFFRSxpQkFBTyxFQUFFLHdCQUZYO0FBR0UsZ0JBQU0sRUFBRSxNQUFLO0FBQ1g7QUFDQSxtQkFBTyxDQUFDLEdBQVIsQ0FBWSxLQUFaO0FBQ0Q7QUFOSCxTQURPO0FBSkY7QUFESixLQUFQO0FBaUJELEdBbEJELENBa0JFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTztBQUNMLGFBQU8sRUFBRTtBQUNQLFlBQUksRUFBRSxhQURDO0FBRVAsZUFBTyxFQUFFLCtCQUErQixNQUFNLENBQUMsS0FBRCxDQUFPO0FBRjlDO0FBREosS0FBUDtBQU1EO0FBQ0Y7O0FBM0JEOztBQTZCQSxTQUFTLG9CQUFULENBQStCLEdBQS9CLEVBQWdEO0FBQzlDLFFBQU0sTUFBTSxHQUFRLEVBQXBCO0FBQ0EsUUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQWQ7O0FBQ0EsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFiLEVBQWdCLENBQUMsR0FBRyxDQUFwQixFQUF1QixDQUFDLEVBQXhCLEVBQTRCO0FBQzFCLFVBQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFKLENBQVMsQ0FBVCxDQUFiO0FBQ0EsVUFBTSxDQUFDLElBQUksQ0FBQyxJQUFOLENBQU4sR0FBb0IsSUFBSSxDQUFDLEtBQXpCO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFQO0FBQ0Q7O0FBRUQsU0FBZ0IsbUJBQWhCLENBQXFDLFFBQXJDLEVBQStDLEdBQS9DLEVBQW9ELEdBQXBELEVBQXVEO0FBQ3JELE1BQUksS0FBSjs7QUFDQSxNQUFJLEtBQUssQ0FBQyxPQUFOLENBQWMsR0FBZCxDQUFKLEVBQXdCO0FBQ3RCLFNBQUssR0FBRyxHQUFHLENBQUMsR0FBSixDQUFTLENBQUQsSUFBTyxtQkFBbUIsQ0FBQyxRQUFELEVBQVcsR0FBWCxFQUFnQixDQUFoQixDQUFsQyxFQUFzRCxHQUF0RCxDQUEwRCxJQUFJLElBQUksSUFBSSxDQUFDLEtBQXZFLENBQVI7QUFDRCxHQUZELE1BRU87QUFDTCxRQUFJLElBQUo7O0FBQ0EsUUFBSSxHQUFHLENBQUMsTUFBUixFQUFnQjtBQUNkLFVBQUksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBTCxDQUF2QjtBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksR0FBRyxHQUFHLENBQUMsT0FBSixDQUFZLFdBQVosRUFBUDtBQUNEOztBQUVELFNBQUssR0FBRztBQUNOLGFBQU8sRUFBRTtBQUNQLGVBQU8sRUFBRSxPQUFPLElBQUksRUFBWCxJQUNOLEdBQUcsQ0FBQyxFQUFKLEdBQVMsd0NBQXdDLEdBQUcsQ0FBQyxFQUFFLEdBQXZELEdBQTZELEVBRHZELEtBRU4sR0FBRyxDQUFDLFNBQUosR0FBZ0IsMkNBQTJDLEdBQUcsQ0FBQyxTQUFTLEdBQXhFLEdBQThFLEVBRnhFLElBRThFLE1BSGhGO0FBSVAsV0FBRyxFQUFFLFFBQVEsQ0FBQyxvQkFKUDtBQUtQLFlBQUksRUFBRTtBQUxDO0FBREgsS0FBUjtBQVNEOztBQUNELFNBQU87QUFDTCxRQUFJLEVBQUUsT0FERDtBQUVMLE9BQUcsRUFBRSxHQUZBO0FBR0wsU0FISztBQUlMLFlBQVEsRUFBRTtBQUpMLEdBQVA7QUFNRDs7QUE1QkQ7O0FBOEJBLFNBQWdCLEtBQWhCLENBQXVCLElBQXZCLEVBQWtDLE1BQU0sR0FBRyxLQUEzQyxFQUFnRDtBQUM5QyxTQUFPLE1BQU0sR0FDVCx3Q0FBd0IsSUFBeEIsRUFBOEIsT0FBOUIsQ0FEUyxHQUVULHdDQUF3QixJQUF4QixDQUZKO0FBR0Q7O0FBSkQ7QUFNQSxNQUFNLGFBQWEsR0FBRyx3Q0FBdEI7QUFDQSxNQUFNLFFBQVEsR0FBRyxvQ0FBakI7O0FBRUEsU0FBUyxPQUFULENBQWtCLEdBQWxCLEVBQXVCLEdBQXZCLEVBQTBCO0FBQ3hCLFNBQU8sTUFBTSxDQUFDLEdBQUQsQ0FBYjtBQUNEOztBQUVELFNBQWdCLE1BQWhCLENBQXdCLEdBQXhCLEVBQTJCO0FBQ3pCLE1BQUksR0FBRyxLQUFLLGlCQUFaLEVBQXVCO0FBQ3JCLFdBQU8sU0FBUDtBQUNELEdBRkQsTUFFTyxJQUFJLEdBQUcsS0FBSyxnQkFBWixFQUFzQjtBQUMzQixXQUFPLFFBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUsseUJBQVosRUFBK0I7QUFDcEMsV0FBTyxDQUFDLFFBQVI7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUssV0FBWixFQUFpQjtBQUN0QixXQUFPLEdBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQWYsRUFBd0I7QUFDN0IsVUFBTTtBQUFFLGFBQU8sRUFBRTtBQUFYLFFBQW1DLEdBQXpDOztBQUNBLFFBQUksTUFBTSxDQUFDLElBQVAsS0FBZ0IsV0FBcEIsRUFBaUM7QUFDL0IsYUFBTyxnQ0FBaUIsR0FBakIsQ0FBcUIsTUFBTSxDQUFDLEVBQTVCLENBQVA7QUFDRCxLQUZELE1BRU8sSUFBSSxNQUFNLENBQUMsSUFBUCxLQUFnQixLQUFwQixFQUEyQjtBQUNoQyxhQUFPLFNBQVMsQ0FBQyxHQUFELENBQWhCO0FBQ0QsS0FGTSxNQUVBLElBQUksTUFBTSxDQUFDLElBQVAsS0FBZ0IsS0FBcEIsRUFBMkI7QUFDaEMsYUFBTyxTQUFTLENBQUMsR0FBRCxDQUFoQjtBQUNELEtBRk0sTUFFQSxJQUFJLE1BQU0sQ0FBQyxTQUFYLEVBQXNCO0FBQzNCLGFBQU8sV0FBVyxDQUFDLElBQVosQ0FBaUIsTUFBTSxDQUFDLFNBQXhCLENBQVA7QUFDRCxLQUZNLE1BRUE7QUFDTCxhQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBUixDQUFiO0FBQ0Q7QUFDRixHQWJNLE1BYUEsSUFBSSxRQUFRLENBQUMsSUFBVCxDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUM3QixVQUFNLEdBQUcsTUFBSCxJQUFhLFFBQVEsQ0FBQyxJQUFULENBQWMsR0FBZCxDQUFuQjtBQUNBLFdBQU8sTUFBTSxDQUFDLEdBQVAsQ0FBVyxNQUFYLENBQVA7QUFDRCxHQUhNLE1BR0EsSUFBSSxhQUFhLENBQUMsSUFBZCxDQUFtQixHQUFuQixDQUFKLEVBQTZCO0FBQ2xDLFVBQU0sR0FBRyxJQUFILEVBQVMsTUFBVCxHQUFrQixPQUFsQixJQUE2QixhQUFhLENBQUMsSUFBZCxDQUFtQixHQUFuQixDQUFuQztBQUNBLFVBQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUQsQ0FBVixDQUFpQixNQUFqQixDQUFmOztBQUNBLFFBQUksSUFBSSxLQUFLLE9BQVQsSUFBb0IsT0FBeEIsRUFBaUM7QUFDL0IsWUFBTSxDQUFDLEtBQVAsR0FBZSxPQUFmO0FBQ0Q7O0FBQ0QsV0FBTyxNQUFQO0FBQ0QsR0FQTSxNQU9BO0FBQ0wsV0FBTyxHQUFQO0FBQ0Q7QUFDRjs7QUFuQ0Q7QUFxQ0E7Ozs7Ozs7QUFPRzs7QUFFSCxTQUFTLFFBQVQsQ0FBbUIsSUFBbkIsRUFBdUI7QUFDckIsTUFDRSxDQUFDLFdBQVcsQ0FBQyxJQUFELENBQVosSUFDQSxDQUFDLEtBQUssQ0FBQyxPQUFOLENBQWMsSUFBZCxDQURELElBRUEsQ0FBQyxhQUFhLENBQUMsSUFBRCxDQUhoQixFQUlFO0FBQ0E7QUFDQTtBQUNBLFdBQU8sTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsSUFBL0IsQ0FBUDtBQUNELEdBUkQsTUFRTztBQUNMLFdBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBZ0IsYUFBaEIsQ0FBK0IsR0FBL0IsRUFBa0M7QUFDaEMsU0FBTyxNQUFNLENBQUMsU0FBUCxDQUFpQixRQUFqQixDQUEwQixJQUExQixDQUErQixHQUEvQixNQUF3QyxpQkFBL0M7QUFDRDs7QUFGRDs7QUFJQSxTQUFTLFdBQVQsQ0FBc0IsSUFBdEIsRUFBMEI7QUFDeEIsTUFBSSxJQUFJLElBQUksSUFBWixFQUFrQjtBQUNoQixXQUFPLElBQVA7QUFDRDs7QUFDRCxRQUFNLElBQUksR0FBRyxPQUFPLElBQXBCO0FBQ0EsU0FDRSxJQUFJLEtBQUssUUFBVCxJQUNBLElBQUksS0FBSyxRQURULElBRUEsSUFBSSxLQUFLLFNBSFg7QUFLRDtBQUVEOzs7OztBQUtHOzs7QUFDSCxTQUFnQixrQkFBaEIsQ0FBb0MsR0FBcEMsRUFBeUMsVUFBekMsRUFBbUQ7QUFDakQsUUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFKLEVBQWI7QUFDQSxRQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxHQUFELEVBQU0sVUFBVSxDQUFDLFdBQVgsRUFBTixFQUFnQyxJQUFoQyxFQUFzQyxDQUF0QyxDQUFuQztBQUNBLE1BQUksQ0FBQyxLQUFMO0FBQ0EsU0FBTyxNQUFQO0FBQ0Q7O0FBTEQ7QUFPQSxNQUFNLGdCQUFnQixHQUFHLEVBQXpCO0FBRUE7Ozs7Ozs7QUFPRzs7QUFDSCxTQUFTLG9CQUFULENBQStCLEdBQS9CLEVBQW9DLFVBQXBDLEVBQWdELElBQWhELEVBQXNELEtBQXRELEVBQTJEO0FBQ3pELE1BQUksS0FBSyxHQUFHLGdCQUFaLEVBQThCO0FBQzVCLFdBQU8sS0FBUDtBQUNEOztBQUNELE1BQUksS0FBSyxHQUFHLEtBQVo7QUFDQSxRQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBUCxDQUFZLEdBQVosQ0FBYjtBQUNBLE1BQUksR0FBSixFQUFTLEtBQVQ7O0FBQ0EsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFiLEVBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBekIsRUFBaUMsQ0FBQyxFQUFsQyxFQUFzQztBQUNwQyxPQUFHLEdBQUcsSUFBSSxDQUFDLENBQUQsQ0FBVjtBQUNBLFNBQUssR0FBRyxHQUFHLENBQUMsR0FBRCxDQUFYO0FBQ0EsU0FBSyxHQUFHLG1CQUFtQixDQUFDLFVBQUQsRUFBYSxHQUFiLEVBQWtCLEtBQWxCLEVBQXlCLElBQXpCLEVBQStCLEtBQUssR0FBRyxDQUF2QyxDQUEzQjs7QUFDQSxRQUFJLEtBQUosRUFBVztBQUNUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPLEtBQVA7QUFDRDtBQUVEOzs7Ozs7O0FBT0c7OztBQUNILFNBQVMsbUJBQVQsQ0FBOEIsS0FBOUIsRUFBcUMsVUFBckMsRUFBaUQsSUFBakQsRUFBdUQsS0FBdkQsRUFBNEQ7QUFDMUQsTUFBSSxLQUFLLEdBQUcsZ0JBQVosRUFBOEI7QUFDNUIsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxLQUFLLEdBQUcsS0FBWjtBQUNBLE1BQUksS0FBSjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUExQixFQUFrQyxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFNBQUssR0FBRyxLQUFLLENBQUMsQ0FBRCxDQUFiO0FBQ0EsU0FBSyxHQUFHLG1CQUFtQixDQUFDLFVBQUQsRUFBYSxJQUFiLEVBQW1CLEtBQW5CLEVBQTBCLElBQTFCLEVBQWdDLEtBQUssR0FBRyxDQUF4QyxDQUEzQjs7QUFDQSxRQUFJLEtBQUosRUFBVztBQUNUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPLEtBQVA7QUFDRDtBQUVEOzs7Ozs7OztBQVFHOzs7QUFDSCxTQUFTLG1CQUFULENBQThCLFVBQTlCLEVBQTBDLEdBQTFDLEVBQStDLEtBQS9DLEVBQXNELElBQXRELEVBQTRELEtBQTVELEVBQWlFO0FBQy9ELE1BQUksS0FBSyxHQUFHLEtBQVo7QUFDQSxNQUFJLE1BQUo7O0FBQ0EsTUFBSSxHQUFHLEtBQUssU0FBWixFQUF1QjtBQUNyQixPQUFHLEdBQUcsS0FBSyxDQUFDLE9BQVo7QUFDQSxTQUFLLEdBQUcsS0FBSyxDQUFDLEtBQWQ7QUFDRDs7QUFDRCxHQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxLQUFELENBQTlCLE1BQTJDLEtBQUssR0FBRyxNQUFuRDs7QUFDQSxNQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRCxFQUFNLFVBQU4sQ0FBbEIsRUFBcUM7QUFDbkMsU0FBSyxHQUFHLElBQVI7QUFDQSxRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsSUFBaEI7QUFDRCxHQUhELE1BR08sSUFBSSxJQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsQ0FBSixFQUFxQjtBQUMxQixTQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUwsQ0FBUyxLQUFULENBQVI7QUFDRCxHQUZNLE1BRUEsSUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEtBQWQsQ0FBSixFQUEwQjtBQUMvQixRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsSUFBaEI7QUFDQSxTQUFLLEdBQUcsbUJBQW1CLENBQUMsS0FBRCxFQUFRLFVBQVIsRUFBb0IsSUFBcEIsRUFBMEIsS0FBMUIsQ0FBM0I7QUFDQSxRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsS0FBaEI7QUFDRCxHQUpNLE1BSUEsSUFBSSxhQUFhLENBQUMsS0FBRCxDQUFqQixFQUEwQjtBQUMvQixRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsSUFBaEI7QUFDQSxTQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBRCxFQUFRLFVBQVIsRUFBb0IsSUFBcEIsRUFBMEIsS0FBMUIsQ0FBNUI7QUFDQSxRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsS0FBaEI7QUFDRCxHQUpNLE1BSUEsSUFBSSxPQUFPLENBQUMsS0FBRCxFQUFRLFVBQVIsQ0FBWCxFQUFnQztBQUNyQyxTQUFLLEdBQUcsSUFBUjtBQUNBLFFBQUksQ0FBQyxHQUFMLENBQVMsS0FBVCxFQUFnQixJQUFoQjtBQUNEOztBQUNELFNBQU8sS0FBUDtBQUNEO0FBRUQ7Ozs7O0FBS0c7OztBQUNILFNBQVMsT0FBVCxDQUFrQixLQUFsQixFQUF5QixVQUF6QixFQUFtQztBQUNqQyxTQUFPLENBQUMsS0FBSyxLQUFOLEVBQWEsV0FBYixHQUEyQixPQUEzQixDQUFtQyxVQUFuQyxNQUFtRCxDQUFDLENBQTNEO0FBQ0Q7O0FBRUQsU0FBZ0IsU0FBaEIsQ0FBMkIsS0FBM0IsRUFBZ0M7QUFDOUIsU0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQU4sR0FBYyxJQUFkLENBQW1CLENBQUMsQ0FBRCxFQUFJLENBQUosS0FBUztBQUMxQyxRQUFJLENBQUMsQ0FBQyxHQUFGLEdBQVEsQ0FBQyxDQUFDLEdBQWQsRUFBbUIsT0FBTyxDQUFDLENBQVI7QUFDbkIsUUFBSSxDQUFDLENBQUMsR0FBRixHQUFRLENBQUMsQ0FBQyxHQUFkLEVBQW1CLE9BQU8sQ0FBUDtBQUNuQixXQUFPLENBQVA7QUFDRCxHQUplLENBQWhCO0FBS0Q7O0FBTkQ7O0FBUUEsU0FBZ0IsU0FBaEIsQ0FBMkIsTUFBM0IsRUFBbUMsSUFBbkMsRUFBdUM7QUFDckMsUUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLElBQXNCLElBQXRCLEdBQTZCLElBQUksQ0FBQyxLQUFMLENBQVcsR0FBWCxDQUE5Qzs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUE3QixFQUFxQyxDQUFDLEVBQXRDLEVBQTBDO0FBQ3hDLFVBQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUQsQ0FBVCxDQUFmOztBQUNBLFFBQUksQ0FBQyxNQUFMLEVBQWE7QUFDWCxhQUFPLFNBQVA7QUFDRDtBQUNGOztBQUNELFNBQU8sTUFBUDtBQUNEOztBQVREOztBQVdBLFNBQWdCLFVBQWhCLENBQTRCLEVBQTVCLEVBQThCO0FBQzVCLElBQUUsQ0FBQyxLQUFIO0FBQ0EsSUFBRSxDQUFDLGlCQUFILENBQXFCLENBQXJCLEVBQXdCLEVBQUUsQ0FBQyxLQUFILENBQVMsTUFBakM7QUFDRDs7QUFIRDs7QUFLQSxTQUFnQixZQUFoQixDQUE4QixJQUE5QixFQUFrQztBQUNoQztBQUNBLFFBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFqQjtBQUNBLFFBQU0sR0FBRyxHQUFHLFVBQVUseUJBQVcsZ0JBQWdCLHlCQUF5QixTQUFTLENBQUMsSUFBRCxDQUFNOzswQkFFakUsUUFBUTs7dUNBRUssUUFBUTs7Ozs7Ozs7O0FBUzFDLEtBYkg7O0FBY0EsTUFBSSxjQUFKLEVBQWM7QUFDWixpQkFBTyxNQUFQLENBQWMsUUFBZCxDQUF1QixlQUF2QixDQUF1QyxJQUF2QyxDQUE0QyxHQUE1QztBQUNELEdBRkQsTUFFTztBQUNMO0FBQ0EsUUFBSSxDQUFDLEdBQUQsQ0FBSjtBQUNEO0FBQ0Y7O0FBdkJEO0FBeUJBLE1BQU0sR0FBRyxHQUFHO0FBQ1YsT0FBSyxNQURLO0FBRVYsT0FBSyxNQUZLO0FBR1YsT0FBSyxRQUhLO0FBSVYsT0FBSztBQUpLLENBQVo7O0FBT0EsU0FBZ0IsTUFBaEIsQ0FBd0IsQ0FBeEIsRUFBeUI7QUFDdkIsU0FBTyxDQUFDLENBQUMsT0FBRixDQUFVLFNBQVYsRUFBcUIsVUFBckIsQ0FBUDtBQUNEOztBQUZEOztBQUlBLFNBQVMsVUFBVCxDQUFxQixDQUFyQixFQUFzQjtBQUNwQixTQUFPLEdBQUcsQ0FBQyxDQUFELENBQUgsSUFBVSxDQUFqQjtBQUNEOztBQUVELFNBQWdCLGVBQWhCLENBQWlDLEtBQWpDLEVBQXNDO0FBQ3BDLE1BQUksT0FBTyxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ3JDLFFBQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFULENBQXVCLFVBQXZCLENBQXRCO0FBQ0EsZUFBYSxDQUFDLFdBQWQsR0FBNEIsU0FBUyxDQUFDLEtBQUQsQ0FBckM7QUFDQSxVQUFRLENBQUMsSUFBVCxDQUFjLFdBQWQsQ0FBMEIsYUFBMUI7QUFDQSxlQUFhLENBQUMsTUFBZDtBQUNBLFVBQVEsQ0FBQyxXQUFULENBQXFCLE1BQXJCO0FBQ0EsVUFBUSxDQUFDLElBQVQsQ0FBYyxXQUFkLENBQTBCLGFBQTFCO0FBQ0Q7O0FBUkQ7O0FBVUEsU0FBZ0IsYUFBaEIsQ0FBK0IsR0FBL0IsRUFBa0M7QUFDaEMsU0FBTyxHQUFHLEtBQUssaUJBQVIsSUFBcUIsQ0FBQyxHQUF0QixJQUE2QixNQUFNLENBQUMsSUFBUCxDQUFZLEdBQVosRUFBaUIsTUFBakIsS0FBNEIsQ0FBaEU7QUFDRDs7QUFGRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3V0aWwudHM/YTY0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGV4cG9ydHMuY29weVRvQ2xpcGJvYXJkID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLm9wZW5JbkVkaXRvciA9IGV4cG9ydHMuZm9jdXNJbnB1dCA9IGV4cG9ydHMuc2ltcGxlR2V0ID0gZXhwb3J0cy5zb3J0QnlLZXkgPSBleHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IGV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGV4cG9ydHMucmV2aXZlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tSFRNTEVsZW1lbnREZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBleHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZXhwb3J0cy5yZXZpdmVTZXQgPSBleHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBleHBvcnRzLnJldml2ZU1hcCA9IGV4cG9ydHMuZ2V0Q3VzdG9tTWFwRGV0YWlscyA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zcGVjaWFsVG9rZW5Ub1N0cmluZyA9IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUgPSBleHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IGV4cG9ydHMuU1BFQ0lBTF9UT0tFTlMgPSBleHBvcnRzLk5BTiA9IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSBleHBvcnRzLklORklOSVRZID0gZXhwb3J0cy5VTkRFRklORUQgPSBleHBvcnRzLmluRG9jID0gZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGV4cG9ydHMua2ViYWJpemUgPSBleHBvcnRzLmNhbWVsaXplID0gZXhwb3J0cy5jbGFzc2lmeSA9IHZvaWQgMDtcbmNvbnN0IHBhdGhfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgc2hhcmVkX2RhdGFfMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1kYXRhXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG5mdW5jdGlvbiBjYWNoZWQoZm4pIHtcbiAgICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuKHN0cikge1xuICAgICAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gICAgfTtcbn1cbmNvbnN0IGNsYXNzaWZ5UkUgPSAvKD86XnxbLV8vXSkoXFx3KS9nO1xuZXhwb3J0cy5jbGFzc2lmeSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgLy8gZml4OiBzdHIucmVwbGFjZSBtYXkgY2F1c2VzICdcInJlcGxhY2VcIiBpcyBub3QgYSBmdW5jdGlvbicgZXhjZXB0aW9uLlxuICAgIC8vIFRoaXMgYnVnIG1heSBjYXVzZXMgdGhlIFVJICdDb21wb25lbnQgRmlsdGVyJyB0byBub3Qgd29yayBwcm9wZXJseVxuICAgIC8vIGUuZy4gVGhlIHR5cGUgb2YgJ3N0cicgaXMgTnVtYmVyLlxuICAgIC8vIFNvIG5lZWQgY292ZXIgJ3N0cicgdG8gU3RyaW5nLlxuICAgIHJldHVybiBzdHIgJiYgKCcnICsgc3RyKS5yZXBsYWNlKGNsYXNzaWZ5UkUsIHRvVXBwZXIpO1xufSk7XG5jb25zdCBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xuZXhwb3J0cy5jYW1lbGl6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCB0b1VwcGVyKTtcbn0pO1xuY29uc3Qga2ViYWJpemVSRSA9IC8oW2EtejAtOV0pKFtBLVpdKS9nO1xuZXhwb3J0cy5rZWJhYml6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHJcbiAgICAgICAgLnJlcGxhY2Uoa2ViYWJpemVSRSwgKF8sIGxvd2VyQ2FzZUNoYXJhY3RlciwgdXBwZXJDYXNlTGV0dGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBgJHtsb3dlckNhc2VDaGFyYWN0ZXJ9LSR7dXBwZXJDYXNlTGV0dGVyfWA7XG4gICAgfSlcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG59KTtcbmZ1bmN0aW9uIHRvVXBwZXIoXywgYykge1xuICAgIHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnREaXNwbGF5TmFtZShvcmlnaW5hbE5hbWUsIHN0eWxlID0gJ2NsYXNzJykge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmNsYXNzaWZ5KShvcmlnaW5hbE5hbWUpO1xuICAgICAgICBjYXNlICdrZWJhYic6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMua2ViYWJpemUpKG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIGNhc2UgJ29yaWdpbmFsJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWU7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGdldENvbXBvbmVudERpc3BsYXlOYW1lO1xuZnVuY3Rpb24gaW5Eb2Mobm9kZSkge1xuICAgIGlmICghbm9kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRvYyA9IG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIHJldHVybiBkb2MgPT09IG5vZGUgfHxcbiAgICAgICAgZG9jID09PSBwYXJlbnQgfHxcbiAgICAgICAgISEocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMSAmJiAoZG9jLmNvbnRhaW5zKHBhcmVudCkpKTtcbn1cbmV4cG9ydHMuaW5Eb2MgPSBpbkRvYztcbi8qKlxuICogU3RyaW5naWZ5L3BhcnNlIGRhdGEgdXNpbmcgQ2lyY3VsYXJKU09OLlxuICovXG5leHBvcnRzLlVOREVGSU5FRCA9ICdfX3Z1ZV9kZXZ0b29sX3VuZGVmaW5lZF9fJztcbmV4cG9ydHMuSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9uZWdhdGl2ZV9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkFOID0gJ19fdnVlX2RldnRvb2xfbmFuX18nO1xuZXhwb3J0cy5TUEVDSUFMX1RPS0VOUyA9IHtcbiAgICB0cnVlOiB0cnVlLFxuICAgIGZhbHNlOiBmYWxzZSxcbiAgICB1bmRlZmluZWQ6IGV4cG9ydHMuVU5ERUZJTkVELFxuICAgIG51bGw6IG51bGwsXG4gICAgJy1JbmZpbml0eSc6IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgSW5maW5pdHk6IGV4cG9ydHMuSU5GSU5JVFksXG4gICAgTmFOOiBleHBvcnRzLk5BTixcbn07XG5leHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IDEwMDAwO1xuZXhwb3J0cy5NQVhfQVJSQVlfU0laRSA9IDUwMDA7XG5mdW5jdGlvbiBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5VTkRFRklORUQpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5OQU4pIHtcbiAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNwZWNpYWxUb2tlblRvU3RyaW5nID0gc3BlY2lhbFRva2VuVG9TdHJpbmc7XG4vKipcbiAqIE5lZWRlZCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93XG4gKiB3aGlsZSByZXBsYWNpbmcgY29tcGxleCBvYmplY3RzXG4gKiBsaWtlIGNvbXBvbmVudHMgYmVjYXVzZSB3ZSBjcmVhdGVcbiAqIG5ldyBvYmplY3RzIHdpdGggdGhlIEN1c3RvbVZhbHVlIEFQSVxuICogKC5pLmUgYHsgX2N1c3RvbTogeyAuLi4gfSB9YClcbiAqL1xuY2xhc3MgRW5jb2RlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlc3VsdCB1bmlxdWUgdG8gZWFjaCBpbnB1dCBkYXRhXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIElucHV0IGRhdGFcbiAgICAgKiBAcGFyYW0geyp9IGZhY3RvcnkgRnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVuaXF1ZSByZXN1bHRcbiAgICAgKi9cbiAgICBjYWNoZShkYXRhLCBmYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWFwLmdldChkYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZhY3RvcnkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgfVxufVxuY29uc3QgZW5jb2RlQ2FjaGUgPSBuZXcgRW5jb2RlQ2FjaGUoKTtcbmNsYXNzIFJldml2ZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplKSB7XG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG4gICAgY2FjaGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgdGhpcy5tYXAuc2V0KGN1cnJlbnRJbmRleCwgdmFsdWUpO1xuICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGN1cnJlbnRJbmRleCAtIHRoaXMuc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnNpemUtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIHJlYWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChpZCk7XG4gICAgfVxufVxuY29uc3QgcmV2aXZlQ2FjaGUgPSBuZXcgUmV2aXZlQ2FjaGUoMTAwMCk7XG5mdW5jdGlvbiBzdHJpbmdpZnkoZGF0YSkge1xuICAgIC8vIENyZWF0ZSBhIGZyZXNoIGNhY2hlIGZvciBlYWNoIHNlcmlhbGl6YXRpb25cbiAgICBlbmNvZGVDYWNoZS5jbGVhcigpO1xuICAgIHJldHVybiAoMCwgdHJhbnNmZXJfMS5zdHJpbmdpZnlDaXJjdWxhckF1dG9DaHVua3MpKGRhdGEsIHJlcGxhY2VyKTtcbn1cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZnVuY3Rpb24gcmVwbGFjZXIoa2V5KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHZhbCA9IHRoaXNba2V5XTtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGNvbnN0IGwgPSB2YWwubGVuZ3RoO1xuICAgICAgICBpZiAobCA+IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgX2lzQXJyYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBsLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB2YWwuc2xpY2UoMCwgZXhwb3J0cy5NQVhfQVJSQVlfU0laRSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gZXhwb3J0cy5NQVhfU1RSSU5HX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc3Vic3RyaW5nKDAsIGV4cG9ydHMuTUFYX1NUUklOR19TSVpFKSArIGAuLi4gKCR7KHZhbC5sZW5ndGgpfSB0b3RhbCBsZW5ndGgpYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVU5ERUZJTkVEO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLklORklOSVRZO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKHZhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiBgW25hdGl2ZSBTeW1ib2wgJHtTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKX1dYDtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsICE9PSBudWxsICYmIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCk7XG4gICAgICAgIGlmIChwcm90byA9PT0gJ1tvYmplY3QgTWFwXScpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbU1hcERldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IFNldF0nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBvZiBuYXRpdmUgdHlwZVxuICAgICAgICAgICAgcmV0dXJuIGBbbmF0aXZlIFJlZ0V4cCAke1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBEYXRlICR7RGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBFcnJvcl0nKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgRXJyb3IgJHt2YWwubWVzc2FnZX08PiR7dmFsLnN0YWNrfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5zdGF0ZSAmJiB2YWwuX3ZtKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiAoMCwgYmFja2VuZF8xLmdldEN1c3RvbVN0b3JlRGV0YWlscykodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVnVlUm91dGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gKDAsIGJhY2tlbmRfMS5nZXRDdXN0b21Sb3V0ZXJEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoMCwgYmFja2VuZF8xLmlzVnVlSW5zdGFuY2UpKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+ICgwLCBiYWNrZW5kXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVk5vZGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgVk5vZGUgPCR7dmFsLnRhZ30+XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNOYU4odmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5OQU47XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGl6ZSh2YWwpO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tTWFwRGV0YWlscyh2YWwpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgdmFsLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGxpc3QucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdtYXAnLFxuICAgICAgICAgICAgZGlzcGxheTogJ01hcCcsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbU1hcERldGFpbHMgPSBnZXRDdXN0b21NYXBEZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlTWFwKHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LnNldChrZXksIHJldml2ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZXZpdmVNYXAgPSByZXZpdmVNYXA7XG5mdW5jdGlvbiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkge1xuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5mcm9tKHZhbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ3NldCcsXG4gICAgICAgICAgICBkaXNwbGF5OiBgU2V0WyR7bGlzdC5sZW5ndGh9XWAsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBnZXRDdXN0b21TZXREZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlU2V0KHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LmFkZChyZXZpdmUodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmV2aXZlU2V0ID0gcmV2aXZlU2V0O1xuLy8gVXNlIGEgY3VzdG9tIGJhc2VuYW1lIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzaGltZWQgdmVyc2lvblxuLy8gYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmsgb24gV2luZG93c1xuZnVuY3Rpb24gYmFzZW5hbWUoZmlsZW5hbWUsIGV4dCkge1xuICAgIHJldHVybiBwYXRoXzEuZGVmYXVsdC5iYXNlbmFtZShmaWxlbmFtZS5yZXBsYWNlKC9eW2EtekEtWl06LywgJycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSwgZXh0KTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUob3B0aW9ucykge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLl9fZmlsZTsgLy8gaW5qZWN0ZWQgYnkgdnVlLWxvYWRlclxuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5jbGFzc2lmeSkoYmFzZW5hbWUoZmlsZSwgJy52dWUnKSk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZTtcbmZ1bmN0aW9uIGdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzKGRlZikge1xuICAgIGxldCBkaXNwbGF5ID0gZ2V0Q29tcG9uZW50TmFtZShkZWYpO1xuICAgIGlmIChkaXNwbGF5KSB7XG4gICAgICAgIGlmIChkZWYubmFtZSAmJiBkZWYuX19maWxlKSB7XG4gICAgICAgICAgICBkaXNwbGF5ICs9IGAgPHNwYW4+KCR7ZGVmLl9fZmlsZX0pPC9zcGFuPmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICB0b29sdGlwOiAnQ29tcG9uZW50IGRlZmluaXRpb24nLFxuICAgICAgICAgICAgLi4uZGVmLl9fZmlsZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBmaWxlOiBkZWYuX19maWxlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHM7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKGZ1bmMpIHtcbiAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgbGV0IG1hdGNoZXMgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIHN0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICBtYXRjaGVzID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaC5jYWxsKHN0cmluZywgL1xcKFtcXHNcXFNdKj9cXCkvKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRnVuYyBpcyBwcm9iYWJseSBhIFByb3h5LCB3aGljaCBjYW4gYnJlYWsgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClcbiAgICB9XG4gICAgLy8gVHJpbSBhbnkgZXhjZXNzIHdoaXRlc3BhY2UgZnJvbSB0aGUgYXJndW1lbnQgc3RyaW5nXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgY29uc3QgYXJncyA9IHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBgKCR7bWF0Y2guc3Vic3RyaW5nKDEsIG1hdGNoLmxlbmd0aCAtIDIpLnNwbGl0KCcsJykubWFwKGEgPT4gYS50cmltKCkpLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnKD8pJztcbiAgICBjb25zdCBuYW1lID0gdHlwZW9mIGZ1bmMubmFtZSA9PT0gJ3N0cmluZycgPyBmdW5jLm5hbWUgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuPmY8L3NwYW4+ICR7ZXNjYXBlKG5hbWUpfSR7YXJnc31gLFxuICAgICAgICAgICAgX3Jldml2ZUlkOiByZXZpdmVDYWNoZS5jYWNoZShmdW5jKSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHM7XG5mdW5jdGlvbiBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHModmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwXCI+JHt2YWx1ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZndDs8L3NwYW4+YCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZWROb2RlTWFwVG9PYmplY3QodmFsdWUuYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0xvZyBlbGVtZW50IHRvIGNvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwidGV4dC1ibHVlLTUwMFwiPiR7U3RyaW5nKHZhbHVlKX08L3NwYW4+YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHMgPSBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHM7XG5mdW5jdGlvbiBuYW1lZE5vZGVNYXBUb09iamVjdChtYXApIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBsID0gbWFwLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbWFwLml0ZW0oaSk7XG4gICAgICAgIHJlc3VsdFtub2RlLm5hbWVdID0gbm9kZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldEN1c3RvbVJlZkRldGFpbHMoaW5zdGFuY2UsIGtleSwgcmVmKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZikpIHtcbiAgICAgICAgdmFsdWUgPSByZWYubWFwKChyKSA9PiBnZXRDdXN0b21SZWZEZXRhaWxzKGluc3RhbmNlLCBrZXksIHIpKS5tYXAoZGF0YSA9PiBkYXRhLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBuYW1lO1xuICAgICAgICBpZiAocmVmLl9pc1Z1ZSkge1xuICAgICAgICAgICAgbmFtZSA9IGdldENvbXBvbmVudE5hbWUocmVmLiRvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSByZWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAmbHQ7JHtuYW1lfWAgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmlkID8gYCA8c3BhbiBjbGFzcz1cImF0dHItdGl0bGVcIj5pZDwvc3Bhbj49XCIke3JlZi5pZH1cImAgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmNsYXNzTmFtZSA/IGAgPHNwYW4gY2xhc3M9XCJhdHRyLXRpdGxlXCI+Y2xhc3M8L3NwYW4+PVwiJHtyZWYuY2xhc3NOYW1lfVwiYCA6ICcnKSArICcmZ3Q7JyxcbiAgICAgICAgICAgICAgICB1aWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZWZlcmVuY2UnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJyRyZWZzJyxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGdldEN1c3RvbVJlZkRldGFpbHM7XG5mdW5jdGlvbiBwYXJzZShkYXRhLCByZXZpdmUgPSBmYWxzZSkge1xuICAgIHJldHVybiByZXZpdmVcbiAgICAgICAgPyAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSwgcmV2aXZlcilcbiAgICAgICAgOiAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5jb25zdCBzcGVjaWFsVHlwZVJFID0gL15cXFtuYXRpdmUgKFxcdyspICguKj8pKDw+KCgufFxccykqKSk/XFxdJC87XG5jb25zdCBzeW1ib2xSRSA9IC9eXFxbbmF0aXZlIFN5bWJvbCBTeW1ib2xcXCgoLiopXFwpXFxdJC87XG5mdW5jdGlvbiByZXZpdmVyKGtleSwgdmFsKSB7XG4gICAgcmV0dXJuIHJldml2ZSh2YWwpO1xufVxuZnVuY3Rpb24gcmV2aXZlKHZhbCkge1xuICAgIGlmICh2YWwgPT09IGV4cG9ydHMuVU5ERUZJTkVEKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IGV4cG9ydHMuTkFOKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCAmJiB2YWwuX2N1c3RvbSkge1xuICAgICAgICBjb25zdCB7IF9jdXN0b206IGN1c3RvbSB9ID0gdmFsO1xuICAgICAgICBpZiAoY3VzdG9tLnR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGJhY2tlbmRfMS5nZXRJbnN0YW5jZU1hcCkoKS5nZXQoY3VzdG9tLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVNYXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVTZXQodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20uX3Jldml2ZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV2aXZlQ2FjaGUucmVhZChjdXN0b20uX3Jldml2ZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmUoY3VzdG9tLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzeW1ib2xSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgc3RyaW5nXSA9IHN5bWJvbFJFLmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3Ioc3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3BlY2lhbFR5cGVSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgdHlwZSwgc3RyaW5nLCAsIGRldGFpbHNdID0gc3BlY2lhbFR5cGVSRS5leGVjKHZhbCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyB3aW5kb3dbdHlwZV0oc3RyaW5nKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdFcnJvcicgJiYgZGV0YWlscykge1xuICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZGV0YWlscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5leHBvcnRzLnJldml2ZSA9IHJldml2ZTtcbi8qKlxuICogU2FuaXRpemUgZGF0YSB0byBiZSBwb3N0ZWQgdG8gdGhlIG90aGVyIHNpZGUuXG4gKiBTaW5jZSB0aGUgbWVzc2FnZSBwb3N0ZWQgaXMgc2VudCB3aXRoIHN0cnVjdHVyZWQgY2xvbmUsXG4gKiB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgYW55IHR5cGVzIHRoYXQgbWlnaHQgY2F1c2UgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZShkYXRhKSB7XG4gICAgaWYgKCFpc1ByaW1pdGl2ZShkYXRhKSAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShkYXRhKSAmJlxuICAgICAgICAhaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgICAgICAvLyBoYW5kbGUgdHlwZXMgdGhhdCB3aWxsIHByb2JhYmx5IGNhdXNlIGlzc3VlcyBpblxuICAgICAgICAvLyB0aGUgc3RydWN0dXJlZCBjbG9uZVxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7XG4gICAgcmV0dXJuICh0eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlID09PSAnYm9vbGVhbicpO1xufVxuLyoqXG4gKiBTZWFyY2hlcyBhIGtleSBvciB2YWx1ZSBpbiB0aGUgb2JqZWN0LCB3aXRoIGEgbWF4aW11bSBkZWVwbmVzc1xuICogQHBhcmFtIHsqfSBvYmogU2VhcmNoIHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBzZWFyY2hEZWVwSW5PYmplY3Qob2JqLCBzZWFyY2hUZXJtKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbFNlYXJjaE9iamVjdChvYmosIHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSwgc2VlbiwgMCk7XG4gICAgc2Vlbi5jbGVhcigpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IHNlYXJjaERlZXBJbk9iamVjdDtcbmNvbnN0IFNFQVJDSF9NQVhfREVQVEggPSAxMDtcbi8qKlxuICogRXhlY3V0ZXMgYSBzZWFyY2ggb24gZWFjaCBmaWVsZCBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0XG4gKiBAcGFyYW0geyp9IG9iaiBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hPYmplY3Qob2JqLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IFNFQVJDSF9NQVhfREVQVEgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIGtleSwgdmFsdWUsIHNlZW4sIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBhIHNlYXJjaCBvbiBlYWNoIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBhcnJheVxuICogQHBhcmFtIHsqfSBhcnJheSBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hBcnJheShhcnJheSwgc2VhcmNoVGVybSwgc2VlbiwgZGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBTRUFSQ0hfTUFYX0RFUFRIKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBhcnJheVtpXTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIG51bGwsIHZhbHVlLCBzZWVuLCBkZXB0aCArIDEpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBmaWVsZCBtYXRjaGVzIHRoZSBzZWFyY2ggdGVybXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgRmllbGQga2V5IChudWxsIGlmIGZyb20gYXJyYXkpXG4gKiBAcGFyYW0geyp9IHZhbHVlIEZpZWxkIHZhbHVlXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hDaGVjayhzZWFyY2hUZXJtLCBrZXksIHZhbHVlLCBzZWVuLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGtleSA9PT0gJ19jdXN0b20nKSB7XG4gICAgICAgIGtleSA9IHZhbHVlLmRpc3BsYXk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICAgIChyZXN1bHQgPSBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkpICYmICh2YWx1ZSA9IHJlc3VsdCk7XG4gICAgaWYgKGtleSAmJiBjb21wYXJlKGtleSwgc2VhcmNoVGVybSkpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICBtYXRjaCA9IHNlZW4uZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQXJyYXkodmFsdWUsIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG1hdGNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoT2JqZWN0KHZhbHVlLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCk7XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBtYXRjaCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbXBhcmUodmFsdWUsIHNlYXJjaFRlcm0pKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgTWl4ZWQgdHlwZSB2YWx1ZSB0aGF0IHdpbGwgYmUgY2FzdCB0byBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gY29tcGFyZSh2YWx1ZSwgc2VhcmNoVGVybSkge1xuICAgIHJldHVybiAoJycgKyB2YWx1ZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRlcm0pICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHNvcnRCeUtleShzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEua2V5IDwgYi5rZXkpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhLmtleSA+IGIua2V5KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zb3J0QnlLZXkgPSBzb3J0QnlLZXk7XG5mdW5jdGlvbiBzaW1wbGVHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtzZWN0aW9uc1tpXV07XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5leHBvcnRzLnNpbXBsZUdldCA9IHNpbXBsZUdldDtcbmZ1bmN0aW9uIGZvY3VzSW5wdXQoZWwpIHtcbiAgICBlbC5mb2N1cygpO1xuICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIGVsLnZhbHVlLmxlbmd0aCk7XG59XG5leHBvcnRzLmZvY3VzSW5wdXQgPSBmb2N1c0lucHV0O1xuZnVuY3Rpb24gb3BlbkluRWRpdG9yKGZpbGUpIHtcbiAgICAvLyBDb25zb2xlIGRpc3BsYXlcbiAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKTtcbiAgICBjb25zdCBzcmMgPSBgZmV0Y2goJyR7c2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLm9wZW5JbkVkaXRvckhvc3R9X19vcGVuLWluLWVkaXRvcj9maWxlPSR7ZW5jb2RlVVJJKGZpbGUpfScpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5sb2coJ0ZpbGUgJHtmaWxlTmFtZX0gb3BlbmVkIGluIGVkaXRvcicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdPcGVuaW5nIGNvbXBvbmVudCAke2ZpbGVOYW1lfSBmYWlsZWQnXG4gICAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDoge31cbiAgICAgIGlmICh0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXykge1xuICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXyhtc2csICdlcnJvcicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnJWMnICsgbXNnLCAnY29sb3I6cmVkJylcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdDaGVjayB0aGUgc2V0dXAgb2YgeW91ciBwcm9qZWN0LCBzZWUgaHR0cHM6Ly9kZXZ0b29scy52dWVqcy5vcmcvZ3VpZGUvb3Blbi1pbi1lZGl0b3IuaHRtbCcpXG4gICAgfVxuICB9KWA7XG4gICAgaWYgKGVudl8xLmlzQ2hyb21lKSB7XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuZGV2dG9vbHMuaW5zcGVjdGVkV2luZG93LmV2YWwoc3JjKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1ldmFsXG4gICAgICAgIGV2YWwoc3JjKTtcbiAgICB9XG59XG5leHBvcnRzLm9wZW5JbkVkaXRvciA9IG9wZW5JbkVkaXRvcjtcbmNvbnN0IEVTQyA9IHtcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAnJic6ICcmYW1wOycsXG59O1xuZnVuY3Rpb24gZXNjYXBlKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9bPD5cIiZdL2csIGVzY2FwZUNoYXIpO1xufVxuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5mdW5jdGlvbiBlc2NhcGVDaGFyKGEpIHtcbiAgICByZXR1cm4gRVNDW2FdIHx8IGE7XG59XG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQoc3RhdGUpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGR1bW15VGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGR1bW15VGV4dEFyZWEudGV4dENvbnRlbnQgPSBzdHJpbmdpZnkoc3RhdGUpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG4gICAgZHVtbXlUZXh0QXJlYS5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG59XG5leHBvcnRzLmNvcHlUb0NsaXBib2FyZCA9IGNvcHlUb0NsaXBib2FyZDtcbmZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gZXhwb3J0cy5VTkRFRklORUQgfHwgIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGlzRW1wdHlPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76203\n")},85628:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{eval("/* harmony import */ var _back_hook__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6793);\n/* harmony import */ var _vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27146);\n/* harmony import */ var _vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1__);\n\n\n(0,_back_hook__WEBPACK_IMPORTED_MODULE_0__/* .installHook */ .U)(_vue_devtools_shared_utils__WEBPACK_IMPORTED_MODULE_1__.target);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU2MjguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUVBQSxnRUFBVyxDQUFDQyw4REFBRCxDQUFYIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uL3NyYy9ob29rLmpzPzg3Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zdGFsbEhvb2sgfSBmcm9tICdAYmFjay9ob29rJ1xuaW1wb3J0IHsgdGFyZ2V0IH0gZnJvbSAnQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHMnXG5cbmluc3RhbGxIb29rKHRhcmdldClcbiJdLCJuYW1lcyI6WyJpbnN0YWxsSG9vayIsInRhcmdldCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///85628\n")},22699:module=>{eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVE7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMseUJBQXlCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhEQUE4RCxZQUFZO0FBQzFFO0FBQ0EsOERBQThELFlBQVk7QUFDMUU7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxZQUFZO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanM/YWY2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22699\n")},21023:module=>{eval("// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GO0FBQ3BGO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhEQUE4RDs7QUFFOUQ7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanM/YTBkNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAncGF0aCcgbW9kdWxlIGV4dHJhY3RlZCBmcm9tIE5vZGUuanMgdjguMTEuMSAob25seSB0aGUgcG9zaXggcGFydClcbi8vIHRyYW5zcGxpdGVkIHdpdGggQmFiZWxcblxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShwYXRoKSk7XG4gIH1cbn1cblxuLy8gUmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIHdpdGggZGlyZWN0b3J5IG5hbWVzXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIHZhciBsYXN0U2xhc2ggPSAtMTtcbiAgdmFyIGRvdHMgPSAwO1xuICB2YXIgY29kZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpXG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgY29kZSA9IDQ3IC8qLyovO1xuICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaSAtIDEgfHwgZG90cyA9PT0gMSkge1xuICAgICAgICAvLyBOT09QXG4gICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaSAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSA0NiAvKi4qLyB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMikgIT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJlcyArPSAnLy4uJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSAnLi4nO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKVxuICAgICAgICAgIHJlcyArPSAnLycgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpIC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICBkb3RzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ2IC8qLiovICYmIGRvdHMgIT09IC0xKSB7XG4gICAgICArK2RvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gX2Zvcm1hdChzZXAsIHBhdGhPYmplY3QpIHtcbiAgdmFyIGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDtcbiAgdmFyIGJhc2UgPSBwYXRoT2JqZWN0LmJhc2UgfHwgKHBhdGhPYmplY3QubmFtZSB8fCAnJykgKyAocGF0aE9iamVjdC5leHQgfHwgJycpO1xuICBpZiAoIWRpcikge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG4gIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkge1xuICAgIHJldHVybiBkaXIgKyBiYXNlO1xuICB9XG4gIHJldHVybiBkaXIgKyBzZXAgKyBiYXNlO1xufVxuXG52YXIgcG9zaXggPSB7XG4gIC8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSgpIHtcbiAgICB2YXIgcmVzb2x2ZWRQYXRoID0gJyc7XG4gICAgdmFyIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcbiAgICB2YXIgY3dkO1xuXG4gICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICAgIHZhciBwYXRoO1xuICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgcGF0aCA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoY3dkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgcGF0aCA9IGN3ZDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gICAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmdQb3NpeChyZXNvbHZlZFBhdGgsICFyZXNvbHZlZEFic29sdXRlKTtcblxuICAgIGlmIChyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfSBlbHNlIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcuJztcbiAgICB9XG4gIH0sXG5cbiAgbm9ybWFsaXplOiBmdW5jdGlvbiBub3JtYWxpemUocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7XG5cbiAgICB2YXIgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHRyYWlsaW5nU2VwYXJhdG9yID0gcGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3IC8qLyovO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gICAgcGF0aCA9IG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHBhdGgsICFpc0Fic29sdXRlKTtcblxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgcGF0aCA9ICcuJztcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9ICcvJztcblxuICAgIGlmIChpc0Fic29sdXRlKSByZXR1cm4gJy8nICsgcGF0aDtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBpc0Fic29sdXRlOiBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIHJldHVybiBwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgfSxcblxuICBqb2luOiBmdW5jdGlvbiBqb2luKCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuICcuJztcbiAgICB2YXIgam9pbmVkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgYXNzZXJ0UGF0aChhcmcpO1xuICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICBqb2luZWQgPSBhcmc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBqb2luZWQgKz0gJy8nICsgYXJnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gJy4nO1xuICAgIHJldHVybiBwb3NpeC5ub3JtYWxpemUoam9pbmVkKTtcbiAgfSxcblxuICByZWxhdGl2ZTogZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSwgdG8pIHtcbiAgICBhc3NlcnRQYXRoKGZyb20pO1xuICAgIGFzc2VydFBhdGgodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICBmcm9tID0gcG9zaXgucmVzb2x2ZShmcm9tKTtcbiAgICB0byA9IHBvc2l4LnJlc29sdmUodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gICAgdmFyIGZyb21TdGFydCA9IDE7XG4gICAgZm9yICg7IGZyb21TdGFydCA8IGZyb20ubGVuZ3RoOyArK2Zyb21TdGFydCkge1xuICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSA0NyAvKi8qLylcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmcm9tRW5kID0gZnJvbS5sZW5ndGg7XG4gICAgdmFyIGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gICAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICAgIHZhciB0b1N0YXJ0ID0gMTtcbiAgICBmb3IgKDsgdG9TdGFydCA8IHRvLmxlbmd0aDsgKyt0b1N0YXJ0KSB7XG4gICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgdG9FbmQgPSB0by5sZW5ndGg7XG4gICAgdmFyIHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gICAgLy8gQ29tcGFyZSBwYXRocyB0byBmaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBwYXRoIGZyb20gcm9vdFxuICAgIHZhciBsZW5ndGggPSBmcm9tTGVuIDwgdG9MZW4gPyBmcm9tTGVuIDogdG9MZW47XG4gICAgdmFyIGxhc3RDb21tb25TZXAgPSAtMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPD0gbGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID09PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGB0b2AuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6J1xuICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpICsgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3RcbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvJzsgdG89Jy9mb28nXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyL2Jheic7IHRvPScvZm9vL2JhcidcbiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vJzsgdG89Jy8nXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgICB2YXIgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgICBpZiAoZnJvbUNvZGUgIT09IHRvQ29kZSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gNDcgLyovKi8pXG4gICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcmVsYXRpdmUgcGF0aCBiYXNlZCBvbiB0aGUgcGF0aCBkaWZmZXJlbmNlIGJldHdlZW4gYHRvYFxuICAgIC8vIGFuZCBgZnJvbWBcbiAgICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICAgIGlmIChpID09PSBmcm9tRW5kIHx8IGZyb20uY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApXG4gICAgICAgICAgb3V0ICs9ICcuLic7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXQgKz0gJy8uLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzdGx5LCBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGRlc3RpbmF0aW9uIChgdG9gKSBwYXRoIHRoYXQgY29tZXMgYWZ0ZXJcbiAgICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgICBpZiAob3V0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApO1xuICAgIGVsc2Uge1xuICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwO1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IDQ3IC8qLyovKVxuICAgICAgICArK3RvU3RhcnQ7XG4gICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gICAgfVxuICB9LFxuXG4gIF9tYWtlTG9uZzogZnVuY3Rpb24gX21ha2VMb25nKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBkaXJuYW1lOiBmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIGhhc1Jvb3QgPyAnLycgOiAnLic7XG4gICAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSByZXR1cm4gJy8vJztcbiAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBlbmQpO1xuICB9LFxuXG4gIGJhc2VuYW1lOiBmdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBleHQpIHtcbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aC5sZW5ndGggJiYgZXh0ID09PSBwYXRoKSByZXR1cm4gJyc7XG4gICAgICB2YXIgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7XG4gICAgICB2YXIgZmlyc3ROb25TbGFzaEVuZCA9IC0xO1xuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkge1xuICAgICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIHJlbWVtYmVyIHRoaXMgaW5kZXggaW4gY2FzZVxuICAgICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nXG4gICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggdGhlIGV4cGxpY2l0IGV4dGVuc2lvblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHtcbiAgICAgICAgICAgICAgaWYgKC0tZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIGV4dGVuc2lvbiwgc28gbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyIHBhdGhcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgICBleHRJZHggPSAtMTtcbiAgICAgICAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7ZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aC5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiAnJztcbiAgICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgfSxcblxuICBleHRuYW1lOiBmdW5jdGlvbiBleHRuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIHZhciBzdGFydERvdCA9IC0xO1xuICAgIHZhciBzdGFydFBhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gICAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgICB2YXIgcHJlRG90U3RhdGUgPSAwO1xuICAgIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKVxuICAgICAgICAgICAgc3RhcnREb3QgPSBpO1xuICAgICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKVxuICAgICAgICAgICAgcHJlRG90U3RhdGUgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAgICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgICAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfSxcblxuICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0KSB7XG4gICAgaWYgKHBhdGhPYmplY3QgPT09IG51bGwgfHwgdHlwZW9mIHBhdGhPYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHBhdGhPYmplY3QpO1xuICAgIH1cbiAgICByZXR1cm4gX2Zvcm1hdCgnLycsIHBhdGhPYmplY3QpO1xuICB9LFxuXG4gIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIHZhciByZXQgPSB7IHJvb3Q6ICcnLCBkaXI6ICcnLCBiYXNlOiAnJywgZXh0OiAnJywgbmFtZTogJycgfTtcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiByZXQ7XG4gICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGlzQWJzb2x1dGUgPSBjb2RlID09PSA0NyAvKi8qLztcbiAgICB2YXIgc3RhcnQ7XG4gICAgaWYgKGlzQWJzb2x1dGUpIHtcbiAgICAgIHJldC5yb290ID0gJy8nO1xuICAgICAgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHZhciBzdGFydERvdCA9IC0xO1xuICAgIHZhciBzdGFydFBhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICB2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTtcblxuICAgIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICAgIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG5cbiAgICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gICAgZm9yICg7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7ZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHByZURvdFN0YXRlID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7XG4gICAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIGVuZCk7ZWxzZSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2UoMSwgZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gJy8nO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBzZXA6ICcvJyxcbiAgZGVsaW1pdGVyOiAnOicsXG4gIHdpbjMyOiBudWxsLFxuICBwb3NpeDogbnVsbFxufTtcblxucG9zaXgucG9zaXggPSBwb3NpeDtcblxubW9kdWxlLmV4cG9ydHMgPSBwb3NpeDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21023\n")}},__webpack_module_cache__={};function __webpack_require__(I){var Q=__webpack_module_cache__[I];if(void 0!==Q)return Q.exports;var g=__webpack_module_cache__[I]={exports:{}};return __webpack_modules__[I].call(g.exports,g,g.exports,__webpack_require__),g.exports}(()=>{__webpack_require__.n=I=>{var Q=I&&I.__esModule?()=>I["default"]:()=>I;return __webpack_require__.d(Q,{a:Q}),Q}})(),(()=>{__webpack_require__.d=(I,Q)=>{for(var g in Q)__webpack_require__.o(Q,g)&&!__webpack_require__.o(I,g)&&Object.defineProperty(I,g,{enumerable:!0,get:Q[g]})}})(),(()=>{__webpack_require__.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(I){if("object"===typeof window)return window}}()})(),(()=>{__webpack_require__.o=(I,Q)=>Object.prototype.hasOwnProperty.call(I,Q)})();var __webpack_exports__=__webpack_require__(85628)})();