Myseelia/dist/main.js

1429 lines
472 KiB
JavaScript

/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/svelte-hmr/runtime/hot-api.js":
/*!****************************************************!*\
!*** ./node_modules/svelte-hmr/runtime/hot-api.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"makeApplyHmr\": () => (/* binding */ makeApplyHmr)\n/* harmony export */ });\n/* harmony import */ var _proxy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./proxy.js */ \"./node_modules/svelte-hmr/runtime/proxy.js\");\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\nconst logPrefix = \"[HMR:Svelte]\";\nconst log = (...args) => console.log(logPrefix, ...args);\nconst domReload = () => {\n const win = typeof window !== \"undefined\" && window;\n if (win && win.location && win.location.reload) {\n log(\"Reload\");\n win.location.reload();\n } else {\n log(\"Full reload required\");\n }\n};\nconst replaceCss = (previousId, newId) => {\n if (typeof document === \"undefined\")\n return false;\n if (!previousId)\n return false;\n if (!newId)\n return false;\n const previousClass = previousId.slice(0, -6);\n const newClass = newId.slice(0, -6);\n document.querySelectorAll(\".\" + previousClass).forEach((el) => {\n el.classList.remove(previousClass);\n el.classList.add(newClass);\n });\n return true;\n};\nconst removeStylesheet = (cssId) => {\n if (cssId == null)\n return;\n if (typeof document === \"undefined\")\n return;\n const el = document.getElementById(cssId);\n if (el)\n el.remove();\n return;\n};\nconst defaultArgs = {\n reload: domReload\n};\nconst makeApplyHmr = (transformArgs) => (args) => {\n const allArgs = transformArgs(__spreadValues(__spreadValues({}, defaultArgs), args));\n return applyHmr(allArgs);\n};\nlet needsReload = false;\nfunction applyHmr(args) {\n const {\n id,\n cssId,\n nonCssHash,\n reload = domReload,\n hot,\n hotOptions,\n Component,\n acceptable,\n preserveLocalState,\n ProxyAdapter,\n emitCss\n } = args;\n const existing = hot.data && hot.data.record;\n const canAccept = acceptable && (!existing || existing.current.canAccept);\n const r = existing || (0,_proxy_js__WEBPACK_IMPORTED_MODULE_0__.createProxy)({\n Adapter: ProxyAdapter,\n id,\n Component,\n hotOptions,\n canAccept,\n preserveLocalState\n });\n const cssOnly = hotOptions.injectCss && existing && nonCssHash && existing.current.nonCssHash === nonCssHash;\n r.update({\n Component,\n hotOptions,\n canAccept,\n nonCssHash,\n cssId,\n previousCssId: r.current.cssId,\n cssOnly,\n preserveLocalState\n });\n hot.dispose((data) => {\n if (needsReload || (0,_proxy_js__WEBPACK_IMPORTED_MODULE_0__.hasFatalError)()) {\n if (hotOptions && hotOptions.noReload) {\n log(\"Full reload required\");\n } else {\n reload();\n }\n }\n data = data || hot.data;\n data.record = r;\n if (!emitCss && cssId && r.current.cssId !== cssId) {\n if (hotOptions.cssEjectDelay) {\n setTimeout(() => removeStylesheet(cssId), hotOptions.cssEjectDelay);\n } else {\n removeStylesheet(cssId);\n }\n }\n });\n if (canAccept) {\n hot.accept((arg) => __async(this, null, function* () {\n const { bubbled } = arg || {};\n const { cssId: newCssId, previousCssId } = r.current;\n const cssChanged = newCssId !== previousCssId;\n if (!emitCss && cssChanged)\n removeStylesheet(previousCssId);\n if (bubbled === false && r.current.cssOnly && (!cssChanged || replaceCss(previousCssId, newCssId))) {\n return;\n }\n const success = yield r.reload();\n if ((0,_proxy_js__WEBPACK_IMPORTED_MODULE_0__.hasFatalError)() || !success && !hotOptions.optimistic) {\n needsReload = true;\n }\n }));\n }\n const proxyOk = r && r.proxy;\n if (!proxyOk) {\n throw new Error(`Failed to create HMR proxy for Svelte component ${id}`);\n }\n return r.proxy;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL2hvdC1hcGkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMkM7QUFFM0MsTUFBTSxZQUFZO0FBR2xCLE1BQU0sTUFBTSxJQUFJLFNBQVMsUUFBUSxJQUFJLFdBQVcsR0FBRyxJQUFJO0FBRXZELE1BQU0sWUFBWSxNQUFNO0FBRXRCLFFBQU0sTUFBTSxPQUFPLFdBQVcsZUFBZTtBQUM3QyxNQUFJLE9BQU8sSUFBSSxZQUFZLElBQUksU0FBUyxRQUFRO0FBQzlDLFFBQUksUUFBUTtBQUNaLFFBQUksU0FBUyxPQUFPO0FBQUEsRUFDdEIsT0FBTztBQUNMLFFBQUksc0JBQXNCO0FBQUEsRUFDNUI7QUFDRjtBQUVBLE1BQU0sYUFBYSxDQUFDLFlBQVksVUFBVTtBQUN4QyxNQUFJLE9BQU8sYUFBYTtBQUFhLFdBQU87QUFDNUMsTUFBSSxDQUFDO0FBQVksV0FBTztBQUN4QixNQUFJLENBQUM7QUFBTyxXQUFPO0FBRW5CLFFBQU0sZ0JBQWdCLFdBQVcsTUFBTSxHQUFHLEVBQUU7QUFDNUMsUUFBTSxXQUFXLE1BQU0sTUFBTSxHQUFHLEVBQUU7QUFFbEMsV0FBUyxpQkFBaUIsTUFBTSxhQUFhLEVBQUUsUUFBUSxRQUFNO0FBQzNELE9BQUcsVUFBVSxPQUFPLGFBQWE7QUFDakMsT0FBRyxVQUFVLElBQUksUUFBUTtBQUFBLEVBQzNCLENBQUM7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxNQUFNLG1CQUFtQixXQUFTO0FBQ2hDLE1BQUksU0FBUztBQUFNO0FBQ25CLE1BQUksT0FBTyxhQUFhO0FBQWE7QUFFckMsUUFBTSxLQUFLLFNBQVMsZUFBZSxLQUFLO0FBQ3hDLE1BQUk7QUFBSSxPQUFHLE9BQU87QUFDbEI7QUFDRjtBQUVBLE1BQU0sY0FBYztBQUFBLEVBQ2xCLFFBQVE7QUFDVjtBQUVPLE1BQU0sZUFBZSxtQkFBaUIsVUFBUTtBQUNuRCxRQUFNLFVBQVUsY0FBYyxrQ0FBSyxjQUFnQixLQUFNO0FBQ3pELFNBQU8sU0FBUyxPQUFPO0FBQ3pCO0FBRUEsSUFBSSxjQUFjO0FBRWxCLFNBQVMsU0FBUyxNQUFNO0FBQ3RCLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUVUO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosUUFBTSxXQUFXLElBQUksUUFBUSxJQUFJLEtBQUs7QUFFdEMsUUFBTSxZQUFZLGVBQWUsQ0FBQyxZQUFZLFNBQVMsUUFBUTtBQUUvRCxRQUFNLElBQ0osWUFDQSxzREFBVyxDQUFDO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFSCxRQUFNLFVBQ0osV0FBVyxhQUNYLFlBQ0EsY0FDQSxTQUFTLFFBQVEsZUFBZTtBQUVsQyxJQUFFLE9BQU87QUFBQSxJQUNQO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsZUFBZSxFQUFFLFFBQVE7QUFBQSxJQUN6QjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFJLFFBQVEsVUFBUTtBQUVsQixRQUFJLGVBQWUsd0RBQWEsQ0FBQyxHQUFHO0FBQ2xDLFVBQUksY0FBYyxXQUFXLFVBQVU7QUFDckMsWUFBSSxzQkFBc0I7QUFBQSxNQUM1QixPQUFPO0FBQ0wsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBR0EsV0FBTyxRQUFRLElBQUk7QUFFbkIsU0FBSyxTQUFTO0FBRWQsUUFBSSxDQUFDLFdBQVcsU0FBUyxFQUFFLFFBQVEsVUFBVSxPQUFPO0FBQ2xELFVBQUksV0FBVyxlQUFlO0FBQzVCLG1CQUFXLE1BQU0saUJBQWlCLEtBQUssR0FBRyxXQUFXLGFBQWE7QUFBQSxNQUNwRSxPQUFPO0FBQ0wseUJBQWlCLEtBQUs7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFJLFdBQVc7QUFDYixRQUFJLE9BQU8sQ0FBTSxRQUFPO0FBQ3RCLFlBQU0sRUFBRSxRQUFRLElBQUksT0FBTyxDQUFDO0FBSTVCLFlBQU0sRUFBRSxPQUFPLFVBQVUsY0FBYyxJQUFJLEVBQUU7QUFDN0MsWUFBTSxhQUFhLGFBQWE7QUFFaEMsVUFBSSxDQUFDLFdBQVc7QUFBWSx5QkFBaUIsYUFBYTtBQUUxRCxVQUlFLFlBQVksU0FDWixFQUFFLFFBQVEsWUFDVCxDQUFDLGNBQWMsV0FBVyxlQUFlLFFBQVEsSUFDbEQ7QUFDQTtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFVBQVUsTUFBTSxFQUFFLE9BQU87QUFFL0IsVUFBSSx3REFBYSxDQUFDLEtBQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxZQUFhO0FBQzNELHNCQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGLEVBQUM7QUFBQSxFQUNIO0FBVUEsUUFBTSxVQUFVLEtBQUssRUFBRTtBQUN2QixNQUFJLENBQUMsU0FBUztBQUNaLFVBQU0sSUFBSSxNQUFNLG1EQUFtRCxJQUFJO0FBQUEsRUFDekU7QUFFQSxTQUFPLEVBQUU7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovL215c2VlbGlhLy4vbm9kZV9tb2R1bGVzL3N2ZWx0ZS1obXIvcnVudGltZS9ob3QtYXBpLmpzPzU4ZWEiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbmltcG9ydCB7IGNyZWF0ZVByb3h5LCBoYXNGYXRhbEVycm9yIH0gZnJvbSAnLi9wcm94eS5qcydcblxuY29uc3QgbG9nUHJlZml4ID0gJ1tITVI6U3ZlbHRlXSdcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbmNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmxvZyhsb2dQcmVmaXgsIC4uLmFyZ3MpXG5cbmNvbnN0IGRvbVJlbG9hZCA9ICgpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IHdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvd1xuICBpZiAod2luICYmIHdpbi5sb2NhdGlvbiAmJiB3aW4ubG9jYXRpb24ucmVsb2FkKSB7XG4gICAgbG9nKCdSZWxvYWQnKVxuICAgIHdpbi5sb2NhdGlvbi5yZWxvYWQoKVxuICB9IGVsc2Uge1xuICAgIGxvZygnRnVsbCByZWxvYWQgcmVxdWlyZWQnKVxuICB9XG59XG5cbmNvbnN0IHJlcGxhY2VDc3MgPSAocHJldmlvdXNJZCwgbmV3SWQpID0+IHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZVxuICBpZiAoIXByZXZpb3VzSWQpIHJldHVybiBmYWxzZVxuICBpZiAoIW5ld0lkKSByZXR1cm4gZmFsc2VcbiAgLy8gc3ZlbHRlLXh4eC1zdHlsZSA9PiBzdmVsdGUteHh4XG4gIGNvbnN0IHByZXZpb3VzQ2xhc3MgPSBwcmV2aW91c0lkLnNsaWNlKDAsIC02KVxuICBjb25zdCBuZXdDbGFzcyA9IG5ld0lkLnNsaWNlKDAsIC02KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBwcmV2aW91c0NsYXNzKS5mb3JFYWNoKGVsID0+IHtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKHByZXZpb3VzQ2xhc3MpXG4gICAgZWwuY2xhc3NMaXN0LmFkZChuZXdDbGFzcylcbiAgfSlcbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgcmVtb3ZlU3R5bGVzaGVldCA9IGNzc0lkID0+IHtcbiAgaWYgKGNzc0lkID09IG51bGwpIHJldHVyblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNzc0lkKVxuICBpZiAoZWwpIGVsLnJlbW92ZSgpXG4gIHJldHVyblxufVxuXG5jb25zdCBkZWZhdWx0QXJncyA9IHtcbiAgcmVsb2FkOiBkb21SZWxvYWQsXG59XG5cbmV4cG9ydCBjb25zdCBtYWtlQXBwbHlIbXIgPSB0cmFuc2Zvcm1BcmdzID0+IGFyZ3MgPT4ge1xuICBjb25zdCBhbGxBcmdzID0gdHJhbnNmb3JtQXJncyh7IC4uLmRlZmF1bHRBcmdzLCAuLi5hcmdzIH0pXG4gIHJldHVybiBhcHBseUhtcihhbGxBcmdzKVxufVxuXG5sZXQgbmVlZHNSZWxvYWQgPSBmYWxzZVxuXG5mdW5jdGlvbiBhcHBseUhtcihhcmdzKSB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBjc3NJZCxcbiAgICBub25Dc3NIYXNoLFxuICAgIHJlbG9hZCA9IGRvbVJlbG9hZCxcbiAgICAvLyBub3JtYWxpemVkIGhvdCBBUEkgKG11c3QgY29uZm9ybSB0byByb2xsdXAtcGx1Z2luLWhvdClcbiAgICBob3QsXG4gICAgaG90T3B0aW9ucyxcbiAgICBDb21wb25lbnQsXG4gICAgYWNjZXB0YWJsZSwgLy8gc29tZSB0eXBlcyBvZiBjb21wb25lbnRzIGFyZSBpbXBvc3NpYmxlIHRvIEhNUiBjb3JyZWN0bHlcbiAgICBwcmVzZXJ2ZUxvY2FsU3RhdGUsXG4gICAgUHJveHlBZGFwdGVyLFxuICAgIGVtaXRDc3MsXG4gIH0gPSBhcmdzXG5cbiAgY29uc3QgZXhpc3RpbmcgPSBob3QuZGF0YSAmJiBob3QuZGF0YS5yZWNvcmRcblxuICBjb25zdCBjYW5BY2NlcHQgPSBhY2NlcHRhYmxlICYmICghZXhpc3RpbmcgfHwgZXhpc3RpbmcuY3VycmVudC5jYW5BY2NlcHQpXG5cbiAgY29uc3QgciA9XG4gICAgZXhpc3RpbmcgfHxcbiAgICBjcmVhdGVQcm94eSh7XG4gICAgICBBZGFwdGVyOiBQcm94eUFkYXB0ZXIsXG4gICAgICBpZCxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGhvdE9wdGlvbnMsXG4gICAgICBjYW5BY2NlcHQsXG4gICAgICBwcmVzZXJ2ZUxvY2FsU3RhdGUsXG4gICAgfSlcblxuICBjb25zdCBjc3NPbmx5ID1cbiAgICBob3RPcHRpb25zLmluamVjdENzcyAmJlxuICAgIGV4aXN0aW5nICYmXG4gICAgbm9uQ3NzSGFzaCAmJlxuICAgIGV4aXN0aW5nLmN1cnJlbnQubm9uQ3NzSGFzaCA9PT0gbm9uQ3NzSGFzaFxuXG4gIHIudXBkYXRlKHtcbiAgICBDb21wb25lbnQsXG4gICAgaG90T3B0aW9ucyxcbiAgICBjYW5BY2NlcHQsXG4gICAgbm9uQ3NzSGFzaCxcbiAgICBjc3NJZCxcbiAgICBwcmV2aW91c0Nzc0lkOiByLmN1cnJlbnQuY3NzSWQsXG4gICAgY3NzT25seSxcbiAgICBwcmVzZXJ2ZUxvY2FsU3RhdGUsXG4gIH0pXG5cbiAgaG90LmRpc3Bvc2UoZGF0YSA9PiB7XG4gICAgLy8gaGFuZGxlIHByZXZpb3VzIGZhdGFsIGVycm9yc1xuICAgIGlmIChuZWVkc1JlbG9hZCB8fCBoYXNGYXRhbEVycm9yKCkpIHtcbiAgICAgIGlmIChob3RPcHRpb25zICYmIGhvdE9wdGlvbnMubm9SZWxvYWQpIHtcbiAgICAgICAgbG9nKCdGdWxsIHJlbG9hZCByZXF1aXJlZCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxvYWQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIwMjAtMDktMjEgU25vd3BhY2sgbWFzdGVyIGRvZXNuJ3QgcGFzcyBkYXRhIGFzIGFyZyB0byBkaXNwb3NlIGhhbmRsZXJcbiAgICBkYXRhID0gZGF0YSB8fCBob3QuZGF0YVxuXG4gICAgZGF0YS5yZWNvcmQgPSByXG5cbiAgICBpZiAoIWVtaXRDc3MgJiYgY3NzSWQgJiYgci5jdXJyZW50LmNzc0lkICE9PSBjc3NJZCkge1xuICAgICAgaWYgKGhvdE9wdGlvbnMuY3NzRWplY3REZWxheSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlbW92ZVN0eWxlc2hlZXQoY3NzSWQpLCBob3RPcHRpb25zLmNzc0VqZWN0RGVsYXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVTdHlsZXNoZWV0KGNzc0lkKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2FuQWNjZXB0KSB7XG4gICAgaG90LmFjY2VwdChhc3luYyBhcmcgPT4ge1xuICAgICAgY29uc3QgeyBidWJibGVkIH0gPSBhcmcgfHwge31cblxuICAgICAgLy8gTk9URSBTbm93cGFjayByZWdpc3RlcnMgYWNjZXB0IGhhbmRsZXJzIG9ubHkgb25jZSwgc28gd2UgY2FuIE5PVCByZWx5XG4gICAgICAvLyBvbiB0aGUgc3Vycm91bmRpbmcgc2NvcGUgdmFyaWFibGVzIC0tIHRoZXkncmUgbm90IHRoZSBsYXN0IHZlcnNpb24hXG4gICAgICBjb25zdCB7IGNzc0lkOiBuZXdDc3NJZCwgcHJldmlvdXNDc3NJZCB9ID0gci5jdXJyZW50XG4gICAgICBjb25zdCBjc3NDaGFuZ2VkID0gbmV3Q3NzSWQgIT09IHByZXZpb3VzQ3NzSWRcbiAgICAgIC8vIGVuc3VyZSBvbGQgc3R5bGUgc2hlZXQgaGFzIGJlZW4gcmVtb3ZlZCBieSBub3dcbiAgICAgIGlmICghZW1pdENzcyAmJiBjc3NDaGFuZ2VkKSByZW1vdmVTdHlsZXNoZWV0KHByZXZpb3VzQ3NzSWQpXG4gICAgICAvLyBndWFyZDogY3NzIG9ubHkgY2hhbmdlXG4gICAgICBpZiAoXG4gICAgICAgIC8vIE5PVEUgYnViYmxlZCBpcyBwcm92aWRlZCBvbmx5IGJ5IHJvbGx1cC1wbHVnaW4taG90LCBhbmQgd2VcbiAgICAgICAgLy8gY2FuJ3Qgc2FmZWx5IGFzc3VtZSBhIENTUyBvbmx5IGNoYW5nZSB3aXRob3V0IGl0Li4uIHRoaXMgbWVhbnMgd2VcbiAgICAgICAgLy8gY2FuJ3Qgc3VwcG9ydCBDU1Mgb25seSBpbmplY3Rpb24gd2l0aCBOb2xsdXAgb3IgV2VicGFjayBjdXJyZW50bHlcbiAgICAgICAgYnViYmxlZCA9PT0gZmFsc2UgJiYgLy8gV0FSTklORyBjaGVjayBmYWxzZSwgbm90IGZhbHN5IVxuICAgICAgICByLmN1cnJlbnQuY3NzT25seSAmJlxuICAgICAgICAoIWNzc0NoYW5nZWQgfHwgcmVwbGFjZUNzcyhwcmV2aW91c0Nzc0lkLCBuZXdDc3NJZCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCByLnJlbG9hZCgpXG5cbiAgICAgIGlmIChoYXNGYXRhbEVycm9yKCkgfHwgKCFzdWNjZXNzICYmICFob3RPcHRpb25zLm9wdGltaXN0aWMpKSB7XG4gICAgICAgIG5lZWRzUmVsb2FkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyB3ZWxsLCBlbmRnYW1lLi4uIHdlIHdvbid0IGJlIGFibGUgdG8gcmVuZGVyIG5leHQgdXBkYXRlcywgZXZlbiBzdWNjZXNzZnVsLFxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIHByb3hpZXMgaW4gc3ZlbHRlJ3MgdHJlZVxuICAvL1xuICAvLyBzaW5jZSB3ZSB3b24ndCByZXR1cm4gdGhlIHByb3h5IGFuZCB0aGUgYXBwIHdpbGwgZXhwZWN0IGEgc3ZlbHRlIGNvbXBvbmVudCxcbiAgLy8gaXQncyBnb25uYSBjcmFzaC4uLiBzbyBpdCdzIGJlc3QgdG8gcmVwb3J0IHRoZSByZWFsIGNhdXNlXG4gIC8vXG4gIC8vIGZ1bGwgcmVsb2FkIHJlcXVpcmVkXG4gIC8vXG4gIGNvbnN0IHByb3h5T2sgPSByICYmIHIucHJveHlcbiAgaWYgKCFwcm94eU9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIEhNUiBwcm94eSBmb3IgU3ZlbHRlIGNvbXBvbmVudCAke2lkfWApXG4gIH1cblxuICByZXR1cm4gci5wcm94eVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/svelte-hmr/runtime/hot-api.js\n");
/***/ }),
/***/ "./node_modules/svelte-hmr/runtime/index.js":
/*!**************************************************!*\
!*** ./node_modules/svelte-hmr/runtime/index.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"makeApplyHmr\": () => (/* reexport safe */ _hot_api_js__WEBPACK_IMPORTED_MODULE_0__.makeApplyHmr)\n/* harmony export */ });\n/* harmony import */ var _hot_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hot-api.js */ \"./node_modules/svelte-hmr/runtime/hot-api.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL2luZGV4LmpzP2RkY2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgbWFrZUFwcGx5SG1yIH0gZnJvbSAnLi9ob3QtYXBpLmpzJ1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/svelte-hmr/runtime/index.js\n");
/***/ }),
/***/ "./node_modules/svelte-hmr/runtime/overlay.js":
/*!****************************************************!*\
!*** ./node_modules/svelte-hmr/runtime/overlay.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst removeElement = (el) => el && el.parentNode && el.parentNode.removeChild(el);\nconst ErrorOverlay = () => {\n let errors = [];\n let compileError = null;\n const errorsTitle = \"Failed to init component\";\n const compileErrorTitle = \"Failed to compile\";\n const style = {\n section: `\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 32px;\n background: rgba(0, 0, 0, .85);\n font-family: Menlo, Consolas, monospace;\n font-size: large;\n color: rgb(232, 232, 232);\n overflow: auto;\n z-index: 2147483647;\n `,\n h1: `\n margin-top: 0;\n color: #E36049;\n font-size: large;\n font-weight: normal;\n `,\n h2: `\n margin: 32px 0 0;\n font-size: large;\n font-weight: normal;\n `,\n pre: ``\n };\n const createOverlay = () => {\n const h1 = document.createElement(\"h1\");\n h1.style = style.h1;\n const section = document.createElement(\"section\");\n section.appendChild(h1);\n section.style = style.section;\n const body = document.createElement(\"div\");\n section.appendChild(body);\n return { h1, el: section, body };\n };\n const setTitle = (title) => {\n overlay.h1.textContent = title;\n };\n const show = () => {\n const { el } = overlay;\n if (!el.parentNode) {\n const target = document.body;\n target.appendChild(overlay.el);\n }\n };\n const hide = () => {\n const { el } = overlay;\n if (el.parentNode) {\n overlay.el.remove();\n }\n };\n const update = () => {\n if (compileError) {\n overlay.body.innerHTML = \"\";\n setTitle(compileErrorTitle);\n const errorEl = renderError(compileError);\n overlay.body.appendChild(errorEl);\n show();\n } else if (errors.length > 0) {\n overlay.body.innerHTML = \"\";\n setTitle(errorsTitle);\n errors.forEach(({ title, message }) => {\n const errorEl = renderError(message, title);\n overlay.body.appendChild(errorEl);\n });\n show();\n } else {\n hide();\n }\n };\n const renderError = (message, title) => {\n const div = document.createElement(\"div\");\n if (title) {\n const h2 = document.createElement(\"h2\");\n h2.textContent = title;\n h2.style = style.h2;\n div.appendChild(h2);\n }\n const pre = document.createElement(\"pre\");\n pre.textContent = message;\n div.appendChild(pre);\n return div;\n };\n const addError = (error, title) => {\n const message = error && error.stack || error;\n errors.push({ title, message });\n update();\n };\n const clearErrors = () => {\n errors.forEach(({ element }) => {\n removeElement(element);\n });\n errors = [];\n update();\n };\n const setCompileError = (message) => {\n compileError = message;\n update();\n };\n const overlay = createOverlay();\n return {\n addError,\n clearErrors,\n setCompileError\n };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ErrorOverlay);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL292ZXJsYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUVBLE1BQU0sZ0JBQWdCLFFBQU0sTUFBTSxHQUFHLGNBQWMsR0FBRyxXQUFXLFlBQVksRUFBRTtBQUUvRSxNQUFNLGVBQWUsTUFBTTtBQUN6QixNQUFJLFNBQVMsQ0FBQztBQUNkLE1BQUksZUFBZTtBQUVuQixRQUFNLGNBQWM7QUFDcEIsUUFBTSxvQkFBb0I7QUFFMUIsUUFBTSxRQUFRO0FBQUEsSUFDWixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWNULElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNSixJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtKLEtBQUs7QUFBQSxFQUNQO0FBRUEsUUFBTSxnQkFBZ0IsTUFBTTtBQUMxQixVQUFNLEtBQUssU0FBUyxjQUFjLElBQUk7QUFDdEMsT0FBRyxRQUFRLE1BQU07QUFDakIsVUFBTSxVQUFVLFNBQVMsY0FBYyxTQUFTO0FBQ2hELFlBQVEsWUFBWSxFQUFFO0FBQ3RCLFlBQVEsUUFBUSxNQUFNO0FBQ3RCLFVBQU0sT0FBTyxTQUFTLGNBQWMsS0FBSztBQUN6QyxZQUFRLFlBQVksSUFBSTtBQUN4QixXQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsS0FBSztBQUFBLEVBQ2pDO0FBRUEsUUFBTSxXQUFXLFdBQVM7QUFDeEIsWUFBUSxHQUFHLGNBQWM7QUFBQSxFQUMzQjtBQUVBLFFBQU0sT0FBTyxNQUFNO0FBQ2pCLFVBQU0sRUFBRSxHQUFHLElBQUk7QUFDZixRQUFJLENBQUMsR0FBRyxZQUFZO0FBQ2xCLFlBQU0sU0FBUyxTQUFTO0FBQ3hCLGFBQU8sWUFBWSxRQUFRLEVBQUU7QUFBQSxJQUMvQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLE9BQU8sTUFBTTtBQUNqQixVQUFNLEVBQUUsR0FBRyxJQUFJO0FBQ2YsUUFBSSxHQUFHLFlBQVk7QUFDakIsY0FBUSxHQUFHLE9BQU87QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFNBQVMsTUFBTTtBQUNuQixRQUFJLGNBQWM7QUFDaEIsY0FBUSxLQUFLLFlBQVk7QUFDekIsZUFBUyxpQkFBaUI7QUFDMUIsWUFBTSxVQUFVLFlBQVksWUFBWTtBQUN4QyxjQUFRLEtBQUssWUFBWSxPQUFPO0FBQ2hDLFdBQUs7QUFBQSxJQUNQLFdBQVcsT0FBTyxTQUFTLEdBQUc7QUFDNUIsY0FBUSxLQUFLLFlBQVk7QUFDekIsZUFBUyxXQUFXO0FBQ3BCLGFBQU8sUUFBUSxDQUFDLEVBQUUsT0FBTyxRQUFRLE1BQU07QUFDckMsY0FBTSxVQUFVLFlBQVksU0FBUyxLQUFLO0FBQzFDLGdCQUFRLEtBQUssWUFBWSxPQUFPO0FBQUEsTUFDbEMsQ0FBQztBQUNELFdBQUs7QUFBQSxJQUNQLE9BQU87QUFDTCxXQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGNBQWMsQ0FBQyxTQUFTLFVBQVU7QUFDdEMsVUFBTSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ3hDLFFBQUksT0FBTztBQUNULFlBQU0sS0FBSyxTQUFTLGNBQWMsSUFBSTtBQUN0QyxTQUFHLGNBQWM7QUFDakIsU0FBRyxRQUFRLE1BQU07QUFDakIsVUFBSSxZQUFZLEVBQUU7QUFBQSxJQUNwQjtBQUNBLFVBQU0sTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN4QyxRQUFJLGNBQWM7QUFDbEIsUUFBSSxZQUFZLEdBQUc7QUFDbkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFdBQVcsQ0FBQyxPQUFPLFVBQVU7QUFDakMsVUFBTSxVQUFXLFNBQVMsTUFBTSxTQUFVO0FBQzFDLFdBQU8sS0FBSyxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQzlCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLE1BQU07QUFDeEIsV0FBTyxRQUFRLENBQUMsRUFBRSxRQUFRLE1BQU07QUFDOUIsb0JBQWMsT0FBTztBQUFBLElBQ3ZCLENBQUM7QUFDRCxhQUFTLENBQUM7QUFDVixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sa0JBQWtCLGFBQVc7QUFDakMsbUJBQWU7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sVUFBVSxjQUFjO0FBRTlCLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxpRUFBZSxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL292ZXJsYXkuanM/MjQ5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuY29uc3QgcmVtb3ZlRWxlbWVudCA9IGVsID0+IGVsICYmIGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbClcblxuY29uc3QgRXJyb3JPdmVybGF5ID0gKCkgPT4ge1xuICBsZXQgZXJyb3JzID0gW11cbiAgbGV0IGNvbXBpbGVFcnJvciA9IG51bGxcblxuICBjb25zdCBlcnJvcnNUaXRsZSA9ICdGYWlsZWQgdG8gaW5pdCBjb21wb25lbnQnXG4gIGNvbnN0IGNvbXBpbGVFcnJvclRpdGxlID0gJ0ZhaWxlZCB0byBjb21waWxlJ1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHNlY3Rpb246IGBcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHBhZGRpbmc6IDMycHg7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC44NSk7XG4gICAgICBmb250LWZhbWlseTogTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2U7XG4gICAgICBmb250LXNpemU6IGxhcmdlO1xuICAgICAgY29sb3I6IHJnYigyMzIsIDIzMiwgMjMyKTtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgei1pbmRleDogMjE0NzQ4MzY0NztcbiAgICBgLFxuICAgIGgxOiBgXG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgY29sb3I6ICNFMzYwNDk7XG4gICAgICBmb250LXNpemU6IGxhcmdlO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBgLFxuICAgIGgyOiBgXG4gICAgICBtYXJnaW46IDMycHggMCAwO1xuICAgICAgZm9udC1zaXplOiBsYXJnZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgYCxcbiAgICBwcmU6IGBgLFxuICB9XG5cbiAgY29uc3QgY3JlYXRlT3ZlcmxheSA9ICgpID0+IHtcbiAgICBjb25zdCBoMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gxJylcbiAgICBoMS5zdHlsZSA9IHN0eWxlLmgxXG4gICAgY29uc3Qgc2VjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKVxuICAgIHNlY3Rpb24uYXBwZW5kQ2hpbGQoaDEpXG4gICAgc2VjdGlvbi5zdHlsZSA9IHN0eWxlLnNlY3Rpb25cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBzZWN0aW9uLmFwcGVuZENoaWxkKGJvZHkpXG4gICAgcmV0dXJuIHsgaDEsIGVsOiBzZWN0aW9uLCBib2R5IH1cbiAgfVxuXG4gIGNvbnN0IHNldFRpdGxlID0gdGl0bGUgPT4ge1xuICAgIG92ZXJsYXkuaDEudGV4dENvbnRlbnQgPSB0aXRsZVxuICB9XG5cbiAgY29uc3Qgc2hvdyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGVsIH0gPSBvdmVybGF5XG4gICAgaWYgKCFlbC5wYXJlbnROb2RlKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5ib2R5XG4gICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQob3ZlcmxheS5lbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoaWRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZWwgfSA9IG92ZXJsYXlcbiAgICBpZiAoZWwucGFyZW50Tm9kZSkge1xuICAgICAgb3ZlcmxheS5lbC5yZW1vdmUoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAoY29tcGlsZUVycm9yKSB7XG4gICAgICBvdmVybGF5LmJvZHkuaW5uZXJIVE1MID0gJydcbiAgICAgIHNldFRpdGxlKGNvbXBpbGVFcnJvclRpdGxlKVxuICAgICAgY29uc3QgZXJyb3JFbCA9IHJlbmRlckVycm9yKGNvbXBpbGVFcnJvcilcbiAgICAgIG92ZXJsYXkuYm9keS5hcHBlbmRDaGlsZChlcnJvckVsKVxuICAgICAgc2hvdygpXG4gICAgfSBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgb3ZlcmxheS5ib2R5LmlubmVySFRNTCA9ICcnXG4gICAgICBzZXRUaXRsZShlcnJvcnNUaXRsZSlcbiAgICAgIGVycm9ycy5mb3JFYWNoKCh7IHRpdGxlLCBtZXNzYWdlIH0pID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JFbCA9IHJlbmRlckVycm9yKG1lc3NhZ2UsIHRpdGxlKVxuICAgICAgICBvdmVybGF5LmJvZHkuYXBwZW5kQ2hpbGQoZXJyb3JFbClcbiAgICAgIH0pXG4gICAgICBzaG93KClcbiAgICB9IGVsc2Uge1xuICAgICAgaGlkZSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVuZGVyRXJyb3IgPSAobWVzc2FnZSwgdGl0bGUpID0+IHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGlmICh0aXRsZSkge1xuICAgICAgY29uc3QgaDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMicpXG4gICAgICBoMi50ZXh0Q29udGVudCA9IHRpdGxlXG4gICAgICBoMi5zdHlsZSA9IHN0eWxlLmgyXG4gICAgICBkaXYuYXBwZW5kQ2hpbGQoaDIpXG4gICAgfVxuICAgIGNvbnN0IHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpXG4gICAgcHJlLnRleHRDb250ZW50ID0gbWVzc2FnZVxuICAgIGRpdi5hcHBlbmRDaGlsZChwcmUpXG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgY29uc3QgYWRkRXJyb3IgPSAoZXJyb3IsIHRpdGxlKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IChlcnJvciAmJiBlcnJvci5zdGFjaykgfHwgZXJyb3JcbiAgICBlcnJvcnMucHVzaCh7IHRpdGxlLCBtZXNzYWdlIH0pXG4gICAgdXBkYXRlKClcbiAgfVxuXG4gIGNvbnN0IGNsZWFyRXJyb3JzID0gKCkgPT4ge1xuICAgIGVycm9ycy5mb3JFYWNoKCh7IGVsZW1lbnQgfSkgPT4ge1xuICAgICAgcmVtb3ZlRWxlbWVudChlbGVtZW50KVxuICAgIH0pXG4gICAgZXJyb3JzID0gW11cbiAgICB1cGRhdGUoKVxuICB9XG5cbiAgY29uc3Qgc2V0Q29tcGlsZUVycm9yID0gbWVzc2FnZSA9PiB7XG4gICAgY29tcGlsZUVycm9yID0gbWVzc2FnZVxuICAgIHVwZGF0ZSgpXG4gIH1cblxuICBjb25zdCBvdmVybGF5ID0gY3JlYXRlT3ZlcmxheSgpXG5cbiAgcmV0dXJuIHtcbiAgICBhZGRFcnJvcixcbiAgICBjbGVhckVycm9ycyxcbiAgICBzZXRDb21waWxlRXJyb3IsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXJyb3JPdmVybGF5XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/svelte-hmr/runtime/overlay.js\n");
/***/ }),
/***/ "./node_modules/svelte-hmr/runtime/proxy-adapter-dom.js":
/*!**************************************************************!*\
!*** ./node_modules/svelte-hmr/runtime/proxy-adapter-dom.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"adapter\": () => (/* binding */ adapter),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var svelte_internal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! svelte/internal */ \"./node_modules/svelte/internal/index.mjs\");\n/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./overlay.js */ \"./node_modules/svelte-hmr/runtime/overlay.js\");\n\nconst svelteInsert = svelte_internal__WEBPACK_IMPORTED_MODULE_0__.insert_hydration || svelte_internal__WEBPACK_IMPORTED_MODULE_0__.insert;\nif (!svelteInsert) {\n throw new Error(\n \"failed to find insert_hydration and insert in svelte/internal\"\n );\n}\n\nconst removeElement = (el) => el && el.parentNode && el.parentNode.removeChild(el);\nconst adapter = class ProxyAdapterDom {\n constructor(instance) {\n this.instance = instance;\n this.insertionPoint = null;\n this.afterMount = this.afterMount.bind(this);\n this.rerender = this.rerender.bind(this);\n this._noOverlay = !!instance.hotOptions.noOverlay;\n }\n static getErrorOverlay(noCreate = false) {\n if (!noCreate && !this.errorOverlay) {\n this.errorOverlay = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n }\n return this.errorOverlay;\n }\n static renderCompileError(message) {\n const noCreate = !message;\n const overlay = this.getErrorOverlay(noCreate);\n if (!overlay)\n return;\n overlay.setCompileError(message);\n }\n dispose() {\n if (this.insertionPoint) {\n removeElement(this.insertionPoint);\n this.insertionPoint = null;\n }\n this.clearError();\n }\n afterMount(target, anchor) {\n const {\n instance: { debugName }\n } = this;\n if (!this.insertionPoint) {\n this.insertionPoint = document.createComment(debugName);\n }\n svelteInsert(target, this.insertionPoint, anchor);\n }\n rerender() {\n this.clearError();\n const {\n instance: { refreshComponent },\n insertionPoint\n } = this;\n if (!insertionPoint) {\n throw new Error(\"Cannot rerender: missing insertion point\");\n }\n refreshComponent(insertionPoint.parentNode, insertionPoint);\n }\n renderError(err) {\n if (this._noOverlay)\n return;\n const {\n instance: { debugName }\n } = this;\n const title = debugName || err.moduleName || \"Error\";\n this.constructor.getErrorOverlay().addError(err, title);\n }\n clearError() {\n if (this._noOverlay)\n return;\n const overlay = this.constructor.getErrorOverlay(true);\n if (!overlay)\n return;\n overlay.clearErrors();\n }\n};\nif (typeof window !== \"undefined\") {\n window.__SVELTE_HMR_ADAPTER = adapter;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (adapter);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL3Byb3h5LWFkYXB0ZXItZG9tLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDZ0M7QUFLaEMsTUFBTSxlQUFlLDZEQUErQixJQUFJLG1EQUFxQjtBQUM3RSxJQUFJLENBQUMsY0FBYztBQUNqQixRQUFNLElBQUk7QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNGO0FBRXlCO0FBRXpCLE1BQU0sZ0JBQWdCLFFBQU0sTUFBTSxHQUFHLGNBQWMsR0FBRyxXQUFXLFlBQVksRUFBRTtBQUV4RSxNQUFNLFVBQVUsTUFBTSxnQkFBZ0I7QUFBQSxFQUMzQyxZQUFZLFVBQVU7QUFDcEIsU0FBSyxXQUFXO0FBQ2hCLFNBQUssaUJBQWlCO0FBRXRCLFNBQUssYUFBYSxLQUFLLFdBQVcsS0FBSyxJQUFJO0FBQzNDLFNBQUssV0FBVyxLQUFLLFNBQVMsS0FBSyxJQUFJO0FBRXZDLFNBQUssYUFBYSxDQUFDLENBQUMsU0FBUyxXQUFXO0FBQUEsRUFDMUM7QUFBQSxFQUtBLE9BQU8sZ0JBQWdCLFdBQVcsT0FBTztBQUN2QyxRQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssY0FBYztBQUNuQyxXQUFLLGVBQWUsdURBQVksQ0FBQztBQUFBLElBQ25DO0FBQ0EsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBR0EsT0FBTyxtQkFBbUIsU0FBUztBQUNqQyxVQUFNLFdBQVcsQ0FBQztBQUNsQixVQUFNLFVBQVUsS0FBSyxnQkFBZ0IsUUFBUTtBQUM3QyxRQUFJLENBQUM7QUFBUztBQUNkLFlBQVEsZ0JBQWdCLE9BQU87QUFBQSxFQUNqQztBQUFBLEVBRUEsVUFBVTtBQUdSLFFBQUksS0FBSyxnQkFBZ0I7QUFDdkIsb0JBQWMsS0FBSyxjQUFjO0FBQ2pDLFdBQUssaUJBQWlCO0FBQUEsSUFDeEI7QUFDQSxTQUFLLFdBQVc7QUFBQSxFQUNsQjtBQUFBLEVBR0EsV0FBVyxRQUFRLFFBQVE7QUFDekIsVUFBTTtBQUFBLE1BQ0osVUFBVSxFQUFFLFVBQVU7QUFBQSxJQUN4QixJQUFJO0FBQ0osUUFBSSxDQUFDLEtBQUssZ0JBQWdCO0FBQ3hCLFdBQUssaUJBQWlCLFNBQVMsY0FBYyxTQUFTO0FBQUEsSUFDeEQ7QUFDQSxpQkFBYSxRQUFRLEtBQUssZ0JBQWdCLE1BQU07QUFBQSxFQUNsRDtBQUFBLEVBRUEsV0FBVztBQUNULFNBQUssV0FBVztBQUNoQixVQUFNO0FBQUEsTUFDSixVQUFVLEVBQUUsaUJBQWlCO0FBQUEsTUFDN0I7QUFBQSxJQUNGLElBQUk7QUFDSixRQUFJLENBQUMsZ0JBQWdCO0FBQ25CLFlBQU0sSUFBSSxNQUFNLDBDQUEwQztBQUFBLElBQzVEO0FBQ0EscUJBQWlCLGVBQWUsWUFBWSxjQUFjO0FBQUEsRUFDNUQ7QUFBQSxFQUVBLFlBQVksS0FBSztBQUNmLFFBQUksS0FBSztBQUFZO0FBQ3JCLFVBQU07QUFBQSxNQUNKLFVBQVUsRUFBRSxVQUFVO0FBQUEsSUFDeEIsSUFBSTtBQUNKLFVBQU0sUUFBUSxhQUFhLElBQUksY0FBYztBQUM3QyxTQUFLLFlBQVksZ0JBQWdCLEVBQUUsU0FBUyxLQUFLLEtBQUs7QUFBQSxFQUN4RDtBQUFBLEVBRUEsYUFBYTtBQUNYLFFBQUksS0FBSztBQUFZO0FBQ3JCLFVBQU0sVUFBVSxLQUFLLFlBQVksZ0JBQWdCLElBQUk7QUFDckQsUUFBSSxDQUFDO0FBQVM7QUFDZCxZQUFRLFlBQVk7QUFBQSxFQUN0QjtBQUNGO0FBR0EsSUFBSSxPQUFPLFdBQVcsYUFBYTtBQUNqQyxTQUFPLHVCQUF1QjtBQUNoQztBQUtBLGlFQUFlLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL25vZGVfbW9kdWxlcy9zdmVsdGUtaG1yL3J1bnRpbWUvcHJveHktYWRhcHRlci1kb20uanM/YTYxYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93LCBkb2N1bWVudCAqL1xuaW1wb3J0ICogYXMgc3ZlbHRlSW50ZXJuYWwgZnJvbSAnc3ZlbHRlL2ludGVybmFsJ1xuLy8gTk9URSBmcm9tIDMuMzguMyAob3Igc28pLCBpbnNlcnQgd2FzIGNhcnJ5aW5nIHRoZSBoeWRyYXRpb24gbG9naWMsIHRoYXQgbXVzdFxuLy8gYmUgdXNlZCBiZWNhdXNlIERPTSBlbGVtZW50cyBhcmUgcmV1c2VkIG1vcmUgKGFuZCBzbyBpbnNlcnRpb24gcG9pbnRzIGFyZSBub3Rcbi8vIG5lY2Vzc2FyaWx5IGFkZGVkIGluIG9yZGVyKTsgdGhlbiBpbiAzLjQwIHRoZSBsb2dpYyB3YXMgbW92ZWQgdG9cbi8vIGluc2VydF9oeWRyYXRpb24sIHdoaWNoIGlzIHRoZSBvbmUgd2UgbXVzdCB1c2UgZm9yIEhNUlxuY29uc3Qgc3ZlbHRlSW5zZXJ0ID0gc3ZlbHRlSW50ZXJuYWwuaW5zZXJ0X2h5ZHJhdGlvbiB8fCBzdmVsdGVJbnRlcm5hbC5pbnNlcnRcbmlmICghc3ZlbHRlSW5zZXJ0KSB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnZmFpbGVkIHRvIGZpbmQgaW5zZXJ0X2h5ZHJhdGlvbiBhbmQgaW5zZXJ0IGluIHN2ZWx0ZS9pbnRlcm5hbCdcbiAgKVxufVxuXG5pbXBvcnQgRXJyb3JPdmVybGF5IGZyb20gJy4vb3ZlcmxheS5qcydcblxuY29uc3QgcmVtb3ZlRWxlbWVudCA9IGVsID0+IGVsICYmIGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbClcblxuZXhwb3J0IGNvbnN0IGFkYXB0ZXIgPSBjbGFzcyBQcm94eUFkYXB0ZXJEb20ge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZSkge1xuICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZVxuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBudWxsXG5cbiAgICB0aGlzLmFmdGVyTW91bnQgPSB0aGlzLmFmdGVyTW91bnQuYmluZCh0aGlzKVxuICAgIHRoaXMucmVyZW5kZXIgPSB0aGlzLnJlcmVuZGVyLmJpbmQodGhpcylcblxuICAgIHRoaXMuX25vT3ZlcmxheSA9ICEhaW5zdGFuY2UuaG90T3B0aW9ucy5ub092ZXJsYXlcbiAgfVxuXG4gIC8vIE5PVEUgb3ZlcmxheSBpcyBvbmx5IGNyZWF0ZWQgYmVmb3JlIGJlaW5nIGFjdHVhbGx5IHNob3duIHRvIGhlbHAgdGVzdFxuICAvLyBydW5uZXIgKGl0IHdvbid0IGhhdmUgdG8gYWNjb3VudCBmb3IgZXJyb3Igb3ZlcmxheSB3aGVuIHJ1bm5pbmcgYXNzZXJ0aW9uc1xuICAvLyBhYm91dCB0aGUgY29udGVudHMgb2YgdGhlIHJlbmRlcmVkIHBhZ2UpXG4gIHN0YXRpYyBnZXRFcnJvck92ZXJsYXkobm9DcmVhdGUgPSBmYWxzZSkge1xuICAgIGlmICghbm9DcmVhdGUgJiYgIXRoaXMuZXJyb3JPdmVybGF5KSB7XG4gICAgICB0aGlzLmVycm9yT3ZlcmxheSA9IEVycm9yT3ZlcmxheSgpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVycm9yT3ZlcmxheVxuICB9XG5cbiAgLy8gVE9ETyB0aGlzIGlzIHByb2JhYmx5IHVudXNlZCBub3c6IHJlbW92ZSBpbiBuZXh0IGJyZWFraW5nIHJlbGVhc2VcbiAgc3RhdGljIHJlbmRlckNvbXBpbGVFcnJvcihtZXNzYWdlKSB7XG4gICAgY29uc3Qgbm9DcmVhdGUgPSAhbWVzc2FnZVxuICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmdldEVycm9yT3ZlcmxheShub0NyZWF0ZSlcbiAgICBpZiAoIW92ZXJsYXkpIHJldHVyblxuICAgIG92ZXJsYXkuc2V0Q29tcGlsZUVycm9yKG1lc3NhZ2UpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIC8vIENvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQsIGRldGFjaGluZyBpcyBub3Qgb3B0aW9uYWwgaW4gU3ZlbHRlMydzXG4gICAgLy8gY29tcG9uZW50IEFQSSwgc28gd2UgY2FuIGRpc3Bvc2Ugb2YgdGhlIGluc2VydGlvbiBwb2ludCBpbiBldmVyeSBjYXNlLlxuICAgIGlmICh0aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICByZW1vdmVFbGVtZW50KHRoaXMuaW5zZXJ0aW9uUG9pbnQpXG4gICAgICB0aGlzLmluc2VydGlvblBvaW50ID0gbnVsbFxuICAgIH1cbiAgICB0aGlzLmNsZWFyRXJyb3IoKVxuICB9XG5cbiAgLy8gTk9URSBhZnRlck1vdW50IENBTiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKGUuZy4ga2V5ZWQgbGlzdClcbiAgYWZ0ZXJNb3VudCh0YXJnZXQsIGFuY2hvcikge1xuICAgIGNvbnN0IHtcbiAgICAgIGluc3RhbmNlOiB7IGRlYnVnTmFtZSB9LFxuICAgIH0gPSB0aGlzXG4gICAgaWYgKCF0aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICB0aGlzLmluc2VydGlvblBvaW50ID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChkZWJ1Z05hbWUpXG4gICAgfVxuICAgIHN2ZWx0ZUluc2VydCh0YXJnZXQsIHRoaXMuaW5zZXJ0aW9uUG9pbnQsIGFuY2hvcilcbiAgfVxuXG4gIHJlcmVuZGVyKCkge1xuICAgIHRoaXMuY2xlYXJFcnJvcigpXG4gICAgY29uc3Qge1xuICAgICAgaW5zdGFuY2U6IHsgcmVmcmVzaENvbXBvbmVudCB9LFxuICAgICAgaW5zZXJ0aW9uUG9pbnQsXG4gICAgfSA9IHRoaXNcbiAgICBpZiAoIWluc2VydGlvblBvaW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXJlbmRlcjogbWlzc2luZyBpbnNlcnRpb24gcG9pbnQnKVxuICAgIH1cbiAgICByZWZyZXNoQ29tcG9uZW50KGluc2VydGlvblBvaW50LnBhcmVudE5vZGUsIGluc2VydGlvblBvaW50KVxuICB9XG5cbiAgcmVuZGVyRXJyb3IoZXJyKSB7XG4gICAgaWYgKHRoaXMuX25vT3ZlcmxheSkgcmV0dXJuXG4gICAgY29uc3Qge1xuICAgICAgaW5zdGFuY2U6IHsgZGVidWdOYW1lIH0sXG4gICAgfSA9IHRoaXNcbiAgICBjb25zdCB0aXRsZSA9IGRlYnVnTmFtZSB8fCBlcnIubW9kdWxlTmFtZSB8fCAnRXJyb3InXG4gICAgdGhpcy5jb25zdHJ1Y3Rvci5nZXRFcnJvck92ZXJsYXkoKS5hZGRFcnJvcihlcnIsIHRpdGxlKVxuICB9XG5cbiAgY2xlYXJFcnJvcigpIHtcbiAgICBpZiAodGhpcy5fbm9PdmVybGF5KSByZXR1cm5cbiAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXRFcnJvck92ZXJsYXkodHJ1ZSlcbiAgICBpZiAoIW92ZXJsYXkpIHJldHVyblxuICAgIG92ZXJsYXkuY2xlYXJFcnJvcnMoKVxuICB9XG59XG5cbi8vIFRPRE8gdGhpcyBpcyBwcm9iYWJseSB1bnVzZWQgbm93OiByZW1vdmUgaW4gbmV4dCBicmVha2luZyByZWxlYXNlXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93Ll9fU1ZFTFRFX0hNUl9BREFQVEVSID0gYWRhcHRlclxufVxuXG4vLyBtaXRpZ2F0ZSBzaXR1YXRpb24gd2l0aCBTbm93cGFjayByZW1vdGUgc291cmNlIHB1bGxpbmcgbGF0ZXN0IG9mIHJ1bnRpbWUsXG4vLyBidXQgdXNpbmcgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgTm9kZSBjb2RlIHRyYW5zZm9ybSBpbiB0aGUgcGx1Z2luXG4vLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yaXhvL3N2ZWx0ZS1obXIvaXNzdWVzLzI3XG5leHBvcnQgZGVmYXVsdCBhZGFwdGVyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/svelte-hmr/runtime/proxy-adapter-dom.js\n");
/***/ }),
/***/ "./node_modules/svelte-hmr/runtime/proxy.js":
/*!**************************************************!*\
!*** ./node_modules/svelte-hmr/runtime/proxy.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createProxy\": () => (/* binding */ createProxy),\n/* harmony export */ \"hasFatalError\": () => (/* binding */ hasFatalError)\n/* harmony export */ });\n/* harmony import */ var _svelte_hooks_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./svelte-hooks.js */ \"./node_modules/svelte-hmr/runtime/svelte-hooks.js\");\n\nconst handledMethods = [\"constructor\", \"$destroy\"];\nconst forwardedMethods = [\"$set\", \"$on\"];\nconst logError = (msg, err) => {\n console.error(\"[HMR][Svelte]\", msg);\n if (err) {\n console.error(err);\n }\n};\nconst posixify = (file) => file.replace(/[/\\\\]/g, \"/\");\nconst getBaseName = (id) => id.split(\"/\").pop().split(\".\").slice(0, -1).join(\".\");\nconst capitalize = (str) => str[0].toUpperCase() + str.slice(1);\nconst getFriendlyName = (id) => capitalize(getBaseName(posixify(id)));\nconst getDebugName = (id) => `<${getFriendlyName(id)}>`;\nconst relayCalls = (getTarget, names, dest = {}) => {\n for (const key of names) {\n dest[key] = function(...args) {\n const target = getTarget();\n if (!target) {\n return;\n }\n return target[key] && target[key].call(this, ...args);\n };\n }\n return dest;\n};\nconst isInternal = (key) => key !== \"$$\" && key.slice(0, 2) === \"$$\";\nconst relayInternalMethods = (proxy, cmp) => {\n Object.keys(proxy).filter(isInternal).forEach((key) => {\n delete proxy[key];\n });\n if (!cmp)\n return;\n Object.keys(cmp).filter(isInternal).forEach((key) => {\n Object.defineProperty(proxy, key, {\n configurable: true,\n get() {\n const value = cmp[key];\n if (typeof value !== \"function\")\n return value;\n return value && function(...args) {\n return value.apply(this, args);\n };\n }\n });\n });\n};\nconst copyComponentProperties = (proxy, cmp, previous) => {\n if (previous) {\n previous.forEach((prop) => {\n delete proxy[prop];\n });\n }\n const props = Object.getOwnPropertyNames(Object.getPrototypeOf(cmp));\n const wrappedProps = props.filter((prop) => {\n if (!handledMethods.includes(prop) && !forwardedMethods.includes(prop)) {\n Object.defineProperty(proxy, prop, {\n configurable: true,\n get() {\n return cmp[prop];\n },\n set(value) {\n cmp[prop] = value;\n }\n });\n return true;\n }\n });\n return wrappedProps;\n};\nclass ProxyComponent {\n constructor({\n Adapter,\n id,\n debugName,\n current,\n register\n }, options) {\n let cmp;\n let disposed = false;\n let lastError = null;\n const setComponent = (_cmp) => {\n cmp = _cmp;\n relayInternalMethods(this, cmp);\n };\n const getComponent = () => cmp;\n const destroyComponent = () => {\n if (cmp) {\n cmp.$destroy();\n setComponent(null);\n }\n };\n const refreshComponent = (target, anchor, conservativeDestroy) => {\n if (lastError) {\n lastError = null;\n adapter.rerender();\n } else {\n try {\n const replaceOptions = {\n target,\n anchor,\n preserveLocalState: current.preserveLocalState\n };\n if (conservativeDestroy) {\n replaceOptions.conservativeDestroy = true;\n }\n cmp.$replace(current.Component, replaceOptions);\n } catch (err) {\n setError(err, target, anchor);\n if (!current.hotOptions.optimistic || !current.canAccept || err && err.hmrFatal) {\n throw err;\n } else {\n logError(`Error during component init: ${debugName}`, err);\n }\n }\n }\n };\n const setError = (err) => {\n lastError = err;\n adapter.renderError(err);\n };\n const instance = {\n hotOptions: current.hotOptions,\n proxy: this,\n id,\n debugName,\n refreshComponent\n };\n const adapter = new Adapter(instance);\n const { afterMount, rerender } = adapter;\n const onDestroy = () => {\n if (!disposed) {\n disposed = true;\n adapter.dispose();\n unregister();\n }\n };\n const unregister = register(rerender);\n this.$destroy = () => {\n destroyComponent();\n onDestroy();\n };\n relayCalls(getComponent, forwardedMethods, this);\n try {\n let lastProperties;\n (0,_svelte_hooks_js__WEBPACK_IMPORTED_MODULE_0__.createProxiedComponent)(current.Component, options, {\n allowLiveBinding: current.hotOptions.allowLiveBinding,\n onDestroy,\n onMount: afterMount,\n onInstance: (comp) => {\n setComponent(comp);\n this.$$ = comp.$$;\n lastProperties = copyComponentProperties(this, comp, lastProperties);\n }\n });\n } catch (err) {\n const { target, anchor } = options;\n setError(err, target, anchor);\n throw err;\n }\n }\n}\nconst syncStatics = (component, proxy, previousKeys) => {\n if (previousKeys) {\n for (const key of previousKeys) {\n delete proxy[key];\n }\n }\n const keys = [];\n for (const key in component) {\n keys.push(key);\n proxy[key] = component[key];\n }\n return keys;\n};\nconst globalListeners = {};\nconst onGlobal = (event, fn) => {\n event = event.toLowerCase();\n if (!globalListeners[event])\n globalListeners[event] = [];\n globalListeners[event].push(fn);\n};\nconst fireGlobal = (event, ...args) => {\n const listeners = globalListeners[event];\n if (!listeners)\n return;\n for (const fn of listeners) {\n fn(...args);\n }\n};\nconst fireBeforeUpdate = () => fireGlobal(\"beforeupdate\");\nconst fireAfterUpdate = () => fireGlobal(\"afterupdate\");\nif (typeof window !== \"undefined\") {\n window.__SVELTE_HMR = {\n on: onGlobal\n };\n window.dispatchEvent(new CustomEvent(\"svelte-hmr:ready\"));\n}\nlet fatalError = false;\nconst hasFatalError = () => fatalError;\nfunction createProxy({\n Adapter,\n id,\n Component,\n hotOptions,\n canAccept,\n preserveLocalState\n}) {\n const debugName = getDebugName(id);\n const instances = [];\n const current = {\n Component,\n hotOptions,\n canAccept,\n preserveLocalState\n };\n const name = `Proxy${debugName}`;\n const proxy = {\n [name]: class extends ProxyComponent {\n constructor(options) {\n try {\n super(\n {\n Adapter,\n id,\n debugName,\n current,\n register: (rerender) => {\n instances.push(rerender);\n const unregister = () => {\n const i = instances.indexOf(rerender);\n instances.splice(i, 1);\n };\n return unregister;\n }\n },\n options\n );\n } catch (err) {\n if (!fatalError) {\n fatalError = true;\n logError(\n `Unrecoverable HMR error in ${debugName}: next update will trigger a full reload`\n );\n }\n throw err;\n }\n }\n }\n }[name];\n let previousStatics = syncStatics(current.Component, proxy);\n const update = (newState) => Object.assign(current, newState);\n const reload = () => {\n fireBeforeUpdate();\n previousStatics = syncStatics(current.Component, proxy, previousStatics);\n const errors = [];\n instances.forEach((rerender) => {\n try {\n rerender();\n } catch (err) {\n logError(`Failed to rerender ${debugName}`, err);\n errors.push(err);\n }\n });\n if (errors.length > 0) {\n return false;\n }\n fireAfterUpdate();\n return true;\n };\n const hasFatalError2 = () => fatalError;\n return { id, proxy, update, reload, hasFatalError: hasFatalError2, current };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL3Byb3h5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQU91QztBQUV2QyxNQUFNLGlCQUFpQixDQUFDLGVBQWUsVUFBVTtBQUNqRCxNQUFNLG1CQUFtQixDQUFDLFFBQVEsS0FBSztBQUV2QyxNQUFNLFdBQVcsQ0FBQyxLQUFLLFFBQVE7QUFFN0IsVUFBUSxNQUFNLGlCQUFpQixHQUFHO0FBQ2xDLE1BQUksS0FBSztBQUdQLFlBQVEsTUFBTSxHQUFHO0FBQUEsRUFDbkI7QUFDRjtBQUVBLE1BQU0sV0FBVyxVQUFRLEtBQUssUUFBUSxVQUFVLEdBQUc7QUFFbkQsTUFBTSxjQUFjLFFBQ2xCLEdBQ0csTUFBTSxHQUFHLEVBQ1QsSUFBSSxFQUNKLE1BQU0sR0FBRyxFQUNULE1BQU0sR0FBRyxFQUFFLEVBQ1gsS0FBSyxHQUFHO0FBRWIsTUFBTSxhQUFhLFNBQU8sSUFBSSxHQUFHLFlBQVksSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUU1RCxNQUFNLGtCQUFrQixRQUFNLFdBQVcsWUFBWSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBRWxFLE1BQU0sZUFBZSxRQUFNLElBQUksZ0JBQWdCLEVBQUU7QUFFakQsTUFBTSxhQUFhLENBQUMsV0FBVyxPQUFPLE9BQU8sQ0FBQyxNQUFNO0FBQ2xELGFBQVcsT0FBTyxPQUFPO0FBQ3ZCLFNBQUssT0FBTyxZQUFZLE1BQU07QUFDNUIsWUFBTSxTQUFTLFVBQVU7QUFDekIsVUFBSSxDQUFDLFFBQVE7QUFDWDtBQUFBLE1BQ0Y7QUFDQSxhQUFPLE9BQU8sUUFBUSxPQUFPLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQ3REO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLE1BQU0sYUFBYSxTQUFPLFFBQVEsUUFBUSxJQUFJLE1BQU0sR0FBRyxDQUFDLE1BQU07QUFVOUQsTUFBTSx1QkFBdUIsQ0FBQyxPQUFPLFFBQVE7QUFFM0MsU0FBTyxLQUFLLEtBQUssRUFD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U0FBUyxLQUFQO0FBWUEsY0FBSSxDQUFDLFlBQVk7QUFDZix5QkFBYTtBQUNiO0FBQUEsY0FDRSw4QkFBOEI7QUFBQSxZQUVoQztBQUFBLFVBQ0Y7QUFDQSxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0YsRUFBRTtBQUdGLE1BQUksa0JBQWtCLFlBQVksUUFBUSxXQUFXLEtBQUs7QUFFMUQsUUFBTSxTQUFTLGNBQVksT0FBTyxPQUFPLFNBQVMsUUFBUTtBQUcxRCxRQUFNLFNBQVMsTUFBTTtBQUNuQixxQkFBaUI7QUFJakIsc0JBQWtCLFlBQVksUUFBUSxXQUFXLE9BQU8sZUFBZTtBQUV2RSxVQUFNLFNBQVMsQ0FBQztBQUVoQixjQUFVLFFBQVEsY0FBWTtBQUM1QixVQUFJO0FBQ0YsaUJBQVM7QUFBQSxNQUNYLFNBQVMsS0FBUDtBQUNBLGlCQUFTLHNCQUFzQixhQUFhLEdBQUc7QUFDL0MsZUFBTyxLQUFLLEdBQUc7QUFBQSxNQUNqQjtBQUFBLElBQ0YsQ0FBQztBQUVELFFBQUksT0FBTyxTQUFTLEdBQUc7QUFDckIsYUFBTztBQUFBLElBQ1Q7QUFFQSxvQkFBZ0I7QUFFaEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNQSxpQkFBZ0IsTUFBTTtBQUU1QixTQUFPLEVBQUUsSUFBSSxPQUFPLFFBQVEsUUFBUSxlQUFBQSxnQkFBZSxRQUFRO0FBQzdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL3Byb3h5LmpzP2EyNDEiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG4vKipcbiAqIFRoZSBITVIgcHJveHkgaXMgYSBjb21wb25lbnQtbGlrZSBvYmplY3Qgd2hvc2UgdGFzayBpcyB0byBzaXQgaW4gdGhlXG4gKiBjb21wb25lbnQgdHJlZSBpbiBwbGFjZSBvZiB0aGUgcHJveGllZCBjb21wb25lbnQsIGFuZCByZXJlbmRlciBlYWNoXG4gKiBzdWNjZXNzaXZlIHZlcnNpb25zIG9mIHNhaWQgY29tcG9uZW50LlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVByb3hpZWRDb21wb25lbnQgfSBmcm9tICcuL3N2ZWx0ZS1ob29rcy5qcydcblxuY29uc3QgaGFuZGxlZE1ldGhvZHMgPSBbJ2NvbnN0cnVjdG9yJywgJyRkZXN0cm95J11cbmNvbnN0IGZvcndhcmRlZE1ldGhvZHMgPSBbJyRzZXQnLCAnJG9uJ11cblxuY29uc3QgbG9nRXJyb3IgPSAobXNnLCBlcnIpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcignW0hNUl1bU3ZlbHRlXScsIG1zZylcbiAgaWYgKGVycikge1xuICAgIC8vIE5PVEUgYXZvaWQgdG9vIG11Y2ggd3JhcHBpbmcgYXJvdW5kIHVzZXIgZXJyb3JzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycilcbiAgfVxufVxuXG5jb25zdCBwb3NpeGlmeSA9IGZpbGUgPT4gZmlsZS5yZXBsYWNlKC9bL1xcXFxdL2csICcvJylcblxuY29uc3QgZ2V0QmFzZU5hbWUgPSBpZCA9PlxuICBpZFxuICAgIC5zcGxpdCgnLycpXG4gICAgLnBvcCgpXG4gICAgLnNwbGl0KCcuJylcbiAgICAuc2xpY2UoMCwgLTEpXG4gICAgLmpvaW4oJy4nKVxuXG5jb25zdCBjYXBpdGFsaXplID0gc3RyID0+IHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG5cbmNvbnN0IGdldEZyaWVuZGx5TmFtZSA9IGlkID0+IGNhcGl0YWxpemUoZ2V0QmFzZU5hbWUocG9zaXhpZnkoaWQpKSlcblxuY29uc3QgZ2V0RGVidWdOYW1lID0gaWQgPT4gYDwke2dldEZyaWVuZGx5TmFtZShpZCl9PmBcblxuY29uc3QgcmVsYXlDYWxscyA9IChnZXRUYXJnZXQsIG5hbWVzLCBkZXN0ID0ge30pID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgbmFtZXMpIHtcbiAgICBkZXN0W2tleV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoKVxuICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV0gJiYgdGFyZ2V0W2tleV0uY2FsbCh0aGlzLCAuLi5hcmdzKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVzdFxufVxuXG5jb25zdCBpc0ludGVybmFsID0ga2V5ID0+IGtleSAhPT0gJyQkJyAmJiBrZXkuc2xpY2UoMCwgMikgPT09ICckJCdcblxuLy8gVGhpcyBpcyBpbnRlbnRlZCBhcyBhIHNvbWV3aGF0IGdlbmVyaWMgLyBwcm9zcGVjdGl2ZSBmaXggdG8gdGhlIHNpdHVhdGlvblxuLy8gdGhhdCBhcmlzZWQgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mICQkc2V0IGluIFN2ZWx0ZSAzLjI0LjEgLS0gdHJ5aW5nIHRvXG4vLyBhdm9pZCBnaXZpbmcgZnVsbCBrbm93bGVkZ2UgKGxpa2UgaXRzIG5hbWUpIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gZGV0YWlsXG4vLyB0byB0aGUgcHJveHkuIFRoZSAkJHNldCBtZXRob2QgY2FuIGJlIHByZXNlbnQgb3Igbm90IG9uIHRoZSBjb21wb25lbnQsIGFuZFxuLy8gaXRzIHByZXNlbmNlIGltcGFjdHMgdGhlIGJlaGF2aW91ciAoYnV0IHdpdGggSE1SIGl0IHdpbGwgYmUgdGVzdGVkIGlmIGl0IGlzXG4vLyBwcmVzZW50IF9vbiB0aGUgcHJveHlfKS4gU28gdGhlIGlkZWEgaGVyZSBpcyB0byBleHBvc2UgZXhhY3RseSB0aGUgc2FtZSAkJFxuLy8gcHJvcHMgYXMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50IGFuZCwgZm9yIHRob3NlIHRoYXQgYXJlXG4vLyBmdW5jdGlvbnMsIHByb3h5IHRoZSBjYWxscyB0byB0aGUgY3VycmVudCBjb21wb25lbnQuXG5jb25zdCByZWxheUludGVybmFsTWV0aG9kcyA9IChwcm94eSwgY21wKSA9PiB7XG4gIC8vIGRlbGV0ZSBhbnkgcHJldmlvdXNseSBhZGRlZCAkJCBwcm9wXG4gIE9iamVjdC5rZXlzKHByb3h5KVxuICAgIC5maWx0ZXIoaXNJbnRlcm5hbClcbiAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgZGVsZXRlIHByb3h5W2tleV1cbiAgICB9KVxuICAvLyBndWFyZDogbm8gY29tcG9uZW50XG4gIGlmICghY21wKSByZXR1cm5cbiAgLy8gcHJveHkgY3VycmVudCAkJCBwcm9wcyB0byB0aGUgYWN0dWFsIGNvbXBvbmVudFxuICBPYmplY3Qua2V5cyhjbXApXG4gICAgLmZpbHRlcihpc0ludGVybmFsKVxuICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNtcFtrZXldXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSlcbn1cblxuLy8gcHJveHkgY3VzdG9tIG1ldGhvZHNcbmNvbnN0IGNvcHlDb21wb25lbnRQcm9wZXJ0aWVzID0gKHByb3h5LCBjbXAsIHByZXZpb3VzKSA9PiB7XG4gIGlmIChwcmV2aW91cykge1xuICAgIHByZXZpb3VzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBkZWxldGUgcHJveHlbcHJvcF1cbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoY21wKSlcbiAgY29uc3Qgd3JhcHBlZFByb3BzID0gcHJvcHMuZmlsdGVyKHByb3AgPT4ge1xuICAgIGlmICghaGFuZGxlZE1ldGhvZHMuaW5jbHVkZXMocHJvcCkgJiYgIWZvcndhcmRlZE1ldGhvZHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcCwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gY21wW3Byb3BdXG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIC8vIHdlJ3JlIGNoYW5naW5nIGl0IG9uIHRoZSByZWFsIGNvbXBvbmVudCBmaXJzdCB0byBzZWUgd2hhdCBpdFxuICAgICAgICAgIC8vIGdpdmVzLi4uIGlmIGl0IHRocm93cyBhbiBlcnJvciwgd2Ugd2FudCB0byB0aHJvdyB0aGUgc2FtZSBlcnJvciBpblxuICAgICAgICAgIC8vIG9yZGVyIHRvIG1vc3QgY2xvc2VseSBmb2xsb3cgbm9uLWhtciBiZWhhdmlvdXIuXG4gICAgICAgICAgY21wW3Byb3BdID0gdmFsdWVcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gd3JhcHBlZFByb3BzXG59XG5cbi8vIGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yIVxuLy9cbi8vIHNvIHdlIGRvbid0IHBvbHV0ZSB0aGUgY29tcG9uZW50IGNsYXNzIHdpdGggbmV3IG1lbWJlcnNcbi8vXG5jbGFzcyBQcm94eUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHtcbiAgICAgIEFkYXB0ZXIsXG4gICAgICBpZCxcbiAgICAgIGRlYnVnTmFtZSxcbiAgICAgIGN1cnJlbnQsIC8vIHsgQ29tcG9uZW50LCBob3RPcHRpb25zOiB7IHByZXNlcnZlTG9jYWxTdGF0ZSwgLi4uIH0gfVxuICAgICAgcmVnaXN0ZXIsXG4gICAgfSxcbiAgICBvcHRpb25zIC8vIHsgdGFyZ2V0LCBhbmNob3IsIC4uLiB9XG4gICkge1xuICAgIGxldCBjbXBcbiAgICBsZXQgZGlzcG9zZWQgPSBmYWxzZVxuICAgIGxldCBsYXN0RXJyb3IgPSBudWxsXG5cbiAgICBjb25zdCBzZXRDb21wb25lbnQgPSBfY21wID0+IHtcbiAgICAgIGNtcCA9IF9jbXBcbiAgICAgIHJlbGF5SW50ZXJuYWxNZXRob2RzKHRoaXMsIGNtcClcbiAgICB9XG5cbiAgICBjb25zdCBnZXRDb21wb25lbnQgPSAoKSA9PiBjbXBcblxuICAgIGNvbnN0IGRlc3Ryb3lDb21wb25lbnQgPSAoKSA9PiB7XG4gICAgICAvLyBkZXN0cm95Q29tcG9uZW50IGlzIHRvbGVyYW50IChkb24ndCBjcmFzaCBvbiBubyBjbXApIGJlY2F1c2UgaXRcbiAgICAgIC8vIGlzIHBvc3NpYmxlIHRoYXQgcmVsb2FkL3JlcmVuZGVyIGlzIGNhbGxlZCBhZnRlciBhIHByZXZpb3VzXG4gICAgICAvLyBjcmVhdGVDb21wb25lbnQgaGFzIGZhaWxlZCAoaGVuY2Ugd2UgaGF2ZSBhIHByb3h5LCBidXQgbm8gY21wKVxuICAgICAgaWYgKGNtcCkge1xuICAgICAgICBjbXAuJGRlc3Ryb3koKVxuICAgICAgICBzZXRDb21wb25lbnQobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWZyZXNoQ29tcG9uZW50ID0gKHRhcmdldCwgYW5jaG9yLCBjb25zZXJ2YXRpdmVEZXN0cm95KSA9PiB7XG4gICAgICBpZiAobGFzdEVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IG51bGxcbiAgICAgICAgYWRhcHRlci5yZXJlbmRlcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VPcHRpb25zID0ge1xuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgcHJlc2VydmVMb2NhbFN0YXRlOiBjdXJyZW50LnByZXNlcnZlTG9jYWxTdGF0ZSxcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnNlcnZhdGl2ZURlc3Ryb3kpIHtcbiAgICAgICAgICAgIHJlcGxhY2VPcHRpb25zLmNvbnNlcnZhdGl2ZURlc3Ryb3kgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGNtcC4kcmVwbGFjZShjdXJyZW50LkNvbXBvbmVudCwgcmVwbGFjZU9wdGlvbnMpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHNldEVycm9yKGVyciwgdGFyZ2V0LCBhbmNob3IpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWN1cnJlbnQuaG90T3B0aW9ucy5vcHRpbWlzdGljIHx8XG4gICAgICAgICAgICAvLyBub24gYWNjZXB0YWJsZSBjb21wb25lbnRzICh0aGF0IGlzIGNvbXBvbmVudHMgdGhhdCBoYXZlIHRvIGRlZmVyXG4gICAgICAgICAgICAvLyB0byB0aGVpciBwYXJlbnQgZm9yIHJlcmVuZGVyIC0tIGUuZy4gYWNjZXNzb3JzLCBuYW1lZCBleHBvcnRzKVxuICAgICAgICAgICAgLy8gYXJlIG1vc3QgdHJpY2t5LCBhbmQgdGhleSBoYXZlbnQgYmVlbiBjb25zaWRlcmVkIHdoZW4gbW9zdCBvZiB0aGVcbiAgICAgICAgICAgIC8vIGNvZGUgaGFzIGJlZW4gd3JpdHRlbi4uLiBhcyBhIHJlc3VsdCwgdGhleSBhcmUgZXNwZWNpYWxseSB0cmlja3lcbiAgICAgICAgICAgIC8vIHRvIGRlYWwgd2l0aCwgaXQncyBiZXR0ZXIgdG8gY29uc2lkZXIgYW55IGVycm9yIHdpdGggdGhlbSB0byBiZVxuICAgICAgICAgICAgLy8gZmF0YWwgdG8gYXZvaWQgb2RpdGllc1xuICAgICAgICAgICAgIWN1cnJlbnQuY2FuQWNjZXB0IHx8XG4gICAgICAgICAgICAoZXJyICYmIGVyci5obXJGYXRhbClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zdCBlcnJTdHJpbmcgPSBTdHJpbmcoKGVyciAmJiBlcnIuc3RhY2spIHx8IGVycilcbiAgICAgICAgICAgIGxvZ0Vycm9yKGBFcnJvciBkdXJpbmcgY29tcG9uZW50IGluaXQ6ICR7ZGVidWdOYW1lfWAsIGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRFcnJvciA9IGVyciA9PiB7XG4gICAgICBsYXN0RXJyb3IgPSBlcnJcbiAgICAgIGFkYXB0ZXIucmVuZGVyRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlID0ge1xuICAgICAgaG90T3B0aW9uczogY3VycmVudC5ob3RPcHRpb25zLFxuICAgICAgcHJveHk6IHRoaXMsXG4gICAgICBpZCxcbiAgICAgIGRlYnVnTmFtZSxcbiAgICAgIHJlZnJlc2hDb21wb25lbnQsXG4gICAgfVxuXG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBBZGFwdGVyKGluc3RhbmNlKVxuXG4gICAgY29uc3QgeyBhZnRlck1vdW50LCByZXJlbmRlciB9ID0gYWRhcHRlclxuXG4gICAgLy8gJGRlc3Ryb3kgaXMgbm90IGNhbGxlZCB3aGVuIGEgY2hpbGQgY29tcG9uZW50IGlzIGRpc3Bvc2VkLCBzbyB3ZVxuICAgIC8vIG5lZWQgdG8gaG9vayBmcm9tIGZyYWdtZW50LlxuICAgIGNvbnN0IG9uRGVzdHJveSA9ICgpID0+IHtcbiAgICAgIC8vIE5PVEUgZG8gTk9UIGNhbGwgJGRlc3Ryb3kgb24gdGhlIGNtcCBmcm9tIGhlcmU7IHRoZSBjbXAgaXMgYWxyZWFkeVxuICAgICAgLy8gICBkZWFkLCB0aGlzIHdvdWxkIG5vdCB3b3JrXG4gICAgICBpZiAoIWRpc3Bvc2VkKSB7XG4gICAgICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICAgICAgICBhZGFwdGVyLmRpc3Bvc2UoKVxuICAgICAgICB1bnJlZ2lzdGVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tIHJlZ2lzdGVyIHByb3h5IGluc3RhbmNlIC0tLS1cblxuICAgIGNvbnN0IHVucmVnaXN0ZXIgPSByZWdpc3RlcihyZXJlbmRlcilcblxuICAgIC8vIC0tLS0gYXVnbWVudGVkIG1ldGhvZHMgLS0tLVxuXG4gICAgdGhpcy4kZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGRlc3Ryb3lDb21wb25lbnQoKVxuICAgICAgb25EZXN0cm95KClcbiAgICB9XG5cbiAgICAvLyAtLS0tIGZvcndhcmRlZCBtZXRob2RzIC0tLS1cblxuICAgIHJlbGF5Q2FsbHMoZ2V0Q29tcG9uZW50LCBmb3J3YXJkZWRNZXRob2RzLCB0aGlzKVxuXG4gICAgLy8gLS0tLSBjcmVhdGUgJiBtb3VudCB0YXJnZXQgY29tcG9uZW50IGluc3RhbmNlIC0tLVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBsYXN0UHJvcGVydGllc1xuICAgICAgY3JlYXRlUHJveGllZENvbXBvbmVudChjdXJyZW50LkNvbXBvbmVudCwgb3B0aW9ucywge1xuICAgICAgICBhbGxvd0xpdmVCaW5kaW5nOiBjdXJyZW50LmhvdE9wdGlvbnMuYWxsb3dMaXZlQmluZGluZyxcbiAgICAgICAgb25EZXN0cm95LFxuICAgICAgICBvbk1vdW50OiBhZnRlck1vdW50LFxuICAgICAgICBvbkluc3RhbmNlOiBjb21wID0+IHtcbiAgICAgICAgICBzZXRDb21wb25lbnQoY29tcClcbiAgICAgICAgICAvLyBXQVJOSU5HIHRoZSBwcm94eSBNVVNUIHVzZSB0aGUgc2FtZSAkJCBvYmplY3QgYXMgaXRzIGNvbXBvbmVudFxuICAgICAgICAgIC8vIGluc3RhbmNlLCBiZWNhdXNlIGEgbG90IG9mIHdpcmluZyBoYXBwZW5zIGR1cmluZyBjb21wb25lbnRcbiAgICAgICAgICAvLyBpbml0aWFsaXNhdGlvbi4uLiBsb3RzIG9mIHJlZmVyZW5jZXMgdG8gJCQgYW5kICQkLmZyYWdtZW50IGhhdmVcbiAgICAgICAgICAvLyBhbHJlYWR5IGJlZW4gZGlzdHJpYnV0ZWQgYXJvdW5kIHdoZW4gdGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgICAgICAgIC8vIHJldHVybnMsIGJlZm9yZSB3ZSBoYXZlIGEgY2hhbmNlIHRvIHdyYXAgdGhlbSAoYW5kIHNvIHdlIGNhbid0XG4gICAgICAgICAgLy8gd3JhcCB0aGVtIG5vIG1vcmUsIGJlY2F1c2UgZXhpc3RpbmcgcmVmZXJlbmNlcyB3b3VsZCBiZWNvbWVcbiAgICAgICAgICAvLyBpbnZhbGlkKVxuICAgICAgICAgIHRoaXMuJCQgPSBjb21wLiQkXG4gICAgICAgICAgbGFzdFByb3BlcnRpZXMgPSBjb3B5Q29tcG9uZW50UHJvcGVydGllcyh0aGlzLCBjb21wLCBsYXN0UHJvcGVydGllcylcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCB7IHRhcmdldCwgYW5jaG9yIH0gPSBvcHRpb25zXG4gICAgICBzZXRFcnJvcihlcnIsIHRhcmdldCwgYW5jaG9yKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHN5bmNTdGF0aWNzID0gKGNvbXBvbmVudCwgcHJveHksIHByZXZpb3VzS2V5cykgPT4ge1xuICAvLyByZW1vdmUgcHJldmlvdXNseSBjb3BpZWQga2V5c1xuICBpZiAocHJldmlvdXNLZXlzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcHJldmlvdXNLZXlzKSB7XG4gICAgICBkZWxldGUgcHJveHlba2V5XVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvcndhcmQgc3RhdGljIHByb3BlcnRpZXMgYW5kIG1ldGhvZHNcbiAgY29uc3Qga2V5cyA9IFtdXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudCkge1xuICAgIGtleXMucHVzaChrZXkpXG4gICAgcHJveHlba2V5XSA9IGNvbXBvbmVudFtrZXldXG4gIH1cblxuICByZXR1cm4ga2V5c1xufVxuXG5jb25zdCBnbG9iYWxMaXN0ZW5lcnMgPSB7fVxuXG5jb25zdCBvbkdsb2JhbCA9IChldmVudCwgZm4pID0+IHtcbiAgZXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpXG4gIGlmICghZ2xvYmFsTGlzdGVuZXJzW2V2ZW50XSkgZ2xvYmFsTGlzdGVuZXJzW2V2ZW50XSA9IFtdXG4gIGdsb2JhbExpc3RlbmVyc1tldmVudF0ucHVzaChmbilcbn1cblxuY29uc3QgZmlyZUdsb2JhbCA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICBjb25zdCBsaXN0ZW5lcnMgPSBnbG9iYWxMaXN0ZW5lcnNbZXZlbnRdXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm5cbiAgZm9yIChjb25zdCBmbiBvZiBsaXN0ZW5lcnMpIHtcbiAgICBmbiguLi5hcmdzKVxuICB9XG59XG5cbmNvbnN0IGZpcmVCZWZvcmVVcGRhdGUgPSAoKSA9PiBmaXJlR2xvYmFsKCdiZWZvcmV1cGRhdGUnKVxuXG5jb25zdCBmaXJlQWZ0ZXJVcGRhdGUgPSAoKSA9PiBmaXJlR2xvYmFsKCdhZnRlcnVwZGF0ZScpXG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuX19TVkVMVEVfSE1SID0ge1xuICAgIG9uOiBvbkdsb2JhbCxcbiAgfVxuICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3N2ZWx0ZS1obXI6cmVhZHknKSlcbn1cblxubGV0IGZhdGFsRXJyb3IgPSBmYWxzZVxuXG5leHBvcnQgY29uc3QgaGFzRmF0YWxFcnJvciA9ICgpID0+IGZhdGFsRXJyb3JcblxuLyoqXG4gKiBDcmVhdGVzIGEgSE1SIHByb3h5IGFuZCBpdHMgYXNzb2NpYXRlZCBgcmVsb2FkYCBmdW5jdGlvbiB0aGF0IHB1c2hlcyBhIG5ld1xuICogdmVyc2lvbiB0byBhbGwgZXhpc3RpbmcgaW5zdGFuY2VzIG9mIHRoZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eSh7XG4gIEFkYXB0ZXIsXG4gIGlkLFxuICBDb21wb25lbnQsXG4gIGhvdE9wdGlvbnMsXG4gIGNhbkFjY2VwdCxcbiAgcHJlc2VydmVMb2NhbFN0YXRlLFxufSkge1xuICBjb25zdCBkZWJ1Z05hbWUgPSBnZXREZWJ1Z05hbWUoaWQpXG4gIGNvbnN0IGluc3RhbmNlcyA9IFtdXG5cbiAgLy8gY3VycmVudCBvYmplY3Qgd2lsbCBiZSB1cGRhdGVkLCBwcm94eSBpbnN0YW5jZXMgd2lsbCBrZWVwIGEgcmVmXG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgQ29tcG9uZW50LFxuICAgIGhvdE9wdGlvbnMsXG4gICAgY2FuQWNjZXB0LFxuICAgIHByZXNlcnZlTG9jYWxTdGF0ZSxcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSBgUHJveHkke2RlYnVnTmFtZX1gXG5cbiAgLy8gdGhpcyB0cmljayBnaXZlcyB0aGUgZHluYW1pYyBuYW1lIFByb3h5PE15Q29tcG9uZW50PiB0byB0aGUgY29uY3JldGVcbiAgLy8gcHJveHkgY2xhc3MuLi4gdW5mb3J0dW5hdGVseSwgdGhpcyBkb2Vzbid0IHNob3dzIGluIGRldiB0b29scywgYnV0XG4gIC8vIGl0IHN0aWxscyBhbGxvdyB0byBpbnNwZWN0IGNtcC5jb25zdHJ1Y3Rvci5uYW1lIHRvIGNvbmZpcm0gYW4gaW5zdGFuY2VcbiAgLy8gaXMgYSBwcm94eVxuICBjb25zdCBwcm94eSA9IHtcbiAgICBbbmFtZV06IGNsYXNzIGV4dGVuZHMgUHJveHlDb21wb25lbnQge1xuICAgICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN1cGVyKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBZGFwdGVyLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgZGVidWdOYW1lLFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICByZWdpc3RlcjogcmVyZW5kZXIgPT4ge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKHJlcmVuZGVyKVxuICAgICAgICAgICAgICAgIGNvbnN0IHVucmVnaXN0ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpID0gaW5zdGFuY2VzLmluZGV4T2YocmVyZW5kZXIpXG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZXMuc3BsaWNlKGksIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZmFpbCB0byBjcmVhdGUgYSBwcm94eSBpbnN0YW5jZSwgYW55IGluc3RhbmNlLCB0aGF0IG1lYW5zXG4gICAgICAgICAgLy8gdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGZpeCB0aGlzIGluc3RhbmNlIHdoZW4gaXQgaXMgdXBkYXRlZC5cbiAgICAgICAgICAvLyBSZWNvdmVyaW5nIHRvIG5vcm1hbCBzdGF0ZSB3aWxsIGJlIGltcG9zc2libGUuIEhNUidzIGRlYWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBGYXRhbCBlcnJvciB3aWxsIHRyaWdnZXIgYSBmdWxsIHJlbG9hZCBvbiBuZXh0IHVwZGF0ZSAocmVsb2FkaW5nXG4gICAgICAgICAgLy8gcmlnaHQgbm93IGlzIGtpbmRhIHBvaW50bGVzcyBzaW5jZSBidWdneSBjb2RlIHN0aWxsIGV4aXN0cykuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBOT1RFIE9ubHkgcmVwb3J0IGZpcnN0IGVycm9yIHRvIGF2b2lkIHRvbyBtdWNoIHBvbHV0aW9uIC0tIGZvbGxvd2luZ1xuICAgICAgICAgIC8vIGVycm9ycyBhcmUgcHJvYmFibHkgY2F1c2VkIGJ5IHRoZSBmaXJzdCBvbmUsIG9yIHRoZXkgd2lsbCBzaG93IHVwXG4gICAgICAgICAgLy8gaW4gdHVybiB3aGVuIHRoZSBmaXJzdCBvbmUgaXMgZml4ZWQgwq9cXF8o44OEKV8vwq9cbiAgICAgICAgICAvL1xuICAgICAgICAgIGlmICghZmF0YWxFcnJvcikge1xuICAgICAgICAgICAgZmF0YWxFcnJvciA9IHRydWVcbiAgICAgICAgICAgIGxvZ0Vycm9yKFxuICAgICAgICAgICAgICBgVW5yZWNvdmVyYWJsZSBITVIgZXJyb3IgaW4gJHtkZWJ1Z05hbWV9OiBgICtcbiAgICAgICAgICAgICAgICBgbmV4dCB1cGRhdGUgd2lsbCB0cmlnZ2VyIGEgZnVsbCByZWxvYWRgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfVtuYW1lXVxuXG4gIC8vIGluaXRpYWxpemUgc3RhdGljIG1lbWJlcnNcbiAgbGV0IHByZXZpb3VzU3RhdGljcyA9IHN5bmNTdGF0aWNzKGN1cnJlbnQuQ29tcG9uZW50LCBwcm94eSlcblxuICBjb25zdCB1cGRhdGUgPSBuZXdTdGF0ZSA9PiBPYmplY3QuYXNzaWduKGN1cnJlbnQsIG5ld1N0YXRlKVxuXG4gIC8vIHJlbG9hZCBhbGwgZXhpc3RpbmcgaW5zdGFuY2VzIG9mIHRoaXMgY29tcG9uZW50XG4gIGNvbnN0IHJlbG9hZCA9ICgpID0+IHtcbiAgICBmaXJlQmVmb3JlVXBkYXRlKClcblxuICAgIC8vIGNvcHkgc3RhdGljcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgYmVjYXVzZSBhIHN0YXRpYyBwcm9wL21ldGhvZFxuICAgIC8vIGNvdWxkIGJlIHVzZWQgc29tZXdoZXJlIGluIHRoZSBjcmVhdGUvcmVuZGVyIGNhbGxcbiAgICBwcmV2aW91c1N0YXRpY3MgPSBzeW5jU3RhdGljcyhjdXJyZW50LkNvbXBvbmVudCwgcHJveHksIHByZXZpb3VzU3RhdGljcylcblxuICAgIGNvbnN0IGVycm9ycyA9IFtdXG5cbiAgICBpbnN0YW5jZXMuZm9yRWFjaChyZXJlbmRlciA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXJlbmRlcigpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoYEZhaWxlZCB0byByZXJlbmRlciAke2RlYnVnTmFtZX1gLCBlcnIpXG4gICAgICAgIGVycm9ycy5wdXNoKGVycilcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBmaXJlQWZ0ZXJVcGRhdGUoKVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGNvbnN0IGhhc0ZhdGFsRXJyb3IgPSAoKSA9PiBmYXRhbEVycm9yXG5cbiAgcmV0dXJuIHsgaWQsIHByb3h5LCB1cGRhdGUsIHJlbG9hZCwgaGFzRmF0YWxFcnJvciwgY3VycmVudCB9XG59XG4iXSwibmFtZXMiOlsiaGFzRmF0YWxFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/svelte-hmr/runtime/proxy.js\n");
/***/ }),
/***/ "./node_modules/svelte-hmr/runtime/svelte-hooks.js":
/*!*********************************************************!*\
!*** ./node_modules/svelte-hmr/runtime/svelte-hooks.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createProxiedComponent\": () => (/* binding */ createProxiedComponent)\n/* harmony export */ });\n/* harmony import */ var svelte_internal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! svelte/internal */ \"./node_modules/svelte/internal/index.mjs\");\n\nconst captureState = (cmp) => {\n if (!cmp) {\n throw new Error(\"Missing component\");\n }\n if (!cmp.$$) {\n throw new Error(\"Invalid component\");\n }\n const {\n $$: { callbacks, bound, ctx, props }\n } = cmp;\n const state = cmp.$capture_state();\n const hmr_props_values = {};\n Object.keys(cmp.$$.props).forEach((prop) => {\n hmr_props_values[prop] = ctx[props[prop]];\n });\n return {\n ctx,\n props,\n callbacks,\n bound,\n state,\n hmr_props_values\n };\n};\nconst restoreBound = (cmp, restore) => {\n const propsByIndex = {};\n for (const [name, i] of Object.entries(restore.props)) {\n propsByIndex[i] = name;\n }\n for (const [oldIndex, updateBinding] of Object.entries(restore.bound)) {\n const propName = propsByIndex[oldIndex];\n if (propName == null)\n continue;\n const newIndex = cmp.$$.props[propName];\n cmp.$$.bound[newIndex] = updateBinding;\n const newValue = cmp.$$.ctx[newIndex];\n updateBinding(newValue);\n }\n};\nconst restoreState = (cmp, restore) => {\n if (!restore)\n return;\n if (restore.callbacks) {\n cmp.$$.callbacks = restore.callbacks;\n }\n if (restore.bound) {\n restoreBound(cmp, restore);\n }\n};\nconst get_current_component_safe = () => {\n try {\n return (0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.get_current_component)();\n } catch (err) {\n if (err.message === \"Function called outside component initialization\") {\n return svelte_internal__WEBPACK_IMPORTED_MODULE_0__.current_component;\n } else {\n throw err;\n }\n }\n};\nconst createProxiedComponent = (Component, initialOptions, { allowLiveBinding, onInstance, onMount, onDestroy }) => {\n let cmp;\n let options = initialOptions;\n const isCurrent = (_cmp) => cmp === _cmp;\n const assignOptions = (target, anchor, restore, preserveLocalState) => {\n const props = Object.assign({}, options.props);\n if (options.props && restore.hmr_props_values) {\n for (const prop of Object.keys(options.props)) {\n if (restore.hmr_props_values.hasOwnProperty(prop)) {\n props[prop] = restore.hmr_props_values[prop];\n }\n }\n }\n if (preserveLocalState && restore.state) {\n if (Array.isArray(preserveLocalState)) {\n props.$$inject = {};\n for (const key of preserveLocalState) {\n props.$$inject[key] = restore.state[key];\n }\n } else {\n props.$$inject = restore.state;\n }\n } else {\n delete props.$$inject;\n }\n options = Object.assign({}, initialOptions, {\n target,\n anchor,\n props,\n hydrate: false\n });\n };\n const rememberFutureProps = (cmp2) => {\n if (typeof Proxy === \"undefined\")\n return;\n cmp2.$$.props = new Proxy(cmp2.$$.props, {\n get(target, name) {\n if (target[name] === void 0) {\n target[name] = \"hmr_future_\" + name;\n }\n return target[name];\n },\n set(target, name, value) {\n target[name] = value;\n }\n });\n };\n const instrument = (targetCmp) => {\n const createComponent = (Component2, restore, previousCmp) => {\n (0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.set_current_component)(parentComponent || previousCmp);\n const comp = new Component2(options);\n instrument(comp);\n restoreState(comp, restore);\n return comp;\n };\n rememberFutureProps(targetCmp);\n targetCmp.$$.on_hmr = [];\n targetCmp.$replace = (Component2, {\n target = options.target,\n anchor = options.anchor,\n preserveLocalState,\n conservative = false\n }) => {\n const restore = captureState(targetCmp);\n assignOptions(\n target || options.target,\n anchor,\n restore,\n preserveLocalState\n );\n const callbacks = cmp ? cmp.$$.on_hmr : [];\n const afterCallbacks = callbacks.map((fn) => fn(cmp)).filter(Boolean);\n const previous = cmp;\n if (conservative) {\n try {\n const next = createComponent(Component2, restore, previous);\n cmp = null;\n previous.$destroy();\n cmp = next;\n } catch (err) {\n cmp = previous;\n throw err;\n }\n } else {\n cmp = null;\n if (previous) {\n previous.$destroy();\n }\n cmp = createComponent(Component2, restore, cmp);\n }\n cmp.$$.hmr_cmp = cmp;\n for (const fn of afterCallbacks) {\n fn(cmp);\n }\n cmp.$$.on_hmr = callbacks;\n return cmp;\n };\n if (onMount) {\n const m = targetCmp.$$.fragment.m;\n targetCmp.$$.fragment.m = (...args) => {\n const result = m(...args);\n onMount(...args);\n return result;\n };\n }\n if (onDestroy) {\n targetCmp.$$.on_destroy.push(() => {\n if (isCurrent(targetCmp)) {\n onDestroy();\n }\n });\n }\n if (onInstance) {\n onInstance(targetCmp);\n }\n if (onMount) {\n const { target, anchor } = options;\n if (target) {\n onMount(target, anchor);\n }\n }\n };\n const parentComponent = allowLiveBinding ? svelte_internal__WEBPACK_IMPORTED_MODULE_0__.current_component : get_current_component_safe();\n cmp = new Component(options);\n cmp.$$.hmr_cmp = cmp;\n instrument(cmp);\n return cmp;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL3N2ZWx0ZS1ob29rcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQVVPO0FBRVAsTUFBTSxlQUFlLFNBQU87QUFHMUIsTUFBSSxDQUFDLEtBQUs7QUFDUixVQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxFQUNyQztBQUNBLE1BQUksQ0FBQyxJQUFJLElBQUk7QUFDWCxVQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxFQUNyQztBQUVBLFFBQU07QUFBQSxJQUNKLElBQUksRUFBRSxXQUFXLE9BQU8sS0FBSyxNQUFNO0FBQUEsRUFDckMsSUFBSTtBQUVKLFFBQU0sUUFBUSxJQUFJLGVBQWU7QUFLakMsUUFBTSxtQkFBbUIsQ0FBQztBQUMxQixTQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxRQUFRLFVBQVE7QUFDeEMscUJBQWlCLFFBQVEsSUFBSSxNQUFNO0FBQUEsRUFDckMsQ0FBQztBQUVELFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFLQSxNQUFNLGVBQWUsQ0FBQyxLQUFLLFlBQVk7QUFLckMsUUFBTSxlQUFlLENBQUM7QUFDdEIsYUFBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sUUFBUSxRQUFRLEtBQUssR0FBRztBQUNyRCxpQkFBYSxLQUFLO0FBQUEsRUFDcEI7QUFLQSxhQUFXLENBQUMsVUFBVSxhQUFhLEtBQUssT0FBTyxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBRXJFLFVBQU0sV0FBVyxhQUFhO0FBSzlCLFFBQUksWUFBWTtBQUFNO0FBSXRCLFVBQU0sV0FBVyxJQUFJLEdBQUcsTUFBTTtBQUM5QixRQUFJLEdBQUcsTUFBTSxZQUFZO0FBS3pCLFVBQU0sV0FBVyxJQUFJLEdBQUcsSUFBSTtBQUM1QixrQkFBYyxRQUFRO0FBQUEsRUFDeEI7QUFDRjtBQVVBLE1BQU0sZUFBZSxDQUFD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O0FBQUEsRUFDRjtBQUVBLFFBQU0sa0JBQWtCLG1CQUNwQiw4REFBaUIsR0FDakIsMkJBQTJCO0FBRS9CLFFBQU0sSUFBSSxVQUFVLE9BQU87QUFDM0IsTUFBSSxHQUFHLFVBQVU7QUFFakIsYUFBVyxHQUFHO0FBRWQsU0FBTztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWhtci9ydW50aW1lL3N2ZWx0ZS1ob29rcy5qcz9lOGE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW11bGF0ZXMgZm9ydGhjb21pbmcgSE1SIGhvb2tzIGluIFN2ZWx0ZS5cbiAqXG4gKiBBbGwgcmVmZXJlbmNlcyB0byBwcml2YXRlIGNvbXBvbmVudCBzdGF0ZSAoJCQpIGFyZSBub3cgaXNvbGF0ZWQgaW4gdGhpc1xuICogbW9kdWxlLlxuICovXG5pbXBvcnQge1xuICBjdXJyZW50X2NvbXBvbmVudCxcbiAgZ2V0X2N1cnJlbnRfY29tcG9uZW50LFxuICBzZXRfY3VycmVudF9jb21wb25lbnQsXG59IGZyb20gJ3N2ZWx0ZS9pbnRlcm5hbCdcblxuY29uc3QgY2FwdHVyZVN0YXRlID0gY21wID0+IHtcbiAgLy8gc2FuaXR5IGNoZWNrOiBwcm9wcGVyIGJlaGF2aW91ciBoZXJlIGlzIHRvIGNyYXNoIG5vaXNpbHkgc28gdGhhdFxuICAvLyB1c2VyIGtub3dzIHRoYXQgdGhleSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBicm9rZW5cbiAgaWYgKCFjbXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgY29tcG9uZW50JylcbiAgfVxuICBpZiAoIWNtcC4kJCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wb25lbnQnKVxuICB9XG5cbiAgY29uc3Qge1xuICAgICQkOiB7IGNhbGxiYWNrcywgYm91bmQsIGN0eCwgcHJvcHMgfSxcbiAgfSA9IGNtcFxuXG4gIGNvbnN0IHN0YXRlID0gY21wLiRjYXB0dXJlX3N0YXRlKClcblxuICAvLyBjYXB0dXJpbmcgY3VycmVudCB2YWx1ZSBvZiBwcm9wcyAob3Igd2UnbGwgcmVjcmVhdGUgdGhlIGNvbXBvbmVudCB3aXRoIHRoZVxuICAvLyBpbml0aWFsIHByb3AgdmFsdWVzLCB0aGF0IG1heSBoYXZlIGNoYW5nZWQgLS0gYW5kIHdvdWxkIG5vdCBiZSByZWZsZWN0ZWQgaW5cbiAgLy8gb3B0aW9ucy5wcm9wcylcbiAgY29uc3QgaG1yX3Byb3BzX3ZhbHVlcyA9IHt9XG4gIE9iamVjdC5rZXlzKGNtcC4kJC5wcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBobXJfcHJvcHNfdmFsdWVzW3Byb3BdID0gY3R4W3Byb3BzW3Byb3BdXVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgY3R4LFxuICAgIHByb3BzLFxuICAgIGNhbGxiYWNrcyxcbiAgICBib3VuZCxcbiAgICBzdGF0ZSxcbiAgICBobXJfcHJvcHNfdmFsdWVzLFxuICB9XG59XG5cbi8vIHJlbWFwcGluZyBhbGwgZXhpc3RpbmcgYmluZGluZ3MgKGluY2x1ZGluZyBobXJfZnV0dXJlX2ZvbyBvbmVzKSB0byB0aGVcbi8vIG5ldyB2ZXJzaW9uJ3MgcHJvcHMgaW5kZXhlcywgYW5kIHJlZnJlc2ggdGhlbSB3aXRoIHRoZSBuZXcgdmFsdWUgZnJvbVxuLy8gY29udGV4dFxuY29uc3QgcmVzdG9yZUJvdW5kID0gKGNtcCwgcmVzdG9yZSkgPT4ge1xuICAvLyByZXZlcnNlIHByb3A6Y3R4SW5kZXggaW4gJCQucHJvcHMgdG8gY3R4SW5kZXg6cHJvcFxuICAvL1xuICAvLyBjdHhJbmRleCBjYW4gYmUgZWl0aGVyIGEgcmVndWxhciBpbmRleCBpbiAkJC5jdHggb3IgYSBobXJfZnV0dXJlXyBwcm9wXG4gIC8vXG4gIGNvbnN0IHByb3BzQnlJbmRleCA9IHt9XG4gIGZvciAoY29uc3QgW25hbWUsIGldIG9mIE9iamVjdC5lbnRyaWVzKHJlc3RvcmUucHJvcHMpKSB7XG4gICAgcHJvcHNCeUluZGV4W2ldID0gbmFtZVxuICB9XG5cbiAgLy8gTk9URSAkJC5ib3VuZCBjYW5ub3QgY2hhbmdlIGluIHRoZSBITVIgbGlmZXRpbWUgb2YgYSBjb21wb25lbnQsIGJlY2F1c2VcbiAgLy8gICAgICBpZiBiaW5kaW5ncyBjaGFuZ2VzLCB0aGF0IG1lYW5zIHRoZSBwYXJlbnQgY29tcG9uZW50IGhhcyBjaGFuZ2VkLFxuICAvLyAgICAgIHdoaWNoIG1lYW5zIHRoZSBjaGlsZCAoY3VycmVudCkgY29tcG9uZW50IHdpbGwgYmUgd2hvbGx5IHJlY3JlYXRlZFxuICBmb3IgKGNvbnN0IFtvbGRJbmRleCwgdXBkYXRlQmluZGluZ10gb2YgT2JqZWN0LmVudHJpZXMocmVzdG9yZS5ib3VuZCkpIHtcbiAgICAvLyBjYW4gYmUgZWl0aGVyIHJlZ3VsYXIgcHJvcCwgb3IgZnV0dXJlX2htcl8gcHJvcFxuICAgIGNvbnN0IHByb3BOYW1lID0gcHJvcHNCeUluZGV4W29sZEluZGV4XVxuXG4gICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlmIHJlbWVtYmVyaW5nIG9mIGZ1dHVyZSBwcm9wcyBpcyBlbmFibGVkLi4uXG4gICAgLy8gaW4gYW55IGNhc2UsIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgaWYgd2UgaGF2ZSBsb3N0IHByb3BcbiAgICAvLyBuYW1lIGtub3dsZWRnZSBhdCB0aGlzIHBvaW50XG4gICAgaWYgKHByb3BOYW1lID09IG51bGwpIGNvbnRpbnVlXG5cbiAgICAvLyBOT1RFICQkLnByb3BzW3Byb3BOYW1lXSBhbHNvIHByb3BhZ2F0ZXMga25vd2xlZGdlIG9mIGEgcG9zc2libGVcbiAgICAvLyAgICAgIGZ1dHVyZSBwcm9wIHRvIHRoZSBuZXcgJCQucHJvcHMgKHZpYSAkJC5wcm9wcyBiZWluZyBhIFByb3h5KVxuICAgIGNvbnN0IG5ld0luZGV4ID0gY21wLiQkLnByb3BzW3Byb3BOYW1lXVxuICAgIGNtcC4kJC5ib3VuZFtuZXdJbmRleF0gPSB1cGRhdGVCaW5kaW5nXG5cbiAgICAvLyBOT1RFIGlmIHRoZSBwcm9wIGRvZXNuJ3QgZXhpc3Qgb3IgZG9lc24ndCBleGlzdCBhbnltb3JlIGluIHRoZSBuZXdcbiAgICAvLyAgICAgIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgY2xlYXJpbmcgdGhlIGJpbmRpbmcgaXMgdGhlIGV4cGVjdGVkXG4gICAgLy8gICAgICBiZWhhdmlvdXIgKHNpbmNlIHRoYXQncyB3aGF0IHdvdWxkIGhhcHBlbiBpbiBub24gSE1SIGNvZGUpXG4gICAgY29uc3QgbmV3VmFsdWUgPSBjbXAuJCQuY3R4W25ld0luZGV4XVxuICAgIHVwZGF0ZUJpbmRpbmcobmV3VmFsdWUpXG4gIH1cbn1cblxuLy8gcmVzdG9yZVN0YXRlXG4vL1xuLy8gSXQgaXMgdG9vIGxhdGUgdG8gcmVzdG9yZSBjb250ZXh0IGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBjb21wb25lbnQgaW5zdGFuY2Vcbi8vIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIChhbmQgc28gY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIHJlYWQpLlxuLy8gSW5zdGVhZCwgd2UgcmVseSBvbiBzZXR0aW5nIGN1cnJlbnRfY29tcG9uZW50IHRvIHRoZSBzYW1lIHZhbHVlIGl0IGhhcyB3aGVuXG4vLyB0aGUgY29tcG9uZW50IHdhcyBmaXJzdCByZW5kZXJlZCAtLSB3aGljaCBmaXggc3VwcG9ydCBmb3IgY29udGV4dCwgYW5kIGlzXG4vLyBhbHNvIGdlbmVyYWxseSBtb3JlIHJlc3BlY3RmdWwgb2Ygbm9ybWFsIG9wZXJhdGlvbi5cbi8vXG5jb25zdCByZXN0b3JlU3RhdGUgPSAoY21wLCByZXN0b3JlKSA9PiB7XG4gIGlmICghcmVzdG9yZSkgcmV0dXJuXG5cbiAgaWYgKHJlc3RvcmUuY2FsbGJhY2tzKSB7XG4gICAgY21wLiQkLmNhbGxiYWNrcyA9IHJlc3RvcmUuY2FsbGJhY2tzXG4gIH1cblxuICBpZiAocmVzdG9yZS5ib3VuZCkge1xuICAgIHJlc3RvcmVCb3VuZChjbXAsIHJlc3RvcmUpXG4gIH1cblxuICAvLyBwcm9wcywgcHJvcHMuJCRzbG90cyBhcmUgcmVzdG9yZWQgYXQgY29tcG9uZW50IGNyZWF0aW9uICh3b3Jrc1xuICAvLyBiZXR0ZXIgLS0gd2VsbCwgYXQgYWxsIGFjdHVhbGx5KVxufVxuXG5jb25zdCBnZXRfY3VycmVudF9jb21wb25lbnRfc2FmZSA9ICgpID0+IHtcbiAgLy8gTk9URSByZWx5aW5nIG9uIGR5bmFtaWMgYmluZGluZ3MgKGN1cnJlbnRfY29tcG9uZW50KSBtYWtlcyB1cyBkZXBlbmRlbnQgb25cbiAgLy8gYnVuZGxlciBjb25maWcgKGFuZCBhcHBhcmVudGx5IGl0IGRvZXMgbm90IHdvcmsgaW4gZGVtby1zdmVsdGUtbm9sbHVwKVxuICB0cnkge1xuICAgIC8vIHVuZm9ydHVuYXRlbHksIHVubGlrZSBjdXJyZW50X2NvbXBvbmVudCwgZ2V0X2N1cnJlbnRfY29tcG9uZW50KCkgY2FuXG4gICAgLy8gY3Jhc2ggaW4gdGhlIG5vcm1hbCBwYXRoICh3aGVuIHRoZXJlIGlzIHJlYWxseSBubyBwYXJlbnQpXG4gICAgcmV0dXJuIGdldF9jdXJyZW50X2NvbXBvbmVudCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIC4uLiBzbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgdGhpcyBlcnJvciBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHBhcmVudFxuICAgIC8vXG4gICAgLy8gdGhhdCBtYWtlcyB1cyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGVycm9yIG1lc3NhZ2UgYnV0LCBhdCBsZWFzdCwgd2VcbiAgICAvLyB3b24ndCBtdXRlIGFuIHVuZXhwZWN0ZWQgZXJyb3IsIHdoaWNoIGlzIHF1aXRlIGEgaG9ycmlibGUgdGhpbmcgdG8gZG9cbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdGdW5jdGlvbiBjYWxsZWQgb3V0c2lkZSBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24nKSB7XG4gICAgICAvLyB3aG8ga25vd3MuLi5cbiAgICAgIHJldHVybiBjdXJyZW50X2NvbXBvbmVudFxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb3hpZWRDb21wb25lbnQgPSAoXG4gIENvbXBvbmVudCxcbiAgaW5pdGlhbE9wdGlvbnMsXG4gIHsgYWxsb3dMaXZlQmluZGluZywgb25JbnN0YW5jZSwgb25Nb3VudCwgb25EZXN0cm95IH1cbikgPT4ge1xuICBsZXQgY21wXG4gIGxldCBvcHRpb25zID0gaW5pdGlhbE9wdGlvbnNcblxuICBjb25zdCBpc0N1cnJlbnQgPSBfY21wID0+IGNtcCA9PT0gX2NtcFxuXG4gIGNvbnN0IGFzc2lnbk9wdGlvbnMgPSAodGFyZ2V0LCBhbmNob3IsIHJlc3RvcmUsIHByZXNlcnZlTG9jYWxTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5wcm9wcylcblxuICAgIC8vIEZpbHRlcmluZyBwcm9wcyB0byBhdm9pZCBcInVuZXhwZWN0ZWQgcHJvcFwiIHdhcm5pbmdcbiAgICAvLyBOT1RFIHRoaXMgaXMgYmFzZWQgb24gcHJvcHMgcHJlc2VudCBpbiBpbml0aWFsIG9wdGlvbnMsIGJ1dCBpdCBzaG91bGRcbiAgICAvLyAgICAgIGFsd2F5cyB3b3JrcywgYmVjYXVzZSBwcm9wcyB0aGF0IGFyZSBwYXNzZWQgZnJvbSB0aGUgcGFyZW50IGNhbid0XG4gICAgLy8gICAgICBjaGFuZ2Ugd2l0aG91dCBhIGNvZGUgY2hhbmdlIHRvIHRoZSBwYXJlbnQgaXRzZWxmIC0tIGhlbmNlLCB0aGVcbiAgICAvLyAgICAgIGNoaWxkIGNvbXBvbmVudCB3aWxsIGJlIGZ1bGx5IHJlY3JlYXRlZCwgYW5kIGluaXRpYWwgb3B0aW9ucyBzaG91bGRcbiAgICAvLyAgICAgIGFsd2F5cyByZXByZXNlbnQgcHJvcHMgdGhhdCBhcmUgY3Vycm5ldGx5IHBhc3NlZCBieSB0aGUgcGFyZW50XG4gICAgaWYgKG9wdGlvbnMucHJvcHMgJiYgcmVzdG9yZS5obXJfcHJvcHNfdmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMob3B0aW9ucy5wcm9wcykpIHtcbiAgICAgICAgaWYgKHJlc3RvcmUuaG1yX3Byb3BzX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIHByb3BzW3Byb3BdID0gcmVzdG9yZS5obXJfcHJvcHNfdmFsdWVzW3Byb3BdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJlc2VydmVMb2NhbFN0YXRlICYmIHJlc3RvcmUuc3RhdGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXNlcnZlTG9jYWxTdGF0ZSkpIHtcbiAgICAgICAgLy8gZm9ybSBbJ2EnLCAnYiddID0+IHByZXNlcnZlIG9ubHkgJ2EnIGFuZCAnYidcbiAgICAgICAgcHJvcHMuJCRpbmplY3QgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcmVzZXJ2ZUxvY2FsU3RhdGUpIHtcbiAgICAgICAgICBwcm9wcy4kJGluamVjdFtrZXldID0gcmVzdG9yZS5zdGF0ZVtrZXldXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BzLiQkaW5qZWN0ID0gcmVzdG9yZS5zdGF0ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcHJvcHMuJCRpbmplY3RcbiAgICB9XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGluaXRpYWxPcHRpb25zLCB7XG4gICAgICB0YXJnZXQsXG4gICAgICBhbmNob3IsXG4gICAgICBwcm9wcyxcbiAgICAgIGh5ZHJhdGU6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICAvLyBQcmVzZXJ2aW5nIGtub3dsZWRnZSBvZiBcImZ1dHVyZSBwcm9wc1wiIC0tIHZlcnkgaGFja2lzaCB2ZXJzaW9uIChtYXliZVxuICAvLyB0aGVyZSBzaG91bGQgYmUgYW4gb3B0aW9uIHRvIG9wdCBvdXQgb2YgdGhpcylcbiAgLy9cbiAgLy8gVGhlIHVzZSBjYXNlIGlzIGJpbmQ6c29tZXRoaW5nIHdoZXJlIHNvbWV0aGluZyBkb2Vzbid0IGV4aXN0IHlldCBpbiB0aGVcbiAgLy8gdGFyZ2V0IGNvbXBvbmVudCwgYnV0IGNvbWVzIHRvIGV4aXN0IGxhdGVyLCBhZnRlciBhIEhNUiB1cGRhdGUuXG4gIC8vXG4gIC8vIElmIFN2ZWx0ZSBjYW4ndCBtYXAgYSBwcm9wIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgaXRcbiAgLy8gd2lsbCBqdXN0IGNvbXBsZXRlbHkgZGlzY2FyZCBpdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N2ZWx0ZWpzL3N2ZWx0ZS9ibG9iLzE2MzJiY2EzNGU0ODAzZDZiMGUwYjBhYmQ2NTJhYjU5NjgxODE4NjAvc3JjL3J1bnRpbWUvaW50ZXJuYWwvQ29tcG9uZW50LnRzI0w0NlxuICAvL1xuICBjb25zdCByZW1lbWJlckZ1dHVyZVByb3BzID0gY21wID0+IHtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJykgcmV0dXJuXG5cbiAgICBjbXAuJCQucHJvcHMgPSBuZXcgUHJveHkoY21wLiQkLnByb3BzLCB7XG4gICAgICBnZXQodGFyZ2V0LCBuYW1lKSB7XG4gICAgICAgIGlmICh0YXJnZXRbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtuYW1lXSA9ICdobXJfZnV0dXJlXycgKyBuYW1lXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFtuYW1lXVxuICAgICAgfSxcbiAgICAgIHNldCh0YXJnZXQsIG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBpbnN0cnVtZW50ID0gdGFyZ2V0Q21wID0+IHtcbiAgICBjb25zdCBjcmVhdGVDb21wb25lbnQgPSAoQ29tcG9uZW50LCByZXN0b3JlLCBwcmV2aW91c0NtcCkgPT4ge1xuICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KHBhcmVudENvbXBvbmVudCB8fCBwcmV2aW91c0NtcClcbiAgICAgIGNvbnN0IGNvbXAgPSBuZXcgQ29tcG9uZW50KG9wdGlvbnMpXG4gICAgICAvLyBOT1RFIG11c3QgYmUgaW5zdHJ1bWVudGVkIGJlZm9yZSByZXN0b3JlU3RhdGUsIGJlY2F1c2UgcmVzdG9yaW5nXG4gICAgICAvLyBiaW5kaW5ncyByZWxpZXMgb24gaGFja2VkICQkLnByb3BzXG4gICAgICBpbnN0cnVtZW50KGNvbXApXG4gICAgICByZXN0b3JlU3RhdGUoY29tcCwgcmVzdG9yZSlcbiAgICAgIHJldHVybiBjb21wXG4gICAgfVxuXG4gICAgcmVtZW1iZXJGdXR1cmVQcm9wcyh0YXJnZXRDbXApXG5cbiAgICB0YXJnZXRDbXAuJCQub25faG1yID0gW11cblxuICAgIC8vIGBjb25zZXJ2YXRpdmU6IHRydWVgIG1lYW5zIHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZSBuZXcgY29tcG9uZW50IGhhc1xuICAgIC8vIGFjdHVhbGx5IGJlZW4gc3VjY2Vzc2Z1bHkgY3JlYXRlZCBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkIGluc3RhbmNlLlxuICAgIC8vIFRoaXMgY291bGQgYmUgdXNlZnVsIGZvciBwcmV2ZW50aW5nIHJ1bnRpbWUgZXJyb3JzIGluIGNvbXBvbmVudCBpbml0IHRvXG4gICAgLy8gYnJpbmcgZG93biB0aGUgd2hvbGUgSE1SLiBVbmZvcnR1bmF0ZWx5IHRoZSBpbXBsZW1lbnRhdGlvbiBiZWxsb3cgaXNcbiAgICAvLyBicm9rZW4gKEZJWE1FKSwgYnV0IHRoYXQgcmVtYWlucyBhbiBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIHdoZW4gSE1SIGhvb2tzXG4gICAgLy8gd2lsbCBhY3R1YWxseSBsYW5kIGluIFN2ZWx0ZSBpdHNlbGYuXG4gICAgLy9cbiAgICAvLyBUaGUgZ29hbCB3b3VsZCBiZSB0byByZW5kZXIgYW4gZXJyb3IgaW5wbGFjZSBpbiBjYXNlIG9mIGVycm9yLCB0byBhdm9pZFxuICAgIC8vIGxvc2luZyB0aGUgbmF2aWdhdGlvbiBzdGFjayAoZXNwZWNpYWxseSBhbm5veWluZyBpbiBuYXRpdmUsIHRoYXQgaXMgbm90XG4gICAgLy8gYmFzZWQgb24gVVJMIG5hdmlnYXRpb24sIHNvIHdlIGxvc2UgdGhlIGN1cnJlbnQgcGFnZSBvbiBlYWNoIGVycm9yKS5cbiAgICAvL1xuICAgIHRhcmdldENtcC4kcmVwbGFjZSA9IChcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgdGFyZ2V0ID0gb3B0aW9ucy50YXJnZXQsXG4gICAgICAgIGFuY2hvciA9IG9wdGlvbnMuYW5jaG9yLFxuICAgICAgICBwcmVzZXJ2ZUxvY2FsU3RhdGUsXG4gICAgICAgIGNvbnNlcnZhdGl2ZSA9IGZhbHNlLFxuICAgICAgfVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgcmVzdG9yZSA9IGNhcHR1cmVTdGF0ZSh0YXJnZXRDbXApXG4gICAgICBhc3NpZ25PcHRpb25zKFxuICAgICAgICB0YXJnZXQgfHwgb3B0aW9ucy50YXJnZXQsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgcmVzdG9yZSxcbiAgICAgICAgcHJlc2VydmVMb2NhbFN0YXRlXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IGNtcCA/IGNtcC4kJC5vbl9obXIgOiBbXVxuXG4gICAgICBjb25zdCBhZnRlckNhbGxiYWNrcyA9IGNhbGxiYWNrcy5tYXAoZm4gPT4gZm4oY21wKSkuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICAgIGNvbnN0IHByZXZpb3VzID0gY21wXG4gICAgICBpZiAoY29uc2VydmF0aXZlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGNyZWF0ZUNvbXBvbmVudChDb21wb25lbnQsIHJlc3RvcmUsIHByZXZpb3VzKVxuICAgICAgICAgIC8vIHByZXZlbnRzIG9uX2Rlc3Ryb3kgZnJvbSBmaXJpbmcgb24gbm9uLWZpbmFsIGNtcCBpbnN0YW5jZVxuICAgICAgICAgIGNtcCA9IG51bGxcbiAgICAgICAgICBwcmV2aW91cy4kZGVzdHJveSgpXG4gICAgICAgICAgY21wID0gbmV4dFxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjbXAgPSBwcmV2aW91c1xuICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwcmV2ZW50cyBvbl9kZXN0cm95IGZyb20gZmlyaW5nIG9uIG5vbi1maW5hbCBjbXAgaW5zdGFuY2VcbiAgICAgICAgY21wID0gbnVsbFxuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAvLyBwcmV2aW91cyBjYW4gYmUgbnVsbCBpZiBsYXN0IGNvbnN0cnVjdG9yIGhhcyBjcmFzaGVkXG4gICAgICAgICAgcHJldmlvdXMuJGRlc3Ryb3koKVxuICAgICAgICB9XG4gICAgICAgIGNtcCA9IGNyZWF0ZUNvbXBvbmVudChDb21wb25lbnQsIHJlc3RvcmUsIGNtcClcbiAgICAgIH1cblxuICAgICAgY21wLiQkLmhtcl9jbXAgPSBjbXBcblxuICAgICAgZm9yIChjb25zdCBmbiBvZiBhZnRlckNhbGxiYWNrcykge1xuICAgICAgICBmbihjbXApXG4gICAgICB9XG5cbiAgICAgIGNtcC4kJC5vbl9obXIgPSBjYWxsYmFja3NcblxuICAgICAgcmV0dXJuIGNtcFxuICAgIH1cblxuICAgIC8vIE5PVEUgb25Nb3VudCBtdXN0IHByb3ZpZGUgdGFyZ2V0ICYgYW5jaG9yIChmb3IgdXMgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmF0ZVxuICAgIC8vIFx0XHRcdGFjdHVhbCBET00gaW5zZXJ0aW9uIHBvaW50KVxuICAgIC8vXG4gICAgLy8gXHRcdFx0QW5kIGFsc28sIHRvIHN1cHBvcnQga2V5ZWQgbGlzdCwgaXQgbmVlZHMgdG8gYmUgY2FsbGVkIGVhY2ggdGltZSB0aGVcbiAgICAvLyBcdFx0XHRjb21wb25lbnQgaXMgbW92ZWQgKHNhbWUgYXMgJCQuZnJhZ21lbnQubSlcbiAgICBpZiAob25Nb3VudCkge1xuICAgICAgY29uc3QgbSA9IHRhcmdldENtcC4kJC5mcmFnbWVudC5tXG4gICAgICB0YXJnZXRDbXAuJCQuZnJhZ21lbnQubSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG0oLi4uYXJncylcbiAgICAgICAgb25Nb3VudCguLi5hcmdzKVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTk9URSBvbkRlc3Ryb3kgbXVzdCBiZSBjYWxsZWQgZXZlbiBpZiB0aGUgY2FsbCBkb2Vzbid0IHBhc3MgdGhyb3VnaCB0aGVcbiAgICAvLyAgICAgIGNvbXBvbmVudCdzICRkZXN0cm95IG1ldGhvZCAodGhhdCB3ZSBjYW4gaG9vayBvbnRvIGJ5IG91cnNlbHZlcywgc2luY2VcbiAgICAvLyAgICAgIGl0J3MgcHVibGljIEFQSSkgLS0gdGhpcyBoYXBwZW5zIGEgbG90IGluIHN2ZWx0ZSdzIGludGVybmFscywgdGhhdFxuICAgIC8vICAgICAgbWFuaXB1bGF0ZXMgY21wLiQkLmZyYWdtZW50IGRpcmVjdGx5LCBvZnRlbiBiaW5kaW5nIHRvIGZyYWdtZW50LmQsXG4gICAgLy8gICAgICBmb3IgZXhhbXBsZVxuICAgIGlmIChvbkRlc3Ryb3kpIHtcbiAgICAgIHRhcmdldENtcC4kJC5vbl9kZXN0cm95LnB1c2goKCkgPT4ge1xuICAgICAgICBpZiAoaXNDdXJyZW50KHRhcmdldENtcCkpIHtcbiAgICAgICAgICBvbkRlc3Ryb3koKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChvbkluc3RhbmNlKSB7XG4gICAgICBvbkluc3RhbmNlKHRhcmdldENtcClcbiAgICB9XG5cbiAgICAvLyBTdmVsdGUgMyBjcmVhdGVzIGFuZCBtb3VudCBjb21wb25lbnRzIGZyb20gdGhlaXIgY29uc3RydWN0b3IgaWZcbiAgICAvLyBvcHRpb25zLnRhcmdldCBpcyBwcmVzZW50LlxuICAgIC8vXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZSBjb21wb25lbnQncyBgZnJhZ21lbnQuY2AgYW5kLFxuICAgIC8vIG1vc3Qgbm90YWJseSwgYGZyYWdtZW50Lm1gIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkIF9mcm9tIGluc2lkZVxuICAgIC8vIGNyZWF0ZUNvbXBvbmVudF8uIFRoYXQgaXM6IGJlZm9yZSB3ZSBoYXZlIGEgY2hhbmNlIHRvIGhvb2sgb24gaXQuXG4gICAgLy9cbiAgICAvLyBQcm94eSdzIGNvbnN0cnVjdG9yXG4gICAgLy8gICAtPiBjcmVhdGVDb21wb25lbnRcbiAgICAvLyAgICAgLT4gY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAgLy8gICAgICAgLT4gY29tcG9uZW50LiQkLmZyYWdtZW50LmMoLi4uKSAob3IgbCwgaWYgaHlkcmF0ZTp0cnVlKVxuICAgIC8vICAgICAgIC0+IGNvbXBvbmVudC4kJC5mcmFnbWVudC5tKC4uLilcbiAgICAvL1xuICAgIC8vICAgLT4geW91IGFyZSBoZXJlIDwtXG4gICAgLy9cbiAgICBpZiAob25Nb3VudCkge1xuICAgICAgY29uc3QgeyB0YXJnZXQsIGFuY2hvciB9ID0gb3B0aW9uc1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBvbk1vdW50KHRhcmdldCwgYW5jaG9yKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGFsbG93TGl2ZUJpbmRpbmdcbiAgICA/IGN1cnJlbnRfY29tcG9uZW50XG4gICAgOiBnZXRfY3VycmVudF9jb21wb25lbnRfc2FmZSgpXG5cbiAgY21wID0gbmV3IENvbXBvbmVudChvcHRpb25zKVxuICBjbXAuJCQuaG1yX2NtcCA9IGNtcFxuXG4gIGluc3RydW1lbnQoY21wKVxuXG4gIHJldHVybiBjbXBcbn1cbiJdLCJuYW1lcyI6WyJjbXAiLCJDb21wb25lbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/svelte-hmr/runtime/svelte-hooks.js\n");
/***/ }),
/***/ "./node_modules/svelte-loader/lib/hot-api.js":
/*!***************************************************!*\
!*** ./node_modules/svelte-loader/lib/hot-api.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"applyHmr\": () => (/* binding */ applyHmr)\n/* harmony export */ });\n/* harmony import */ var svelte_hmr_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! svelte-hmr/runtime */ \"./node_modules/svelte-hmr/runtime/index.js\");\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\nconst g = typeof window !== \"undefined\" ? window : __webpack_require__.g;\nconst globalKey = typeof Symbol !== \"undefined\" ? Symbol(\"SVELTE_LOADER_HOT\") : \"__SVELTE_LOADER_HOT\";\nif (!g[globalKey]) {\n let updatingCount = 0;\n const notifyStart = () => {\n updatingCount++;\n };\n const notifyError = (reload) => (err) => {\n const errString = err && err.stack || err;\n console.error(\n \"[HMR] Failed to accept update (nollup compat mode)\",\n errString\n );\n reload();\n notifyEnd();\n };\n const notifyEnd = () => {\n updatingCount--;\n if (updatingCount === 0) {\n console.log(\"[HMR:Svelte] Up to date\");\n }\n };\n g[globalKey] = {\n hotStates: {},\n notifyStart,\n notifyError,\n notifyEnd\n };\n}\nconst runAcceptHandlers = (acceptHandlers) => {\n const queue = [...acceptHandlers];\n const next = () => {\n const cur = queue.shift();\n if (cur) {\n return cur(null).then(next);\n } else {\n return Promise.resolve(null);\n }\n };\n return next();\n};\nconst applyHmr = (0,svelte_hmr_runtime__WEBPACK_IMPORTED_MODULE_0__.makeApplyHmr)((args) => {\n const { notifyStart, notifyError, notifyEnd } = g[globalKey];\n const { m, reload } = args;\n let acceptHandlers = m.hot.data && m.hot.data.acceptHandlers || [];\n let nextAcceptHandlers = [];\n m.hot.dispose((data) => {\n data.acceptHandlers = nextAcceptHandlers;\n });\n const dispose = (...args2) => m.hot.dispose(...args2);\n const accept = (handler) => {\n if (nextAcceptHandlers.length === 0) {\n m.hot.accept();\n }\n nextAcceptHandlers.push(handler);\n };\n const check = (status) => {\n if (status === \"ready\") {\n notifyStart();\n } else if (status === \"idle\") {\n runAcceptHandlers(acceptHandlers).then(notifyEnd).catch(notifyError(reload));\n }\n };\n m.hot.addStatusHandler(check);\n m.hot.dispose(() => {\n m.hot.removeStatusHandler(check);\n });\n const hot = {\n data: m.hot.data,\n dispose,\n accept\n };\n return __spreadProps(__spreadValues({}, args), { hot });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWxvYWRlci9saWIvaG90LWFwaS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBNkI7QUFHN0IsTUFBTSxJQUFJLE9BQU8sV0FBVyxjQUFjLFNBQVMscUJBQU07QUFFekQsTUFBTSxZQUNMLE9BQU8sV0FBVyxjQUNmLE9BQU8sbUJBQW1CLElBQzFCO0FBRUosSUFBSSxDQUFDLEVBQUUsWUFBWTtBQUVsQixNQUFJLGdCQUFnQjtBQUVwQixRQUFNLGNBQWMsTUFBTTtBQUN6QjtBQUFBLEVBQ0Q7QUFFQSxRQUFNLGNBQWMsWUFBVSxTQUFPO0FBQ3BDLFVBQU0sWUFBYSxPQUFPLElBQUksU0FBVTtBQUV4QyxZQUFRO0FBQUEsTUFDUDtBQUFBLE1BQ0E7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUNQLGNBQVU7QUFBQSxFQUNYO0FBRUEsUUFBTSxZQUFZLE1BQU07QUFDdkI7QUFDQSxRQUFJLGtCQUFrQixHQUFHO0FBR3hCLGNBQVEsSUFBSSx5QkFBeUI7QUFBQSxJQUN0QztBQUFBLEVBQ0Q7QUFFQSxJQUFFLGFBQWE7QUFBQSxJQUNkLFdBQVcsQ0FBQztBQUFBLElBQ1o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFDRDtBQUVBLE1BQU0sb0JBQW9CLG9CQUFrQjtBQUMzQyxRQUFNLFFBQVEsQ0FBQyxHQUFHLGNBQWM7QUFDaEMsUUFBTSxPQUFPLE1BQU07QUFDbEIsVUFBTSxNQUFNLE1BQU0sTUFBTTtBQUN4QixRQUFJLEtBQUs7QUFDUixhQUFPLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSTtBQUFBLElBQzNCLE9BQU87QUFDTixhQUFPLFFBQVEsUUFBUSxJQUFJO0FBQUEsSUFDNUI7QUFBQSxFQUNEO0FBQ0EsU0FBTyxLQUFLO0FBQ2I7QUFFTyxNQUFNLFdBQVcsZ0VBQVksQ0FBQyxVQUFRO0FBQzVDLFFBQU0sRUFBRSxhQUFhLGFBQWEsVUFBVSxJQUFJLEVBQUU7QUFDbEQsUUFBTSxFQUFFLEdBQUcsT0FBTyxJQUFJO0FBRXRCLE1BQUksaUJBQWtCLEVBQUUsSUFBSSxRQUFRLEVBQUUsSUFBSSxLQUFLLGtCQUFtQixDQUFDO0FBQ25FLE1BQUkscUJBQXFCLENBQUM7QUFFMUIsSUFBRSxJQUFJLFFBQVEsVUFBUTtBQUNyQixTQUFLLGlCQUFpQjtBQUFBLEVBQ3ZCLENBQUM7QUFFRCxRQUFNLFVBQVUsSUFBSUEsVUFBUyxFQUFFLElBQUksUUFBUSxHQUFHQSxLQUFJO0FBRWxELFFBQU0sU0FBUyxhQUFXO0FBQ3pCLFFBQUksbUJBQW1CLFdBQVcsR0FBRztBQUNwQyxRQUFFLElBQUksT0FBTztBQUFBLElBQ2Q7QUFDQSx1QkFBbUIsS0FBSyxPQUFPO0FBQUEsRUFDaEM7QUFFQSxRQUFNLFFBQVEsWUFBVTtBQUN2QixRQUFJLFdBQVcsU0FBUztBQUN2QixrQkFBWTtBQUFBLElBQ2IsV0FBVyxXQUFXLFFBQVE7QUFDN0Isd0JBQWtCLGNBQWMsRUFDOUIsS0FBSyxTQUFTLEVBQ2QsTUFBTSxZQUFZLE1BQU0sQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDRDtBQUVBLElBQUUsSUFBSSxpQkFBaUIsS0FBSztBQUU1QixJQUFFLElBQUksUUFBUSxNQUFNO0FBQ25CLE1BQUUsSUFBSSxvQkFBb0IsS0FBSztBQUFBLEVBQ2hDLENBQUM7QUFFRCxRQUFNLE1BQU07QUFBQSxJQUNYLE1BQU0sRUFBRSxJQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0E7QUFBQSxFQUNEO0FBRUEsU0FBTyxpQ0FBSyxPQUFMLEVBQVcsSUFBSTtBQUN2QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvc3ZlbHRlLWxvYWRlci9saWIvaG90LWFwaS5qcz8zMDNkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1ha2VBcHBseUhtciB9IGZyb20gJ3N2ZWx0ZS1obXIvcnVudGltZSc7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuY29uc3QgZyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuY29uc3QgZ2xvYmFsS2V5ID1cclxuXHR0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJ1xyXG5cdFx0PyBTeW1ib2woJ1NWRUxURV9MT0FERVJfSE9UJylcclxuXHRcdDogJ19fU1ZFTFRFX0xPQURFUl9IT1QnO1xyXG5cclxuaWYgKCFnW2dsb2JhbEtleV0pIHtcclxuXHQvLyBkbyB1cGRhdGluZyByZWZzIGNvdW50aW5nIHRvIGtub3cgd2hlbiBhIGZ1bGwgdXBkYXRlIGhhcyBiZWVuIGFwcGxpZWRcclxuXHRsZXQgdXBkYXRpbmdDb3VudCA9IDA7XHJcblxyXG5cdGNvbnN0IG5vdGlmeVN0YXJ0ID0gKCkgPT4ge1xyXG5cdFx0dXBkYXRpbmdDb3VudCsrO1xyXG5cdH07XHJcblxyXG5cdGNvbnN0IG5vdGlmeUVycm9yID0gcmVsb2FkID0+IGVyciA9PiB7XHJcblx0XHRjb25zdCBlcnJTdHJpbmcgPSAoZXJyICYmIGVyci5zdGFjaykgfHwgZXJyO1xyXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuXHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdCdbSE1SXSBGYWlsZWQgdG8gYWNjZXB0IHVwZGF0ZSAobm9sbHVwIGNvbXBhdCBtb2RlKScsXHJcblx0XHRcdGVyclN0cmluZ1xyXG5cdFx0KTtcclxuXHRcdHJlbG9hZCgpO1xyXG5cdFx0bm90aWZ5RW5kKCk7XHJcblx0fTtcclxuXHJcblx0Y29uc3Qgbm90aWZ5RW5kID0gKCkgPT4ge1xyXG5cdFx0dXBkYXRpbmdDb3VudC0tO1xyXG5cdFx0aWYgKHVwZGF0aW5nQ291bnQgPT09IDApIHtcclxuXHRcdFx0Ly8gTk9URSB0aGlzIG1lc3NhZ2UgaXMgaW1wb3J0YW50IGZvciB0aW1pbmcgaW4gdGVzdHNcclxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuXHRcdFx0Y29uc29sZS5sb2coJ1tITVI6U3ZlbHRlXSBVcCB0byBkYXRlJyk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Z1tnbG9iYWxLZXldID0ge1xyXG5cdFx0aG90U3RhdGVzOiB7fSxcclxuXHRcdG5vdGlmeVN0YXJ0LFxyXG5cdFx0bm90aWZ5RXJyb3IsXHJcblx0XHRub3RpZnlFbmQsXHJcblx0fTtcclxufVxyXG5cclxuY29uc3QgcnVuQWNjZXB0SGFuZGxlcnMgPSBhY2NlcHRIYW5kbGVycyA9PiB7XHJcblx0Y29uc3QgcXVldWUgPSBbLi4uYWNjZXB0SGFuZGxlcnNdO1xyXG5cdGNvbnN0IG5leHQgPSAoKSA9PiB7XHJcblx0XHRjb25zdCBjdXIgPSBxdWV1ZS5zaGlmdCgpO1xyXG5cdFx0aWYgKGN1cikge1xyXG5cdFx0XHRyZXR1cm4gY3VyKG51bGwpLnRoZW4obmV4dCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0cmV0dXJuIG5leHQoKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBhcHBseUhtciA9IG1ha2VBcHBseUhtcihhcmdzID0+IHtcclxuXHRjb25zdCB7IG5vdGlmeVN0YXJ0LCBub3RpZnlFcnJvciwgbm90aWZ5RW5kIH0gPSBnW2dsb2JhbEtleV07XHJcblx0Y29uc3QgeyBtLCByZWxvYWQgfSA9IGFyZ3M7XHJcblxyXG5cdGxldCBhY2NlcHRIYW5kbGVycyA9IChtLmhvdC5kYXRhICYmIG0uaG90LmRhdGEuYWNjZXB0SGFuZGxlcnMpIHx8IFtdO1xyXG5cdGxldCBuZXh0QWNjZXB0SGFuZGxlcnMgPSBbXTtcclxuXHJcblx0bS5ob3QuZGlzcG9zZShkYXRhID0+IHtcclxuXHRcdGRhdGEuYWNjZXB0SGFuZGxlcnMgPSBuZXh0QWNjZXB0SGFuZGxlcnM7XHJcblx0fSk7XHJcblxyXG5cdGNvbnN0IGRpc3Bvc2UgPSAoLi4uYXJncykgPT4gbS5ob3QuZGlzcG9zZSguLi5hcmdzKTtcclxuXHJcblx0Y29uc3QgYWNjZXB0ID0gaGFuZGxlciA9PiB7XHJcblx0XHRpZiAobmV4dEFjY2VwdEhhbmRsZXJzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRtLmhvdC5hY2NlcHQoKTtcclxuXHRcdH1cclxuXHRcdG5leHRBY2NlcHRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xyXG5cdH07XHJcblxyXG5cdGNvbnN0IGNoZWNrID0gc3RhdHVzID0+IHtcclxuXHRcdGlmIChzdGF0dXMgPT09ICdyZWFkeScpIHtcclxuXHRcdFx0bm90aWZ5U3RhcnQoKTtcclxuXHRcdH0gZWxzZSBpZiAoc3RhdHVzID09PSAnaWRsZScpIHtcclxuXHRcdFx0cnVuQWNjZXB0SGFuZGxlcnMoYWNjZXB0SGFuZGxlcnMpXHJcblx0XHRcdFx0LnRoZW4obm90aWZ5RW5kKVxyXG5cdFx0XHRcdC5jYXRjaChub3RpZnlFcnJvcihyZWxvYWQpKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRtLmhvdC5hZGRTdGF0dXNIYW5kbGVyKGNoZWNrKTtcclxuXHJcblx0bS5ob3QuZGlzcG9zZSgoKSA9PiB7XHJcblx0XHRtLmhvdC5yZW1vdmVTdGF0dXNIYW5kbGVyKGNoZWNrKTtcclxuXHR9KTtcclxuXHJcblx0Y29uc3QgaG90ID0ge1xyXG5cdFx0ZGF0YTogbS5ob3QuZGF0YSxcclxuXHRcdGRpc3Bvc2UsXHJcblx0XHRhY2NlcHQsXHJcblx0fTtcclxuXHJcblx0cmV0dXJuIHsgLi4uYXJncywgaG90IH07XHJcbn0pO1xyXG4iXSwibmFtZXMiOlsiYXJncyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/svelte-loader/lib/hot-api.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/client.js":
/*!*****************************************************!*\
!*** ./node_modules/webpack-plugin-serve/client.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("(() => {\n const { run } = __webpack_require__(/*! ./lib/client/client */ \"./node_modules/webpack-plugin-serve/lib/client/client.js\");\n let hash = \"<unknown>\";\n let options;\n try {\n options = {\"compress\":null,\"headers\":null,\"historyFallback\":{},\"hmr\":true,\"host\":null,\"liveReload\":false,\"log\":{\"level\":\"info\",\"prefix\":{\"template\":\"{{level}}\"},\"name\":\"webpack-plugin-serve\"},\"open\":false,\"port\":3000,\"progress\":true,\"publicPath\":null,\"ramdisk\":false,\"secure\":false,\"static\":\"/Users/darrenzal/Myseelia/dist\",\"status\":true,\"address\":\"[::]:3000\",\"compilerName\":null,\"wpsId\":\"71558b0\"};\n } catch (e) {\n const { log } = __webpack_require__(/*! ./lib/client/log */ \"./node_modules/webpack-plugin-serve/lib/client/log.js\");\n log.error(\n \"The entry for webpack-plugin-serve was included in your build, but it does not appear that the plugin was. Please check your configuration.\"\n );\n }\n try {\n hash = __webpack_require__.h();\n } catch (e) {\n }\n run(hash, options);\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvY2xpZW50LmpzLmpzIiwibWFwcGluZ3MiOiJDQWVDLE1BQU07QUFFTCxRQUFNLEVBQUUsSUFBSSxJQUFJLG1CQUFPLENBQUMscUZBQXFCO0FBQzdDLE1BQUksT0FBTztBQUNYLE1BQUk7QUFDSixNQUFJO0FBQ0YsY0FBVTtBQUFBLEVBQ1osU0FBUyxHQUFQO0FBQ0EsVUFBTSxFQUFFLElBQUksSUFBSSxtQkFBTyxDQUFDLCtFQUFrQjtBQUMxQyxRQUFJO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUVGLFdBQU8sdUJBQWdCO0FBQWhCLEVBQ1QsU0FBUyxHQUFQO0FBQUEsRUFBVztBQUViLE1BQUksTUFBTSxPQUFPO0FBQ25CLEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL25vZGVfbW9kdWxlcy93ZWJwYWNrLXBsdWdpbi1zZXJ2ZS9jbGllbnQuanM/Nzk1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgwqkgMjAxOCBBbmRyZXcgUG93ZWxsXG5cbiAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGlzIFNvdXJjZSBDb2RlIEZvcm0uXG4qL1xuXG4vKipcbiAqIEBub3RlIFRoaXMgZmlsZSBleGlzdHMgbWVyZWx5IGFzIGFuIGVhc3kgcmVmZXJlbmNlIGZvciBmb2xrcyBhZGRpbmcgaXQgdG8gdGhlaXIgY29uZmlndXJhdGlvbiBlbnRyaWVzXG4gKi9cblxuKCgpID0+IHtcbiAgLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgY29uc3QgeyBydW4gfSA9IHJlcXVpcmUoJy4vbGliL2NsaWVudC9jbGllbnQnKTtcbiAgbGV0IGhhc2ggPSAnPHVua25vd24+JztcbiAgbGV0IG9wdGlvbnM7XG4gIHRyeSB7XG4gICAgb3B0aW9ucyA9IMqOyZDJucmUb3PHncqMybnHnXM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gcmVxdWlyZSgnLi9saWIvY2xpZW50L2xvZycpO1xuICAgIGxvZy5lcnJvcihcbiAgICAgICdUaGUgZW50cnkgZm9yIHdlYnBhY2stcGx1Z2luLXNlcnZlIHdhcyBpbmNsdWRlZCBpbiB5b3VyIGJ1aWxkLCBidXQgaXQgZG9lcyBub3QgYXBwZWFyIHRoYXQgdGhlIHBsdWdpbiB3YXMuIFBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uJ1xuICAgICk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgICBoYXNoID0gX193ZWJwYWNrX2hhc2hfXztcbiAgfSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG4gIHJ1bihoYXNoLCBvcHRpb25zKTtcbn0pKCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/client.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/ClientSocket.js":
/*!**********************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/ClientSocket.js ***!
\**********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval("var __pow = Math.pow;\nconst { error, refresh, warn } = __webpack_require__(/*! ./log */ \"./node_modules/webpack-plugin-serve/lib/client/log.js\")();\nconst ignoreCodes = [1008, 1011];\nconst maxAttempts = 10;\nclass ClientSocket {\n constructor(options, ...args) {\n this.args = args;\n this.attempts = 0;\n this.eventHandlers = [];\n this.options = options;\n this.retrying = false;\n this.connect();\n }\n addEventListener(...args) {\n this.eventHandlers.push(args);\n this.socket.addEventListener(...args);\n }\n close() {\n this.socket.close();\n }\n connect() {\n if (this.socket) {\n delete this.socket;\n }\n this.connecting = true;\n this.socket = new WebSocket(...this.args);\n if (this.options.retry) {\n this.socket.addEventListener(\"close\", (event) => {\n if (ignoreCodes.includes(event.code)) {\n return;\n }\n if (!this.retrying) {\n warn(`The WebSocket was closed and will attempt to reconnect`);\n }\n this.reconnect();\n });\n } else {\n this.socket.onclose = () => warn(`The client WebSocket was closed. ${refresh}`);\n }\n this.socket.addEventListener(\"open\", () => {\n this.attempts = 0;\n this.retrying = false;\n });\n if (this.eventHandlers.length) {\n for (const [name, fn] of this.eventHandlers) {\n this.socket.addEventListener(name, fn);\n }\n }\n }\n reconnect() {\n this.attempts += 1;\n this.retrying = true;\n if (this.attempts > maxAttempts) {\n error(`The WebSocket could not be reconnected. ${refresh}`);\n this.retrying = false;\n return;\n }\n const timeout = 1e3 * __pow(this.attempts, 2);\n setTimeout(() => this.connect(this.args), timeout);\n }\n removeEventListener(...args) {\n const [, handler] = args;\n this.eventHandlers = this.eventHandlers.filter(([, fn]) => fn === handler);\n this.socket.removeEventListener(...args);\n }\n}\nmodule.exports = { ClientSocket };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9DbGllbnRTb2NrZXQuanMuanMiLCJtYXBwaW5ncyI6IjtBQVVBLE1BQU0sRUFBRSxPQUFPLFNBQVMsS0FBSyxJQUFJLG1CQUFPLENBQUMsb0VBQU8sRUFBRTtBQUdsRCxNQUFNLGNBQWMsQ0FBQyxNQUFNLElBQUk7QUFDL0IsTUFBTSxjQUFjO0FBRXBCLE1BQU0sYUFBYTtBQUFBLEVBQ2pCLFlBQVksWUFBWSxNQUFNO0FBQzVCLFNBQUssT0FBTztBQUNaLFNBQUssV0FBVztBQUNoQixTQUFLLGdCQUFnQixDQUFDO0FBQ3RCLFNBQUssVUFBVTtBQUNmLFNBQUssV0FBVztBQUVoQixTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxvQkFBb0IsTUFBTTtBQUN4QixTQUFLLGNBQWMsS0FBSyxJQUFJO0FBQzVCLFNBQUssT0FBTyxpQkFBaUIsR0FBRyxJQUFJO0FBQUEsRUFDdEM7QUFBQSxFQUVBLFFBQVE7QUFDTixTQUFLLE9BQU8sTUFBTTtBQUFBLEVBQ3BCO0FBQUEsRUFFQSxVQUFVO0FBQ1IsUUFBSSxLQUFLLFFBQVE7QUFDZixhQUFPLEtBQUs7QUFBQSxJQUNkO0FBRUEsU0FBSyxhQUFhO0FBRWxCLFNBQUssU0FBUyxJQUFJLFVBQVUsR0FBRyxLQUFLLElBQUk7QUFFeEMsUUFBSSxLQUFLLFFBQVEsT0FBTztBQUN0QixXQUFLLE9BQU8saUJBQWlCLFNBQVMsQ0FBQyxVQUFVO0FBQy9DLFlBQUksWUFBWSxTQUFTLE1BQU0sSUFBSSxHQUFHO0FBQ3BDO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxLQUFLLFVBQVU7QUFDbEIsZUFBSyx3REFBd0Q7QUFBQSxRQUMvRDtBQUVBLGFBQUssVUFBVTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNILE9BQU87QUFDTCxXQUFLLE9BQU8sVUFBVSxNQUFNLEtBQUssb0NBQW9DLFNBQVM7QUFBQSxJQUNoRjtBQUVBLFNBQUssT0FBTyxpQkFBaUIsUUFBUSxNQUFNO0FBQ3pDLFdBQUssV0FBVztBQUNoQixXQUFLLFdBQVc7QUFBQSxJQUNsQixDQUFDO0FBRUQsUUFBSSxLQUFLLGNBQWMsUUFBUTtBQUM3QixpQkFBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEtBQUssZUFBZTtBQUMzQyxhQUFLLE9BQU8saUJBQWlCLE1BQU0sRUFBRTtBQUFBLE1BQ3ZDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLFlBQVk7QUFDVixTQUFLLFlBQVk7QUFDakIsU0FBSyxXQUFXO0FBRWhCLFFBQUksS0FBSyxXQUFXLGFBQWE7QUFDL0IsWUFBTSwyQ0FBMkMsU0FBUztBQUMxRCxXQUFLLFdBQVc7QUFDaEI7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLE1BQU8sV0FBSyxVQUFZO0FBRXhDLGVBQVcsTUFBTSxLQUFLLFFBQVEsS0FBSyxJQUFJLEdBQUcsT0FBTztBQUFBLEVBQ25EO0FBQUEsRUFFQSx1QkFBdUIsTUFBTTtBQUMzQixVQUFNLENBQUMsRUFBRSxPQUFPLElBQUk7QUFDcEIsU0FBSyxnQkFBZ0IsS0FBSyxjQUFjLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLE9BQU8sT0FBTztBQUN6RSxTQUFLLE9BQU8sb0JBQW9CLEdBQUcsSUFBSTtBQUFBLEVBQ3pDO0FBQ0Y7QUFFQSxPQUFPLFVBQVUsRUFBRSxhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9DbGllbnRTb2NrZXQuanM/ZDgwOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgwqkgMjAxOCBBbmRyZXcgUG93ZWxsXG5cbiAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGlzIFNvdXJjZSBDb2RlIEZvcm0uXG4qL1xuY29uc3QgeyBlcnJvciwgcmVmcmVzaCwgd2FybiB9ID0gcmVxdWlyZSgnLi9sb2cnKSgpO1xuXG4vLyBpZ25vcmUgMTAwOCAoSFRUUCA0MDAgZXF1aXZhbGVudCkgYW5kIDEwMTEgKEhUVFAgNTAwIGVxdWl2YWxlbnQpXG5jb25zdCBpZ25vcmVDb2RlcyA9IFsxMDA4LCAxMDExXTtcbmNvbnN0IG1heEF0dGVtcHRzID0gMTA7XG5cbmNsYXNzIENsaWVudFNvY2tldCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIC4uLmFyZ3MpIHtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuYXR0ZW1wdHMgPSAwO1xuICAgIHRoaXMuZXZlbnRIYW5kbGVycyA9IFtdO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5yZXRyeWluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKC4uLmFyZ3MpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMucHVzaChhcmdzKTtcbiAgICB0aGlzLnNvY2tldC5hZGRFdmVudExpc3RlbmVyKC4uLmFyZ3MpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgfVxuXG4gIGNvbm5lY3QoKSB7XG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICBkZWxldGUgdGhpcy5zb2NrZXQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldCguLi50aGlzLmFyZ3MpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXRyeSkge1xuICAgICAgdGhpcy5zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGlnbm9yZUNvZGVzLmluY2x1ZGVzKGV2ZW50LmNvZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnJldHJ5aW5nKSB7XG4gICAgICAgICAgd2FybihgVGhlIFdlYlNvY2tldCB3YXMgY2xvc2VkIGFuZCB3aWxsIGF0dGVtcHQgdG8gcmVjb25uZWN0YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB3YXJuKGBUaGUgY2xpZW50IFdlYlNvY2tldCB3YXMgY2xvc2VkLiAke3JlZnJlc2h9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsICgpID0+IHtcbiAgICAgIHRoaXMuYXR0ZW1wdHMgPSAwO1xuICAgICAgdGhpcy5yZXRyeWluZyA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZXZlbnRIYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGZuXSBvZiB0aGlzLmV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVjb25uZWN0KCkge1xuICAgIHRoaXMuYXR0ZW1wdHMgKz0gMTtcbiAgICB0aGlzLnJldHJ5aW5nID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmF0dGVtcHRzID4gbWF4QXR0ZW1wdHMpIHtcbiAgICAgIGVycm9yKGBUaGUgV2ViU29ja2V0IGNvdWxkIG5vdCBiZSByZWNvbm5lY3RlZC4gJHtyZWZyZXNofWApO1xuICAgICAgdGhpcy5yZXRyeWluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSAxMDAwICogdGhpcy5hdHRlbXB0cyAqKiAyO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbm5lY3QodGhpcy5hcmdzKSwgdGltZW91dCk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbLCBoYW5kbGVyXSA9IGFyZ3M7XG4gICAgdGhpcy5ldmVudEhhbmRsZXJzID0gdGhpcy5ldmVudEhhbmRsZXJzLmZpbHRlcigoWywgZm5dKSA9PiBmbiA9PT0gaGFuZGxlcik7XG4gICAgdGhpcy5zb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lciguLi5hcmdzKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgQ2xpZW50U29ja2V0IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/ClientSocket.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/client.js":
/*!****************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/client.js ***!
\****************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval("const run = (buildHash, options) => {\n const { address, client = {}, hmr, progress, secure, status } = options;\n options.firstInstance = !window.webpackPluginServe;\n window.webpackPluginServe = window.webpackPluginServe || {\n compilers: {}\n };\n window.webpackPluginServe.silent = !!client.silent;\n const { ClientSocket } = __webpack_require__(/*! ./ClientSocket */ \"./node_modules/webpack-plugin-serve/lib/client/ClientSocket.js\");\n const { replace } = __webpack_require__(/*! ./hmr */ \"./node_modules/webpack-plugin-serve/lib/client/hmr.js\");\n const { error, info, warn } = __webpack_require__(/*! ./log */ \"./node_modules/webpack-plugin-serve/lib/client/log.js\")();\n const protocol = secure ? \"wss\" : \"ws\";\n const socket = new ClientSocket(client, `${client.protocol || protocol}://${client.address || address}/wps`);\n const { compilerName } = options;\n window.webpackPluginServe.compilers[compilerName] = {};\n window.addEventListener(\"beforeunload\", () => socket.close());\n socket.addEventListener(\"message\", (message) => {\n const { action, data = {} } = JSON.parse(message.data);\n const { errors, hash = \"<?>\", warnings } = data || {};\n const shortHash = hash.slice(0, 7);\n const identifier = options.compilerName ? `(Compiler: ${options.compilerName}) ` : \"\";\n const compiler = window.webpackPluginServe.compilers[compilerName];\n const { wpsId } = data;\n switch (action) {\n case \"build\":\n compiler.done = false;\n break;\n case \"connected\":\n info(`WebSocket connected ${identifier}`);\n break;\n case \"done\":\n compiler.done = true;\n break;\n case \"problems\":\n if (data.errors.length) {\n error(`${identifier}Build ${shortHash} produced errors:\n`, errors);\n }\n if (data.warnings.length) {\n warn(`${identifier}Build ${shortHash} produced warnings:\n`, warnings);\n }\n break;\n case \"reload\":\n window.location.reload();\n break;\n case \"replace\":\n if (wpsId && wpsId === options.wpsId) {\n replace(buildHash, hash, hmr === \"refresh-on-failure\");\n }\n break;\n default:\n }\n });\n if (options.firstInstance) {\n if (progress === \"minimal\") {\n const { init } = __webpack_require__(/*! ./overlays/progress-minimal */ \"./node_modules/webpack-plugin-serve/lib/client/overlays/progress-minimal.js\");\n init(options, socket);\n } else if (progress) {\n const { init } = __webpack_require__(/*! ./overlays/progress */ \"./node_modules/webpack-plugin-serve/lib/client/overlays/progress.js\");\n init(options, socket);\n }\n if (status) {\n const { init } = __webpack_require__(/*! ./overlays/status */ \"./node_modules/webpack-plugin-serve/lib/client/overlays/status.js\");\n init(options, socket);\n }\n if (true) {\n info(\"Hot Module Replacement is active\");\n if (options.liveReload) {\n info(\"Live Reload taking precedence over Hot Module Replacement\");\n }\n } else {}\n if (false) {}\n }\n};\nmodule.exports = { run };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9jbGllbnQuanMuanMiLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxNQUFNLENBQUMsV0FBVyxZQUFZO0FBQ2xDLFFBQU0sRUFBRSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEtBQUssVUFBVSxRQUFRLE9BQU8sSUFBSTtBQUVoRSxVQUFRLGdCQUFnQixDQUFDLE9BQU87QUFFaEMsU0FBTyxxQkFBcUIsT0FBTyxzQkFBc0I7QUFBQSxJQUN2RCxXQUFXLENBQUM7QUFBQSxFQUNkO0FBQ0EsU0FBTyxtQkFBbUIsU0FBUyxDQUFDLENBQUMsT0FBTztBQUU1QyxRQUFNLEVBQUUsYUFBYSxJQUFJLG1CQUFPLENBQUMsc0ZBQWdCO0FBQ2pELFFBQU0sRUFBRSxRQUFRLElBQUksbUJBQU8sQ0FBQyxvRUFBTztBQUNuQyxRQUFNLEVBQUUsT0FBTyxNQUFNLEtBQUssSUFBSSxtQkFBTyxDQUFDLG9FQUFPLEVBQUU7QUFFL0MsUUFBTSxXQUFXLFNBQVMsUUFBUTtBQUNsQyxRQUFNLFNBQVMsSUFBSSxhQUFhLFFBQVEsR0FBRyxPQUFPLFlBQVksY0FBYyxPQUFPLFdBQVcsYUFBYTtBQUUzRyxRQUFNLEVBQUUsYUFBYSxJQUFJO0FBRXpCLFNBQU8sbUJBQW1CLFVBQVUsZ0JBQWdCLENBQUM7QUFHckQsU0FBTyxpQkFBaUIsZ0JBQWdCLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFFNUQsU0FBTyxpQkFBaUIsV0FBVyxDQUFDLFlBQVk7QUFDOUMsVUFBTSxFQUFFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSSxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBQ3JELFVBQU0sRUFBRSxRQUFRLE9BQU8sT0FBTyxTQUFTLElBQUksUUFBUSxDQUFDO0FBQ3BELFVBQU0sWUFBWSxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQ2pDLFVBQU0sYUFBYSxRQUFRLGVBQWUsY0FBYyxRQUFRLG1CQUFtQjtBQUNuRixVQUFNLFdBQVcsT0FBTyxtQkFBbUIsVUFBVTtBQUNyRCxVQUFNLEVBQUUsTUFBTSxJQUFJO0FBRWxCLFlBQVE7QUFBQSxXQUNEO0FBQ0gsaUJBQVMsT0FBTztBQUNoQjtBQUFBLFdBQ0c7QUFDSCxhQUFLLHVCQUF1QixZQUFZO0FBQ3hDO0FBQUEsV0FDRztBQUNILGlCQUFTLE9BQU87QUFDaEI7QUFBQSxXQUNHO0FBQ0gsWUFBSSxLQUFLLE9BQU8sUUFBUTtBQUN0QixnQkFBTSxHQUFHLG1CQUFtQjtBQUFBLEdBQWdDLE1BQU07QUFBQSxRQUNwRTtBQUNBLFlBQUksS0FBSyxTQUFTLFFBQVE7QUFDeEIsZUFBSyxHQUFHLG1CQUFtQjtBQUFBLEdBQWtDLFFBQVE7QUFBQSxRQUN2RTtBQUNBO0FBQUEsV0FDRztBQUNILGVBQU8sU0FBUyxPQUFPO0FBQ3ZCO0FBQUEsV0FDRztBQUlILFlBQUksU0FBUyxVQUFVLFFBQVEsT0FBTztBQUNwQyxrQkFBUSxXQUFXLE1BQU0sUUFBUSxvQkFBb0I7QUFBQSxRQUN2RDtBQUNBO0FBQUE7QUFBQTtBQUFBLEVBR04sQ0FBQztBQUVELE1BQUksUUFBUSxlQUFlO0FBQ3pCLFFBQUksYUFBYSxXQUFXO0FBQzFCLFlBQU0sRUFBRSxLQUFLLElBQUksbUJBQU8sQ0FBQyxnSEFBNkI7QUFDdEQsV0FBSyxTQUFTLE1BQU07QUFBQSxJQUN0QixXQUFXLFVBQVU7QUFDbkIsWUFBTSxFQUFFLEtBQUssSUFBSSxtQkFBTyxDQUFDLGdHQUFxQjtBQUM5QyxXQUFLLFNBQVMsTUFBTTtBQUFBLElBQ3RCO0FBRUEsUUFBSSxRQUFRO0FBQ1YsWUFBTSxFQUFFLEtBQUssSUFBSSxtQkFBTyxDQUFDLDRGQUFtQjtBQUM1QyxXQUFLLFNBQVMsTUFBTTtBQUFBLElBQ3RCO0FBRUEsUUFBSSxJQUFVLEVBQUU7QUFDZCxXQUFLLGtDQUFrQztBQUV2QyxVQUFJLFFBQVEsWUFBWTtBQUN0QixhQUFLLDJEQUEyRDtBQUFBLE1BQ2xFO0FBQUEsSUFDRixPQUFPLEVBRU47QUFFRCxRQUFJLEtBQWlDLEVBQUUsRUFFdEM7QUFBRCxFQUNGO0FBQ0Y7QUFFQSxPQUFPLFVBQVUsRUFBRSxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9jbGllbnQuanM/NTcwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgwqkgMjAxOCBBbmRyZXcgUG93ZWxsXG5cbiAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGlzIFNvdXJjZSBDb2RlIEZvcm0uXG4qL1xuLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbmNvbnN0IHJ1biA9IChidWlsZEhhc2gsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBhZGRyZXNzLCBjbGllbnQgPSB7fSwgaG1yLCBwcm9ncmVzcywgc2VjdXJlLCBzdGF0dXMgfSA9IG9wdGlvbnM7XG5cbiAgb3B0aW9ucy5maXJzdEluc3RhbmNlID0gIXdpbmRvdy53ZWJwYWNrUGx1Z2luU2VydmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblxuICB3aW5kb3cud2VicGFja1BsdWdpblNlcnZlID0gd2luZG93LndlYnBhY2tQbHVnaW5TZXJ2ZSB8fCB7XG4gICAgY29tcGlsZXJzOiB7fVxuICB9O1xuICB3aW5kb3cud2VicGFja1BsdWdpblNlcnZlLnNpbGVudCA9ICEhY2xpZW50LnNpbGVudDtcblxuICBjb25zdCB7IENsaWVudFNvY2tldCB9ID0gcmVxdWlyZSgnLi9DbGllbnRTb2NrZXQnKTtcbiAgY29uc3QgeyByZXBsYWNlIH0gPSByZXF1aXJlKCcuL2htcicpO1xuICBjb25zdCB7IGVycm9yLCBpbmZvLCB3YXJuIH0gPSByZXF1aXJlKCcuL2xvZycpKCk7XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzZWN1cmUgPyAnd3NzJyA6ICd3cyc7XG4gIGNvbnN0IHNvY2tldCA9IG5ldyBDbGllbnRTb2NrZXQoY2xpZW50LCBgJHtjbGllbnQucHJvdG9jb2wgfHwgcHJvdG9jb2x9Oi8vJHtjbGllbnQuYWRkcmVzcyB8fCBhZGRyZXNzfS93cHNgKTtcblxuICBjb25zdCB7IGNvbXBpbGVyTmFtZSB9ID0gb3B0aW9ucztcblxuICB3aW5kb3cud2VicGFja1BsdWdpblNlcnZlLmNvbXBpbGVyc1tjb21waWxlck5hbWVdID0ge307XG5cbiAgLy8gcHJldmVudHMgRUNPTk5SRVNFVCBlcnJvcnMgb24gdGhlIHNlcnZlclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKCkgPT4gc29ja2V0LmNsb3NlKCkpO1xuXG4gIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKG1lc3NhZ2UpID0+IHtcbiAgICBjb25zdCB7IGFjdGlvbiwgZGF0YSA9IHt9IH0gPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSk7XG4gICAgY29uc3QgeyBlcnJvcnMsIGhhc2ggPSAnPD8+Jywgd2FybmluZ3MgfSA9IGRhdGEgfHwge307XG4gICAgY29uc3Qgc2hvcnRIYXNoID0gaGFzaC5zbGljZSgwLCA3KTtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gb3B0aW9ucy5jb21waWxlck5hbWUgPyBgKENvbXBpbGVyOiAke29wdGlvbnMuY29tcGlsZXJOYW1lfSkgYCA6ICcnO1xuICAgIGNvbnN0IGNvbXBpbGVyID0gd2luZG93LndlYnBhY2tQbHVnaW5TZXJ2ZS5jb21waWxlcnNbY29tcGlsZXJOYW1lXTtcbiAgICBjb25zdCB7IHdwc0lkIH0gPSBkYXRhO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2J1aWxkJzpcbiAgICAgICAgY29tcGlsZXIuZG9uZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgIGluZm8oYFdlYlNvY2tldCBjb25uZWN0ZWQgJHtpZGVudGlmaWVyfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICBjb21waWxlci5kb25lID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcm9ibGVtcyc6XG4gICAgICAgIGlmIChkYXRhLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBlcnJvcihgJHtpZGVudGlmaWVyfUJ1aWxkICR7c2hvcnRIYXNofSBwcm9kdWNlZCBlcnJvcnM6XFxuYCwgZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS53YXJuaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgICB3YXJuKGAke2lkZW50aWZpZXJ9QnVpbGQgJHtzaG9ydEhhc2h9IHByb2R1Y2VkIHdhcm5pbmdzOlxcbmAsIHdhcm5pbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbG9hZCc6XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXBsYWNlJzpcbiAgICAgICAgLy8gYWN0aW9ucyB3aXRoIGEgd3BzSWQgaW4gdG93IGluZGljYXRlIGFjdGlvbnMgdGhhdCBzaG91bGQgb25seSBiZSBleGVjdXRlZCB3aGVuIHRoZSB3cHNJZCBzZW50XG4gICAgICAgIC8vIG1hdGNoZXMgdGhlIHdwc0lkIHNldCBpbiBvcHRpb25zLiB0aGlzIGlzIGhvdyB3ZSBjYW4gaWRlbnRpZnkgbXVsdGlwbGUgY29tcGlsZXJzIGluIHRoZVxuICAgICAgICAvLyBjbGllbnQuXG4gICAgICAgIGlmICh3cHNJZCAmJiB3cHNJZCA9PT0gb3B0aW9ucy53cHNJZCkge1xuICAgICAgICAgIHJlcGxhY2UoYnVpbGRIYXNoLCBoYXNoLCBobXIgPT09ICdyZWZyZXNoLW9uLWZhaWx1cmUnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9KTtcblxuICBpZiAob3B0aW9ucy5maXJzdEluc3RhbmNlKSB7XG4gICAgaWYgKHByb2dyZXNzID09PSAnbWluaW1hbCcpIHtcbiAgICAgIGNvbnN0IHsgaW5pdCB9ID0gcmVxdWlyZSgnLi9vdmVybGF5cy9wcm9ncmVzcy1taW5pbWFsJyk7XG4gICAgICBpbml0KG9wdGlvbnMsIHNvY2tldCk7XG4gICAgfSBlbHNlIGlmIChwcm9ncmVzcykge1xuICAgICAgY29uc3QgeyBpbml0IH0gPSByZXF1aXJlKCcuL292ZXJsYXlzL3Byb2dyZXNzJyk7XG4gICAgICBpbml0KG9wdGlvbnMsIHNvY2tldCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgY29uc3QgeyBpbml0IH0gPSByZXF1aXJlKCcuL292ZXJsYXlzL3N0YXR1cycpO1xuICAgICAgaW5pdChvcHRpb25zLCBzb2NrZXQpO1xuICAgIH1cblxuICAgIGlmIChtb2R1bGUuaG90KSB7XG4gICAgICBpbmZvKCdIb3QgTW9kdWxlIFJlcGxhY2VtZW50IGlzIGFjdGl2ZScpO1xuXG4gICAgICBpZiAob3B0aW9ucy5saXZlUmVsb2FkKSB7XG4gICAgICAgIGluZm8oJ0xpdmUgUmVsb2FkIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgSG90IE1vZHVsZSBSZXBsYWNlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuKCdIb3QgTW9kdWxlIFJlcGxhY2VtZW50IGlzIGluYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKCFtb2R1bGUuaG90ICYmIG9wdGlvbnMubGl2ZVJlbG9hZCkge1xuICAgICAgaW5mbygnTGl2ZSBSZWxvYWQgaXMgYWN0aXZlJyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgcnVuIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/client.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/hmr.js":
/*!*************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/hmr.js ***!
\*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\nconst { error, info, refresh, warn } = __webpack_require__(/*! ./log */ \"./node_modules/webpack-plugin-serve/lib/client/log.js\")();\nlet latest = true;\nconst hmr = (onFailure) => {\n return {\n onUnaccepted(data) {\n onFailure();\n warn(\"Change in unaccepted module(s):\\n\", data);\n warn(data);\n },\n onDeclined(data) {\n onFailure();\n warn(\"Change in declined module(s):\\n\", data);\n },\n onErrored(data) {\n onFailure();\n error(\"Error in module(s):\\n\", data);\n }\n };\n};\nconst replace = (buildHash, hash, refreshOnFailure) => __async(this, null, function* () {\n const { apply, check, status } = module.hot;\n if (hash) {\n latest = hash.includes(buildHash);\n }\n if (!latest) {\n const hmrStatus = status();\n if (hmrStatus === \"abort\" || hmrStatus === \"fail\") {\n warn(`An HMR update was triggered, but ${hmrStatus}ed. ${refresh}`);\n return;\n }\n let modules;\n try {\n modules = yield check(false);\n } catch (e) {\n return;\n }\n if (!modules) {\n warn(`No modules found for replacement. ${refresh}`);\n return;\n }\n modules = yield apply(\n hmr(\n refreshOnFailure ? () => {\n if (refreshOnFailure) {\n location.reload();\n }\n } : () => {\n }\n )\n );\n if (modules) {\n latest = true;\n info(`Build ${hash.slice(0, 7)} replaced:\n`, modules);\n }\n }\n});\nmodule.exports = { replace };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9obXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSxNQUFNLEVBQUUsT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLG1CQUFPLENBQUMsb0VBQU8sRUFBRTtBQUV4RCxJQUFJLFNBQVM7QUFFYixNQUFNLE1BQU0sQ0FBQyxjQUFjO0FBQ3pCLFNBQU87QUFBQSxJQUNMLGFBQWEsTUFBTTtBQUNqQixnQkFBVTtBQUNWLFdBQUsscUNBQXFDLElBQUk7QUFDOUMsV0FBSyxJQUFJO0FBQUEsSUFDWDtBQUFBLElBQ0EsV0FBVyxNQUFNO0FBQ2YsZ0JBQVU7QUFDVixXQUFLLG1DQUFtQyxJQUFJO0FBQUEsSUFDOUM7QUFBQSxJQUNBLFVBQVUsTUFBTTtBQUNkLGdCQUFVO0FBQ1YsWUFBTSx5QkFBeUIsSUFBSTtBQUFBLElBQ3JDO0FBQUEsRUFDRjtBQUNGO0FBRUEsTUFBTSxVQUFVLENBQU8sV0FBVyxNQUFNLHFCQUFxQjtBQUMzRCxRQUFNLEVBQUUsT0FBTyxPQUFPLE9BQU8sSUFBSSxVQUFVO0FBRTNDLE1BQUksTUFBTTtBQUVSLGFBQVMsS0FBSyxTQUFTLFNBQVM7QUFBQSxFQUNsQztBQUVBLE1BQUksQ0FBQyxRQUFRO0FBQ1gsVUFBTSxZQUFZLE9BQU87QUFFekIsUUFBSSxjQUFjLFdBQVcsY0FBYyxRQUFRO0FBQ2pELFdBQUssb0NBQW9DLGdCQUFnQixTQUFTO0FBQ2xFO0FBQUEsSUFDRjtBQUVBLFFBQUk7QUFFSixRQUFJO0FBQ0YsZ0JBQVUsTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUM3QixTQUFTLEdBQVA7QUFJQTtBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsU0FBUztBQUNaLFdBQUsscUNBQXFDLFNBQVM7QUFDbkQ7QUFBQSxJQUNGO0FBRUEsY0FBVSxNQUFNO0FBQUEsTUFDZDtBQUFBLFFBQ0UsbUJBQ0ksTUFBTTtBQUNKLGNBQUksa0JBQWtCO0FBRXBCLHFCQUFTLE9BQU87QUFBQSxVQUNsQjtBQUFBLFFBQ0YsSUFDQSxNQUFNO0FBQUEsUUFBQztBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBRUEsUUFBSSxTQUFTO0FBQ1gsZUFBUztBQUNULFdBQUssU0FBUyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQUEsR0FBaUIsT0FBTztBQUFBLElBQ3ZEO0FBQUEsRUFDRjtBQUNGO0FBRUEsT0FBTyxVQUFVLEVBQUUsUUFBUSIsInNvdXJjZXMiOlsid2VicGFjazovL215c2VlbGlhLy4vbm9kZV9tb2R1bGVzL3dlYnBhY2stcGx1Z2luLXNlcnZlL2xpYi9jbGllbnQvaG1yLmpzPzZhY2QiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IMKpIDIwMTggQW5kcmV3IFBvd2VsbFxuXG4gIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xuICBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhpcyBTb3VyY2UgQ29kZSBGb3JtLlxuKi9cbmNvbnN0IHsgZXJyb3IsIGluZm8sIHJlZnJlc2gsIHdhcm4gfSA9IHJlcXVpcmUoJy4vbG9nJykoKTtcblxubGV0IGxhdGVzdCA9IHRydWU7XG5cbmNvbnN0IGhtciA9IChvbkZhaWx1cmUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBvblVuYWNjZXB0ZWQoZGF0YSkge1xuICAgICAgb25GYWlsdXJlKCk7XG4gICAgICB3YXJuKCdDaGFuZ2UgaW4gdW5hY2NlcHRlZCBtb2R1bGUocyk6XFxuJywgZGF0YSk7XG4gICAgICB3YXJuKGRhdGEpO1xuICAgIH0sXG4gICAgb25EZWNsaW5lZChkYXRhKSB7XG4gICAgICBvbkZhaWx1cmUoKTtcbiAgICAgIHdhcm4oJ0NoYW5nZSBpbiBkZWNsaW5lZCBtb2R1bGUocyk6XFxuJywgZGF0YSk7XG4gICAgfSxcbiAgICBvbkVycm9yZWQoZGF0YSkge1xuICAgICAgb25GYWlsdXJlKCk7XG4gICAgICBlcnJvcignRXJyb3IgaW4gbW9kdWxlKHMpOlxcbicsIGRhdGEpO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHJlcGxhY2UgPSBhc3luYyAoYnVpbGRIYXNoLCBoYXNoLCByZWZyZXNoT25GYWlsdXJlKSA9PiB7XG4gIGNvbnN0IHsgYXBwbHksIGNoZWNrLCBzdGF0dXMgfSA9IG1vZHVsZS5ob3Q7XG5cbiAgaWYgKGhhc2gpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBsYXRlc3QgPSBoYXNoLmluY2x1ZGVzKGJ1aWxkSGFzaCk7XG4gIH1cblxuICBpZiAoIWxhdGVzdCkge1xuICAgIGNvbnN0IGhtclN0YXR1cyA9IHN0YXR1cygpO1xuXG4gICAgaWYgKGhtclN0YXR1cyA9PT0gJ2Fib3J0JyB8fCBobXJTdGF0dXMgPT09ICdmYWlsJykge1xuICAgICAgd2FybihgQW4gSE1SIHVwZGF0ZSB3YXMgdHJpZ2dlcmVkLCBidXQgJHtobXJTdGF0dXN9ZWQuICR7cmVmcmVzaH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbW9kdWxlcztcblxuICAgIHRyeSB7XG4gICAgICBtb2R1bGVzID0gYXdhaXQgY2hlY2soZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vb3AuIHRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBhIE11bHRpQ29tcGlsZXIgaGFzIG1vcmUgdGhhbiBvbmUgY29tcGlsZXIgdGhhdCBpbmNsdWRlc1xuICAgICAgLy8gdGhpcyBzY3JpcHQsIGFuZCBhbiB1cGRhdGUgaGFwcGVucyB3aXRoIGEgaGFzaCB0aGF0IGlzbid0IHBhcnQgb2YgdGhlIGNvbXBpbGVyL21vZHVsZSB0aGlzXG4gICAgICAvLyBpbnN0YW5jZSB3YXMgbG9hZGVkIGZvci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW1vZHVsZXMpIHtcbiAgICAgIHdhcm4oYE5vIG1vZHVsZXMgZm91bmQgZm9yIHJlcGxhY2VtZW50LiAke3JlZnJlc2h9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kdWxlcyA9IGF3YWl0IGFwcGx5KFxuICAgICAgaG1yKFxuICAgICAgICByZWZyZXNoT25GYWlsdXJlXG4gICAgICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZWZyZXNoT25GYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6ICgpID0+IHt9XG4gICAgICApXG4gICAgKTtcblxuICAgIGlmIChtb2R1bGVzKSB7XG4gICAgICBsYXRlc3QgPSB0cnVlO1xuICAgICAgaW5mbyhgQnVpbGQgJHtoYXNoLnNsaWNlKDAsIDcpfSByZXBsYWNlZDpcXG5gLCBtb2R1bGVzKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0geyByZXBsYWNlIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/hmr.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/log.js":
/*!*************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/log.js ***!
\*************************************************************/
/***/ ((module) => {
eval("const { error, info, warn } = console;\nconst log = {\n error: error.bind(console, \"\\u2B21 wps:\"),\n info: info.bind(console, \"\\u2B21 wps:\"),\n refresh: \"Please refresh the page\",\n warn: warn.bind(console, \"\\u2B21 wps:\")\n};\nconst noop = () => {\n};\nconst silent = {\n error: noop,\n info: noop,\n warn: noop\n};\nmodule.exports = () => window.webpackPluginServe.silent ? silent : log;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL25vZGVfbW9kdWxlcy93ZWJwYWNrLXBsdWdpbi1zZXJ2ZS9saWIvY2xpZW50L2xvZy5qcz8yMWI2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIENvcHlyaWdodCDCqSAyMDE4IEFuZHJldyBQb3dlbGxcblxuICBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcbiAgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoaXMgU291cmNlIENvZGUgRm9ybS5cbiovXG5jb25zdCB7IGVycm9yLCBpbmZvLCB3YXJuIH0gPSBjb25zb2xlO1xuY29uc3QgbG9nID0ge1xuICBlcnJvcjogZXJyb3IuYmluZChjb25zb2xlLCAn4qyhIHdwczonKSxcbiAgaW5mbzogaW5mby5iaW5kKGNvbnNvbGUsICfirKEgd3BzOicpLFxuICByZWZyZXNoOiAnUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UnLFxuICB3YXJuOiB3YXJuLmJpbmQoY29uc29sZSwgJ+KsoSB3cHM6Jylcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5jb25zdCBzaWxlbnQgPSB7XG4gIGVycm9yOiBub29wLFxuICBpbmZvOiBub29wLFxuICB3YXJuOiBub29wXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9ICgpID0+ICh3aW5kb3cud2VicGFja1BsdWdpblNlcnZlLnNpbGVudCA/IHNpbGVudCA6IGxvZyk7XG4iXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sRUFBRSxPQUFPLE1BQU0sS0FBSyxJQUFJO0FBQzlCLE1BQU0sTUFBTTtBQUFBLEVBQ1YsT0FBTyxNQUFNLEtBQUssU0FBUyxhQUFRO0FBQUEsRUFDbkMsTUFBTSxLQUFLLEtBQUssU0FBUyxhQUFRO0FBQUEsRUFDakMsU0FBUztBQUFBLEVBQ1QsTUFBTSxLQUFLLEtBQUssU0FBUyxhQUFRO0FBQ25DO0FBQ0EsTUFBTSxPQUFPLE1BQU07QUFBQztBQUNwQixNQUFNLFNBQVM7QUFBQSxFQUNiLE9BQU87QUFBQSxFQUNQLE1BQU07QUFBQSxFQUNOLE1BQU07QUFDUjtBQUVBLE9BQU8sVUFBVSxNQUFPLE9BQU8sbUJBQW1CLFNBQVMsU0FBUzsiLCJuYW1lcyI6W10sImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLXBsdWdpbi1zZXJ2ZS9saWIvY2xpZW50L2xvZy5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/log.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/overlays/progress-minimal.js":
/*!***********************************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/overlays/progress-minimal.js ***!
\***********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval("const { addCss, addHtml } = __webpack_require__(/*! ./util */ \"./node_modules/webpack-plugin-serve/lib/client/overlays/util.js\");\nconst ns = \"wps-progress-minimal\";\nconst html = `\n<div id=\"${ns}\" class=\"${ns}-hidden\">\n <div id=\"${ns}-bar\"></div>\n</div>\n`;\nconst css = `\n#${ns} {\n position: fixed;\n top: 0;\n left: 0;\n height: 4px;\n width: 100vw;\n z-index: 2147483645;\n}\n\n#${ns}-bar {\n width: 0%;\n height: 4px;\n background-color: rgb(186, 223, 172);\n}\n\n@keyframes ${ns}-fade {\n\t0% {\n\t\topacity: 1;\n\t}\n\t100% {\n\t\topacity: 0;\n\t}\n}\n\n.${ns}-disappear {\n animation: ${ns}-fade .3s;\n animation-fill-mode: forwards;\n animation-delay: .5s;\n}\n\n.${ns}-hidden {\n display: none;\n}\n`;\nlet hideOnPageVisible = false;\nconst update = (percent) => {\n const bar = document.querySelector(`#${ns}-bar`);\n bar.style.width = `${percent}%`;\n};\nconst reset = (wrapper) => {\n wrapper.classList.add(`${ns}-disappear`);\n};\nconst init = (options, socket) => {\n if (options.firstInstance) {\n document.addEventListener(\"DOMContentLoaded\", () => {\n addCss(css);\n addHtml(html);\n const wrapper = document.querySelector(`#${ns}`);\n wrapper.addEventListener(\"animationend\", () => {\n update(0);\n wrapper.classList.add(`${ns}-hidden`);\n });\n });\n document.addEventListener(\"visibilitychange\", () => {\n if (!document.hidden && hideOnPageVisible) {\n const wrapper = document.querySelector(`#${ns}`);\n reset(wrapper);\n hideOnPageVisible = false;\n }\n });\n }\n socket.addEventListener(\"message\", (message) => {\n const { action, data } = JSON.parse(message.data);\n if (action !== \"progress\") {\n return;\n }\n const percent = Math.floor(data.percent * 100);\n const wrapper = document.querySelector(`#${ns}`);\n if (wrapper) {\n wrapper.classList.remove(`${ns}-hidden`, `${ns}-disappear`);\n }\n if (data.percent === 1) {\n if (document.hidden) {\n hideOnPageVisible = true;\n } else {\n reset(wrapper);\n }\n } else {\n hideOnPageVisible = false;\n }\n update(percent);\n });\n};\nmodule.exports = {\n init\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9vdmVybGF5cy9wcm9ncmVzcy1taW5pbWFsLmpzLmpzIiwibWFwcGluZ3MiOiJBQVVBLE1BQU0sRUFBRSxRQUFRLFFBQVEsSUFBSSxtQkFBTyxDQUFDLCtFQUFRO0FBRTVDLE1BQU0sS0FBSztBQUNYLE1BQU0sT0FBTztBQUFBLFdBQ0YsY0FBYztBQUFBLGFBQ1o7QUFBQTtBQUFBO0FBR2IsTUFBTSxNQUFNO0FBQUEsR0FDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBTVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FTVjtBQUFBLGVBQ1k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBS1o7QUFBQTtBQUFBO0FBQUE7QUFLSCxJQUFJLG9CQUFvQjtBQUV4QixNQUFNLFNBQVMsQ0FBQyxZQUFZO0FBQzFCLFFBQU0sTUFBTSxTQUFTLGNBQWMsSUFBSSxRQUFRO0FBQy9DLE1BQUksTUFBTSxRQUFRLEdBQUc7QUFDdkI7QUFFQSxNQUFNLFFBQVEsQ0FBQyxZQUFZO0FBQ3pCLFVBQVEsVUFBVSxJQUFJLEdBQUcsY0FBYztBQUN6QztBQUVBLE1BQU0sT0FBTyxDQUFDLFNBQVMsV0FBVztBQUNoQyxNQUFJLFFBQVEsZUFBZTtBQUN6QixhQUFTLGlCQUFpQixvQkFBb0IsTUFBTTtBQUNsRCxhQUFPLEdBQUc7QUFDVixjQUFRLElBQUk7QUFFWixZQUFNLFVBQVUsU0FBUyxjQUFjLElBQUksSUFBSTtBQUMvQyxjQUFRLGlCQUFpQixnQkFBZ0IsTUFBTTtBQUM3QyxlQUFPLENBQUM7QUFDUixnQkFBUSxVQUFVLElBQUksR0FBRyxXQUFXO0FBQUEsTUFDdEMsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELGFBQVMsaUJBQWlCLG9CQUFvQixNQUFNO0FBQ2xELFVBQUksQ0FBQyxTQUFTLFVBQVUsbUJBQW1CO0FBQ3pDLGNBQU0sVUFBVSxTQUFTLGNBQWMsSUFBSSxJQUFJO0FBQy9DLGNBQU0sT0FBTztBQUNiLDRCQUFvQjtBQUFBLE1BQ3RCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU8saUJBQWlCLFdBQVcsQ0FBQyxZQUFZO0FBQzlDLFVBQU0sRUFBRSxRQUFRLEtBQUssSUFBSSxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBRWhELFFBQUksV0FBVyxZQUFZO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxLQUFLLE1BQU0sS0FBSyxVQUFVLEdBQUc7QUFDN0MsVUFBTSxVQUFVLFNBQVMsY0FBYyxJQUFJLElBQUk7QUFFL0MsUUFBSSxTQUFTO0FBQ1gsY0FBUSxVQUFVLE9BQU8sR0FBRyxhQUFhLEdBQUcsY0FBYztBQUFBLElBQzVEO0FBRUEsUUFBSSxLQUFLLFlBQVksR0FBRztBQUN0QixVQUFJLFNBQVMsUUFBUTtBQUNuQiw0QkFBb0I7QUFBQSxNQUN0QixPQUFPO0FBQ0wsY0FBTSxPQUFPO0FBQUEsTUFDZjtBQUFBLElBQ0YsT0FBTztBQUNMLDBCQUFvQjtBQUFBLElBQ3RCO0FBRUEsV0FBTyxPQUFPO0FBQUEsRUFDaEIsQ0FBQztBQUNIO0FBRUEsT0FBTyxVQUFVO0FBQUEsRUFDZjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXlzZWVsaWEvLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9vdmVybGF5cy9wcm9ncmVzcy1taW5pbWFsLmpzPzU0MzAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IMKpIDIwMTggQW5kcmV3IFBvd2VsbCwgTWF0aGV1cyBHb27Dp2FsdmVzIGRhIFNpbHZhXG5cbiAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGlzIFNvdXJjZSBDb2RlIEZvcm0uXG4qL1xuY29uc3QgeyBhZGRDc3MsIGFkZEh0bWwgfSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBucyA9ICd3cHMtcHJvZ3Jlc3MtbWluaW1hbCc7XG5jb25zdCBodG1sID0gYFxuPGRpdiBpZD1cIiR7bnN9XCIgY2xhc3M9XCIke25zfS1oaWRkZW5cIj5cbiAgPGRpdiBpZD1cIiR7bnN9LWJhclwiPjwvZGl2PlxuPC9kaXY+XG5gO1xuY29uc3QgY3NzID0gYFxuIyR7bnN9IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogNHB4O1xuICB3aWR0aDogMTAwdnc7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDU7XG59XG5cbiMke25zfS1iYXIge1xuICB3aWR0aDogMCU7XG4gIGhlaWdodDogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTg2LCAyMjMsIDE3Mik7XG59XG5cbkBrZXlmcmFtZXMgJHtuc30tZmFkZSB7XG5cdDAlIHtcblx0XHRvcGFjaXR5OiAxO1xuXHR9XG5cdDEwMCUge1xuXHRcdG9wYWNpdHk6IDA7XG5cdH1cbn1cblxuLiR7bnN9LWRpc2FwcGVhciB7XG4gIGFuaW1hdGlvbjogJHtuc30tZmFkZSAuM3M7XG4gIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICBhbmltYXRpb24tZGVsYXk6IC41cztcbn1cblxuLiR7bnN9LWhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5gO1xuXG5sZXQgaGlkZU9uUGFnZVZpc2libGUgPSBmYWxzZTtcblxuY29uc3QgdXBkYXRlID0gKHBlcmNlbnQpID0+IHtcbiAgY29uc3QgYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9LWJhcmApO1xuICBiYXIuc3R5bGUud2lkdGggPSBgJHtwZXJjZW50fSVgO1xufTtcblxuY29uc3QgcmVzZXQgPSAod3JhcHBlcikgPT4ge1xuICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoYCR7bnN9LWRpc2FwcGVhcmApO1xufTtcblxuY29uc3QgaW5pdCA9IChvcHRpb25zLCBzb2NrZXQpID0+IHtcbiAgaWYgKG9wdGlvbnMuZmlyc3RJbnN0YW5jZSkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICBhZGRDc3MoY3NzKTtcbiAgICAgIGFkZEh0bWwoaHRtbCk7XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtuc31gKTtcbiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgKCkgPT4ge1xuICAgICAgICB1cGRhdGUoMCk7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZChgJHtuc30taGlkZGVuYCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBoaWRlT25QYWdlVmlzaWJsZSkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9YCk7XG4gICAgICAgIHJlc2V0KHdyYXBwZXIpO1xuICAgICAgICBoaWRlT25QYWdlVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAobWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aW9uLCBkYXRhIH0gPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSk7XG5cbiAgICBpZiAoYWN0aW9uICE9PSAncHJvZ3Jlc3MnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGVyY2VudCA9IE1hdGguZmxvb3IoZGF0YS5wZXJjZW50ICogMTAwKTtcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9YCk7XG5cbiAgICBpZiAod3JhcHBlcikge1xuICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKGAke25zfS1oaWRkZW5gLCBgJHtuc30tZGlzYXBwZWFyYCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucGVyY2VudCA9PT0gMSkge1xuICAgICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xuICAgICAgICBoaWRlT25QYWdlVmlzaWJsZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldCh3cmFwcGVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGlkZU9uUGFnZVZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGUocGVyY2VudCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXRcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/overlays/progress-minimal.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/overlays/progress.js":
/*!***************************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/overlays/progress.js ***!
\***************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval("const { addCss, addHtml } = __webpack_require__(/*! ./util */ \"./node_modules/webpack-plugin-serve/lib/client/overlays/util.js\");\nconst ns = \"wps-progress\";\nconst css = `\n#${ns}{\n width: 200px;\n height: 200px;\n position: fixed;\n right: 5%;\n top: 5%;\n transition: opacity .25s ease-in-out;\n z-index: 2147483645;\n}\n\n#${ns}-bg {\n fill: #282d35;\n}\n\n#${ns}-fill {\n fill: rgba(0, 0, 0, 0);\n stroke: rgb(186, 223, 172);\n stroke-dasharray: 219.99078369140625;\n stroke-dashoffset: -219.99078369140625;\n stroke-width: 10;\n transform: rotate(90deg)translate(0px, -80px);\n}\n\n#${ns}-percent {\n font-family: 'Open Sans';\n font-size: 18px;\n fill: #ffffff;\n}\n\n#${ns}-percent-value {\n dominant-baseline: middle;\n text-anchor: middle;\n}\n\n#${ns}-percent-super {\n fill: #bdc3c7;\n font-size: .45em;\n baseline-shift: 10%;\n}\n\n.${ns}-noselect {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n}\n\n@keyframes ${ns}-fade {\n\t0% {\n\t\topacity: 1;\n\t\ttransform: scale(1);\n\t\t-webkit-transform: scale(1);\n\t}\n\t100% {\n\t\topacity: 0;\n\t\ttransform: scale(0);\n\t\t-webkit-transform: scale(0);\n\t}\n}\n\n.${ns}-disappear {\n animation: ${ns}-fade .3s;\n animation-fill-mode:forwards;\n animation-delay: .5s;\n}\n\n.${ns}-hidden {\n display: none;\n}\n\n/* Put google web font at the end, or you'll see FOUC in Firefox */\n@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700');\n`;\nconst html = `\n<svg id=\"${ns}\" class=\"${ns}-noselect ${ns}-hidden\" x=\"0px\" y=\"0px\" viewBox=\"0 0 80 80\">\n <circle id=\"${ns}-bg\" cx=\"50%\" cy=\"50%\" r=\"35\"></circle>\n <path id=\"${ns}-fill\" d=\"M5,40a35,35 0 1,0 70,0a35,35 0 1,0 -70,0\" />\n <text id=\"${ns}-percent\" x=\"50%\" y=\"51%\"><tspan id=\"${ns}-percent-value\">0</tspan><tspan id=\"${ns}-percent-super\">%</tspan></text>\n</svg>\n`;\nlet hideOnPageVisible = false;\nconst update = (percent) => {\n const max = -219.99078369140625;\n const value = document.querySelector(`#${ns}-percent-value`);\n const track = document.querySelector(`#${ns}-fill`);\n const offset = (100 - percent) / 100 * max;\n track.setAttribute(\"style\", `stroke-dashoffset: ${offset}`);\n value.innerHTML = percent.toString();\n};\nconst reset = (svg) => {\n svg.classList.add(`${ns}-disappear`);\n};\nconst init = (options, socket) => {\n if (options.firstInstance) {\n document.addEventListener(\"DOMContentLoaded\", () => {\n addCss(css);\n addHtml(html);\n const svg = document.querySelector(`#${ns}`);\n svg.addEventListener(\"animationend\", () => {\n update(0);\n svg.classList.add(`${ns}-hidden`);\n });\n });\n document.addEventListener(\"visibilitychange\", () => {\n if (!document.hidden && hideOnPageVisible) {\n const svg = document.querySelector(`#${ns}`);\n reset(svg);\n hideOnPageVisible = false;\n }\n });\n }\n socket.addEventListener(\"message\", (message) => {\n const { action, data } = JSON.parse(message.data);\n if (action !== \"progress\") {\n return;\n }\n const percent = Math.floor(data.percent * 100);\n const svg = document.querySelector(`#${ns}`);\n if (!svg) {\n return;\n }\n svg.classList.remove(`${ns}-disappear`, `${ns}-hidden`);\n if (data.percent === 1) {\n if (document.hidden) {\n hideOnPageVisible = true;\n } else {\n reset(svg);\n }\n } else {\n hideOnPageVisible = false;\n }\n update(percent);\n });\n};\nmodule.exports = { init };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9vdmVybGF5cy9wcm9ncmVzcy5qcy5qcyIsIm1hcHBpbmdzIjoiQUFVQSxNQUFNLEVBQUUsUUFBUSxRQUFRLElBQUksbUJBQU8sQ0FBQywrRUFBUTtBQUU1QyxNQUFNLEtBQUs7QUFDWCxNQUFNLE1BQU07QUFBQSxHQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FVQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBTUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQVVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FhVjtBQUFBLGVBQ1k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBS1o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRSCxNQUFNLE9BQU87QUFBQSxXQUNGLGNBQWMsZUFBZTtBQUFBLGdCQUN4QjtBQUFBLGNBQ0Y7QUFBQSxjQUNBLDBDQUEwQyx5Q0FBeUM7QUFBQTtBQUFBO0FBSWpHLElBQUksb0JBQW9CO0FBRXhCLE1BQU0sU0FBUyxDQUFDLFlBQVk7QUFDMUIsUUFBTSxNQUFNO0FBQ1osUUFBTSxRQUFRLFNBQVMsY0FBYyxJQUFJLGtCQUFrQjtBQUMzRCxRQUFNLFFBQVEsU0FBUyxjQUFjLElBQUksU0FBUztBQUNsRCxRQUFNLFVBQVcsTUFBTSxXQUFXLE1BQU87QUFFekMsUUFBTSxhQUFhLFNBQVMsc0JBQXNCLFFBQVE7QUFDMUQsUUFBTSxZQUFZLFFBQVEsU0FBUztBQUNyQztBQUVBLE1BQU0sUUFBUSxDQUFDLFFBQVE7QUFDckIsTUFBSSxVQUFVLElBQUksR0FBRyxjQUFjO0FBQ3JDO0FBRUEsTUFBTSxPQUFPLENBQUMsU0FBUyxXQUFXO0FBQ2hDLE1BQUksUUFBUSxlQUFlO0FBQ3pCLGFBQVMsaUJBQWlCLG9CQUFvQixNQUFNO0FBQ2xELGFBQU8sR0FBRztBQUNWLGNBQVEsSUFBSTtBQUdaLFlBQU0sTUFBTSxTQUFTLGNBQWMsSUFBSSxJQUFJO0FBQzNDLFVBQUksaUJBQWlCLGdCQUFnQixNQUFNO0FBQ3pDLGVBQU8sQ0FBQztBQUNSLFlBQUksVUFBVSxJQUFJLEdBQUcsV0FBVztBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxhQUFTLGlCQUFpQixvQkFBb0IsTUFBTTtBQUNsRCxVQUFJLENBQUMsU0FBUyxVQUFVLG1CQUFtQjtBQUN6QyxjQUFNLE1BQU0sU0FBUyxjQUFjLElBQUksSUFBSTtBQUMzQyxjQUFNLEdBQUc7QUFDVCw0QkFBb0I7QUFBQSxNQUN0QjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPLGlCQUFpQixXQUFXLENBQUMsWUFBWTtBQUM5QyxVQUFNLEVBQUUsUUFBUSxLQUFLLElBQUksS0FBSyxNQUFNLFFBQVEsSUFBSTtBQUVoRCxRQUFJLFdBQVcsWUFBWTtBQUN6QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsS0FBSyxNQUFNLEtBQUssVUFBVSxHQUFHO0FBQzdDLFVBQU0sTUFBTSxTQUFTLGNBQWMsSUFBSSxJQUFJO0FBRTNDLFFBQUksQ0FBQyxLQUFLO0FBQ1I7QUFBQSxJQUNGO0FBR0EsUUFBSSxVQUFVLE9BQU8sR0FBRyxnQkFBZ0IsR0FBRyxXQUFXO0FBRXRELFFBQUksS0FBSyxZQUFZLEdBQUc7QUFDdEIsVUFBSSxTQUFTLFFBQVE7QUFDbkIsNEJBQW9CO0FBQUEsTUFDdEIsT0FBTztBQUNMLGNBQU0sR0FBRztBQUFBLE1BQ1g7QUFBQSxJQUNGLE9BQU87QUFDTCwwQkFBb0I7QUFBQSxJQUN0QjtBQUVBLFdBQU8sT0FBTztBQUFBLEVBQ2hCLENBQUM7QUFDSDtBQUVBLE9BQU8sVUFBVSxFQUFFLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL25vZGVfbW9kdWxlcy93ZWJwYWNrLXBsdWdpbi1zZXJ2ZS9saWIvY2xpZW50L292ZXJsYXlzL3Byb2dyZXNzLmpzP2E1NGUiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IMKpIDIwMTggQW5kcmV3IFBvd2VsbCwgTWF0aGV1cyBHb27Dp2FsdmVzIGRhIFNpbHZhXG5cbiAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGlzIFNvdXJjZSBDb2RlIEZvcm0uXG4qL1xuY29uc3QgeyBhZGRDc3MsIGFkZEh0bWwgfSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBucyA9ICd3cHMtcHJvZ3Jlc3MnO1xuY29uc3QgY3NzID0gYFxuIyR7bnN9e1xuICB3aWR0aDogMjAwcHg7XG4gIGhlaWdodDogMjAwcHg7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDUlO1xuICB0b3A6IDUlO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4yNXMgZWFzZS1pbi1vdXQ7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDU7XG59XG5cbiMke25zfS1iZyB7XG4gIGZpbGw6ICMyODJkMzU7XG59XG5cbiMke25zfS1maWxsIHtcbiAgZmlsbDogcmdiYSgwLCAwLCAwLCAwKTtcbiAgc3Ryb2tlOiByZ2IoMTg2LCAyMjMsIDE3Mik7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDIxOS45OTA3ODM2OTE0MDYyNTtcbiAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0yMTkuOTkwNzgzNjkxNDA2MjU7XG4gIHN0cm9rZS13aWR0aDogMTA7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKXRyYW5zbGF0ZSgwcHgsIC04MHB4KTtcbn1cblxuIyR7bnN9LXBlcmNlbnQge1xuICBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZmlsbDogI2ZmZmZmZjtcbn1cblxuIyR7bnN9LXBlcmNlbnQtdmFsdWUge1xuICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlO1xuICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xufVxuXG4jJHtuc30tcGVyY2VudC1zdXBlciB7XG4gIGZpbGw6ICNiZGMzYzc7XG4gIGZvbnQtc2l6ZTogLjQ1ZW07XG4gIGJhc2VsaW5lLXNoaWZ0OiAxMCU7XG59XG5cbi4ke25zfS1ub3NlbGVjdCB7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbkBrZXlmcmFtZXMgJHtuc30tZmFkZSB7XG5cdDAlIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdHRyYW5zZm9ybTogc2NhbGUoMSk7XG5cdFx0LXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuXHR9XG5cdDEwMCUge1xuXHRcdG9wYWNpdHk6IDA7XG5cdFx0dHJhbnNmb3JtOiBzY2FsZSgwKTtcblx0XHQtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XG5cdH1cbn1cblxuLiR7bnN9LWRpc2FwcGVhciB7XG4gIGFuaW1hdGlvbjogJHtuc30tZmFkZSAuM3M7XG4gIGFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7XG4gIGFuaW1hdGlvbi1kZWxheTogLjVzO1xufVxuXG4uJHtuc30taGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogUHV0IGdvb2dsZSB3ZWIgZm9udCBhdCB0aGUgZW5kLCBvciB5b3UnbGwgc2VlIEZPVUMgaW4gRmlyZWZveCAqL1xuQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6NDAwLDcwMCcpO1xuYDtcblxuY29uc3QgaHRtbCA9IGBcbjxzdmcgaWQ9XCIke25zfVwiIGNsYXNzPVwiJHtuc30tbm9zZWxlY3QgJHtuc30taGlkZGVuXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDgwIDgwXCI+XG4gIDxjaXJjbGUgaWQ9XCIke25zfS1iZ1wiIGN4PVwiNTAlXCIgY3k9XCI1MCVcIiByPVwiMzVcIj48L2NpcmNsZT5cbiAgPHBhdGggaWQ9XCIke25zfS1maWxsXCIgZD1cIk01LDQwYTM1LDM1IDAgMSwwIDcwLDBhMzUsMzUgMCAxLDAgLTcwLDBcIiAvPlxuICA8dGV4dCBpZD1cIiR7bnN9LXBlcmNlbnRcIiB4PVwiNTAlXCIgeT1cIjUxJVwiPjx0c3BhbiBpZD1cIiR7bnN9LXBlcmNlbnQtdmFsdWVcIj4wPC90c3Bhbj48dHNwYW4gaWQ9XCIke25zfS1wZXJjZW50LXN1cGVyXCI+JTwvdHNwYW4+PC90ZXh0PlxuPC9zdmc+XG5gO1xuXG5sZXQgaGlkZU9uUGFnZVZpc2libGUgPSBmYWxzZTtcblxuY29uc3QgdXBkYXRlID0gKHBlcmNlbnQpID0+IHtcbiAgY29uc3QgbWF4ID0gLTIxOS45OTA3ODM2OTE0MDYyNTtcbiAgY29uc3QgdmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtuc30tcGVyY2VudC12YWx1ZWApO1xuICBjb25zdCB0cmFjayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke25zfS1maWxsYCk7XG4gIGNvbnN0IG9mZnNldCA9ICgoMTAwIC0gcGVyY2VudCkgLyAxMDApICogbWF4O1xuXG4gIHRyYWNrLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgc3Ryb2tlLWRhc2hvZmZzZXQ6ICR7b2Zmc2V0fWApO1xuICB2YWx1ZS5pbm5lckhUTUwgPSBwZXJjZW50LnRvU3RyaW5nKCk7XG59O1xuXG5jb25zdCByZXNldCA9IChzdmcpID0+IHtcbiAgc3ZnLmNsYXNzTGlzdC5hZGQoYCR7bnN9LWRpc2FwcGVhcmApO1xufTtcblxuY29uc3QgaW5pdCA9IChvcHRpb25zLCBzb2NrZXQpID0+IHtcbiAgaWYgKG9wdGlvbnMuZmlyc3RJbnN0YW5jZSkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICBhZGRDc3MoY3NzKTtcbiAgICAgIGFkZEh0bWwoaHRtbCk7XG5cbiAgICAgIC8vIFJlc2V0IHByb2dyZXNzIHRvIHplcm8gYWZ0ZXIgZGlzYXBwZWFyIGFuaW1hdGlvblxuICAgICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9YCk7XG4gICAgICBzdmcuYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgKCkgPT4ge1xuICAgICAgICB1cGRhdGUoMCk7XG4gICAgICAgIHN2Zy5jbGFzc0xpc3QuYWRkKGAke25zfS1oaWRkZW5gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcbiAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGhpZGVPblBhZ2VWaXNpYmxlKSB7XG4gICAgICAgIGNvbnN0IHN2ZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke25zfWApO1xuICAgICAgICByZXNldChzdmcpO1xuICAgICAgICBoaWRlT25QYWdlVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAobWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aW9uLCBkYXRhIH0gPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSk7XG5cbiAgICBpZiAoYWN0aW9uICE9PSAncHJvZ3Jlc3MnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGVyY2VudCA9IE1hdGguZmxvb3IoZGF0YS5wZXJjZW50ICogMTAwKTtcbiAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtuc31gKTtcblxuICAgIGlmICghc3ZnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UgY2FuIHNhZmVseSBjYWxsIHRoaXMgZXZlbiBpZiBpdCBkb2Vzbid0IGhhdmUgdGhlIGNsYXNzXG4gICAgc3ZnLmNsYXNzTGlzdC5yZW1vdmUoYCR7bnN9LWRpc2FwcGVhcmAsIGAke25zfS1oaWRkZW5gKTtcblxuICAgIGlmIChkYXRhLnBlcmNlbnQgPT09IDEpIHtcbiAgICAgIGlmIChkb2N1bWVudC5oaWRkZW4pIHtcbiAgICAgICAgaGlkZU9uUGFnZVZpc2libGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXQoc3ZnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGlkZU9uUGFnZVZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGUocGVyY2VudCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7IGluaXQgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/overlays/progress.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/overlays/status.js":
/*!*************************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/overlays/status.js ***!
\*************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval("const { addCss, addHtml, socketMessage } = __webpack_require__(/*! ./util */ \"./node_modules/webpack-plugin-serve/lib/client/overlays/util.js\");\nconst ns = \"wps-status\";\nconst css = `\n#${ns} {\n background: #282d35;\n border-radius: 0.6em;\n display: flex;\n flex-direction: column;\n\tfont-family: 'Open Sans', Helvetica, Arial, sans-serif;\n\tfont-size: 10px;\n height: 90%;\n min-height: 20em;\n left: 50%;\n opacity: 1;\n overflow: hidden;\n padding-bottom: 3em;\n position: absolute;\n top: 2rem;\n transform: translateX(-50%);\n transition: opacity .25s ease-in-out;\n width: 95%;\n z-index: 2147483645;\n}\n\n@keyframes ${ns}-hidden-display {\n\t0% {\n\t\topacity: 1;\n\t}\n\t99% {\n\t\tdisplay: inline-flex;\n\t\topacity: 0;\n\t}\n\t100% {\n\t\tdisplay: none;\n\t\topacity: 0;\n\t}\n}\n\n#${ns}.${ns}-hidden {\n animation: ${ns}-hidden-display .3s;\n animation-fill-mode:forwards;\n display: none;\n}\n\n#${ns}.${ns}-min {\n animation: minimize 10s;\n bottom: 2em;\n cursor: pointer;\n height: 6em;\n left: auto;\n min-height: 6em;\n padding-bottom: 0;\n position: absolute;\n right: 2em;\n top: auto;\n transform: none;\n width: 6em;\n}\n\n#${ns}.${ns}-min #${ns}-beacon {\n display: block;\n}\n\n#${ns}-title {\n color: #fff;\n font-size: 1.2em;\n font-weight: normal;\n margin: 0;\n padding: 0.6em 0;\n text-align: center;\n width: 100%;\n}\n\n#${ns}.${ns}-min #${ns}-title {\n display: none;\n}\n\n#${ns}-title-errors {\n color: #ff5f58;\n font-style: normal;\n padding-left: 1em;\n}\n\n#${ns}-title-warnings {\n color: #ffbd2e;\n font-style: normal;\n padding-left: 1em;\n}\n\n#${ns}-problems {\n overflow-y: auto;\n padding: 1em 2em;\n}\n\n#${ns}-problems pre {\n color: #ddd;\n background: #282d35;\n display: block;\n font-size: 1.3em;\n\tfont-family: 'Open Sans', Helvetica, Arial, sans-serif;\n white-space: pre-wrap;\n}\n\n#${ns}-problems pre em {\n background: #ff5f58;\n border-radius: 0.3em;\n color: #641e16;\n font-style: normal;\n line-height: 3em;\n margin-right: 0.4em;\n padding: 0.1em 0.4em;\n text-transform: uppercase;\n}\n\npre#${ns}-warnings em {\n background: #ffbd2e;\n color: #3e2723;\n}\n\npre#${ns}-success {\n display: none;\n text-align: center;\n}\n\npre#${ns}-success em {\n background: #7fb900;\n color: #004d40;\n}\n\n#${ns}-problems.${ns}-success #${ns}-success {\n display: block;\n}\n\n#${ns}.${ns}-min #${ns}-problems {\n display: none;\n}\n\n#${ns}-nav {\n opacity: 0.5;\n padding: 1.2em;\n position: absolute;\n}\n\n#${ns}.${ns}-min #${ns}-nav {\n display: none;\n}\n\n#${ns}-nav:hover {\n opacity: 1;\n}\n\n#${ns}-nav div {\n background: #ff5f58;\n border-radius: 1.2em;\n cursor: pointer;\n display: inline-block;\n height: 1.2em;\n position: relative;\n width: 1.2em;\n}\n\ndiv#${ns}-min {\n background: #ffbd2e;\n margin-left: 0.8em;\n}\n\n#${ns}-beacon {\n border-radius: 3em;\n display: none;\n font-size: 10px;\n height: 3em;\n margin: 1.6em auto;\n position: relative;\n width: 3em;\n}\n\n#${ns}-beacon:before, #${ns}-beacon:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(127,185,0, 0.2);\n border-radius: 3em;\n opacity: 0;\n}\n\n#${ns}-beacon:before {\n animation: ${ns}-pulse 3s infinite linear;\n transform: scale(1);\n}\n\n#${ns}-beacon:after {\n animation: ${ns}-pulse 3s 2s infinite linear;\n}\n\n\n@keyframes ${ns}-pulse {\n 0% {\n opacity: 0;\n transform: scale(0.6);\n }\n 33% {\n opacity: 1;\n transform: scale(1);\n }\n 100% {\n opacity: 0;\n transform: scale(1.4);\n }\n}\n\n#${ns}-beacon mark {\n background: rgba(127, 185, 0, 1);\n border-radius: 100% 100%;\n height: 1em;\n left: 1em;\n position: absolute;\n top: 1em;\n width: 1em;\n}\n\n#${ns}-beacon.${ns}-error mark {\n background: #ff5f58;\n}\n\n#${ns}-beacon.${ns}-error:before, #${ns}-beacon.error:after {\n background: rgba(255, 95, 88, 0.2);\n}\n\n#${ns}-beacon.${ns}-warning mark {\n background: #ffbd2e;\n}\n\n#${ns}-beacon.${ns}-warning:before, #${ns}-beacon.warning:after {\n background: rgba(255, 189, 46, 0.2);\n}\n\n/* Put google web font at the end, or you'll see FOUC in Firefox */\n@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700');\n`;\nconst html = `\n<aside id=\"${ns}\" class=\"${ns}-hidden\" title=\"build status\">\n <figure id=\"${ns}-beacon\">\n <mark/>\n </figure>\n <nav id=\"${ns}-nav\">\n <div id=\"${ns}-close\" title=\"close\"></div>\n <div id=\"${ns}-min\" title=\"minmize\"></div>\n </nav>\n <h1 id=\"${ns}-title\">\n build status\n <em id=\"${ns}-title-errors\"></em>\n <em id=\"${ns}-title-warnings\"></em>\n </h1>\n <article id=\"${ns}-problems\">\n <pre id=\"${ns}-success\"><em>Build Successful</em></pre>\n <pre id=\"${ns}-errors\"></pre>\n <pre id=\"${ns}-warnings\"></pre>\n </article>\n</aside>\n`;\nconst init = (options, socket) => {\n const hidden = `${ns}-hidden`;\n let hasProblems = false;\n let aside;\n let beacon;\n let problems;\n let preErrors;\n let preWarnings;\n let titleErrors;\n let titleWarnings;\n const reset = () => {\n preErrors.innerHTML = \"\";\n preWarnings.innerHTML = \"\";\n problems.classList.remove(`${ns}-success`);\n beacon.className = \"\";\n titleErrors.innerText = \"\";\n titleWarnings.innerText = \"\";\n };\n const addErrors = (errors) => {\n if (errors.length) {\n problems.classList.remove(`${ns}-success`);\n beacon.classList.add(`${ns}-error`);\n for (const error of errors) {\n const markup = `<div><em>Error</em> in ${error}</div>`;\n addHtml(markup, preErrors);\n }\n titleErrors.innerText = `${errors.length} Error(s)`;\n } else {\n titleErrors.innerText = \"\";\n }\n aside.classList.remove(hidden);\n };\n const addWarnings = (warnings) => {\n if (warnings.length) {\n problems.classList.remove(`${ns}-success`);\n if (!beacon.classList.contains(`${ns}-error`)) {\n beacon.classList.add(`${ns}-warning`);\n }\n for (const warning of warnings) {\n const markup = `<div><em>Warning</em> in ${warning}</div>`;\n addHtml(markup, preWarnings);\n }\n titleWarnings.innerText = `${warnings.length} Warning(s)`;\n } else {\n titleWarnings.innerText = \"\";\n }\n aside.classList.remove(hidden);\n };\n if (options.firstInstance) {\n document.addEventListener(\"DOMContentLoaded\", () => {\n addCss(css);\n [aside] = addHtml(html);\n beacon = document.querySelector(`#${ns}-beacon`);\n problems = document.querySelector(`#${ns}-problems`);\n preErrors = document.querySelector(`#${ns}-errors`);\n preWarnings = document.querySelector(`#${ns}-warnings`);\n titleErrors = document.querySelector(`#${ns}-title-errors`);\n titleWarnings = document.querySelector(`#${ns}-title-warnings`);\n const close = document.querySelector(`#${ns}-close`);\n const min = document.querySelector(`#${ns}-min`);\n aside.addEventListener(\"click\", () => {\n aside.classList.remove(`${ns}-min`);\n });\n close.addEventListener(\"click\", () => {\n aside.classList.add(`${ns}-hidden`);\n });\n min.addEventListener(\"click\", (e) => {\n aside.classList.add(`${ns}-min`);\n e.stopImmediatePropagation();\n });\n });\n }\n socketMessage(socket, (action, data) => {\n if (!aside) {\n return;\n }\n const { compilers } = window.webpackPluginServe;\n switch (action) {\n case \"build\":\n reset();\n break;\n case \"problems\":\n addErrors(data.errors);\n addWarnings(data.warnings);\n aside.classList.remove(hidden);\n hasProblems = data.errors.length || data.warnings.length;\n break;\n case \"replace\":\n for (const compilerName of Object.keys(compilers)) {\n if (!compilers[compilerName]) {\n return;\n }\n }\n if (hasProblems && !preErrors.children.length && !preWarnings.children.length) {\n reset();\n hasProblems = false;\n problems.classList.add(`${ns}-success`);\n aside.classList.remove(hidden);\n setTimeout(() => aside.classList.add(hidden), 3e3);\n }\n break;\n default:\n }\n });\n};\nmodule.exports = { init };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1wbHVnaW4tc2VydmUvbGliL2NsaWVudC9vdmVybGF5cy9zdGF0dXMuanMuanMiLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxFQUFFLFFBQVEsU0FBUyxjQUFjLElBQUksbUJBQU8sQ0FBQywrRUFBUTtBQUUzRCxNQUFNLEtBQUs7QUFDWCxNQUFNLE1BQU07QUFBQSxHQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBcUJVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQWNWLE1BQU07QUFBQSxlQUNNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtaLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FlTixNQUFNLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUlqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBVUEsTUFBTSxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FJakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FNQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BV0c7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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LFVBQVUsT0FBTyxNQUFNO0FBQzdCLHNCQUFjLEtBQUssT0FBTyxVQUFVLEtBQUssU0FBUztBQUNsRDtBQUFBLFdBQ0c7QUFFSCxtQkFBVyxnQkFBZ0IsT0FBTyxLQUFLLFNBQVMsR0FBRztBQUNqRCxjQUFJLENBQUMsVUFBVSxlQUFlO0FBQzVCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGVBQWUsQ0FBQyxVQUFVLFNBQVMsVUFBVSxDQUFDLFlBQVksU0FBUyxRQUFRO0FBQzdFLGdCQUFNO0FBQ04sd0JBQWM7QUFDZCxtQkFBUyxVQUFVLElBQUksR0FBRyxZQUFZO0FBQ3RDLGdCQUFNLFVBQVUsT0FBTyxNQUFNO0FBRTdCLHFCQUFXLE1BQU0sTUFBTSxVQUFVLElBQUksTUFBTSxHQUFHLEdBQUc7QUFBQSxRQUNuRDtBQUNBO0FBQUE7QUFBQTtBQUFBLEVBR04sQ0FBQztBQUNIO0FBRUEsT0FBTyxVQUFVLEVBQUUsS0FBSyIsInNvdXJjZXMiOlsid2VicGFjazovL215c2VlbGlhLy4vbm9kZV9tb2R1bGVzL3dlYnBhY2stcGx1Z2luLXNlcnZlL2xpYi9jbGllbnQvb3ZlcmxheXMvc3RhdHVzLmpzPzBlYzEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IMKpIDIwMTggQW5kcmV3IFBvd2VsbFxuXG4gIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xuICBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhpcyBTb3VyY2UgQ29kZSBGb3JtLlxuKi9cbmNvbnN0IHsgYWRkQ3NzLCBhZGRIdG1sLCBzb2NrZXRNZXNzYWdlIH0gPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3QgbnMgPSAnd3BzLXN0YXR1cyc7XG5jb25zdCBjc3MgPSBgXG4jJHtuc30ge1xuICBiYWNrZ3JvdW5kOiAjMjgyZDM1O1xuICBib3JkZXItcmFkaXVzOiAwLjZlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Zm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXHRmb250LXNpemU6IDEwcHg7XG4gIGhlaWdodDogOTAlO1xuICBtaW4taGVpZ2h0OiAyMGVtO1xuICBsZWZ0OiA1MCU7XG4gIG9wYWNpdHk6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiAzZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAycmVtO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjI1cyBlYXNlLWluLW91dDtcbiAgd2lkdGg6IDk1JTtcbiAgei1pbmRleDogMjE0NzQ4MzY0NTtcbn1cblxuQGtleWZyYW1lcyAke25zfS1oaWRkZW4tZGlzcGxheSB7XG5cdDAlIHtcblx0XHRvcGFjaXR5OiAxO1xuXHR9XG5cdDk5JSB7XG5cdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0b3BhY2l0eTogMDtcblx0fVxuXHQxMDAlIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHRcdG9wYWNpdHk6IDA7XG5cdH1cbn1cblxuIyR7bnN9LiR7bnN9LWhpZGRlbiB7XG4gIGFuaW1hdGlvbjogJHtuc30taGlkZGVuLWRpc3BsYXkgLjNzO1xuICBhbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzO1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4jJHtuc30uJHtuc30tbWluIHtcbiAgYW5pbWF0aW9uOiBtaW5pbWl6ZSAxMHM7XG4gIGJvdHRvbTogMmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNmVtO1xuICBsZWZ0OiBhdXRvO1xuICBtaW4taGVpZ2h0OiA2ZW07XG4gIHBhZGRpbmctYm90dG9tOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyZW07XG4gIHRvcDogYXV0bztcbiAgdHJhbnNmb3JtOiBub25lO1xuICB3aWR0aDogNmVtO1xufVxuXG4jJHtuc30uJHtuc30tbWluICMke25zfS1iZWFjb24ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuIyR7bnN9LXRpdGxlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMC42ZW0gMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cblxuIyR7bnN9LiR7bnN9LW1pbiAjJHtuc30tdGl0bGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4jJHtuc30tdGl0bGUtZXJyb3JzIHtcbiAgY29sb3I6ICNmZjVmNTg7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgcGFkZGluZy1sZWZ0OiAxZW07XG59XG5cbiMke25zfS10aXRsZS13YXJuaW5ncyB7XG4gIGNvbG9yOiAjZmZiZDJlO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuXG4jJHtuc30tcHJvYmxlbXMge1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiAxZW0gMmVtO1xufVxuXG4jJHtuc30tcHJvYmxlbXMgcHJlIHtcbiAgY29sb3I6ICNkZGQ7XG4gIGJhY2tncm91bmQ6ICMyODJkMzU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDEuM2VtO1xuXHRmb250LWZhbWlseTogJ09wZW4gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbn1cblxuIyR7bnN9LXByb2JsZW1zIHByZSBlbSB7XG4gIGJhY2tncm91bmQ6ICNmZjVmNTg7XG4gIGJvcmRlci1yYWRpdXM6IDAuM2VtO1xuICBjb2xvcjogIzY0MWUxNjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogM2VtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNGVtO1xuICBwYWRkaW5nOiAwLjFlbSAwLjRlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxucHJlIyR7bnN9LXdhcm5pbmdzIGVtIHtcbiAgYmFja2dyb3VuZDogI2ZmYmQyZTtcbiAgY29sb3I6ICMzZTI3MjM7XG59XG5cbnByZSMke25zfS1zdWNjZXNzIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5wcmUjJHtuc30tc3VjY2VzcyBlbSB7XG4gIGJhY2tncm91bmQ6ICM3ZmI5MDA7XG4gIGNvbG9yOiAjMDA0ZDQwO1xufVxuXG4jJHtuc30tcHJvYmxlbXMuJHtuc30tc3VjY2VzcyAjJHtuc30tc3VjY2VzcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4jJHtuc30uJHtuc30tbWluICMke25zfS1wcm9ibGVtcyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiMke25zfS1uYXYge1xuICBvcGFjaXR5OiAwLjU7XG4gIHBhZGRpbmc6IDEuMmVtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbiMke25zfS4ke25zfS1taW4gIyR7bnN9LW5hdiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiMke25zfS1uYXY6aG92ZXIge1xuICBvcGFjaXR5OiAxO1xufVxuXG4jJHtuc30tbmF2IGRpdiB7XG4gIGJhY2tncm91bmQ6ICNmZjVmNTg7XG4gIGJvcmRlci1yYWRpdXM6IDEuMmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMS4yZW07XG59XG5cbmRpdiMke25zfS1taW4ge1xuICBiYWNrZ3JvdW5kOiAjZmZiZDJlO1xuICBtYXJnaW4tbGVmdDogMC44ZW07XG59XG5cbiMke25zfS1iZWFjb24ge1xuICBib3JkZXItcmFkaXVzOiAzZW07XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgaGVpZ2h0OiAzZW07XG4gIG1hcmdpbjogMS42ZW0gYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogM2VtO1xufVxuXG4jJHtuc30tYmVhY29uOmJlZm9yZSwgIyR7bnN9LWJlYWNvbjphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogcmdiYSgxMjcsMTg1LDAsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDNlbTtcbiAgb3BhY2l0eTogMDtcbn1cblxuIyR7bnN9LWJlYWNvbjpiZWZvcmUge1xuICBhbmltYXRpb246ICR7bnN9LXB1bHNlIDNzIGluZmluaXRlIGxpbmVhcjtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbn1cblxuIyR7bnN9LWJlYWNvbjphZnRlciB7XG4gIGFuaW1hdGlvbjogJHtuc30tcHVsc2UgM3MgMnMgaW5maW5pdGUgbGluZWFyO1xufVxuXG5cbkBrZXlmcmFtZXMgJHtuc30tcHVsc2Uge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNik7XG4gIH1cbiAgMzMlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7XG4gIH1cbn1cblxuIyR7bnN9LWJlYWNvbiBtYXJrIHtcbiAgYmFja2dyb3VuZDogcmdiYSgxMjcsIDE4NSwgMCwgMSk7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCUgMTAwJTtcbiAgaGVpZ2h0OiAxZW07XG4gIGxlZnQ6IDFlbTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFlbTtcbiAgd2lkdGg6IDFlbTtcbn1cblxuIyR7bnN9LWJlYWNvbi4ke25zfS1lcnJvciBtYXJrIHtcbiAgYmFja2dyb3VuZDogI2ZmNWY1ODtcbn1cblxuIyR7bnN9LWJlYWNvbi4ke25zfS1lcnJvcjpiZWZvcmUsICMke25zfS1iZWFjb24uZXJyb3I6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgOTUsIDg4LCAwLjIpO1xufVxuXG4jJHtuc30tYmVhY29uLiR7bnN9LXdhcm5pbmcgbWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZmJkMmU7XG59XG5cbiMke25zfS1iZWFjb24uJHtuc30td2FybmluZzpiZWZvcmUsICMke25zfS1iZWFjb24ud2FybmluZzphZnRlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxODksIDQ2LCAwLjIpO1xufVxuXG4vKiBQdXQgZ29vZ2xlIHdlYiBmb250IGF0IHRoZSBlbmQsIG9yIHlvdSdsbCBzZWUgRk9VQyBpbiBGaXJlZm94ICovXG5AaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2Fuczo0MDAsNzAwJyk7XG5gO1xuXG5jb25zdCBodG1sID0gYFxuPGFzaWRlIGlkPVwiJHtuc31cIiBjbGFzcz1cIiR7bnN9LWhpZGRlblwiIHRpdGxlPVwiYnVpbGQgc3RhdHVzXCI+XG4gIDxmaWd1cmUgaWQ9XCIke25zfS1iZWFjb25cIj5cbiAgICA8bWFyay8+XG4gIDwvZmlndXJlPlxuICA8bmF2IGlkPVwiJHtuc30tbmF2XCI+XG4gICAgPGRpdiBpZD1cIiR7bnN9LWNsb3NlXCIgdGl0bGU9XCJjbG9zZVwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCIke25zfS1taW5cIiB0aXRsZT1cIm1pbm1pemVcIj48L2Rpdj5cbiAgPC9uYXY+XG4gIDxoMSBpZD1cIiR7bnN9LXRpdGxlXCI+XG4gICAgYnVpbGQgc3RhdHVzXG4gICAgPGVtIGlkPVwiJHtuc30tdGl0bGUtZXJyb3JzXCI+PC9lbT5cbiAgICA8ZW0gaWQ9XCIke25zfS10aXRsZS13YXJuaW5nc1wiPjwvZW0+XG4gIDwvaDE+XG4gIDxhcnRpY2xlIGlkPVwiJHtuc30tcHJvYmxlbXNcIj5cbiAgICA8cHJlIGlkPVwiJHtuc30tc3VjY2Vzc1wiPjxlbT5CdWlsZCBTdWNjZXNzZnVsPC9lbT48L3ByZT5cbiAgICA8cHJlIGlkPVwiJHtuc30tZXJyb3JzXCI+PC9wcmU+XG4gICAgPHByZSBpZD1cIiR7bnN9LXdhcm5pbmdzXCI+PC9wcmU+XG4gIDwvYXJ0aWNsZT5cbjwvYXNpZGU+XG5gO1xuXG5jb25zdCBpbml0ID0gKG9wdGlvbnMsIHNvY2tldCkgPT4ge1xuICBjb25zdCBoaWRkZW4gPSBgJHtuc30taGlkZGVuYDtcbiAgbGV0IGhhc1Byb2JsZW1zID0gZmFsc2U7XG4gIGxldCBhc2lkZTtcbiAgbGV0IGJlYWNvbjtcbiAgbGV0IHByb2JsZW1zO1xuICBsZXQgcHJlRXJyb3JzO1xuICBsZXQgcHJlV2FybmluZ3M7XG4gIGxldCB0aXRsZUVycm9ycztcbiAgbGV0IHRpdGxlV2FybmluZ3M7XG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgcHJlRXJyb3JzLmlubmVySFRNTCA9ICcnO1xuICAgIHByZVdhcm5pbmdzLmlubmVySFRNTCA9ICcnO1xuICAgIHByb2JsZW1zLmNsYXNzTGlzdC5yZW1vdmUoYCR7bnN9LXN1Y2Nlc3NgKTtcbiAgICBiZWFjb24uY2xhc3NOYW1lID0gJyc7XG4gICAgdGl0bGVFcnJvcnMuaW5uZXJUZXh0ID0gJyc7XG4gICAgdGl0bGVXYXJuaW5ncy5pbm5lclRleHQgPSAnJztcbiAgfTtcblxuICBjb25zdCBhZGRFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHByb2JsZW1zLmNsYXNzTGlzdC5yZW1vdmUoYCR7bnN9LXN1Y2Nlc3NgKTtcbiAgICAgIGJlYWNvbi5jbGFzc0xpc3QuYWRkKGAke25zfS1lcnJvcmApO1xuXG4gICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9ycykge1xuICAgICAgICBjb25zdCBtYXJrdXAgPSBgPGRpdj48ZW0+RXJyb3I8L2VtPiBpbiAke2Vycm9yfTwvZGl2PmA7XG4gICAgICAgIGFkZEh0bWwobWFya3VwLCBwcmVFcnJvcnMpO1xuICAgICAgfVxuXG4gICAgICB0aXRsZUVycm9ycy5pbm5lclRleHQgPSBgJHtlcnJvcnMubGVuZ3RofSBFcnJvcihzKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlRXJyb3JzLmlubmVyVGV4dCA9ICcnO1xuICAgIH1cbiAgICBhc2lkZS5jbGFzc0xpc3QucmVtb3ZlKGhpZGRlbik7XG4gIH07XG5cbiAgY29uc3QgYWRkV2FybmluZ3MgPSAod2FybmluZ3MpID0+IHtcbiAgICBpZiAod2FybmluZ3MubGVuZ3RoKSB7XG4gICAgICBwcm9ibGVtcy5jbGFzc0xpc3QucmVtb3ZlKGAke25zfS1zdWNjZXNzYCk7XG5cbiAgICAgIGlmICghYmVhY29uLmNsYXNzTGlzdC5jb250YWlucyhgJHtuc30tZXJyb3JgKSkge1xuICAgICAgICBiZWFjb24uY2xhc3NMaXN0LmFkZChgJHtuc30td2FybmluZ2ApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgY29uc3QgbWFya3VwID0gYDxkaXY+PGVtPldhcm5pbmc8L2VtPiBpbiAke3dhcm5pbmd9PC9kaXY+YDtcbiAgICAgICAgYWRkSHRtbChtYXJrdXAsIHByZVdhcm5pbmdzKTtcbiAgICAgIH1cblxuICAgICAgdGl0bGVXYXJuaW5ncy5pbm5lclRleHQgPSBgJHt3YXJuaW5ncy5sZW5ndGh9IFdhcm5pbmcocylgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aXRsZVdhcm5pbmdzLmlubmVyVGV4dCA9ICcnO1xuICAgIH1cblxuICAgIGFzaWRlLmNsYXNzTGlzdC5yZW1vdmUoaGlkZGVuKTtcbiAgfTtcblxuICBpZiAob3B0aW9ucy5maXJzdEluc3RhbmNlKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgIGFkZENzcyhjc3MpO1xuICAgICAgW2FzaWRlXSA9IGFkZEh0bWwoaHRtbCk7XG4gICAgICBiZWFjb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtuc30tYmVhY29uYCk7XG4gICAgICBwcm9ibGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke25zfS1wcm9ibGVtc2ApO1xuICAgICAgcHJlRXJyb3JzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9LWVycm9yc2ApO1xuICAgICAgcHJlV2FybmluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtuc30td2FybmluZ3NgKTtcbiAgICAgIHRpdGxlRXJyb3JzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9LXRpdGxlLWVycm9yc2ApO1xuICAgICAgdGl0bGVXYXJuaW5ncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke25zfS10aXRsZS13YXJuaW5nc2ApO1xuXG4gICAgICBjb25zdCBjbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke25zfS1jbG9zZWApO1xuICAgICAgY29uc3QgbWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bnN9LW1pbmApO1xuXG4gICAgICBhc2lkZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYXNpZGUuY2xhc3NMaXN0LnJlbW92ZShgJHtuc30tbWluYCk7XG4gICAgICB9KTtcblxuICAgICAgY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGFzaWRlLmNsYXNzTGlzdC5hZGQoYCR7bnN9LWhpZGRlbmApO1xuICAgICAgfSk7XG5cbiAgICAgIG1pbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgIGFzaWRlLmNsYXNzTGlzdC5hZGQoYCR7bnN9LW1pbmApO1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzb2NrZXRNZXNzYWdlKHNvY2tldCwgKGFjdGlvbiwgZGF0YSkgPT4ge1xuICAgIGlmICghYXNpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvbXBpbGVycyB9ID0gd2luZG93LndlYnBhY2tQbHVnaW5TZXJ2ZTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdidWlsZCc6XG4gICAgICAgIC8vIGNsZWFyIGVycm9ycyBhbmQgd2FybmluZ3Mgd2hlbiBhIG5ldyBidWlsZCBiZWdpbnNcbiAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcm9ibGVtcyc6XG4gICAgICAgIGFkZEVycm9ycyhkYXRhLmVycm9ycyk7XG4gICAgICAgIGFkZFdhcm5pbmdzKGRhdGEud2FybmluZ3MpO1xuICAgICAgICBhc2lkZS5jbGFzc0xpc3QucmVtb3ZlKGhpZGRlbik7XG4gICAgICAgIGhhc1Byb2JsZW1zID0gZGF0YS5lcnJvcnMubGVuZ3RoIHx8IGRhdGEud2FybmluZ3MubGVuZ3RoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlcGxhY2UnOlxuICAgICAgICAvLyBpZiB0aGVyZSdzIGEgY29tcGlsZXIgdGhhdCBpc24ndCBkb25lIHlldCwgaG9sZCBvZmYgYW5kIGxldCBpdCBydW4gdGhlIHNob3dcbiAgICAgICAgZm9yIChjb25zdCBjb21waWxlck5hbWUgb2YgT2JqZWN0LmtleXMoY29tcGlsZXJzKSkge1xuICAgICAgICAgIGlmICghY29tcGlsZXJzW2NvbXBpbGVyTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzUHJvYmxlbXMgJiYgIXByZUVycm9ycy5jaGlsZHJlbi5sZW5ndGggJiYgIXByZVdhcm5pbmdzLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgICAgaGFzUHJvYmxlbXMgPSBmYWxzZTtcbiAgICAgICAgICBwcm9ibGVtcy5jbGFzc0xpc3QuYWRkKGAke25zfS1zdWNjZXNzYCk7XG4gICAgICAgICAgYXNpZGUuY2xhc3NMaXN0LnJlbW92ZShoaWRkZW4pO1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBhc2lkZS5jbGFzc0xpc3QuYWRkKGhpZGRlbiksIDNlMyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgaW5pdCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/overlays/status.js\n");
/***/ }),
/***/ "./node_modules/webpack-plugin-serve/lib/client/overlays/util.js":
/*!***********************************************************************!*\
!*** ./node_modules/webpack-plugin-serve/lib/client/overlays/util.js ***!
\***********************************************************************/
/***/ ((module) => {
eval("const addHtml = (html, parent) => {\n const div = document.createElement(\"div\");\n const nodes = [];\n div.innerHTML = html.trim();\n while (div.firstChild) {\n nodes.push((parent || document.body).appendChild(div.firstChild));\n }\n return nodes;\n};\nconst addCss = (css) => {\n const style = document.createElement(\"style\");\n style.type = \"text/css\";\n if (css.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n document.head.appendChild(style);\n};\nconst socketMessage = (socket, handler) => {\n socket.addEventListener(\"message\", (message) => {\n const { action, data = {} } = JSON.parse(message.data);\n handler(action, data);\n });\n};\nmodule.exports = { addCss, addHtml, socketMessage };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL25vZGVfbW9kdWxlcy93ZWJwYWNrLXBsdWdpbi1zZXJ2ZS9saWIvY2xpZW50L292ZXJsYXlzL3V0aWwuanM/YWU2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgwqkgMjAxOCBBbmRyZXcgUG93ZWxsXG5cbiAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGlzIFNvdXJjZSBDb2RlIEZvcm0uXG4qL1xuY29uc3QgYWRkSHRtbCA9IChodG1sLCBwYXJlbnQpID0+IHtcbiAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnN0IG5vZGVzID0gW107XG5cbiAgZGl2LmlubmVySFRNTCA9IGh0bWwudHJpbSgpO1xuXG4gIHdoaWxlIChkaXYuZmlyc3RDaGlsZCkge1xuICAgIG5vZGVzLnB1c2goKHBhcmVudCB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufTtcblxuY29uc3QgYWRkQ3NzID0gKGNzcykgPT4ge1xuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGNzcy5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG5cbiAgLy8gYXBwZW5kIHRoZSBzdHlsZXNoZWV0IGZvciB0aGUgc3ZnXG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufTtcblxuY29uc3Qgc29ja2V0TWVzc2FnZSA9IChzb2NrZXQsIGhhbmRsZXIpID0+IHtcbiAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAobWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aW9uLCBkYXRhID0ge30gfSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiAgICBoYW5kbGVyKGFjdGlvbiwgZGF0YSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7IGFkZENzcywgYWRkSHRtbCwgc29ja2V0TWVzc2FnZSB9O1xuIl0sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLFVBQVUsQ0FBQyxNQUFNLFdBQVc7QUFDaEMsUUFBTSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ3hDLFFBQU0sUUFBUSxDQUFDO0FBRWYsTUFBSSxZQUFZLEtBQUssS0FBSztBQUUxQixTQUFPLElBQUksWUFBWTtBQUNyQixVQUFNLE1BQU0sVUFBVSxTQUFTLE1BQU0sWUFBWSxJQUFJLFVBQVUsQ0FBQztBQUFBLEVBQ2xFO0FBRUEsU0FBTztBQUNUO0FBRUEsTUFBTSxTQUFTLENBQUMsUUFBUTtBQUN0QixRQUFNLFFBQVEsU0FBUyxjQUFjLE9BQU87QUFFNUMsUUFBTSxPQUFPO0FBRWIsTUFBSSxJQUFJLFlBQVk7QUFDbEIsVUFBTSxXQUFXLFVBQVU7QUFBQSxFQUM3QixPQUFPO0FBQ0wsVUFBTSxZQUFZLFNBQVMsZUFBZSxHQUFHLENBQUM7QUFBQSxFQUNoRDtBQUdBLFdBQVMsS0FBSyxZQUFZLEtBQUs7QUFDakM7QUFFQSxNQUFNLGdCQUFnQixDQUFDLFFBQVEsWUFBWTtBQUN6QyxTQUFPLGlCQUFpQixXQUFXLENBQUMsWUFBWTtBQUM5QyxVQUFNLEVBQUUsUUFBUSxPQUFPLENBQUMsRUFBRSxJQUFJLEtBQUssTUFBTSxRQUFRLElBQUk7QUFDckQsWUFBUSxRQUFRLElBQUk7QUFBQSxFQUN0QixDQUFDO0FBQ0g7QUFFQSxPQUFPLFVBQVUsRUFBRSxRQUFRLFNBQVMsY0FBYzsiLCJuYW1lcyI6W10sImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLXBsdWdpbi1zZXJ2ZS9saWIvY2xpZW50L292ZXJsYXlzL3V0aWwuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-plugin-serve/lib/client/overlays/util.js\n");
/***/ }),
/***/ "./src/stores.ts":
/*!***********************!*\
!*** ./src/stores.ts ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"accountSettingsStore\": () => (/* binding */ accountSettingsStore),\n/* harmony export */ \"filesystemStore\": () => (/* binding */ filesystemStore),\n/* harmony export */ \"notificationStore\": () => (/* binding */ notificationStore),\n/* harmony export */ \"sessionStore\": () => (/* binding */ sessionStore),\n/* harmony export */ \"themeStore\": () => (/* binding */ themeStore)\n/* harmony export */ });\n/* harmony import */ var svelte_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! svelte/store */ \"./node_modules/svelte/store/index.mjs\");\nObject(function webpackMissingModule() { var e = new Error(\"Cannot find module '$lib/theme'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());\n\n\nconst themeStore = (0,svelte_store__WEBPACK_IMPORTED_MODULE_0__.writable)(Object(function webpackMissingModule() { var e = new Error(\"Cannot find module '$lib/theme'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())());\nconst sessionStore = (0,svelte_store__WEBPACK_IMPORTED_MODULE_0__.writable)({\n username: null,\n authed: false,\n loading: true,\n backupCreated: null\n});\nconst filesystemStore = (0,svelte_store__WEBPACK_IMPORTED_MODULE_0__.writable)(null);\nconst notificationStore = (0,svelte_store__WEBPACK_IMPORTED_MODULE_0__.writable)([]);\nconst accountSettingsStore = (0,svelte_store__WEBPACK_IMPORTED_MODULE_0__.writable)({\n avatar: null,\n loading: true\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmVzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBeUI7QUFJQztBQU1uQixNQUFNLGFBQThCLHNEQUFRLENBQUMseUlBQVMsQ0FBQyxDQUFDO0FBRXhELE1BQU0sZUFBa0Msc0RBQVEsQ0FBQztBQUFBLEVBQ3RELFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULGVBQWU7QUFDakIsQ0FBQztBQUVNLE1BQU0sa0JBQStDLHNEQUFRLENBQUMsSUFBSTtBQUVsRSxNQUFNLG9CQUE4QyxzREFBUSxDQUFDLENBQUMsQ0FBQztBQUUvRCxNQUFNLHVCQUFrRCxzREFBUSxDQUFDO0FBQUEsRUFDdEUsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUNYLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL3NyYy9zdG9yZXMudHM/ZGNjZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3cml0YWJsZSB9IGZyb20gJ3N2ZWx0ZS9zdG9yZSdcbmltcG9ydCB0eXBlIHsgV3JpdGFibGUgfSBmcm9tICdzdmVsdGUvc3RvcmUnXG5pbXBvcnQgdHlwZSBGaWxlU3lzdGVtIGZyb20gJ3dlYm5hdGl2ZS9mcy9pbmRleCdcblxuaW1wb3J0IHsgbG9hZFRoZW1lIH0gZnJvbSAnJGxpYi90aGVtZSdcbmltcG9ydCB0eXBlIHsgQWNjb3VudFNldHRpbmdzIH0gZnJvbSAnJGxpYi9hY2NvdW50LXNldHRpbmdzJ1xuaW1wb3J0IHR5cGUgeyBOb3RpZmljYXRpb24gfSBmcm9tICckbGliL25vdGlmaWNhdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24gfSBmcm9tICckbGliL3Nlc3Npb24nXG5pbXBvcnQgdHlwZSB7IFRoZW1lIH0gZnJvbSAnJGxpYi90aGVtZSdcblxuZXhwb3J0IGNvbnN0IHRoZW1lU3RvcmU6IFdyaXRhYmxlPFRoZW1lPiA9IHdyaXRhYmxlKGxvYWRUaGVtZSgpKVxuXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0b3JlOiBXcml0YWJsZTxTZXNzaW9uPiA9IHdyaXRhYmxlKHtcbiAgdXNlcm5hbWU6IG51bGwsXG4gIGF1dGhlZDogZmFsc2UsXG4gIGxvYWRpbmc6IHRydWUsXG4gIGJhY2t1cENyZWF0ZWQ6IG51bGxcbn0pXG5cbmV4cG9ydCBjb25zdCBmaWxlc3lzdGVtU3RvcmU6IFdyaXRhYmxlPEZpbGVTeXN0ZW0gfCBudWxsPiA9IHdyaXRhYmxlKG51bGwpXG5cbmV4cG9ydCBjb25zdCBub3RpZmljYXRpb25TdG9yZTogV3JpdGFibGU8Tm90aWZpY2F0aW9uW10+ID0gd3JpdGFibGUoW10pXG5cbmV4cG9ydCBjb25zdCBhY2NvdW50U2V0dGluZ3NTdG9yZTogV3JpdGFibGU8QWNjb3VudFNldHRpbmdzPiA9IHdyaXRhYmxlKHtcbiAgYXZhdGFyOiBudWxsLFxuICBsb2FkaW5nOiB0cnVlLFxufSlcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/stores.ts\n");
/***/ }),
/***/ "./src/routes/+page.svelte":
/*!*********************************!*\
!*** ./src/routes/+page.svelte ***!
\*********************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var svelte_internal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! svelte/internal */ \"./node_modules/svelte/internal/index.mjs\");\n/* harmony import */ var _stores__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stores */ \"./src/stores.ts\");\nObject(function webpackMissingModule() { var e = new Error(\"Cannot find module '$components/home/Authed.svelte'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());\nObject(function webpackMissingModule() { var e = new Error(\"Cannot find module '$components/home/Public.svelte'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());\n/* harmony import */ var _Users_darrenzal_Myseelia_node_modules_svelte_loader_lib_hot_api_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/svelte-loader/lib/hot-api.js */ \"./node_modules/svelte-loader/lib/hot-api.js\");\n/* harmony import */ var _Users_darrenzal_Myseelia_node_modules_svelte_hmr_runtime_proxy_adapter_dom_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/svelte-hmr/runtime/proxy-adapter-dom.js */ \"./node_modules/svelte-hmr/runtime/proxy-adapter-dom.js\");\n/* module decorator */ module = __webpack_require__.hmd(module);\n/* src/routes/+page.svelte generated by Svelte v3.55.1 */\n\n\n\n\n\nconst file = \"src/routes/+page.svelte\";\n\n// (9:0) {:else}\nfunction create_else_block(ctx) {\n\tlet public_1;\n\tlet current;\n\tpublic_1 = new Object(function webpackMissingModule() { var e = new Error(\"Cannot find module '$components/home/Public.svelte'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())({ $$inline: true });\n\n\tconst block = {\n\t\tc: function create() {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.create_component)(public_1.$$.fragment);\n\t\t},\n\t\tm: function mount(target, anchor) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.mount_component)(public_1, target, anchor);\n\t\t\tcurrent = true;\n\t\t},\n\t\ti: function intro(local) {\n\t\t\tif (current) return;\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_in)(public_1.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to: function outro(local) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_out)(public_1.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td: function destroy(detaching) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.destroy_component)(public_1, detaching);\n\t\t}\n\t};\n\n\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.dispatch_dev)(\"SvelteRegisterBlock\", {\n\t\tblock,\n\t\tid: create_else_block.name,\n\t\ttype: \"else\",\n\t\tsource: \"(9:0) {:else}\",\n\t\tctx\n\t});\n\n\treturn block;\n}\n\n// (7:0) {#if $sessionStore?.authed}\nfunction create_if_block(ctx) {\n\tlet authed;\n\tlet current;\n\tauthed = new Object(function webpackMissingModule() { var e = new Error(\"Cannot find module '$components/home/Authed.svelte'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())({ $$inline: true });\n\n\tconst block = {\n\t\tc: function create() {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.create_component)(authed.$$.fragment);\n\t\t},\n\t\tm: function mount(target, anchor) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.mount_component)(authed, target, anchor);\n\t\t\tcurrent = true;\n\t\t},\n\t\ti: function intro(local) {\n\t\t\tif (current) return;\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_in)(authed.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to: function outro(local) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_out)(authed.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td: function destroy(detaching) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.destroy_component)(authed, detaching);\n\t\t}\n\t};\n\n\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.dispatch_dev)(\"SvelteRegisterBlock\", {\n\t\tblock,\n\t\tid: create_if_block.name,\n\t\ttype: \"if\",\n\t\tsource: \"(7:0) {#if $sessionStore?.authed}\",\n\t\tctx\n\t});\n\n\treturn block;\n}\n\nfunction create_fragment(ctx) {\n\tlet current_block_type_index;\n\tlet if_block;\n\tlet if_block_anchor;\n\tlet current;\n\tconst if_block_creators = [create_if_block, create_else_block];\n\tconst if_blocks = [];\n\n\tfunction select_block_type(ctx, dirty) {\n\t\tif (/*$sessionStore*/ ctx[0]?.authed) return 0;\n\t\treturn 1;\n\t}\n\n\tcurrent_block_type_index = select_block_type(ctx, -1);\n\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\n\tconst block = {\n\t\tc: function create() {\n\t\t\tif_block.c();\n\t\t\tif_block_anchor = (0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.empty)();\n\t\t},\n\t\tl: function claim(nodes) {\n\t\t\tthrow new Error(\"options.hydrate only works if the component was compiled with the `hydratable: true` option\");\n\t\t},\n\t\tm: function mount(target, anchor) {\n\t\t\tif_blocks[current_block_type_index].m(target, anchor);\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.insert_dev)(target, if_block_anchor, anchor);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp: function update(ctx, [dirty]) {\n\t\t\tlet previous_block_index = current_block_type_index;\n\t\t\tcurrent_block_type_index = select_block_type(ctx, dirty);\n\n\t\t\tif (current_block_type_index !== previous_block_index) {\n\t\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.group_outros)();\n\n\t\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_out)(if_blocks[previous_block_index], 1, 1, () => {\n\t\t\t\t\tif_blocks[previous_block_index] = null;\n\t\t\t\t});\n\n\t\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.check_outros)();\n\t\t\t\tif_block = if_blocks[current_block_type_index];\n\n\t\t\t\tif (!if_block) {\n\t\t\t\t\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_in)(if_block, 1);\n\t\t\t\tif_block.m(if_block_anchor.parentNode, if_block_anchor);\n\t\t\t}\n\t\t},\n\t\ti: function intro(local) {\n\t\t\tif (current) return;\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_in)(if_block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to: function outro(local) {\n\t\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.transition_out)(if_block);\n\t\t\tcurrent = false;\n\t\t},\n\t\td: function destroy(detaching) {\n\t\t\tif_blocks[current_block_type_index].d(detaching);\n\t\t\tif (detaching) (0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.detach_dev)(if_block_anchor);\n\t\t}\n\t};\n\n\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.dispatch_dev)(\"SvelteRegisterBlock\", {\n\t\tblock,\n\t\tid: create_fragment.name,\n\t\ttype: \"component\",\n\t\tsource: \"\",\n\t\tctx\n\t});\n\n\treturn block;\n}\n\nfunction instance($$self, $$props, $$invalidate) {\n\tlet $sessionStore;\n\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.validate_store)(_stores__WEBPACK_IMPORTED_MODULE_1__.sessionStore, 'sessionStore');\n\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.component_subscribe)($$self, _stores__WEBPACK_IMPORTED_MODULE_1__.sessionStore, $$value => $$invalidate(0, $sessionStore = $$value));\n\tlet { $$slots: slots = {}, $$scope } = $$props;\n\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.validate_slots)('Page', slots, []);\n\tconst writable_props = [];\n\n\tObject.keys($$props).forEach(key => {\n\t\tif (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<Page> was created with unknown prop '${key}'`);\n\t});\n\n\t$$self.$capture_state = () => ({\n\t\tsessionStore: _stores__WEBPACK_IMPORTED_MODULE_1__.sessionStore,\n\t\tAuthed: Object(function webpackMissingModule() { var e = new Error(\"Cannot find module '$components/home/Authed.svelte'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()),\n\t\tPublic: Object(function webpackMissingModule() { var e = new Error(\"Cannot find module '$components/home/Public.svelte'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()),\n\t\t$sessionStore\n\t});\n\n\treturn [$sessionStore];\n}\n\nclass Page extends svelte_internal__WEBPACK_IMPORTED_MODULE_0__.SvelteComponentDev {\n\tconstructor(options) {\n\t\tsuper(options);\n\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.init)(this, options, instance, create_fragment, svelte_internal__WEBPACK_IMPORTED_MODULE_0__.safe_not_equal, {});\n\n\t\t(0,svelte_internal__WEBPACK_IMPORTED_MODULE_0__.dispatch_dev)(\"SvelteRegisterComponent\", {\n\t\t\tcomponent: this,\n\t\t\ttagName: \"Page\",\n\t\t\toptions,\n\t\t\tid: create_fragment.name\n\t\t});\n\t}\n}\n\nif (module && module.hot) { if (false) {}; Page = _Users_darrenzal_Myseelia_node_modules_svelte_loader_lib_hot_api_js__WEBPACK_IMPORTED_MODULE_3__.applyHmr({ m: module, id: \"\\\"src/routes/+page.svelte\\\"\", hotOptions: {\"preserveLocalState\":false,\"noPreserveStateKey\":[\"@hmr:reset\",\"@!hmr\"],\"preserveAllLocalStateKey\":\"@hmr:keep-all\",\"preserveLocalStateKey\":\"@hmr:keep\",\"noReload\":false,\"optimistic\":false,\"acceptNamedExports\":true,\"acceptAccessors\":true,\"injectCss\":false,\"cssEjectDelay\":100,\"native\":false,\"importAdapterName\":\"___SVELTE_HMR_HOT_API_PROXY_ADAPTER\",\"noOverlay\":false,\"allowLiveBinding\":false}, Component: Page, ProxyAdapter: _Users_darrenzal_Myseelia_node_modules_svelte_hmr_runtime_proxy_adapter_dom_js__WEBPACK_IMPORTED_MODULE_4__.adapter, acceptable: true, preserveLocalState: false, emitCss: false, }); }\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Page);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcm91dGVzLytwYWdlLnN2ZWx0ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUMwQztBQUNXO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFHaEQsR0FBYSxLQUFFLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8rcGFnZS5zdmVsdGU/MDdiNSJdLCJzb3VyY2VzQ29udGVudCI6WyI8c2NyaXB0IGxhbmc9XCJ0c1wiPlxuICBpbXBvcnQgeyBzZXNzaW9uU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMnXG4gIGltcG9ydCBBdXRoZWQgZnJvbSAnJGNvbXBvbmVudHMvaG9tZS9BdXRoZWQuc3ZlbHRlJ1xuICBpbXBvcnQgUHVibGljIGZyb20gJyRjb21wb25lbnRzL2hvbWUvUHVibGljLnN2ZWx0ZSdcbjwvc2NyaXB0PlxuXG57I2lmICRzZXNzaW9uU3RvcmU/LmF1dGhlZH1cbiAgPEF1dGhlZCAvPlxuezplbHNlfVxuICA8UHVibGljIC8+XG57L2lmfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/routes/+page.svelte\n");
/***/ }),
/***/ "./node_modules/svelte/internal/index.mjs":
/*!************************************************!*\
!*** ./node_modules/svelte/internal/index.mjs ***!
\************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HtmlTag\": () => (/* binding */ HtmlTag),\n/* harmony export */ \"HtmlTagHydration\": () => (/* binding */ HtmlTagHydration),\n/* harmony export */ \"SvelteComponent\": () => (/* binding */ SvelteComponent),\n/* harmony export */ \"SvelteComponentDev\": () => (/* binding */ SvelteComponentDev),\n/* harmony export */ \"SvelteComponentTyped\": () => (/* binding */ SvelteComponentTyped),\n/* harmony export */ \"SvelteElement\": () => (/* binding */ SvelteElement),\n/* harmony export */ \"action_destroyer\": () => (/* binding */ action_destroyer),\n/* harmony export */ \"add_attribute\": () => (/* binding */ add_attribute),\n/* harmony export */ \"add_classes\": () => (/* binding */ add_classes),\n/* harmony export */ \"add_flush_callback\": () => (/* binding */ add_flush_callback),\n/* harmony export */ \"add_location\": () => (/* binding */ add_location),\n/* harmony export */ \"add_render_callback\": () => (/* binding */ add_render_callback),\n/* harmony export */ \"add_resize_listener\": () => (/* binding */ add_resize_listener),\n/* harmony export */ \"add_styles\": () => (/* binding */ add_styles),\n/* harmony export */ \"add_transform\": () => (/* binding */ add_transform),\n/* harmony export */ \"afterUpdate\": () => (/* binding */ afterUpdate),\n/* harmony export */ \"append\": () => (/* binding */ append),\n/* harmony export */ \"append_dev\": () => (/* binding */ append_dev),\n/* harmony export */ \"append_empty_stylesheet\": () => (/* binding */ append_empty_stylesheet),\n/* harmony export */ \"append_hydration\": () => (/* binding */ append_hydration),\n/* harmony export */ \"append_hydration_dev\": () => (/* binding */ append_hydration_dev),\n/* harmony export */ \"append_styles\": () => (/* binding */ append_styles),\n/* harmony export */ \"assign\": () => (/* binding */ assign),\n/* harmony export */ \"attr\": () => (/* binding */ attr),\n/* harmony export */ \"attr_dev\": () => (/* binding */ attr_dev),\n/* harmony export */ \"attribute_to_object\": () => (/* binding */ attribute_to_object),\n/* harmony export */ \"beforeUpdate\": () => (/* binding */ beforeUpdate),\n/* harmony export */ \"bind\": () => (/* binding */ bind),\n/* harmony export */ \"binding_callbacks\": () => (/* binding */ binding_callbacks),\n/* harmony export */ \"blank_object\": () => (/* binding */ blank_object),\n/* harmony export */ \"bubble\": () => (/* binding */ bubble),\n/* harmony export */ \"check_outros\": () => (/* binding */ check_outros),\n/* harmony export */ \"children\": () => (/* binding */ children),\n/* harmony export */ \"claim_component\": () => (/* binding */ claim_component),\n/* harmony export */ \"claim_element\": () => (/* binding */ claim_element),\n/* harmony export */ \"claim_html_tag\": () => (/* binding */ claim_html_tag),\n/* harmony export */ \"claim_space\": () => (/* binding */ claim_space),\n/* harmony export */ \"claim_svg_element\": () => (/* binding */ claim_svg_element),\n/* harmony export */ \"claim_text\": () => (/* binding */ claim_text),\n/* harmony export */ \"clear_loops\": () => (/* binding */ clear_loops),\n/* harmony export */ \"component_subscribe\": () => (/* binding */ component_subscribe),\n/* harmony export */ \"compute_rest_props\": () => (/* binding */ compute_rest_props),\n/* harmony export */ \"compute_slots\": () => (/* binding */ compute_slots),\n/* harmony export */ \"construct_svelte_component\": () => (/* binding */ construct_svelte_component),\n/* harmony export */ \"construct_svelte_component_dev\": () => (/* binding */ construct_svelte_component_dev),\n/* harmony export */ \"createEventDispatcher\": () => (/* binding */ createEventDispatcher),\n/* harmony export */ \"create_animation\": () => (/* binding */ create_animation),\n/* harmony export */ \"create_bidirectional_transition\": () => (/* binding */ create_bidirectional_transition),\n/* harmony export */ \"create_component\": () => (/* binding */ create_component),\n/* harmony export */ \"create_in_transition\": () => (/* binding */ create_in_transition),\n/* harmony export */ \"create_out_transition\": () => (/* binding */ create_out_transition),\n/* harmony export */ \"create_slot\": () => (/* binding */ create_slot),\n/* harmony export */ \"create_ssr_component\": () => (/* binding */ create_ssr_component),\n/* harmony export */ \"current_component\": () => (/* binding */ current_component),\n/* harmony export */ \"custom_event\": () => (/* binding */ custom_event),\n/* harmony export */ \"dataset_dev\": () => (/* binding */ dataset_dev),\n/* harmony export */ \"debug\": () => (/* binding */ debug),\n/* harmony export */ \"destroy_block\": () => (/* binding */ destroy_block),\n/* harmony export */ \"destroy_component\": () => (/* binding */ destroy_component),\n/* harmony export */ \"destroy_each\": () => (/* binding */ destroy_each),\n/* harmony export */ \"detach\": () => (/* binding */ detach),\n/* harmony export */ \"detach_after_dev\": () => (/* binding */ detach_after_dev),\n/* harmony export */ \"detach_before_dev\": () => (/* binding */ detach_before_dev),\n/* harmony export */ \"detach_between_dev\": () => (/* binding */ detach_between_dev),\n/* harmony export */ \"detach_dev\": () => (/* binding */ detach_dev),\n/* harmony export */ \"dirty_components\": () => (/* binding */ dirty_components),\n/* harmony export */ \"dispatch_dev\": () => (/* binding */ dispatch_dev),\n/* harmony export */ \"each\": () => (/* binding */ each),\n/* harmony export */ \"element\": () => (/* binding */ element),\n/* harmony export */ \"element_is\": () => (/* binding */ element_is),\n/* harmony export */ \"empty\": () => (/* binding */ empty),\n/* harmony export */ \"end_hydrating\": () => (/* binding */ end_hydrating),\n/* harmony export */ \"escape\": () => (/* binding */ escape),\n/* harmony export */ \"escape_attribute_value\": () => (/* binding */ escape_attribute_value),\n/* harmony export */ \"escape_object\": () => (/* binding */ escape_object),\n/* harmony export */ \"exclude_internal_props\": () => (/* binding */ exclude_internal_props),\n/* harmony export */ \"fix_and_destroy_block\": () => (/* binding */ fix_and_destroy_block),\n/* harmony export */ \"fix_and_outro_and_destroy_block\": () => (/* binding */ fix_and_outro_and_destroy_block),\n/* harmony export */ \"fix_position\": () => (/* binding */ fix_position),\n/* harmony export */ \"flush\": () => (/* binding */ flush),\n/* harmony export */ \"getAllContexts\": () => (/* binding */ getAllContexts),\n/* harmony export */ \"getContext\": () => (/* binding */ getContext),\n/* harmony export */ \"get_all_dirty_from_scope\": () => (/* binding */ get_all_dirty_from_scope),\n/* harmony export */ \"get_binding_group_value\": () => (/* binding */ get_binding_group_value),\n/* harmony export */ \"get_current_component\": () => (/* binding */ get_current_component),\n/* harmony export */ \"get_custom_elements_slots\": () => (/* binding */ get_custom_elements_slots),\n/* harmony export */ \"get_root_for_style\": () => (/* binding */ get_root_for_style),\n/* harmony export */ \"get_slot_changes\": () => (/* binding */ get_slot_changes),\n/* harmony export */ \"get_spread_object\": () => (/* binding */ get_spread_object),\n/* harmony export */ \"get_spread_update\": () => (/* binding */ get_spread_update),\n/* harmony export */ \"get_store_value\": () => (/* binding */ get_store_value),\n/* harmony export */ \"globals\": () => (/* binding */ globals),\n/* harmony export */ \"group_outros\": () => (/* binding */ group_outros),\n/* harmony export */ \"handle_promise\": () => (/* binding */ handle_promise),\n/* harmony export */ \"hasContext\": () => (/* binding */ hasContext),\n/* harmony export */ \"has_prop\": () => (/* binding */ has_prop),\n/* harmony export */ \"head_selector\": () => (/* binding */ head_selector),\n/* harmony export */ \"identity\": () => (/* binding */ identity),\n/* harmony export */ \"init\": () => (/* binding */ init),\n/* harmony export */ \"insert\": () => (/* binding */ insert),\n/* harmony export */ \"insert_dev\": () => (/* binding */ insert_dev),\n/* harmony export */ \"insert_hydration\": () => (/* binding */ insert_hydration),\n/* harmony export */ \"insert_hydration_dev\": () => (/* binding */ insert_hydration_dev),\n/* harmony export */ \"intros\": () => (/* binding */ intros),\n/* harmony export */ \"invalid_attribute_name_character\": () => (/* binding */ invalid_attribute_name_character),\n/* harmony export */ \"is_client\": () => (/* binding */ is_client),\n/* harmony export */ \"is_crossorigin\": () => (/* binding */ is_crossorigin),\n/* harmony export */ \"is_empty\": () => (/* binding */ is_empty),\n/* harmony export */ \"is_function\": () => (/* binding */ is_function),\n/* harmony export */ \"is_promise\": () => (/* binding */ is_promise),\n/* harmony export */ \"is_void\": () => (/* binding */ is_void),\n/* harmony export */ \"listen\": () => (/* binding */ listen),\n/* harmony export */ \"listen_dev\": () => (/* binding */ listen_dev),\n/* harmony export */ \"loop\": () => (/* binding */ loop),\n/* harmony export */ \"loop_guard\": () => (/* binding */ loop_guard),\n/* harmony export */ \"merge_ssr_styles\": () => (/* binding */ merge_ssr_styles),\n/* harmony export */ \"missing_component\": () => (/* binding */ missing_component),\n/* harmony export */ \"mount_component\": () => (/* binding */ mount_component),\n/* harmony export */ \"noop\": () => (/* binding */ noop),\n/* harmony export */ \"not_equal\": () => (/* binding */ not_equal),\n/* harmony export */ \"now\": () => (/* binding */ now),\n/* harmony export */ \"null_to_empty\": () => (/* binding */ null_to_empty),\n/* harmony export */ \"object_without_properties\": () => (/* binding */ object_without_properties),\n/* harmony export */ \"onDestroy\": () => (/* binding */ onDestroy),\n/* harmony export */ \"onMount\": () => (/* binding */ onMount),\n/* harmony export */ \"once\": () => (/* binding */ once),\n/* harmony export */ \"outro_and_destroy_block\": () => (/* binding */ outro_and_destroy_block),\n/* harmony export */ \"prevent_default\": () => (/* binding */ prevent_default),\n/* harmony export */ \"prop_dev\": () => (/* binding */ prop_dev),\n/* harmony export */ \"query_selector_all\": () => (/* binding */ query_selector_all),\n/* harmony export */ \"raf\": () => (/* binding */ raf),\n/* harmony export */ \"run\": () => (/* binding */ run),\n/* harmony export */ \"run_all\": () => (/* binding */ run_all),\n/* harmony export */ \"safe_not_equal\": () => (/* binding */ safe_not_equal),\n/* harmony export */ \"schedule_update\": () => (/* binding */ schedule_update),\n/* harmony export */ \"select_multiple_value\": () => (/* binding */ select_multiple_value),\n/* harmony export */ \"select_option\": () => (/* binding */ select_option),\n/* harmony export */ \"select_options\": () => (/* binding */ select_options),\n/* harmony export */ \"select_value\": () => (/* binding */ select_value),\n/* harmony export */ \"self\": () => (/* binding */ self),\n/* harmony export */ \"setContext\": () => (/* binding */ setContext),\n/* harmony export */ \"set_attributes\": () => (/* binding */ set_attributes),\n/* harmony export */ \"set_current_component\": () => (/* binding */ set_current_component),\n/* harmony export */ \"set_custom_element_data\": () => (/* binding */ set_custom_element_data),\n/* harmony export */ \"set_custom_element_data_map\": () => (/* binding */ set_custom_element_data_map),\n/* harmony export */ \"set_data\": () => (/* binding */ set_data),\n/* harmony export */ \"set_data_dev\": () => (/* binding */ set_data_dev),\n/* harmony export */ \"set_input_type\": () => (/* binding */ set_input_type),\n/* harmony export */ \"set_input_value\": () => (/* binding */ set_input_value),\n/* harmony export */ \"set_now\": () => (/* binding */ set_now),\n/* harmony export */ \"set_raf\": () => (/* binding */ set_raf),\n/* harmony export */ \"set_store_value\": () => (/* binding */ set_store_value),\n/* harmony export */ \"set_style\": () => (/* binding */ set_style),\n/* harmony export */ \"set_svg_attributes\": () => (/* binding */ set_svg_attributes),\n/* harmony export */ \"space\": () => (/* binding */ space),\n/* harmony export */ \"spread\": () => (/* binding */ spread),\n/* harmony export */ \"src_url_equal\": () => (/* binding */ src_url_equal),\n/* harmony export */ \"start_hydrating\": () => (/* binding */ start_hydrating),\n/* harmony export */ \"stop_propagation\": () => (/* binding */ stop_propagation),\n/* harmony export */ \"subscribe\": () => (/* binding */ subscribe),\n/* harmony export */ \"svg_element\": () => (/* binding */ svg_element),\n/* harmony export */ \"text\": () => (/* binding */ text),\n/* harmony export */ \"tick\": () => (/* binding */ tick),\n/* harmony export */ \"time_ranges_to_array\": () => (/* binding */ time_ranges_to_array),\n/* harmony export */ \"to_number\": () => (/* binding */ to_number),\n/* harmony export */ \"toggle_class\": () => (/* binding */ toggle_class),\n/* harmony export */ \"transition_in\": () => (/* binding */ transition_in),\n/* harmony export */ \"transition_out\": () => (/* binding */ transition_out),\n/* harmony export */ \"trusted\": () => (/* binding */ trusted),\n/* harmony export */ \"update_await_block_branch\": () => (/* binding */ update_await_block_branch),\n/* harmony export */ \"update_keyed_each\": () => (/* binding */ update_keyed_each),\n/* harmony export */ \"update_slot\": () => (/* binding */ update_slot),\n/* harmony export */ \"update_slot_base\": () => (/* binding */ update_slot_base),\n/* harmony export */ \"validate_component\": () => (/* binding */ validate_component),\n/* harmony export */ \"validate_dynamic_element\": () => (/* binding */ validate_dynamic_element),\n/* harmony export */ \"validate_each_argument\": () => (/* binding */ validate_each_argument),\n/* harmony export */ \"validate_each_keys\": () => (/* binding */ validate_each_keys),\n/* harmony export */ \"validate_slots\": () => (/* binding */ validate_slots),\n/* harmony export */ \"validate_store\": () => (/* binding */ validate_store),\n/* harmony export */ \"validate_void_dynamic_element\": () => (/* binding */ validate_void_dynamic_element),\n/* harmony export */ \"xlink_attr\": () => (/* binding */ xlink_attr)\n/* harmony export */ });\nfunction noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\nfunction is_promise(value) {\n return !!value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n else\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { ownerNode } = info.stylesheet;\n // there is no ownerNode if it runs on jsdom.\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs#run-time-svelte-beforeupdate\n */\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n */\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs#run-time-svelte-ondestroy\n */\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * https://svelte.dev/docs#run-time-svelte-createeventdispatcher\n */\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-setcontext\n */\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-getcontext\n */\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs#run-time-svelte-getallcontexts\n */\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-hascontext\n */\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n // Do not reenter flush while dirty components are updated, as this can\n // result in an infinite loop. Instead, let the inner flush handle it.\n // Reentrancy is ok afterwards for bindings etc.\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n }\n catch (e) {\n // reset dirty state to not end up in a deadlocked state and then rethrow\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n const options = { direction: 'in' };\n let config = fn(node, params, options);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config(options);\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n const options = { direction: 'out' };\n let config = fn(node, params, options);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n const options = { direction: 'both' };\n let config = fn(node, params, options);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\n/** regex of all html void element names */\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&amp;' : (ch === '\"' ? '&quot;' : '&lt;'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${escape_attribute_value(style_object[key])};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.55.1' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n console.warn(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\nfunction construct_svelte_component_dev(component, props) {\n const error_message = 'this={...} of <svelte:component> should specify a Svelte component.';\n try {\n const instance = new component(props);\n if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n throw new Error(error_message);\n }\n return instance;\n }\n catch (err) {\n const { message } = err;\n if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n throw new Error(error_message);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlL2ludGVybmFsL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixLQUFLO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFNBQVM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHlCQUF5QjtBQUN4RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxVQUFVO0FBQzdDO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixtQkFBbUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLElBQUk7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkMscUJBQXFCLDRDQUE0QztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELFFBQVE7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRCQUE0QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpRUFBaUU7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRCxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU87QUFDclg7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsS0FBSyxJQUFJLE1BQU07QUFDdEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DLDBEQUEwRCxZQUFZO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsY0FBYztBQUMzQjtBQUNBLHFCQUFxQixPQUFPO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsWUFBWTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU0d0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teXNlZWxpYS8uL25vZGVfbW9kdWxlcy9zdmVsdGUvaW50ZXJuYWwvaW5kZXgubWpzPzQzNzIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbm9vcCgpIHsgfVxuY29uc3QgaWRlbnRpdHkgPSB4ID0+IHg7XG5mdW5jdGlvbiBhc3NpZ24odGFyLCBzcmMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZm9yIChjb25zdCBrIGluIHNyYylcbiAgICAgICAgdGFyW2tdID0gc3JjW2tdO1xuICAgIHJldHVybiB0YXI7XG59XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3RoZW4vaXMtcHJvbWlzZS9ibG9iL21hc3Rlci9pbmRleC5qc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgTUlUIExpY2Vuc2UgaHR0cHM6Ly9naXRodWIuY29tL3RoZW4vaXMtcHJvbWlzZS9ibG9iL21hc3Rlci9MSUNFTlNFXG5mdW5jdGlvbiBpc19wcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGFkZF9sb2NhdGlvbihlbGVtZW50LCBmaWxlLCBsaW5lLCBjb2x1bW4sIGNoYXIpIHtcbiAgICBlbGVtZW50Ll9fc3ZlbHRlX21ldGEgPSB7XG4gICAgICAgIGxvYzogeyBmaWxlLCBsaW5lLCBjb2x1bW4sIGNoYXIgfVxuICAgIH07XG59XG5mdW5jdGlvbiBydW4oZm4pIHtcbiAgICByZXR1cm4gZm4oKTtcbn1cbmZ1bmN0aW9uIGJsYW5rX29iamVjdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cbmZ1bmN0aW9uIHJ1bl9hbGwoZm5zKSB7XG4gICAgZm5zLmZvckVhY2gocnVuKTtcbn1cbmZ1bmN0aW9uIGlzX2Z1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIHNhZmVfbm90X2VxdWFsKGEsIGIpIHtcbiAgICByZXR1cm4gYSAhPSBhID8gYiA9PSBiIDogYSAhPT0gYiB8fCAoKGEgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB8fCB0eXBlb2YgYSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5sZXQgc3JjX3VybF9lcXVhbF9hbmNob3I7XG5mdW5jdGlvbiBzcmNfdXJsX2VxdWFsKGVsZW1lbnRfc3JjLCB1cmwpIHtcbiAgICBpZiAoIXNyY191cmxfZXF1YWxfYW5jaG9yKSB7XG4gICAgICAgIHNyY191cmxfZXF1YWxfYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIH1cbiAgICBzcmNfdXJsX2VxdWFsX2FuY2hvci5ocmVmID0gdXJsO1xuICAgIHJldHVybiBlbGVtZW50X3NyYyA9PT0gc3JjX3VybF9lcXVhbF9hbmNob3IuaHJlZjtcbn1cbmZ1bmN0aW9uIG5vdF9lcXVhbChhLCBiKSB7XG4gICAgcmV0dXJuIGEgIT0gYSA/IGIgPT0gYiA6IGEgIT09IGI7XG59XG5mdW5jdGlvbiBpc19lbXB0eShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV9zdG9yZShzdG9yZSwgbmFtZSkge1xuICAgIGlmIChzdG9yZSAhPSBudWxsICYmIHR5cGVvZiBzdG9yZS5zdWJzY3JpYmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuYW1lfScgaXMgbm90IGEgc3RvcmUgd2l0aCBhICdzdWJzY3JpYmUnIG1ldGhvZGApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN1YnNjcmliZShzdG9yZSwgLi4uY2FsbGJhY2tzKSB7XG4gICAgaWYgKHN0b3JlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICAgIGNvbnN0IHVuc3ViID0gc3RvcmUuc3Vic2NyaWJlKC4uLmNhbGxiYWNrcyk7XG4gICAgcmV0dXJuIHVuc3ViLnVuc3Vic2NyaWJlID8gKCkgPT4gdW5zdWIudW5zdWJzY3JpYmUoKSA6IHVuc3ViO1xufVxuZnVuY3Rpb24gZ2V0X3N0b3JlX3ZhbHVlKHN0b3JlKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIHN1YnNjcmliZShzdG9yZSwgXyA9PiB2YWx1ZSA9IF8pKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gY29tcG9uZW50X3N1YnNjcmliZShjb21wb25lbnQsIHN0b3JlLCBjYWxsYmFjaykge1xuICAgIGNvbXBvbmVudC4kJC5vbl9kZXN0cm95LnB1c2goc3Vic2NyaWJlKHN0b3JlLCBjYWxsYmFjaykpO1xufVxuZnVuY3Rpb24gY3JlYXRlX3Nsb3QoZGVmaW5pdGlvbiwgY3R4LCAkJHNjb3BlLCBmbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNsb3RfY3R4ID0gZ2V0X3Nsb3RfY29udGV4dChkZWZpbml0aW9uLCBjdHgsICQkc2NvcGUsIGZuKTtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bMF0oc2xvdF9jdHgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldF9zbG90X2NvbnRleHQoZGVmaW5pdGlvbiwgY3R4LCAkJHNjb3BlLCBmbikge1xuICAgIHJldHVybiBkZWZpbml0aW9uWzFdICYmIGZuXG4gICAgICAgID8gYXNzaWduKCQkc2NvcGUuY3R4LnNsaWNlKCksIGRlZmluaXRpb25bMV0oZm4oY3R4KSkpXG4gICAgICAgIDogJCRzY29wZS5jdHg7XG59XG5mdW5jdGlvbiBnZXRfc2xvdF9jaGFuZ2VzKGRlZmluaXRpb24sICQkc2NvcGUsIGRpcnR5LCBmbikge1xuICAgIGlmIChkZWZpbml0aW9uWzJdICYmIGZuKSB7XG4gICAgICAgIGNvbnN0IGxldHMgPSBkZWZpbml0aW9uWzJdKGZuKGRpcnR5KSk7XG4gICAgICAgIGlmICgkJHNjb3BlLmRpcnR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGV0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gTWF0aC5tYXgoJCRzY29wZS5kaXJ0eS5sZW5ndGgsIGxldHMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBtZXJnZWRbaV0gPSAkJHNjb3BlLmRpcnR5W2ldIHwgbGV0c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICQkc2NvcGUuZGlydHkgfCBsZXRzO1xuICAgIH1cbiAgICByZXR1cm4gJCRzY29wZS5kaXJ0eTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZV9zbG90X2Jhc2Uoc2xvdCwgc2xvdF9kZWZpbml0aW9uLCBjdHgsICQkc2NvcGUsIHNsb3RfY2hhbmdlcywgZ2V0X3Nsb3RfY29udGV4dF9mbikge1xuICAgIGlmIChzbG90X2NoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qgc2xvdF9jb250ZXh0ID0gZ2V0X3Nsb3RfY29udGV4dChzbG90X2RlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZ2V0X3Nsb3RfY29udGV4dF9mbik7XG4gICAgICAgIHNsb3QucChzbG90X2NvbnRleHQsIHNsb3RfY2hhbmdlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlX3Nsb3Qoc2xvdCwgc2xvdF9kZWZpbml0aW9uLCBjdHgsICQkc2NvcGUsIGRpcnR5LCBnZXRfc2xvdF9jaGFuZ2VzX2ZuLCBnZXRfc2xvdF9jb250ZXh0X2ZuKSB7XG4gICAgY29uc3Qgc2xvdF9jaGFuZ2VzID0gZ2V0X3Nsb3RfY2hhbmdlcyhzbG90X2RlZmluaXRpb24sICQkc2NvcGUsIGRpcnR5LCBnZXRfc2xvdF9jaGFuZ2VzX2ZuKTtcbiAgICB1cGRhdGVfc2xvdF9iYXNlKHNsb3QsIHNsb3RfZGVmaW5pdGlvbiwgY3R4LCAkJHNjb3BlLCBzbG90X2NoYW5nZXMsIGdldF9zbG90X2NvbnRleHRfZm4pO1xufVxuZnVuY3Rpb24gZ2V0X2FsbF9kaXJ0eV9mcm9tX3Njb3BlKCQkc2NvcGUpIHtcbiAgICBpZiAoJCRzY29wZS5jdHgubGVuZ3RoID4gMzIpIHtcbiAgICAgICAgY29uc3QgZGlydHkgPSBbXTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gJCRzY29wZS5jdHgubGVuZ3RoIC8gMzI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRpcnR5W2ldID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5mdW5jdGlvbiBleGNsdWRlX2ludGVybmFsX3Byb3BzKHByb3BzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrIGluIHByb3BzKVxuICAgICAgICBpZiAoa1swXSAhPT0gJyQnKVxuICAgICAgICAgICAgcmVzdWx0W2tdID0gcHJvcHNba107XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVfcmVzdF9wcm9wcyhwcm9wcywga2V5cykge1xuICAgIGNvbnN0IHJlc3QgPSB7fTtcbiAgICBrZXlzID0gbmV3IFNldChrZXlzKTtcbiAgICBmb3IgKGNvbnN0IGsgaW4gcHJvcHMpXG4gICAgICAgIGlmICgha2V5cy5oYXMoaykgJiYga1swXSAhPT0gJyQnKVxuICAgICAgICAgICAgcmVzdFtrXSA9IHByb3BzW2tdO1xuICAgIHJldHVybiByZXN0O1xufVxuZnVuY3Rpb24gY29tcHV0ZV9zbG90cyhzbG90cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNsb3RzKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICBsZXQgcmFuID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGlmIChyYW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJhbiA9IHRydWU7XG4gICAgICAgIGZuLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG51bGxfdG9fZW1wdHkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XG59XG5mdW5jdGlvbiBzZXRfc3RvcmVfdmFsdWUoc3RvcmUsIHJldCwgdmFsdWUpIHtcbiAgICBzdG9yZS5zZXQodmFsdWUpO1xuICAgIHJldHVybiByZXQ7XG59XG5jb25zdCBoYXNfcHJvcCA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xuZnVuY3Rpb24gYWN0aW9uX2Rlc3Ryb3llcihhY3Rpb25fcmVzdWx0KSB7XG4gICAgcmV0dXJuIGFjdGlvbl9yZXN1bHQgJiYgaXNfZnVuY3Rpb24oYWN0aW9uX3Jlc3VsdC5kZXN0cm95KSA/IGFjdGlvbl9yZXN1bHQuZGVzdHJveSA6IG5vb3A7XG59XG5cbmNvbnN0IGlzX2NsaWVudCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xubGV0IG5vdyA9IGlzX2NsaWVudFxuICAgID8gKCkgPT4gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpXG4gICAgOiAoKSA9PiBEYXRlLm5vdygpO1xubGV0IHJhZiA9IGlzX2NsaWVudCA/IGNiID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYikgOiBub29wO1xuLy8gdXNlZCBpbnRlcm5hbGx5IGZvciB0ZXN0aW5nXG5mdW5jdGlvbiBzZXRfbm93KGZuKSB7XG4gICAgbm93ID0gZm47XG59XG5mdW5jdGlvbiBzZXRfcmFmKGZuKSB7XG4gICAgcmFmID0gZm47XG59XG5cbmNvbnN0IHRhc2tzID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gcnVuX3Rhc2tzKG5vdykge1xuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB7XG4gICAgICAgIGlmICghdGFzay5jKG5vdykpIHtcbiAgICAgICAgICAgIHRhc2tzLmRlbGV0ZSh0YXNrKTtcbiAgICAgICAgICAgIHRhc2suZigpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRhc2tzLnNpemUgIT09IDApXG4gICAgICAgIHJhZihydW5fdGFza3MpO1xufVxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5IVxuICovXG5mdW5jdGlvbiBjbGVhcl9sb29wcygpIHtcbiAgICB0YXNrcy5jbGVhcigpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRhc2sgdGhhdCBydW5zIG9uIGVhY2ggcmFmIGZyYW1lXG4gKiB1bnRpbCBpdCByZXR1cm5zIGEgZmFsc3kgdmFsdWUgb3IgaXMgYWJvcnRlZFxuICovXG5mdW5jdGlvbiBsb29wKGNhbGxiYWNrKSB7XG4gICAgbGV0IHRhc2s7XG4gICAgaWYgKHRhc2tzLnNpemUgPT09IDApXG4gICAgICAgIHJhZihydW5fdGFza3MpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb21pc2U6IG5ldyBQcm9taXNlKGZ1bGZpbGwgPT4ge1xuICAgICAgICAgICAgdGFza3MuYWRkKHRhc2sgPSB7IGM6IGNhbGxiYWNrLCBmOiBmdWxmaWxsIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgYWJvcnQoKSB7XG4gICAgICAgICAgICB0YXNrcy5kZWxldGUodGFzayk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vLyBUcmFjayB3aGljaCBub2RlcyBhcmUgY2xhaW1lZCBkdXJpbmcgaHlkcmF0aW9uLiBVbmNsYWltZWQgbm9kZXMgY2FuIHRoZW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBET01cbi8vIGF0IHRoZSBlbmQgb2YgaHlkcmF0aW9uIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHJlbWFpbmluZyBub2Rlcy5cbmxldCBpc19oeWRyYXRpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIHN0YXJ0X2h5ZHJhdGluZygpIHtcbiAgICBpc19oeWRyYXRpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gZW5kX2h5ZHJhdGluZygpIHtcbiAgICBpc19oeWRyYXRpbmcgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIHVwcGVyX2JvdW5kKGxvdywgaGlnaCwga2V5LCB2YWx1ZSkge1xuICAgIC8vIFJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZSBsYXJnZXIgdGhhbiBpbnB1dCB2YWx1ZSBpbiB0aGUgcmFuZ2UgW2xvdywgaGlnaClcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICBjb25zdCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpID4+IDEpO1xuICAgICAgICBpZiAoa2V5KG1pZCkgPD0gdmFsdWUpIHtcbiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG59XG5mdW5jdGlvbiBpbml0X2h5ZHJhdGUodGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldC5oeWRyYXRlX2luaXQpXG4gICAgICAgIHJldHVybjtcbiAgICB0YXJnZXQuaHlkcmF0ZV9pbml0ID0gdHJ1ZTtcbiAgICAvLyBXZSBrbm93IHRoYXQgYWxsIGNoaWxkcmVuIGhhdmUgY2xhaW1fb3JkZXIgdmFsdWVzIHNpbmNlIHRoZSB1bmNsYWltZWQgaGF2ZSBiZWVuIGRldGFjaGVkIGlmIHRhcmdldCBpcyBub3QgPGhlYWQ+XG4gICAgbGV0IGNoaWxkcmVuID0gdGFyZ2V0LmNoaWxkTm9kZXM7XG4gICAgLy8gSWYgdGFyZ2V0IGlzIDxoZWFkPiwgdGhlcmUgbWF5IGJlIGNoaWxkcmVuIHdpdGhvdXQgY2xhaW1fb3JkZXJcbiAgICBpZiAodGFyZ2V0Lm5vZGVOYW1lID09PSAnSEVBRCcpIHtcbiAgICAgICAgY29uc3QgbXlDaGlsZHJlbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAobm9kZS5jbGFpbV9vcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbXlDaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoaWxkcmVuID0gbXlDaGlsZHJlbjtcbiAgICB9XG4gICAgLypcbiAgICAqIFJlb3JkZXIgY2xhaW1lZCBjaGlsZHJlbiBvcHRpbWFsbHkuXG4gICAgKiBXZSBjYW4gcmVvcmRlciBjbGFpbWVkIGNoaWxkcmVuIG9wdGltYWxseSBieSBmaW5kaW5nIHRoZSBsb25nZXN0IHN1YnNlcXVlbmNlIG9mXG4gICAgKiBub2RlcyB0aGF0IGFyZSBhbHJlYWR5IGNsYWltZWQgaW4gb3JkZXIgYW5kIG9ubHkgbW92aW5nIHRoZSByZXN0LiBUaGUgbG9uZ2VzdFxuICAgICogc3Vic2VxdWVuY2Ugb2Ygbm9kZXMgdGhhdCBhcmUgY2xhaW1lZCBpbiBvcmRlciBjYW4gYmUgZm91bmQgYnlcbiAgICAqIGNvbXB1dGluZyB0aGUgbG9uZ2VzdCBpbmNyZWFzaW5nIHN1YnNlcXVlbmNlIG9mIC5jbGFpbV9vcmRlciB2YWx1ZXMuXG4gICAgKlxuICAgICogVGhpcyBhbGdvcml0aG0gaXMgb3B0aW1hbCBpbiBnZW5lcmF0aW5nIHRoZSBsZWFzdCBhbW91bnQgb2YgcmVvcmRlciBvcGVyYXRpb25zXG4gICAgKiBwb3NzaWJsZS5cbiAgICAqXG4gICAgKiBQcm9vZjpcbiAgICAqIFdlIGtub3cgdGhhdCwgZ2l2ZW4gYSBzZXQgb2YgcmVvcmRlcmluZyBvcGVyYXRpb25zLCB0aGUgbm9kZXMgdGhhdCBkbyBub3QgbW92ZVxuICAgICogYWx3YXlzIGZvcm0gYW4gaW5jcmVhc2luZyBzdWJzZXF1ZW5jZSwgc2luY2UgdGhleSBkbyBub3QgbW92ZSBhbW9uZyBlYWNoIG90aGVyXG4gICAgKiBtZWFuaW5nIHRoYXQgdGhleSBtdXN0IGJlIGFscmVhZHkgb3JkZXJlZCBhbW9uZyBlYWNoIG90aGVyLiBUaHVzLCB0aGUgbWF4aW1hbFxuICAgICogc2V0IG9mIG5vZGVzIHRoYXQgZG8gbm90IG1vdmUgZm9ybSBhIGxvbmdlc3QgaW5jcmVhc2luZyBzdWJzZXF1ZW5jZS5cbiAgICAqL1xuICAgIC8vIENvbXB1dGUgbG9uZ2VzdCBpbmNyZWFzaW5nIHN1YnNlcXVlbmNlXG4gICAgLy8gbTogc3Vic2VxdWVuY2UgbGVuZ3RoIGogPT4gaW5kZXggayBvZiBzbWFsbGVzdCB2YWx1ZSB0aGF0IGVuZHMgYW4gaW5jcmVhc2luZyBzdWJzZXF1ZW5jZSBvZiBsZW5ndGggalxuICAgIGNvbnN0IG0gPSBuZXcgSW50MzJBcnJheShjaGlsZHJlbi5sZW5ndGggKyAxKTtcbiAgICAvLyBQcmVkZWNlc3NvciBpbmRpY2VzICsgMVxuICAgIGNvbnN0IHAgPSBuZXcgSW50MzJBcnJheShjaGlsZHJlbi5sZW5ndGgpO1xuICAgIG1bMF0gPSAtMTtcbiAgICBsZXQgbG9uZ2VzdCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gY2hpbGRyZW5baV0uY2xhaW1fb3JkZXI7XG4gICAgICAgIC8vIEZpbmQgdGhlIGxhcmdlc3Qgc3Vic2VxdWVuY2UgbGVuZ3RoIHN1Y2ggdGhhdCBpdCBlbmRzIGluIGEgdmFsdWUgbGVzcyB0aGFuIG91ciBjdXJyZW50IHZhbHVlXG4gICAgICAgIC8vIHVwcGVyX2JvdW5kIHJldHVybnMgZmlyc3QgZ3JlYXRlciB2YWx1ZSwgc28gd2Ugc3VidHJhY3Qgb25lXG4gICAgICAgIC8vIHdpdGggZmFzdCBwYXRoIGZvciB3aGVuIHdlIGFyZSBvbiB0aGUgY3VycmVudCBsb25nZXN0IHN1YnNlcXVlbmNlXG4gICAgICAgIGNvbnN0IHNlcUxlbiA9ICgobG9uZ2VzdCA+IDAgJiYgY2hpbGRyZW5bbVtsb25nZXN0XV0uY2xhaW1fb3JkZXIgPD0gY3VycmVudCkgPyBsb25nZXN0ICsgMSA6IHVwcGVyX2JvdW5kKDEsIGxvbmdlc3QsIGlkeCA9PiBjaGlsZHJlblttW2lkeF1dLmNsYWltX29yZGVyLCBjdXJyZW50KSkgLSAxO1xuICAgICAgICBwW2ldID0gbVtzZXFMZW5dICsgMTtcbiAgICAgICAgY29uc3QgbmV3TGVuID0gc2VxTGVuICsgMTtcbiAgICAgICAgLy8gV2UgY2FuIGd1YXJhbnRlZSB0aGF0IGN1cnJlbnQgaXMgdGhlIHNtYWxsZXN0IHZhbHVlLiBPdGhlcndpc2UsIHdlIHdvdWxkIGhhdmUgZ2VuZXJhdGVkIGEgbG9uZ2VyIHNlcXVlbmNlLlxuICAgICAgICBtW25ld0xlbl0gPSBpO1xuICAgICAgICBsb25nZXN0ID0gTWF0aC5tYXgobmV3TGVuLCBsb25nZXN0KTtcbiAgICB9XG4gICAgLy8gVGhlIGxvbmdlc3QgaW5jcmVhc2luZyBzdWJzZXF1ZW5jZSBvZiBub2RlcyAoaW5pdGlhbGx5IHJldmVyc2VkKVxuICAgIGNvbnN0IGxpcyA9IFtdO1xuICAgIC8vIFRoZSByZXN0IG9mIHRoZSBub2Rlcywgbm9kZXMgdGhhdCB3aWxsIGJlIG1vdmVkXG4gICAgY29uc3QgdG9Nb3ZlID0gW107XG4gICAgbGV0IGxhc3QgPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGN1ciA9IG1bbG9uZ2VzdF0gKyAxOyBjdXIgIT0gMDsgY3VyID0gcFtjdXIgLSAxXSkge1xuICAgICAgICBsaXMucHVzaChjaGlsZHJlbltjdXIgLSAxXSk7XG4gICAgICAgIGZvciAoOyBsYXN0ID49IGN1cjsgbGFzdC0tKSB7XG4gICAgICAgICAgICB0b01vdmUucHVzaChjaGlsZHJlbltsYXN0XSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdC0tO1xuICAgIH1cbiAgICBmb3IgKDsgbGFzdCA+PSAwOyBsYXN0LS0pIHtcbiAgICAgICAgdG9Nb3ZlLnB1c2goY2hpbGRyZW5bbGFzdF0pO1xuICAgIH1cbiAgICBsaXMucmV2ZXJzZSgpO1xuICAgIC8vIFdlIHNvcnQgdGhlIG5vZGVzIGJlaW5nIG1vdmVkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZWlyIGluc2VydGlvbiBvcmRlciBtYXRjaGVzIHRoZSBjbGFpbSBvcmRlclxuICAgIHRvTW92ZS5zb3J0KChhLCBiKSA9PiBhLmNsYWltX29yZGVyIC0gYi5jbGFpbV9vcmRlcik7XG4gICAgLy8gRmluYWxseSwgd2UgbW92ZSB0aGUgbm9kZXNcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCB0b01vdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2hpbGUgKGogPCBsaXMubGVuZ3RoICYmIHRvTW92ZVtpXS5jbGFpbV9vcmRlciA+PSBsaXNbal0uY2xhaW1fb3JkZXIpIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmNob3IgPSBqIDwgbGlzLmxlbmd0aCA/IGxpc1tqXSA6IG51bGw7XG4gICAgICAgIHRhcmdldC5pbnNlcnRCZWZvcmUodG9Nb3ZlW2ldLCBhbmNob3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFwcGVuZCh0YXJnZXQsIG5vZGUpIHtcbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQobm9kZSk7XG59XG5mdW5jdGlvbiBhcHBlbmRfc3R5bGVzKHRhcmdldCwgc3R5bGVfc2hlZXRfaWQsIHN0eWxlcykge1xuICAgIGNvbnN0IGFwcGVuZF9zdHlsZXNfdG8gPSBnZXRfcm9vdF9mb3Jfc3R5bGUodGFyZ2V0KTtcbiAgICBpZiAoIWFwcGVuZF9zdHlsZXNfdG8uZ2V0RWxlbWVudEJ5SWQoc3R5bGVfc2hlZXRfaWQpKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGUuaWQgPSBzdHlsZV9zaGVldF9pZDtcbiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBzdHlsZXM7XG4gICAgICAgIGFwcGVuZF9zdHlsZXNoZWV0KGFwcGVuZF9zdHlsZXNfdG8sIHN0eWxlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRfcm9vdF9mb3Jfc3R5bGUobm9kZSkge1xuICAgIGlmICghbm9kZSlcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIGNvbnN0IHJvb3QgPSBub2RlLmdldFJvb3ROb2RlID8gbm9kZS5nZXRSb290Tm9kZSgpIDogbm9kZS5vd25lckRvY3VtZW50O1xuICAgIGlmIChyb290ICYmIHJvb3QuaG9zdCkge1xuICAgICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudDtcbn1cbmZ1bmN0aW9uIGFwcGVuZF9lbXB0eV9zdHlsZXNoZWV0KG5vZGUpIHtcbiAgICBjb25zdCBzdHlsZV9lbGVtZW50ID0gZWxlbWVudCgnc3R5bGUnKTtcbiAgICBhcHBlbmRfc3R5bGVzaGVldChnZXRfcm9vdF9mb3Jfc3R5bGUobm9kZSksIHN0eWxlX2VsZW1lbnQpO1xuICAgIHJldHVybiBzdHlsZV9lbGVtZW50LnNoZWV0O1xufVxuZnVuY3Rpb24gYXBwZW5kX3N0eWxlc2hlZXQobm9kZSwgc3R5bGUpIHtcbiAgICBhcHBlbmQobm9kZS5oZWFkIHx8IG5vZGUsIHN0eWxlKTtcbiAgICByZXR1cm4gc3R5bGUuc2hlZXQ7XG59XG5mdW5jdGlvbiBhcHBlbmRfaHlkcmF0aW9uKHRhcmdldCwgbm9kZSkge1xuICAgIGlmIChpc19oeWRyYXRpbmcpIHtcbiAgICAgICAgaW5pdF9oeWRyYXRlKHRhcmdldCk7XG4gICAgICAgIGlmICgodGFyZ2V0LmFjdHVhbF9lbmRfY2hpbGQgPT09IHVuZGVmaW5lZCkgfHwgKCh0YXJnZXQuYWN0dWFsX2VuZF9jaGlsZCAhPT0gbnVsbCkgJiYgKHRhcmdldC5hY3R1YWxfZW5kX2NoaWxkLnBhcmVudE5vZGUgIT09IHRhcmdldCkpKSB7XG4gICAgICAgICAgICB0YXJnZXQuYWN0dWFsX2VuZF9jaGlsZCA9IHRhcmdldC5maXJzdENoaWxkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNraXAgbm9kZXMgb2YgdW5kZWZpbmVkIG9yZGVyaW5nXG4gICAgICAgIHdoaWxlICgodGFyZ2V0LmFjdHVhbF9lbmRfY2hpbGQgIT09IG51bGwpICYmICh0YXJnZXQuYWN0dWFsX2VuZF9jaGlsZC5jbGFpbV9vcmRlciA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LmFjdHVhbF9lbmRfY2hpbGQgPSB0YXJnZXQuYWN0dWFsX2VuZF9jaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSAhPT0gdGFyZ2V0LmFjdHVhbF9lbmRfY2hpbGQpIHtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgaW5zZXJ0IGlmIHRoZSBvcmRlcmluZyBvZiB0aGlzIG5vZGUgc2hvdWxkIGJlIG1vZGlmaWVkIG9yIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgdGFyZ2V0XG4gICAgICAgICAgICBpZiAobm9kZS5jbGFpbV9vcmRlciAhPT0gdW5kZWZpbmVkIHx8IG5vZGUucGFyZW50Tm9kZSAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShub2RlLCB0YXJnZXQuYWN0dWFsX2VuZF9jaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQuYWN0dWFsX2VuZF9jaGlsZCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlICE9PSB0YXJnZXQgfHwgbm9kZS5uZXh0U2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0KHRhcmdldCwgbm9kZSwgYW5jaG9yKSB7XG4gICAgdGFyZ2V0Lmluc2VydEJlZm9yZShub2RlLCBhbmNob3IgfHwgbnVsbCk7XG59XG5mdW5jdGlvbiBpbnNlcnRfaHlkcmF0aW9uKHRhcmdldCwgbm9kZSwgYW5jaG9yKSB7XG4gICAgaWYgKGlzX2h5ZHJhdGluZyAmJiAhYW5jaG9yKSB7XG4gICAgICAgIGFwcGVuZF9oeWRyYXRpb24odGFyZ2V0LCBub2RlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlICE9PSB0YXJnZXQgfHwgbm9kZS5uZXh0U2libGluZyAhPSBhbmNob3IpIHtcbiAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShub2RlLCBhbmNob3IgfHwgbnVsbCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGV0YWNoKG5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZXN0cm95X2VhY2goaXRlcmF0aW9ucywgZGV0YWNoaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChpdGVyYXRpb25zW2ldKVxuICAgICAgICAgICAgaXRlcmF0aW9uc1tpXS5kKGRldGFjaGluZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XG59XG5mdW5jdGlvbiBlbGVtZW50X2lzKG5hbWUsIGlzKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSwgeyBpcyB9KTtcbn1cbmZ1bmN0aW9uIG9iamVjdF93aXRob3V0X3Byb3BlcnRpZXMob2JqLCBleGNsdWRlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZm9yIChjb25zdCBrIGluIG9iaikge1xuICAgICAgICBpZiAoaGFzX3Byb3Aob2JqLCBrKVxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgJiYgZXhjbHVkZS5pbmRleE9mKGspID09PSAtMSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGFyZ2V0W2tdID0gb2JqW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBzdmdfZWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBuYW1lKTtcbn1cbmZ1bmN0aW9uIHRleHQoZGF0YSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhKTtcbn1cbmZ1bmN0aW9uIHNwYWNlKCkge1xuICAgIHJldHVybiB0ZXh0KCcgJyk7XG59XG5mdW5jdGlvbiBlbXB0eSgpIHtcbiAgICByZXR1cm4gdGV4dCgnJyk7XG59XG5mdW5jdGlvbiBsaXN0ZW4obm9kZSwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcHJldmVudF9kZWZhdWx0KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gc3RvcF9wcm9wYWdhdGlvbihmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH07XG59XG5mdW5jdGlvbiBzZWxmKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMpXG4gICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gdHJ1c3RlZChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKVxuICAgICAgICAgICAgZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGF0dHIobm9kZSwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIGVsc2UgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgIT09IHZhbHVlKVxuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHNldF9hdHRyaWJ1dGVzKG5vZGUsIGF0dHJpYnV0ZXMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhub2RlLl9fcHJvdG9fXyk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoYXR0cmlidXRlc1trZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XG4gICAgICAgICAgICBub2RlLnN0eWxlLmNzc1RleHQgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnX192YWx1ZScpIHtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSBub2RlW2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGVzY3JpcHRvcnNba2V5XSAmJiBkZXNjcmlwdG9yc1trZXldLnNldCkge1xuICAgICAgICAgICAgbm9kZVtrZXldID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXR0cihub2RlLCBrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzZXRfc3ZnX2F0dHJpYnV0ZXMobm9kZSwgYXR0cmlidXRlcykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgYXR0cihub2RlLCBrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0X2N1c3RvbV9lbGVtZW50X2RhdGFfbWFwKG5vZGUsIGRhdGFfbWFwKSB7XG4gICAgT2JqZWN0LmtleXMoZGF0YV9tYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBzZXRfY3VzdG9tX2VsZW1lbnRfZGF0YShub2RlLCBrZXksIGRhdGFfbWFwW2tleV0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0X2N1c3RvbV9lbGVtZW50X2RhdGEobm9kZSwgcHJvcCwgdmFsdWUpIHtcbiAgICBpZiAocHJvcCBpbiBub2RlKSB7XG4gICAgICAgIG5vZGVbcHJvcF0gPSB0eXBlb2Ygbm9kZVtwcm9wXSA9PT0gJ2Jvb2xlYW4nICYmIHZhbHVlID09PSAnJyA/IHRydWUgOiB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGF0dHIobm9kZSwgcHJvcCwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHhsaW5rX2F0dHIobm9kZSwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBhdHRyaWJ1dGUsIHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGdldF9iaW5kaW5nX2dyb3VwX3ZhbHVlKGdyb3VwLCBfX3ZhbHVlLCBjaGVja2VkKSB7XG4gICAgY29uc3QgdmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoZ3JvdXBbaV0uY2hlY2tlZClcbiAgICAgICAgICAgIHZhbHVlLmFkZChncm91cFtpXS5fX3ZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCFjaGVja2VkKSB7XG4gICAgICAgIHZhbHVlLmRlbGV0ZShfX3ZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20odmFsdWUpO1xufVxuZnVuY3Rpb24gdG9fbnVtYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJyA/IG51bGwgOiArdmFsdWU7XG59XG5mdW5jdGlvbiB0aW1lX3Jhbmdlc190b19hcnJheShyYW5nZXMpIHtcbiAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGFycmF5LnB1c2goeyBzdGFydDogcmFuZ2VzLnN0YXJ0KGkpLCBlbmQ6IHJhbmdlcy5lbmQoaSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cbmZ1bmN0aW9uIGNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmNoaWxkTm9kZXMpO1xufVxuZnVuY3Rpb24gaW5pdF9jbGFpbV9pbmZvKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzLmNsYWltX2luZm8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2Rlcy5jbGFpbV9pbmZvID0geyBsYXN0X2luZGV4OiAwLCB0b3RhbF9jbGFpbWVkOiAwIH07XG4gICAgfVxufVxuZnVuY3Rpb24gY2xhaW1fbm9kZShub2RlcywgcHJlZGljYXRlLCBwcm9jZXNzTm9kZSwgY3JlYXRlTm9kZSwgZG9udFVwZGF0ZUxhc3RJbmRleCA9IGZhbHNlKSB7XG4gICAgLy8gVHJ5IHRvIGZpbmQgbm9kZXMgaW4gYW4gb3JkZXIgc3VjaCB0aGF0IHdlIGxlbmd0aGVuIHRoZSBsb25nZXN0IGluY3JlYXNpbmcgc3Vic2VxdWVuY2VcbiAgICBpbml0X2NsYWltX2luZm8obm9kZXMpO1xuICAgIGNvbnN0IHJlc3VsdE5vZGUgPSAoKCkgPT4ge1xuICAgICAgICAvLyBXZSBmaXJzdCB0cnkgdG8gZmluZCBhbiBlbGVtZW50IGFmdGVyIHRoZSBwcmV2aW91cyBvbmVcbiAgICAgICAgZm9yIChsZXQgaSA9IG5vZGVzLmNsYWltX2luZm8ubGFzdF9pbmRleDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBwcm9jZXNzTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IHJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRvbnRVcGRhdGVMYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMuY2xhaW1faW5mby5sYXN0X2luZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB0cnkgdG8gZmluZCBvbmUgYmVmb3JlXG4gICAgICAgIC8vIFdlIGl0ZXJhdGUgaW4gcmV2ZXJzZSBzbyB0aGF0IHdlIGRvbid0IGdvIHRvbyBmYXIgYmFja1xuICAgICAgICBmb3IgKGxldCBpID0gbm9kZXMuY2xhaW1faW5mby5sYXN0X2luZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IHByb2Nlc3NOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzW2ldID0gcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZG9udFVwZGF0ZUxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5jbGFpbV9pbmZvLmxhc3RfaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXBsYWNlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIHNwbGljZWQgYmVmb3JlIHRoZSBsYXN0X2luZGV4LCB3ZSBkZWNyZWFzZSBpdFxuICAgICAgICAgICAgICAgICAgICBub2Rlcy5jbGFpbV9pbmZvLmxhc3RfaW5kZXgtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBhbnkgbWF0Y2hpbmcgbm9kZSwgd2UgY3JlYXRlIGEgbmV3IG9uZVxuICAgICAgICByZXR1cm4gY3JlYXRlTm9kZSgpO1xuICAgIH0pKCk7XG4gICAgcmVzdWx0Tm9kZS5jbGFpbV9vcmRlciA9IG5vZGVzLmNsYWltX2luZm8udG90YWxfY2xhaW1lZDtcbiAgICBub2Rlcy5jbGFpbV9pbmZvLnRvdGFsX2NsYWltZWQgKz0gMTtcbiAgICByZXR1cm4gcmVzdWx0Tm9kZTtcbn1cbmZ1bmN0aW9uIGNsYWltX2VsZW1lbnRfYmFzZShub2RlcywgbmFtZSwgYXR0cmlidXRlcywgY3JlYXRlX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gY2xhaW1fbm9kZShub2RlcywgKG5vZGUpID0+IG5vZGUubm9kZU5hbWUgPT09IG5hbWUsIChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzW2pdO1xuICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzW2F0dHJpYnV0ZS5uYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZS5wdXNoKGF0dHJpYnV0ZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW1vdmUuZm9yRWFjaCh2ID0+IG5vZGUucmVtb3ZlQXR0cmlidXRlKHYpKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCAoKSA9PiBjcmVhdGVfZWxlbWVudChuYW1lKSk7XG59XG5mdW5jdGlvbiBjbGFpbV9lbGVtZW50KG5vZGVzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIGNsYWltX2VsZW1lbnRfYmFzZShub2RlcywgbmFtZSwgYXR0cmlidXRlcywgZWxlbWVudCk7XG59XG5mdW5jdGlvbiBjbGFpbV9zdmdfZWxlbWVudChub2RlcywgbmFtZSwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiBjbGFpbV9lbGVtZW50X2Jhc2Uobm9kZXMsIG5hbWUsIGF0dHJpYnV0ZXMsIHN2Z19lbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGNsYWltX3RleHQobm9kZXMsIGRhdGEpIHtcbiAgICByZXR1cm4gY2xhaW1fbm9kZShub2RlcywgKG5vZGUpID0+IG5vZGUubm9kZVR5cGUgPT09IDMsIChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFTdHIgPSAnJyArIGRhdGE7XG4gICAgICAgIGlmIChub2RlLmRhdGEuc3RhcnRzV2l0aChkYXRhU3RyKSkge1xuICAgICAgICAgICAgaWYgKG5vZGUuZGF0YS5sZW5ndGggIT09IGRhdGFTdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3BsaXRUZXh0KGRhdGFTdHIubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuZGF0YSA9IGRhdGFTdHI7XG4gICAgICAgIH1cbiAgICB9LCAoKSA9PiB0ZXh0KGRhdGEpLCB0cnVlIC8vIFRleHQgbm9kZXMgc2hvdWxkIG5vdCB1cGRhdGUgbGFzdCBpbmRleCBzaW5jZSBpdCBpcyBsaWtlbHkgbm90IHdvcnRoIGl0IHRvIGVsaW1pbmF0ZSBhbiBpbmNyZWFzaW5nIHN1YnNlcXVlbmNlIG9mIGFjdHVhbCBlbGVtZW50c1xuICAgICk7XG59XG5mdW5jdGlvbiBjbGFpbV9zcGFjZShub2Rlcykge1xuICAgIHJldHVybiBjbGFpbV90ZXh0KG5vZGVzLCAnICcpO1xufVxuZnVuY3Rpb24gZmluZF9jb21tZW50KG5vZGVzLCB0ZXh0LCBzdGFydCkge1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IG5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDggLyogY29tbWVudCBub2RlICovICYmIG5vZGUudGV4dENvbnRlbnQudHJpbSgpID09PSB0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZXMubGVuZ3RoO1xufVxuZnVuY3Rpb24gY2xhaW1faHRtbF90YWcobm9kZXMsIGlzX3N2Zykge1xuICAgIC8vIGZpbmQgaHRtbCBvcGVuaW5nIHRhZ1xuICAgIGNvbnN0IHN0YXJ0X2luZGV4ID0gZmluZF9jb21tZW50KG5vZGVzLCAnSFRNTF9UQUdfU1RBUlQnLCAwKTtcbiAgICBjb25zdCBlbmRfaW5kZXggPSBmaW5kX2NvbW1lbnQobm9kZXMsICdIVE1MX1RBR19FTkQnLCBzdGFydF9pbmRleCk7XG4gICAgaWYgKHN0YXJ0X2luZGV4ID09PSBlbmRfaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdG1sVGFnSHlkcmF0aW9uKHVuZGVmaW5lZCwgaXNfc3ZnKTtcbiAgICB9XG4gICAgaW5pdF9jbGFpbV9pbmZvKG5vZGVzKTtcbiAgICBjb25zdCBodG1sX3RhZ19ub2RlcyA9IG5vZGVzLnNwbGljZShzdGFydF9pbmRleCwgZW5kX2luZGV4IC0gc3RhcnRfaW5kZXggKyAxKTtcbiAgICBkZXRhY2goaHRtbF90YWdfbm9kZXNbMF0pO1xuICAgIGRldGFjaChodG1sX3RhZ19ub2Rlc1todG1sX3RhZ19ub2Rlcy5sZW5ndGggLSAxXSk7XG4gICAgY29uc3QgY2xhaW1lZF9ub2RlcyA9IGh0bWxfdGFnX25vZGVzLnNsaWNlKDEsIGh0bWxfdGFnX25vZGVzLmxlbmd0aCAtIDEpO1xuICAgIGZvciAoY29uc3QgbiBvZiBjbGFpbWVkX25vZGVzKSB7XG4gICAgICAgIG4uY2xhaW1fb3JkZXIgPSBub2Rlcy5jbGFpbV9pbmZvLnRvdGFsX2NsYWltZWQ7XG4gICAgICAgIG5vZGVzLmNsYWltX2luZm8udG90YWxfY2xhaW1lZCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0bWxUYWdIeWRyYXRpb24oY2xhaW1lZF9ub2RlcywgaXNfc3ZnKTtcbn1cbmZ1bmN0aW9uIHNldF9kYXRhKHRleHQsIGRhdGEpIHtcbiAgICBkYXRhID0gJycgKyBkYXRhO1xuICAgIGlmICh0ZXh0Lndob2xlVGV4dCAhPT0gZGF0YSlcbiAgICAgICAgdGV4dC5kYXRhID0gZGF0YTtcbn1cbmZ1bmN0aW9uIHNldF9pbnB1dF92YWx1ZShpbnB1dCwgdmFsdWUpIHtcbiAgICBpbnB1dC52YWx1ZSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xufVxuZnVuY3Rpb24gc2V0X2lucHV0X3R5cGUoaW5wdXQsIHR5cGUpIHtcbiAgICB0cnkge1xuICAgICAgICBpbnB1dC50eXBlID0gdHlwZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldF9zdHlsZShub2RlLCBrZXksIHZhbHVlLCBpbXBvcnRhbnQpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlLCBpbXBvcnRhbnQgPyAnaW1wb3J0YW50JyA6ICcnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZWxlY3Rfb3B0aW9uKHNlbGVjdCwgdmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdC5vcHRpb25zW2ldO1xuICAgICAgICBpZiAob3B0aW9uLl9fdmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGVjdC5zZWxlY3RlZEluZGV4ID0gLTE7IC8vIG5vIG9wdGlvbiBzaG91bGQgYmUgc2VsZWN0ZWRcbn1cbmZ1bmN0aW9uIHNlbGVjdF9vcHRpb25zKHNlbGVjdCwgdmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdC5vcHRpb25zW2ldO1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB+dmFsdWUuaW5kZXhPZihvcHRpb24uX192YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2VsZWN0X3ZhbHVlKHNlbGVjdCkge1xuICAgIGNvbnN0IHNlbGVjdGVkX29wdGlvbiA9IHNlbGVjdC5xdWVyeVNlbGVjdG9yKCc6Y2hlY2tlZCcpIHx8IHNlbGVjdC5vcHRpb25zWzBdO1xuICAgIHJldHVybiBzZWxlY3RlZF9vcHRpb24gJiYgc2VsZWN0ZWRfb3B0aW9uLl9fdmFsdWU7XG59XG5mdW5jdGlvbiBzZWxlY3RfbXVsdGlwbGVfdmFsdWUoc2VsZWN0KSB7XG4gICAgcmV0dXJuIFtdLm1hcC5jYWxsKHNlbGVjdC5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLCBvcHRpb24gPT4gb3B0aW9uLl9fdmFsdWUpO1xufVxuLy8gdW5mb3J0dW5hdGVseSB0aGlzIGNhbid0IGJlIGEgY29uc3RhbnQgYXMgdGhhdCB3b3VsZG4ndCBiZSB0cmVlLXNoYWtlYWJsZVxuLy8gc28gd2UgY2FjaGUgdGhlIHJlc3VsdCBpbnN0ZWFkXG5sZXQgY3Jvc3NvcmlnaW47XG5mdW5jdGlvbiBpc19jcm9zc29yaWdpbigpIHtcbiAgICBpZiAoY3Jvc3NvcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjcm9zc29yaWdpbiA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB2b2lkIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyb3Nzb3JpZ2luO1xufVxuZnVuY3Rpb24gYWRkX3Jlc2l6ZV9saXN0ZW5lcihub2RlLCBmbikge1xuICAgIGNvbnN0IGNvbXB1dGVkX3N0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICBpZiAoY29tcHV0ZWRfc3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIH1cbiAgICBjb25zdCBpZnJhbWUgPSBlbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7ICcgK1xuICAgICAgICAnb3ZlcmZsb3c6IGhpZGRlbjsgYm9yZGVyOiAwOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogLTE7Jyk7XG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIGlmcmFtZS50YWJJbmRleCA9IC0xO1xuICAgIGNvbnN0IGNyb3Nzb3JpZ2luID0gaXNfY3Jvc3NvcmlnaW4oKTtcbiAgICBsZXQgdW5zdWJzY3JpYmU7XG4gICAgaWYgKGNyb3Nzb3JpZ2luKSB7XG4gICAgICAgIGlmcmFtZS5zcmMgPSBcImRhdGE6dGV4dC9odG1sLDxzY3JpcHQ+b25yZXNpemU9ZnVuY3Rpb24oKXtwYXJlbnQucG9zdE1lc3NhZ2UoMCwnKicpfTwvc2NyaXB0PlwiO1xuICAgICAgICB1bnN1YnNjcmliZSA9IGxpc3Rlbih3aW5kb3csICdtZXNzYWdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBpZnJhbWUuY29udGVudFdpbmRvdylcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmcmFtZS5zcmMgPSAnYWJvdXQ6YmxhbmsnO1xuICAgICAgICBpZnJhbWUub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBsaXN0ZW4oaWZyYW1lLmNvbnRlbnRXaW5kb3csICdyZXNpemUnLCBmbik7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGFwcGVuZChub2RlLCBpZnJhbWUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChjcm9zc29yaWdpbikge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bnN1YnNjcmliZSAmJiBpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXRhY2goaWZyYW1lKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9nZ2xlX2NsYXNzKGVsZW1lbnQsIG5hbWUsIHRvZ2dsZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0W3RvZ2dsZSA/ICdhZGQnIDogJ3JlbW92ZSddKG5hbWUpO1xufVxuZnVuY3Rpb24gY3VzdG9tX2V2ZW50KHR5cGUsIGRldGFpbCwgeyBidWJibGVzID0gZmFsc2UsIGNhbmNlbGFibGUgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGV0YWlsKTtcbiAgICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5X3NlbGVjdG9yX2FsbChzZWxlY3RvciwgcGFyZW50ID0gZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG59XG5mdW5jdGlvbiBoZWFkX3NlbGVjdG9yKG5vZGVJZCwgaGVhZCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBzdGFydGVkID0gMDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgaGVhZC5jaGlsZE5vZGVzKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSA4IC8qIGNvbW1lbnQgbm9kZSAqLykge1xuICAgICAgICAgICAgY29uc3QgY29tbWVudCA9IG5vZGUudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnQgPT09IGBIRUFEXyR7bm9kZUlkfV9FTkRgKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRlZCAtPSAxO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWVudCA9PT0gYEhFQURfJHtub2RlSWR9X1NUQVJUYCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGFydGVkID4gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmNsYXNzIEh0bWxUYWcge1xuICAgIGNvbnN0cnVjdG9yKGlzX3N2ZyA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaXNfc3ZnID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNfc3ZnID0gaXNfc3ZnO1xuICAgICAgICB0aGlzLmUgPSB0aGlzLm4gPSBudWxsO1xuICAgIH1cbiAgICBjKGh0bWwpIHtcbiAgICAgICAgdGhpcy5oKGh0bWwpO1xuICAgIH1cbiAgICBtKGh0bWwsIHRhcmdldCwgYW5jaG9yID0gbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMuZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNfc3ZnKVxuICAgICAgICAgICAgICAgIHRoaXMuZSA9IHN2Z19lbGVtZW50KHRhcmdldC5ub2RlTmFtZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lID0gZWxlbWVudCh0YXJnZXQubm9kZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy50ID0gdGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5jKGh0bWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaShhbmNob3IpO1xuICAgIH1cbiAgICBoKGh0bWwpIHtcbiAgICAgICAgdGhpcy5lLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIHRoaXMubiA9IEFycmF5LmZyb20odGhpcy5lLmNoaWxkTm9kZXMpO1xuICAgIH1cbiAgICBpKGFuY2hvcikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaW5zZXJ0KHRoaXMudCwgdGhpcy5uW2ldLCBhbmNob3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHAoaHRtbCkge1xuICAgICAgICB0aGlzLmQoKTtcbiAgICAgICAgdGhpcy5oKGh0bWwpO1xuICAgICAgICB0aGlzLmkodGhpcy5hKTtcbiAgICB9XG4gICAgZCgpIHtcbiAgICAgICAgdGhpcy5uLmZvckVhY2goZGV0YWNoKTtcbiAgICB9XG59XG5jbGFzcyBIdG1sVGFnSHlkcmF0aW9uIGV4dGVuZHMgSHRtbFRhZyB7XG4gICAgY29uc3RydWN0b3IoY2xhaW1lZF9ub2RlcywgaXNfc3ZnID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoaXNfc3ZnKTtcbiAgICAgICAgdGhpcy5lID0gdGhpcy5uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sID0gY2xhaW1lZF9ub2RlcztcbiAgICB9XG4gICAgYyhodG1sKSB7XG4gICAgICAgIGlmICh0aGlzLmwpIHtcbiAgICAgICAgICAgIHRoaXMubiA9IHRoaXMubDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLmMoaHRtbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaShhbmNob3IpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm4ubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGluc2VydF9oeWRyYXRpb24odGhpcy50LCB0aGlzLm5baV0sIGFuY2hvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhdHRyaWJ1dGVfdG9fb2JqZWN0KGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJlc3VsdFthdHRyaWJ1dGUubmFtZV0gPSBhdHRyaWJ1dGUudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRfY3VzdG9tX2VsZW1lbnRzX3Nsb3RzKGVsZW1lbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBlbGVtZW50LmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICByZXN1bHRbbm9kZS5zbG90IHx8ICdkZWZhdWx0J10gPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3Rfc3ZlbHRlX2NvbXBvbmVudChjb21wb25lbnQsIHByb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBjb21wb25lbnQocHJvcHMpO1xufVxuXG4vLyB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBmb3IgbXVsdGlwbGUgZG9jdW1lbnRzIGJlY2F1c2UgYSBTdmVsdGUgYXBwbGljYXRpb24gY291bGQgYWxzbyBjb250YWluIGlmcmFtZXNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdmVsdGVqcy9zdmVsdGUvaXNzdWVzLzM2MjRcbmNvbnN0IG1hbmFnZWRfc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGFjdGl2ZSA9IDA7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGFya3NreWFwcC9zdHJpbmctaGFzaC9ibG9iL21hc3Rlci9pbmRleC5qc1xuZnVuY3Rpb24gaGFzaChzdHIpIHtcbiAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgbGV0IGkgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pXG4gICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSBeIHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBoYXNoID4+PiAwO1xufVxuZnVuY3Rpb24gY3JlYXRlX3N0eWxlX2luZm9ybWF0aW9uKGRvYywgbm9kZSkge1xuICAgIGNvbnN0IGluZm8gPSB7IHN0eWxlc2hlZXQ6IGFwcGVuZF9lbXB0eV9zdHlsZXNoZWV0KG5vZGUpLCBydWxlczoge30gfTtcbiAgICBtYW5hZ2VkX3N0eWxlcy5zZXQoZG9jLCBpbmZvKTtcbiAgICByZXR1cm4gaW5mbztcbn1cbmZ1bmN0aW9uIGNyZWF0ZV9ydWxlKG5vZGUsIGEsIGIsIGR1cmF0aW9uLCBkZWxheSwgZWFzZSwgZm4sIHVpZCA9IDApIHtcbiAgICBjb25zdCBzdGVwID0gMTYuNjY2IC8gZHVyYXRpb247XG4gICAgbGV0IGtleWZyYW1lcyA9ICd7XFxuJztcbiAgICBmb3IgKGxldCBwID0gMDsgcCA8PSAxOyBwICs9IHN0ZXApIHtcbiAgICAgICAgY29uc3QgdCA9IGEgKyAoYiAtIGEpICogZWFzZShwKTtcbiAgICAgICAga2V5ZnJhbWVzICs9IHAgKiAxMDAgKyBgJXske2ZuKHQsIDEgLSB0KX19XFxuYDtcbiAgICB9XG4gICAgY29uc3QgcnVsZSA9IGtleWZyYW1lcyArIGAxMDAlIHske2ZuKGIsIDEgLSBiKX19XFxufWA7XG4gICAgY29uc3QgbmFtZSA9IGBfX3N2ZWx0ZV8ke2hhc2gocnVsZSl9XyR7dWlkfWA7XG4gICAgY29uc3QgZG9jID0gZ2V0X3Jvb3RfZm9yX3N0eWxlKG5vZGUpO1xuICAgIGNvbnN0IHsgc3R5bGVzaGVldCwgcnVsZXMgfSA9IG1hbmFnZWRfc3R5bGVzLmdldChkb2MpIHx8IGNyZWF0ZV9zdHlsZV9pbmZvcm1hdGlvbihkb2MsIG5vZGUpO1xuICAgIGlmICghcnVsZXNbbmFtZV0pIHtcbiAgICAgICAgcnVsZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoYEBrZXlmcmFtZXMgJHtuYW1lfSAke3J1bGV9YCwgc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBhbmltYXRpb24gPSBub2RlLnN0eWxlLmFuaW1hdGlvbiB8fCAnJztcbiAgICBub2RlLnN0eWxlLmFuaW1hdGlvbiA9IGAke2FuaW1hdGlvbiA/IGAke2FuaW1hdGlvbn0sIGAgOiAnJ30ke25hbWV9ICR7ZHVyYXRpb259bXMgbGluZWFyICR7ZGVsYXl9bXMgMSBib3RoYDtcbiAgICBhY3RpdmUgKz0gMTtcbiAgICByZXR1cm4gbmFtZTtcbn1cbmZ1bmN0aW9uIGRlbGV0ZV9ydWxlKG5vZGUsIG5hbWUpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IChub2RlLnN0eWxlLmFuaW1hdGlvbiB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgY29uc3QgbmV4dCA9IHByZXZpb3VzLmZpbHRlcihuYW1lXG4gICAgICAgID8gYW5pbSA9PiBhbmltLmluZGV4T2YobmFtZSkgPCAwIC8vIHJlbW92ZSBzcGVjaWZpYyBhbmltYXRpb25cbiAgICAgICAgOiBhbmltID0+IGFuaW0uaW5kZXhPZignX19zdmVsdGUnKSA9PT0gLTEgLy8gcmVtb3ZlIGFsbCBTdmVsdGUgYW5pbWF0aW9uc1xuICAgICk7XG4gICAgY29uc3QgZGVsZXRlZCA9IHByZXZpb3VzLmxlbmd0aCAtIG5leHQubGVuZ3RoO1xuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uID0gbmV4dC5qb2luKCcsICcpO1xuICAgICAgICBhY3RpdmUgLT0gZGVsZXRlZDtcbiAgICAgICAgaWYgKCFhY3RpdmUpXG4gICAgICAgICAgICBjbGVhcl9ydWxlcygpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsZWFyX3J1bGVzKCkge1xuICAgIHJhZigoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG1hbmFnZWRfc3R5bGVzLmZvckVhY2goaW5mbyA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG93bmVyTm9kZSB9ID0gaW5mby5zdHlsZXNoZWV0O1xuICAgICAgICAgICAgLy8gdGhlcmUgaXMgbm8gb3duZXJOb2RlIGlmIGl0IHJ1bnMgb24ganNkb20uXG4gICAgICAgICAgICBpZiAob3duZXJOb2RlKVxuICAgICAgICAgICAgICAgIGRldGFjaChvd25lck5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbWFuYWdlZF9zdHlsZXMuY2xlYXIoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2FuaW1hdGlvbihub2RlLCBmcm9tLCBmbiwgcGFyYW1zKSB7XG4gICAgaWYgKCFmcm9tKVxuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICBjb25zdCB0byA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGZyb20ubGVmdCA9PT0gdG8ubGVmdCAmJiBmcm9tLnJpZ2h0ID09PSB0by5yaWdodCAmJiBmcm9tLnRvcCA9PT0gdG8udG9wICYmIGZyb20uYm90dG9tID09PSB0by5ib3R0b20pXG4gICAgICAgIHJldHVybiBub29wO1xuICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIFxuICAgIC8vIEB0cy1pZ25vcmUgdG9kbzogc2hvdWxkIHRoaXMgYmUgc2VwYXJhdGVkIGZyb20gZGVzdHJ1Y3R1cmluZz8gT3Igc3RhcnQvZW5kIGFkZGVkIHRvIHB1YmxpYyBhcGkgYW5kIGRvY3VtZW50YXRpb24/XG4gICAgc3RhcnQ6IHN0YXJ0X3RpbWUgPSBub3coKSArIGRlbGF5LCBcbiAgICAvLyBAdHMtaWdub3JlIHRvZG86XG4gICAgZW5kID0gc3RhcnRfdGltZSArIGR1cmF0aW9uLCB0aWNrID0gbm9vcCwgY3NzIH0gPSBmbihub2RlLCB7IGZyb20sIHRvIH0sIHBhcmFtcyk7XG4gICAgbGV0IHJ1bm5pbmcgPSB0cnVlO1xuICAgIGxldCBzdGFydGVkID0gZmFsc2U7XG4gICAgbGV0IG5hbWU7XG4gICAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgIGlmIChjc3MpIHtcbiAgICAgICAgICAgIG5hbWUgPSBjcmVhdGVfcnVsZShub2RlLCAwLCAxLCBkdXJhdGlvbiwgZGVsYXksIGVhc2luZywgY3NzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlbGF5KSB7XG4gICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICBpZiAoY3NzKVxuICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSwgbmFtZSk7XG4gICAgICAgIHJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgbG9vcChub3cgPT4ge1xuICAgICAgICBpZiAoIXN0YXJ0ZWQgJiYgbm93ID49IHN0YXJ0X3RpbWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydGVkICYmIG5vdyA+PSBlbmQpIHtcbiAgICAgICAgICAgIHRpY2soMSwgMCk7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFydW5uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBub3cgLSBzdGFydF90aW1lO1xuICAgICAgICAgICAgY29uc3QgdCA9IDAgKyAxICogZWFzaW5nKHAgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICB0aWNrKHQsIDEgLSB0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBzdGFydCgpO1xuICAgIHRpY2soMCwgMSk7XG4gICAgcmV0dXJuIHN0b3A7XG59XG5mdW5jdGlvbiBmaXhfcG9zaXRpb24obm9kZSkge1xuICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICBpZiAoc3R5bGUucG9zaXRpb24gIT09ICdhYnNvbHV0ZScgJiYgc3R5bGUucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzdHlsZTtcbiAgICAgICAgY29uc3QgYSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBhZGRfdHJhbnNmb3JtKG5vZGUsIGEpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZF90cmFuc2Zvcm0obm9kZSwgYSkge1xuICAgIGNvbnN0IGIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChhLmxlZnQgIT09IGIubGVmdCB8fCBhLnRvcCAhPT0gYi50b3ApIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBzdHlsZS50cmFuc2Zvcm0gPT09ICdub25lJyA/ICcnIDogc3R5bGUudHJhbnNmb3JtO1xuICAgICAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGAke3RyYW5zZm9ybX0gdHJhbnNsYXRlKCR7YS5sZWZ0IC0gYi5sZWZ0fXB4LCAke2EudG9wIC0gYi50b3B9cHgpYDtcbiAgICB9XG59XG5cbmxldCBjdXJyZW50X2NvbXBvbmVudDtcbmZ1bmN0aW9uIHNldF9jdXJyZW50X2NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICBjdXJyZW50X2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIGdldF9jdXJyZW50X2NvbXBvbmVudCgpIHtcbiAgICBpZiAoIWN1cnJlbnRfY29tcG9uZW50KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIGNhbGxlZCBvdXRzaWRlIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbicpO1xuICAgIHJldHVybiBjdXJyZW50X2NvbXBvbmVudDtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gcnVuIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIHVwZGF0ZWQgYWZ0ZXIgYW55IHN0YXRlIGNoYW5nZS5cbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgcnVucyB3aWxsIGJlIGJlZm9yZSB0aGUgaW5pdGlhbCBgb25Nb3VudGBcbiAqXG4gKiBodHRwczovL3N2ZWx0ZS5kZXYvZG9jcyNydW4tdGltZS1zdmVsdGUtYmVmb3JldXBkYXRlXG4gKi9cbmZ1bmN0aW9uIGJlZm9yZVVwZGF0ZShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmJlZm9yZV91cGRhdGUucHVzaChmbik7XG59XG4vKipcbiAqIFRoZSBgb25Nb3VudGAgZnVuY3Rpb24gc2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gcnVuIGFzIHNvb24gYXMgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIHRvIHRoZSBET00uXG4gKiBJdCBtdXN0IGJlIGNhbGxlZCBkdXJpbmcgdGhlIGNvbXBvbmVudCdzIGluaXRpYWxpc2F0aW9uIChidXQgZG9lc24ndCBuZWVkIHRvIGxpdmUgKmluc2lkZSogdGhlIGNvbXBvbmVudDtcbiAqIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUpLlxuICpcbiAqIGBvbk1vdW50YCBkb2VzIG5vdCBydW4gaW5zaWRlIGEgW3NlcnZlci1zaWRlIGNvbXBvbmVudF0oL2RvY3MjcnVuLXRpbWUtc2VydmVyLXNpZGUtY29tcG9uZW50LWFwaSkuXG4gKlxuICogaHR0cHM6Ly9zdmVsdGUuZGV2L2RvY3MjcnVuLXRpbWUtc3ZlbHRlLW9ubW91bnRcbiAqL1xuZnVuY3Rpb24gb25Nb3VudChmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLm9uX21vdW50LnB1c2goZm4pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1cGRhdGVkLlxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBydW5zIHdpbGwgYmUgYWZ0ZXIgdGhlIGluaXRpYWwgYG9uTW91bnRgXG4gKi9cbmZ1bmN0aW9uIGFmdGVyVXBkYXRlKGZuKSB7XG4gICAgZ2V0X2N1cnJlbnRfY29tcG9uZW50KCkuJCQuYWZ0ZXJfdXBkYXRlLnB1c2goZm4pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byBydW4gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICpcbiAqIE91dCBvZiBgb25Nb3VudGAsIGBiZWZvcmVVcGRhdGVgLCBgYWZ0ZXJVcGRhdGVgIGFuZCBgb25EZXN0cm95YCwgdGhpcyBpcyB0aGVcbiAqIG9ubHkgb25lIHRoYXQgcnVucyBpbnNpZGUgYSBzZXJ2ZXItc2lkZSBjb21wb25lbnQuXG4gKlxuICogaHR0cHM6Ly9zdmVsdGUuZGV2L2RvY3MjcnVuLXRpbWUtc3ZlbHRlLW9uZGVzdHJveVxuICovXG5mdW5jdGlvbiBvbkRlc3Ryb3koZm4pIHtcbiAgICBnZXRfY3VycmVudF9jb21wb25lbnQoKS4kJC5vbl9kZXN0cm95LnB1c2goZm4pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGV2ZW50IGRpc3BhdGNoZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwYXRjaCBbY29tcG9uZW50IGV2ZW50c10oL2RvY3MjdGVtcGxhdGUtc3ludGF4LWNvbXBvbmVudC1kaXJlY3RpdmVzLW9uLWV2ZW50bmFtZSkuXG4gKiBFdmVudCBkaXNwYXRjaGVycyBhcmUgZnVuY3Rpb25zIHRoYXQgY2FuIHRha2UgdHdvIGFyZ3VtZW50czogYG5hbWVgIGFuZCBgZGV0YWlsYC5cbiAqXG4gKiBDb21wb25lbnQgZXZlbnRzIGNyZWF0ZWQgd2l0aCBgY3JlYXRlRXZlbnREaXNwYXRjaGVyYCBjcmVhdGUgYVxuICogW0N1c3RvbUV2ZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQpLlxuICogVGhlc2UgZXZlbnRzIGRvIG5vdCBbYnViYmxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0xlYXJuL0phdmFTY3JpcHQvQnVpbGRpbmdfYmxvY2tzL0V2ZW50cyNFdmVudF9idWJibGluZ19hbmRfY2FwdHVyZSkuXG4gKiBUaGUgYGRldGFpbGAgYXJndW1lbnQgY29ycmVzcG9uZHMgdG8gdGhlIFtDdXN0b21FdmVudC5kZXRhaWxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpXG4gKiBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYW55IHR5cGUgb2YgZGF0YS5cbiAqXG4gKiBodHRwczovL3N2ZWx0ZS5kZXYvZG9jcyNydW4tdGltZS1zdmVsdGUtY3JlYXRlZXZlbnRkaXNwYXRjaGVyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RGlzcGF0Y2hlcigpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBnZXRfY3VycmVudF9jb21wb25lbnQoKTtcbiAgICByZXR1cm4gKHR5cGUsIGRldGFpbCwgeyBjYW5jZWxhYmxlID0gZmFsc2UgfSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IGNvbXBvbmVudC4kJC5jYWxsYmFja3NbdHlwZV07XG4gICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gYXJlIHRoZXJlIHNpdHVhdGlvbnMgd2hlcmUgZXZlbnRzIGNvdWxkIGJlIGRpc3BhdGNoZWRcbiAgICAgICAgICAgIC8vIGluIGEgc2VydmVyIChub24tRE9NKSBlbnZpcm9ubWVudD9cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gY3VzdG9tX2V2ZW50KHR5cGUsIGRldGFpbCwgeyBjYW5jZWxhYmxlIH0pO1xuICAgICAgICAgICAgY2FsbGJhY2tzLnNsaWNlKCkuZm9yRWFjaChmbiA9PiB7XG4gICAgICAgICAgICAgICAgZm4uY2FsbChjb21wb25lbnQsIGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4vKipcbiAqIEFzc29jaWF0ZXMgYW4gYXJiaXRyYXJ5IGBjb250ZXh0YCBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBjb21wb25lbnQgYW5kIHRoZSBzcGVjaWZpZWQgYGtleWBcbiAqIGFuZCByZXR1cm5zIHRoYXQgb2JqZWN0LiBUaGUgY29udGV4dCBpcyB0aGVuIGF2YWlsYWJsZSB0byBjaGlsZHJlbiBvZiB0aGUgY29tcG9uZW50XG4gKiAoaW5jbHVkaW5nIHNsb3R0ZWQgY29udGVudCkgd2l0aCBgZ2V0Q29udGV4dGAuXG4gKlxuICogTGlrZSBsaWZlY3ljbGUgZnVuY3Rpb25zLCB0aGlzIG11c3QgYmUgY2FsbGVkIGR1cmluZyBjb21wb25lbnQgaW5pdGlhbGlzYXRpb24uXG4gKlxuICogaHR0cHM6Ly9zdmVsdGUuZGV2L2RvY3MjcnVuLXRpbWUtc3ZlbHRlLXNldGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gc2V0Q29udGV4dChrZXksIGNvbnRleHQpIHtcbiAgICBnZXRfY3VycmVudF9jb21wb25lbnQoKS4kJC5jb250ZXh0LnNldChrZXksIGNvbnRleHQpO1xuICAgIHJldHVybiBjb250ZXh0O1xufVxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgdGhhdCBiZWxvbmdzIHRvIHRoZSBjbG9zZXN0IHBhcmVudCBjb21wb25lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIGBrZXlgLlxuICogTXVzdCBiZSBjYWxsZWQgZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvbi5cbiAqXG4gKiBodHRwczovL3N2ZWx0ZS5kZXYvZG9jcyNydW4tdGltZS1zdmVsdGUtZ2V0Y29udGV4dFxuICovXG5mdW5jdGlvbiBnZXRDb250ZXh0KGtleSkge1xuICAgIHJldHVybiBnZXRfY3VycmVudF9jb21wb25lbnQoKS4kJC5jb250ZXh0LmdldChrZXkpO1xufVxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHdob2xlIGNvbnRleHQgbWFwIHRoYXQgYmVsb25ncyB0byB0aGUgY2xvc2VzdCBwYXJlbnQgY29tcG9uZW50LlxuICogTXVzdCBiZSBjYWxsZWQgZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvbi4gVXNlZnVsLCBmb3IgZXhhbXBsZSwgaWYgeW91XG4gKiBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGNvbXBvbmVudCBhbmQgd2FudCB0byBwYXNzIHRoZSBleGlzdGluZyBjb250ZXh0IHRvIGl0LlxuICpcbiAqIGh0dHBzOi8vc3ZlbHRlLmRldi9kb2NzI3J1bi10aW1lLXN2ZWx0ZS1nZXRhbGxjb250ZXh0c1xuICovXG5mdW5jdGlvbiBnZXRBbGxDb250ZXh0cygpIHtcbiAgICByZXR1cm4gZ2V0X2N1cnJlbnRfY29tcG9uZW50KCkuJCQuY29udGV4dDtcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBga2V5YCBoYXMgYmVlbiBzZXQgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJlbnQgY29tcG9uZW50LlxuICogTXVzdCBiZSBjYWxsZWQgZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvbi5cbiAqXG4gKiBodHRwczovL3N2ZWx0ZS5kZXYvZG9jcyNydW4tdGltZS1zdmVsdGUtaGFzY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNDb250ZXh0KGtleSkge1xuICAgIHJldHVybiBnZXRfY3VycmVudF9jb21wb25lbnQoKS4kJC5jb250ZXh0LmhhcyhrZXkpO1xufVxuLy8gVE9ETyBmaWd1cmUgb3V0IGlmIHdlIHN0aWxsIHdhbnQgdG8gc3VwcG9ydFxuLy8gc2hvcnRoYW5kIGV2ZW50cywgb3IgaWYgd2Ugd2FudCB0byBpbXBsZW1lbnRcbi8vIGEgcmVhbCBidWJibGluZyBtZWNoYW5pc21cbmZ1bmN0aW9uIGJ1YmJsZShjb21wb25lbnQsIGV2ZW50KSB7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gY29tcG9uZW50LiQkLmNhbGxiYWNrc1tldmVudC50eXBlXTtcbiAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY2FsbGJhY2tzLnNsaWNlKCkuZm9yRWFjaChmbiA9PiBmbi5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgfVxufVxuXG5jb25zdCBkaXJ0eV9jb21wb25lbnRzID0gW107XG5jb25zdCBpbnRyb3MgPSB7IGVuYWJsZWQ6IGZhbHNlIH07XG5jb25zdCBiaW5kaW5nX2NhbGxiYWNrcyA9IFtdO1xuY29uc3QgcmVuZGVyX2NhbGxiYWNrcyA9IFtdO1xuY29uc3QgZmx1c2hfY2FsbGJhY2tzID0gW107XG5jb25zdCByZXNvbHZlZF9wcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5sZXQgdXBkYXRlX3NjaGVkdWxlZCA9IGZhbHNlO1xuZnVuY3Rpb24gc2NoZWR1bGVfdXBkYXRlKCkge1xuICAgIGlmICghdXBkYXRlX3NjaGVkdWxlZCkge1xuICAgICAgICB1cGRhdGVfc2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZWRfcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0aWNrKCkge1xuICAgIHNjaGVkdWxlX3VwZGF0ZSgpO1xuICAgIHJldHVybiByZXNvbHZlZF9wcm9taXNlO1xufVxuZnVuY3Rpb24gYWRkX3JlbmRlcl9jYWxsYmFjayhmbikge1xuICAgIHJlbmRlcl9jYWxsYmFja3MucHVzaChmbik7XG59XG5mdW5jdGlvbiBhZGRfZmx1c2hfY2FsbGJhY2soZm4pIHtcbiAgICBmbHVzaF9jYWxsYmFja3MucHVzaChmbik7XG59XG4vLyBmbHVzaCgpIGNhbGxzIGNhbGxiYWNrcyBpbiB0aGlzIG9yZGVyOlxuLy8gMS4gQWxsIGJlZm9yZVVwZGF0ZSBjYWxsYmFja3MsIGluIG9yZGVyOiBwYXJlbnRzIGJlZm9yZSBjaGlsZHJlblxuLy8gMi4gQWxsIGJpbmQ6dGhpcyBjYWxsYmFja3MsIGluIHJldmVyc2Ugb3JkZXI6IGNoaWxkcmVuIGJlZm9yZSBwYXJlbnRzLlxuLy8gMy4gQWxsIGFmdGVyVXBkYXRlIGNhbGxiYWNrcywgaW4gb3JkZXI6IHBhcmVudHMgYmVmb3JlIGNoaWxkcmVuLiBFWENFUFRcbi8vICAgIGZvciBhZnRlclVwZGF0ZXMgY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbCBvbk1vdW50LCB3aGljaCBhcmUgY2FsbGVkIGluXG4vLyAgICByZXZlcnNlIG9yZGVyOiBjaGlsZHJlbiBiZWZvcmUgcGFyZW50cy5cbi8vIFNpbmNlIGNhbGxiYWNrcyBtaWdodCB1cGRhdGUgY29tcG9uZW50IHZhbHVlcywgd2hpY2ggY291bGQgdHJpZ2dlciBhbm90aGVyXG4vLyBjYWxsIHRvIGZsdXNoKCksIHRoZSBmb2xsb3dpbmcgc3RlcHMgZ3VhcmQgYWdhaW5zdCB0aGlzOlxuLy8gMS4gRHVyaW5nIGJlZm9yZVVwZGF0ZSwgYW55IHVwZGF0ZWQgY29tcG9uZW50cyB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gICAgZGlydHlfY29tcG9uZW50cyBhcnJheSBhbmQgd2lsbCBjYXVzZSBhIHJlZW50cmFudCBjYWxsIHRvIGZsdXNoKCkuIEJlY2F1c2Vcbi8vICAgIHRoZSBmbHVzaCBpbmRleCBpcyBrZXB0IG91dHNpZGUgdGhlIGZ1bmN0aW9uLCB0aGUgcmVlbnRyYW50IGNhbGwgd2lsbCBwaWNrXG4vLyAgICB1cCB3aGVyZSB0aGUgZWFybGllciBjYWxsIGxlZnQgb2ZmIGFuZCBnbyB0aHJvdWdoIGFsbCBkaXJ0eSBjb21wb25lbnRzLiBUaGVcbi8vICAgIGN1cnJlbnRfY29tcG9uZW50IHZhbHVlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBzbyB0aGF0IHRoZSByZWVudHJhbnQgY2FsbCB3aWxsXG4vLyAgICBub3QgaW50ZXJmZXJlIHdpdGggdGhlIFwicGFyZW50XCIgZmx1c2goKSBjYWxsLlxuLy8gMi4gYmluZDp0aGlzIGNhbGxiYWNrcyBjYW5ub3QgdHJpZ2dlciBuZXcgZmx1c2goKSBjYWxscy5cbi8vIDMuIER1cmluZyBhZnRlclVwZGF0ZSwgYW55IHVwZGF0ZWQgY29tcG9uZW50cyB3aWxsIE5PVCBoYXZlIHRoZWlyIGFmdGVyVXBkYXRlXG4vLyAgICBjYWxsYmFjayBjYWxsZWQgYSBzZWNvbmQgdGltZTsgdGhlIHNlZW5fY2FsbGJhY2tzIHNldCwgb3V0c2lkZSB0aGUgZmx1c2goKVxuLy8gICAgZnVuY3Rpb24sIGd1YXJhbnRlZXMgdGhpcyBiZWhhdmlvci5cbmNvbnN0IHNlZW5fY2FsbGJhY2tzID0gbmV3IFNldCgpO1xubGV0IGZsdXNoaWR4ID0gMDsgLy8gRG8gKm5vdCogbW92ZSB0aGlzIGluc2lkZSB0aGUgZmx1c2goKSBmdW5jdGlvblxuZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gRG8gbm90IHJlZW50ZXIgZmx1c2ggd2hpbGUgZGlydHkgY29tcG9uZW50cyBhcmUgdXBkYXRlZCwgYXMgdGhpcyBjYW5cbiAgICAvLyByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcC4gSW5zdGVhZCwgbGV0IHRoZSBpbm5lciBmbHVzaCBoYW5kbGUgaXQuXG4gICAgLy8gUmVlbnRyYW5jeSBpcyBvayBhZnRlcndhcmRzIGZvciBiaW5kaW5ncyBldGMuXG4gICAgaWYgKGZsdXNoaWR4ICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2F2ZWRfY29tcG9uZW50ID0gY3VycmVudF9jb21wb25lbnQ7XG4gICAgZG8ge1xuICAgICAgICAvLyBmaXJzdCwgY2FsbCBiZWZvcmVVcGRhdGUgZnVuY3Rpb25zXG4gICAgICAgIC8vIGFuZCB1cGRhdGUgY29tcG9uZW50c1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKGZsdXNoaWR4IDwgZGlydHlfY29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBkaXJ0eV9jb21wb25lbnRzW2ZsdXNoaWR4XTtcbiAgICAgICAgICAgICAgICBmbHVzaGlkeCsrO1xuICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZShjb21wb25lbnQuJCQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyByZXNldCBkaXJ0eSBzdGF0ZSB0byBub3QgZW5kIHVwIGluIGEgZGVhZGxvY2tlZCBzdGF0ZSBhbmQgdGhlbiByZXRocm93XG4gICAgICAgICAgICBkaXJ0eV9jb21wb25lbnRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBmbHVzaGlkeCA9IDA7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChudWxsKTtcbiAgICAgICAgZGlydHlfY29tcG9uZW50cy5sZW5ndGggPSAwO1xuICAgICAgICBmbHVzaGlkeCA9IDA7XG4gICAgICAgIHdoaWxlIChiaW5kaW5nX2NhbGxiYWNrcy5sZW5ndGgpXG4gICAgICAgICAgICBiaW5kaW5nX2NhbGxiYWNrcy5wb3AoKSgpO1xuICAgICAgICAvLyB0aGVuLCBvbmNlIGNvbXBvbmVudHMgYXJlIHVwZGF0ZWQsIGNhbGxcbiAgICAgICAgLy8gYWZ0ZXJVcGRhdGUgZnVuY3Rpb25zLiBUaGlzIG1heSBjYXVzZVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHVwZGF0ZXMuLi5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJfY2FsbGJhY2tzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHJlbmRlcl9jYWxsYmFja3NbaV07XG4gICAgICAgICAgICBpZiAoIXNlZW5fY2FsbGJhY2tzLmhhcyhjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAvLyAuLi5zbyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzXG4gICAgICAgICAgICAgICAgc2Vlbl9jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcl9jYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICB9IHdoaWxlIChkaXJ0eV9jb21wb25lbnRzLmxlbmd0aCk7XG4gICAgd2hpbGUgKGZsdXNoX2NhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgZmx1c2hfY2FsbGJhY2tzLnBvcCgpKCk7XG4gICAgfVxuICAgIHVwZGF0ZV9zY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBzZWVuX2NhbGxiYWNrcy5jbGVhcigpO1xuICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChzYXZlZF9jb21wb25lbnQpO1xufVxuZnVuY3Rpb24gdXBkYXRlKCQkKSB7XG4gICAgaWYgKCQkLmZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICQkLnVwZGF0ZSgpO1xuICAgICAgICBydW5fYWxsKCQkLmJlZm9yZV91cGRhdGUpO1xuICAgICAgICBjb25zdCBkaXJ0eSA9ICQkLmRpcnR5O1xuICAgICAgICAkJC5kaXJ0eSA9IFstMV07XG4gICAgICAgICQkLmZyYWdtZW50ICYmICQkLmZyYWdtZW50LnAoJCQuY3R4LCBkaXJ0eSk7XG4gICAgICAgICQkLmFmdGVyX3VwZGF0ZS5mb3JFYWNoKGFkZF9yZW5kZXJfY2FsbGJhY2spO1xuICAgIH1cbn1cblxubGV0IHByb21pc2U7XG5mdW5jdGlvbiB3YWl0KCkge1xuICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2gobm9kZSwgZGlyZWN0aW9uLCBraW5kKSB7XG4gICAgbm9kZS5kaXNwYXRjaEV2ZW50KGN1c3RvbV9ldmVudChgJHtkaXJlY3Rpb24gPyAnaW50cm8nIDogJ291dHJvJ30ke2tpbmR9YCkpO1xufVxuY29uc3Qgb3V0cm9pbmcgPSBuZXcgU2V0KCk7XG5sZXQgb3V0cm9zO1xuZnVuY3Rpb24gZ3JvdXBfb3V0cm9zKCkge1xuICAgIG91dHJvcyA9IHtcbiAgICAgICAgcjogMCxcbiAgICAgICAgYzogW10sXG4gICAgICAgIHA6IG91dHJvcyAvLyBwYXJlbnQgZ3JvdXBcbiAgICB9O1xufVxuZnVuY3Rpb24gY2hlY2tfb3V0cm9zKCkge1xuICAgIGlmICghb3V0cm9zLnIpIHtcbiAgICAgICAgcnVuX2FsbChvdXRyb3MuYyk7XG4gICAgfVxuICAgIG91dHJvcyA9IG91dHJvcy5wO1xufVxuZnVuY3Rpb24gdHJhbnNpdGlvbl9pbihibG9jaywgbG9jYWwpIHtcbiAgICBpZiAoYmxvY2sgJiYgYmxvY2suaSkge1xuICAgICAgICBvdXRyb2luZy5kZWxldGUoYmxvY2spO1xuICAgICAgICBibG9jay5pKGxvY2FsKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uX291dChibG9jaywgbG9jYWwsIGRldGFjaCwgY2FsbGJhY2spIHtcbiAgICBpZiAoYmxvY2sgJiYgYmxvY2subykge1xuICAgICAgICBpZiAob3V0cm9pbmcuaGFzKGJsb2NrKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3V0cm9pbmcuYWRkKGJsb2NrKTtcbiAgICAgICAgb3V0cm9zLmMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBvdXRyb2luZy5kZWxldGUoYmxvY2spO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRldGFjaClcbiAgICAgICAgICAgICAgICAgICAgYmxvY2suZCgxKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYmxvY2subyhsb2NhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxufVxuY29uc3QgbnVsbF90cmFuc2l0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuZnVuY3Rpb24gY3JlYXRlX2luX3RyYW5zaXRpb24obm9kZSwgZm4sIHBhcmFtcykge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGRpcmVjdGlvbjogJ2luJyB9O1xuICAgIGxldCBjb25maWcgPSBmbihub2RlLCBwYXJhbXMsIG9wdGlvbnMpO1xuICAgIGxldCBydW5uaW5nID0gZmFsc2U7XG4gICAgbGV0IGFuaW1hdGlvbl9uYW1lO1xuICAgIGxldCB0YXNrO1xuICAgIGxldCB1aWQgPSAwO1xuICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICAgIGlmIChhbmltYXRpb25fbmFtZSlcbiAgICAgICAgICAgIGRlbGV0ZV9ydWxlKG5vZGUsIGFuaW1hdGlvbl9uYW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ28oKSB7XG4gICAgICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIHRpY2sgPSBub29wLCBjc3MgfSA9IGNvbmZpZyB8fCBudWxsX3RyYW5zaXRpb247XG4gICAgICAgIGlmIChjc3MpXG4gICAgICAgICAgICBhbmltYXRpb25fbmFtZSA9IGNyZWF0ZV9ydWxlKG5vZGUsIDAsIDEsIGR1cmF0aW9uLCBkZWxheSwgZWFzaW5nLCBjc3MsIHVpZCsrKTtcbiAgICAgICAgdGljaygwLCAxKTtcbiAgICAgICAgY29uc3Qgc3RhcnRfdGltZSA9IG5vdygpICsgZGVsYXk7XG4gICAgICAgIGNvbnN0IGVuZF90aW1lID0gc3RhcnRfdGltZSArIGR1cmF0aW9uO1xuICAgICAgICBpZiAodGFzaylcbiAgICAgICAgICAgIHRhc2suYWJvcnQoKTtcbiAgICAgICAgcnVubmluZyA9IHRydWU7XG4gICAgICAgIGFkZF9yZW5kZXJfY2FsbGJhY2soKCkgPT4gZGlzcGF0Y2gobm9kZSwgdHJ1ZSwgJ3N0YXJ0JykpO1xuICAgICAgICB0YXNrID0gbG9vcChub3cgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93ID49IGVuZF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2soMSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG5vZGUsIHRydWUsICdlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm93ID49IHN0YXJ0X3RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGVhc2luZygobm93IC0gc3RhcnRfdGltZSkgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRpY2sodCwgMSAtIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydW5uaW5nO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCgpIHtcbiAgICAgICAgICAgIGlmIChzdGFydGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSk7XG4gICAgICAgICAgICBpZiAoaXNfZnVuY3Rpb24oY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB3YWl0KCkudGhlbihnbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnbygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICAgICAgc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbmQoKSB7XG4gICAgICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICBydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlX291dF90cmFuc2l0aW9uKG5vZGUsIGZuLCBwYXJhbXMpIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBkaXJlY3Rpb246ICdvdXQnIH07XG4gICAgbGV0IGNvbmZpZyA9IGZuKG5vZGUsIHBhcmFtcywgb3B0aW9ucyk7XG4gICAgbGV0IHJ1bm5pbmcgPSB0cnVlO1xuICAgIGxldCBhbmltYXRpb25fbmFtZTtcbiAgICBjb25zdCBncm91cCA9IG91dHJvcztcbiAgICBncm91cC5yICs9IDE7XG4gICAgZnVuY3Rpb24gZ28oKSB7XG4gICAgICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIHRpY2sgPSBub29wLCBjc3MgfSA9IGNvbmZpZyB8fCBudWxsX3RyYW5zaXRpb247XG4gICAgICAgIGlmIChjc3MpXG4gICAgICAgICAgICBhbmltYXRpb25fbmFtZSA9IGNyZWF0ZV9ydWxlKG5vZGUsIDEsIDAsIGR1cmF0aW9uLCBkZWxheSwgZWFzaW5nLCBjc3MpO1xuICAgICAgICBjb25zdCBzdGFydF90aW1lID0gbm93KCkgKyBkZWxheTtcbiAgICAgICAgY29uc3QgZW5kX3RpbWUgPSBzdGFydF90aW1lICsgZHVyYXRpb247XG4gICAgICAgIGFkZF9yZW5kZXJfY2FsbGJhY2soKCkgPT4gZGlzcGF0Y2gobm9kZSwgZmFsc2UsICdzdGFydCcpKTtcbiAgICAgICAgbG9vcChub3cgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93ID49IGVuZF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2soMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG5vZGUsIGZhbHNlLCAnZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghLS1ncm91cC5yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgcmVzdWx0IGluIGBlbmQoKWAgYmVpbmcgY2FsbGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhbiB1cCBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsKGdyb3VwLmMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vdyA+PSBzdGFydF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBlYXNpbmcoKG5vdyAtIHN0YXJ0X3RpbWUpIC8gZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aWNrKDEgLSB0LCB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVubmluZztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc19mdW5jdGlvbihjb25maWcpKSB7XG4gICAgICAgIHdhaXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZyhvcHRpb25zKTtcbiAgICAgICAgICAgIGdvKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ28oKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5kKHJlc2V0KSB7XG4gICAgICAgICAgICBpZiAocmVzZXQgJiYgY29uZmlnLnRpY2spIHtcbiAgICAgICAgICAgICAgICBjb25maWcudGljaygxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChydW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbl9uYW1lKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGVfcnVsZShub2RlLCBhbmltYXRpb25fbmFtZSk7XG4gICAgICAgICAgICAgICAgcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZV9iaWRpcmVjdGlvbmFsX3RyYW5zaXRpb24obm9kZSwgZm4sIHBhcmFtcywgaW50cm8pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBkaXJlY3Rpb246ICdib3RoJyB9O1xuICAgIGxldCBjb25maWcgPSBmbihub2RlLCBwYXJhbXMsIG9wdGlvbnMpO1xuICAgIGxldCB0ID0gaW50cm8gPyAwIDogMTtcbiAgICBsZXQgcnVubmluZ19wcm9ncmFtID0gbnVsbDtcbiAgICBsZXQgcGVuZGluZ19wcm9ncmFtID0gbnVsbDtcbiAgICBsZXQgYW5pbWF0aW9uX25hbWUgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGNsZWFyX2FuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKGFuaW1hdGlvbl9uYW1lKVxuICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSwgYW5pbWF0aW9uX25hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0KHByb2dyYW0sIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGQgPSAocHJvZ3JhbS5iIC0gdCk7XG4gICAgICAgIGR1cmF0aW9uICo9IE1hdGguYWJzKGQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYTogdCxcbiAgICAgICAgICAgIGI6IHByb2dyYW0uYixcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIHN0YXJ0OiBwcm9ncmFtLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBwcm9ncmFtLnN0YXJ0ICsgZHVyYXRpb24sXG4gICAgICAgICAgICBncm91cDogcHJvZ3JhbS5ncm91cFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnbyhiKSB7XG4gICAgICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIHRpY2sgPSBub29wLCBjc3MgfSA9IGNvbmZpZyB8fCBudWxsX3RyYW5zaXRpb247XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB7XG4gICAgICAgICAgICBzdGFydDogbm93KCkgKyBkZWxheSxcbiAgICAgICAgICAgIGJcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFiKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHRvZG86IGltcHJvdmUgdHlwaW5nc1xuICAgICAgICAgICAgcHJvZ3JhbS5ncm91cCA9IG91dHJvcztcbiAgICAgICAgICAgIG91dHJvcy5yICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bm5pbmdfcHJvZ3JhbSB8fCBwZW5kaW5nX3Byb2dyYW0pIHtcbiAgICAgICAgICAgIHBlbmRpbmdfcHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGludHJvLCBhbmQgdGhlcmUncyBhIGRlbGF5LCB3ZSBuZWVkIHRvIGRvXG4gICAgICAgICAgICAvLyBhbiBpbml0aWFsIHRpY2sgYW5kL29yIGFwcGx5IENTUyBhbmltYXRpb24gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIGlmIChjc3MpIHtcbiAgICAgICAgICAgICAgICBjbGVhcl9hbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgICBhbmltYXRpb25fbmFtZSA9IGNyZWF0ZV9ydWxlKG5vZGUsIHQsIGIsIGR1cmF0aW9uLCBkZWxheSwgZWFzaW5nLCBjc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGIpXG4gICAgICAgICAgICAgICAgdGljaygwLCAxKTtcbiAgICAgICAgICAgIHJ1bm5pbmdfcHJvZ3JhbSA9IGluaXQocHJvZ3JhbSwgZHVyYXRpb24pO1xuICAgICAgICAgICAgYWRkX3JlbmRlcl9jYWxsYmFjaygoKSA9PiBkaXNwYXRjaChub2RlLCBiLCAnc3RhcnQnKSk7XG4gICAgICAgICAgICBsb29wKG5vdyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdfcHJvZ3JhbSAmJiBub3cgPiBwZW5kaW5nX3Byb2dyYW0uc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ19wcm9ncmFtID0gaW5pdChwZW5kaW5nX3Byb2dyYW0sIGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ19wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gobm9kZSwgcnVubmluZ19wcm9ncmFtLmIsICdzdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhcl9hbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbl9uYW1lID0gY3JlYXRlX3J1bGUobm9kZSwgdCwgcnVubmluZ19wcm9ncmFtLmIsIHJ1bm5pbmdfcHJvZ3JhbS5kdXJhdGlvbiwgMCwgZWFzaW5nLCBjb25maWcuY3NzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVubmluZ19wcm9ncmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub3cgPj0gcnVubmluZ19wcm9ncmFtLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGljayh0ID0gcnVubmluZ19wcm9ncmFtLmIsIDEgLSB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG5vZGUsIHJ1bm5pbmdfcHJvZ3JhbS5iLCAnZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlbmRpbmdfcHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGRvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZ19wcm9ncmFtLmIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50cm8g4oCUIHdlIGNhbiB0aWR5IHVwIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyX2FuaW1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0cm8g4oCUIG5lZWRzIHRvIGJlIGNvb3JkaW5hdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghLS1ydW5uaW5nX3Byb2dyYW0uZ3JvdXAucilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9hbGwocnVubmluZ19wcm9ncmFtLmdyb3VwLmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcHJvZ3JhbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm93ID49IHJ1bm5pbmdfcHJvZ3JhbS5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IG5vdyAtIHJ1bm5pbmdfcHJvZ3JhbS5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBydW5uaW5nX3Byb2dyYW0uYSArIHJ1bm5pbmdfcHJvZ3JhbS5kICogZWFzaW5nKHAgLyBydW5uaW5nX3Byb2dyYW0uZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGljayh0LCAxIC0gdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhKHJ1bm5pbmdfcHJvZ3JhbSB8fCBwZW5kaW5nX3Byb2dyYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcnVuKGIpIHtcbiAgICAgICAgICAgIGlmIChpc19mdW5jdGlvbihjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgd2FpdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZ28oYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnbyhiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW5kKCkge1xuICAgICAgICAgICAgY2xlYXJfYW5pbWF0aW9uKCk7XG4gICAgICAgICAgICBydW5uaW5nX3Byb2dyYW0gPSBwZW5kaW5nX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlX3Byb21pc2UocHJvbWlzZSwgaW5mbykge1xuICAgIGNvbnN0IHRva2VuID0gaW5mby50b2tlbiA9IHt9O1xuICAgIGZ1bmN0aW9uIHVwZGF0ZSh0eXBlLCBpbmRleCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaW5mby50b2tlbiAhPT0gdG9rZW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluZm8ucmVzb2x2ZWQgPSB2YWx1ZTtcbiAgICAgICAgbGV0IGNoaWxkX2N0eCA9IGluZm8uY3R4O1xuICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoaWxkX2N0eCA9IGNoaWxkX2N0eC5zbGljZSgpO1xuICAgICAgICAgICAgY2hpbGRfY3R4W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9jayA9IHR5cGUgJiYgKGluZm8uY3VycmVudCA9IHR5cGUpKGNoaWxkX2N0eCk7XG4gICAgICAgIGxldCBuZWVkc19mbHVzaCA9IGZhbHNlO1xuICAgICAgICBpZiAoaW5mby5ibG9jaykge1xuICAgICAgICAgICAgaWYgKGluZm8uYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5ibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4ICYmIGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cF9vdXRyb3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25fb3V0KGJsb2NrLCAxLCAxLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uYmxvY2tzW2ldID09PSBibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJsb2Nrc1tpXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja19vdXRyb3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5mby5ibG9jay5kKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmxvY2suYygpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbl9pbihibG9jaywgMSk7XG4gICAgICAgICAgICBibG9jay5tKGluZm8ubW91bnQoKSwgaW5mby5hbmNob3IpO1xuICAgICAgICAgICAgbmVlZHNfZmx1c2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uYmxvY2sgPSBibG9jaztcbiAgICAgICAgaWYgKGluZm8uYmxvY2tzKVxuICAgICAgICAgICAgaW5mby5ibG9ja3NbaW5kZXhdID0gYmxvY2s7XG4gICAgICAgIGlmIChuZWVkc19mbHVzaCkge1xuICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNfcHJvbWlzZShwcm9taXNlKSkge1xuICAgICAgICBjb25zdCBjdXJyZW50X2NvbXBvbmVudCA9IGdldF9jdXJyZW50X2NvbXBvbmVudCgpO1xuICAgICAgICBwcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KGN1cnJlbnRfY29tcG9uZW50KTtcbiAgICAgICAgICAgIHVwZGF0ZShpbmZvLnRoZW4sIDEsIGluZm8udmFsdWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChudWxsKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KGN1cnJlbnRfY29tcG9uZW50KTtcbiAgICAgICAgICAgIHVwZGF0ZShpbmZvLmNhdGNoLCAyLCBpbmZvLmVycm9yLCBlcnJvcik7XG4gICAgICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWluZm8uaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGEgdGhlbi9jYXRjaCBibG9jaywgZGVzdHJveSBpdFxuICAgICAgICBpZiAoaW5mby5jdXJyZW50ICE9PSBpbmZvLnBlbmRpbmcpIHtcbiAgICAgICAgICAgIHVwZGF0ZShpbmZvLnBlbmRpbmcsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChpbmZvLmN1cnJlbnQgIT09IGluZm8udGhlbikge1xuICAgICAgICAgICAgdXBkYXRlKGluZm8udGhlbiwgMSwgaW5mby52YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnJlc29sdmVkID0gcHJvbWlzZTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVfYXdhaXRfYmxvY2tfYnJhbmNoKGluZm8sIGN0eCwgZGlydHkpIHtcbiAgICBjb25zdCBjaGlsZF9jdHggPSBjdHguc2xpY2UoKTtcbiAgICBjb25zdCB7IHJlc29sdmVkIH0gPSBpbmZvO1xuICAgIGlmIChpbmZvLmN1cnJlbnQgPT09IGluZm8udGhlbikge1xuICAgICAgICBjaGlsZF9jdHhbaW5mby52YWx1ZV0gPSByZXNvbHZlZDtcbiAgICB9XG4gICAgaWYgKGluZm8uY3VycmVudCA9PT0gaW5mby5jYXRjaCkge1xuICAgICAgICBjaGlsZF9jdHhbaW5mby5lcnJvcl0gPSByZXNvbHZlZDtcbiAgICB9XG4gICAgaW5mby5ibG9jay5wKGNoaWxkX2N0eCwgZGlydHkpO1xufVxuXG5jb25zdCBnbG9iYWxzID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgPyB3aW5kb3dcbiAgICA6IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IGdsb2JhbFRoaXNcbiAgICAgICAgOiBnbG9iYWwpO1xuXG5mdW5jdGlvbiBkZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApIHtcbiAgICBibG9jay5kKDEpO1xuICAgIGxvb2t1cC5kZWxldGUoYmxvY2sua2V5KTtcbn1cbmZ1bmN0aW9uIG91dHJvX2FuZF9kZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApIHtcbiAgICB0cmFuc2l0aW9uX291dChibG9jaywgMSwgMSwgKCkgPT4ge1xuICAgICAgICBsb29rdXAuZGVsZXRlKGJsb2NrLmtleSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmaXhfYW5kX2Rlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCkge1xuICAgIGJsb2NrLmYoKTtcbiAgICBkZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApO1xufVxuZnVuY3Rpb24gZml4X2FuZF9vdXRyb19hbmRfZGVzdHJveV9ibG9jayhibG9jaywgbG9va3VwKSB7XG4gICAgYmxvY2suZigpO1xuICAgIG91dHJvX2FuZF9kZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApO1xufVxuZnVuY3Rpb24gdXBkYXRlX2tleWVkX2VhY2gob2xkX2Jsb2NrcywgZGlydHksIGdldF9rZXksIGR5bmFtaWMsIGN0eCwgbGlzdCwgbG9va3VwLCBub2RlLCBkZXN0cm95LCBjcmVhdGVfZWFjaF9ibG9jaywgbmV4dCwgZ2V0X2NvbnRleHQpIHtcbiAgICBsZXQgbyA9IG9sZF9ibG9ja3MubGVuZ3RoO1xuICAgIGxldCBuID0gbGlzdC5sZW5ndGg7XG4gICAgbGV0IGkgPSBvO1xuICAgIGNvbnN0IG9sZF9pbmRleGVzID0ge307XG4gICAgd2hpbGUgKGktLSlcbiAgICAgICAgb2xkX2luZGV4ZXNbb2xkX2Jsb2Nrc1tpXS5rZXldID0gaTtcbiAgICBjb25zdCBuZXdfYmxvY2tzID0gW107XG4gICAgY29uc3QgbmV3X2xvb2t1cCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBkZWx0YXMgPSBuZXcgTWFwKCk7XG4gICAgaSA9IG47XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb25zdCBjaGlsZF9jdHggPSBnZXRfY29udGV4dChjdHgsIGxpc3QsIGkpO1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRfa2V5KGNoaWxkX2N0eCk7XG4gICAgICAgIGxldCBibG9jayA9IGxvb2t1cC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgYmxvY2sgPSBjcmVhdGVfZWFjaF9ibG9jayhrZXksIGNoaWxkX2N0eCk7XG4gICAgICAgICAgICBibG9jay5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZHluYW1pYykge1xuICAgICAgICAgICAgYmxvY2sucChjaGlsZF9jdHgsIGRpcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdfbG9va3VwLnNldChrZXksIG5ld19ibG9ja3NbaV0gPSBibG9jayk7XG4gICAgICAgIGlmIChrZXkgaW4gb2xkX2luZGV4ZXMpXG4gICAgICAgICAgICBkZWx0YXMuc2V0KGtleSwgTWF0aC5hYnMoaSAtIG9sZF9pbmRleGVzW2tleV0pKTtcbiAgICB9XG4gICAgY29uc3Qgd2lsbF9tb3ZlID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IGRpZF9tb3ZlID0gbmV3IFNldCgpO1xuICAgIGZ1bmN0aW9uIGluc2VydChibG9jaykge1xuICAgICAgICB0cmFuc2l0aW9uX2luKGJsb2NrLCAxKTtcbiAgICAgICAgYmxvY2subShub2RlLCBuZXh0KTtcbiAgICAgICAgbG9va3VwLnNldChibG9jay5rZXksIGJsb2NrKTtcbiAgICAgICAgbmV4dCA9IGJsb2NrLmZpcnN0O1xuICAgICAgICBuLS07XG4gICAgfVxuICAgIHdoaWxlIChvICYmIG4pIHtcbiAgICAgICAgY29uc3QgbmV3X2Jsb2NrID0gbmV3X2Jsb2Nrc1tuIC0gMV07XG4gICAgICAgIGNvbnN0IG9sZF9ibG9jayA9IG9sZF9ibG9ja3NbbyAtIDFdO1xuICAgICAgICBjb25zdCBuZXdfa2V5ID0gbmV3X2Jsb2NrLmtleTtcbiAgICAgICAgY29uc3Qgb2xkX2tleSA9IG9sZF9ibG9jay5rZXk7XG4gICAgICAgIGlmIChuZXdfYmxvY2sgPT09IG9sZF9ibG9jaykge1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICAgICAgbmV4dCA9IG5ld19ibG9jay5maXJzdDtcbiAgICAgICAgICAgIG8tLTtcbiAgICAgICAgICAgIG4tLTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghbmV3X2xvb2t1cC5oYXMob2xkX2tleSkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvbGQgYmxvY2tcbiAgICAgICAgICAgIGRlc3Ryb3kob2xkX2Jsb2NrLCBsb29rdXApO1xuICAgICAgICAgICAgby0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFsb29rdXAuaGFzKG5ld19rZXkpIHx8IHdpbGxfbW92ZS5oYXMobmV3X2tleSkpIHtcbiAgICAgICAgICAgIGluc2VydChuZXdfYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRpZF9tb3ZlLmhhcyhvbGRfa2V5KSkge1xuICAgICAgICAgICAgby0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRlbHRhcy5nZXQobmV3X2tleSkgPiBkZWx0YXMuZ2V0KG9sZF9rZXkpKSB7XG4gICAgICAgICAgICBkaWRfbW92ZS5hZGQobmV3X2tleSk7XG4gICAgICAgICAgICBpbnNlcnQobmV3X2Jsb2NrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHdpbGxfbW92ZS5hZGQob2xkX2tleSk7XG4gICAgICAgICAgICBvLS07XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKG8tLSkge1xuICAgICAgICBjb25zdCBvbGRfYmxvY2sgPSBvbGRfYmxvY2tzW29dO1xuICAgICAgICBpZiAoIW5ld19sb29rdXAuaGFzKG9sZF9ibG9jay5rZXkpKVxuICAgICAgICAgICAgZGVzdHJveShvbGRfYmxvY2ssIGxvb2t1cCk7XG4gICAgfVxuICAgIHdoaWxlIChuKVxuICAgICAgICBpbnNlcnQobmV3X2Jsb2Nrc1tuIC0gMV0pO1xuICAgIHJldHVybiBuZXdfYmxvY2tzO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVfZWFjaF9rZXlzKGN0eCwgbGlzdCwgZ2V0X2NvbnRleHQsIGdldF9rZXkpIHtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRfa2V5KGdldF9jb250ZXh0KGN0eCwgbGlzdCwgaSkpO1xuICAgICAgICBpZiAoa2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaGF2ZSBkdXBsaWNhdGUga2V5cyBpbiBhIGtleWVkIGVhY2gnKTtcbiAgICAgICAgfVxuICAgICAgICBrZXlzLmFkZChrZXkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0X3NwcmVhZF91cGRhdGUobGV2ZWxzLCB1cGRhdGVzKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge307XG4gICAgY29uc3QgdG9fbnVsbF9vdXQgPSB7fTtcbiAgICBjb25zdCBhY2NvdW50ZWRfZm9yID0geyAkJHNjb3BlOiAxIH07XG4gICAgbGV0IGkgPSBsZXZlbHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY29uc3QgbyA9IGxldmVsc1tpXTtcbiAgICAgICAgY29uc3QgbiA9IHVwZGF0ZXNbaV07XG4gICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG4pKVxuICAgICAgICAgICAgICAgICAgICB0b19udWxsX291dFtrZXldID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY291bnRlZF9mb3Jba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVba2V5XSA9IG5ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudGVkX2ZvcltrZXldID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXZlbHNbaV0gPSBuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbykge1xuICAgICAgICAgICAgICAgIGFjY291bnRlZF9mb3Jba2V5XSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdG9fbnVsbF9vdXQpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHVwZGF0ZSkpXG4gICAgICAgICAgICB1cGRhdGVba2V5XSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGdldF9zcHJlYWRfb2JqZWN0KHNwcmVhZF9wcm9wcykge1xuICAgIHJldHVybiB0eXBlb2Ygc3ByZWFkX3Byb3BzID09PSAnb2JqZWN0JyAmJiBzcHJlYWRfcHJvcHMgIT09IG51bGwgPyBzcHJlYWRfcHJvcHMgOiB7fTtcbn1cblxuLy8gc291cmNlOiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmRpY2VzLmh0bWxcbmNvbnN0IGJvb2xlYW5fYXR0cmlidXRlcyA9IG5ldyBTZXQoW1xuICAgICdhbGxvd2Z1bGxzY3JlZW4nLFxuICAgICdhbGxvd3BheW1lbnRyZXF1ZXN0JyxcbiAgICAnYXN5bmMnLFxuICAgICdhdXRvZm9jdXMnLFxuICAgICdhdXRvcGxheScsXG4gICAgJ2NoZWNrZWQnLFxuICAgICdjb250cm9scycsXG4gICAgJ2RlZmF1bHQnLFxuICAgICdkZWZlcicsXG4gICAgJ2Rpc2FibGVkJyxcbiAgICAnZm9ybW5vdmFsaWRhdGUnLFxuICAgICdoaWRkZW4nLFxuICAgICdpbmVydCcsXG4gICAgJ2lzbWFwJyxcbiAgICAnaXRlbXNjb3BlJyxcbiAgICAnbG9vcCcsXG4gICAgJ211bHRpcGxlJyxcbiAgICAnbXV0ZWQnLFxuICAgICdub21vZHVsZScsXG4gICAgJ25vdmFsaWRhdGUnLFxuICAgICdvcGVuJyxcbiAgICAncGxheXNpbmxpbmUnLFxuICAgICdyZWFkb25seScsXG4gICAgJ3JlcXVpcmVkJyxcbiAgICAncmV2ZXJzZWQnLFxuICAgICdzZWxlY3RlZCdcbl0pO1xuXG4vKiogcmVnZXggb2YgYWxsIGh0bWwgdm9pZCBlbGVtZW50IG5hbWVzICovXG5jb25zdCB2b2lkX2VsZW1lbnRfbmFtZXMgPSAvXig/OmFyZWF8YmFzZXxicnxjb2x8Y29tbWFuZHxlbWJlZHxocnxpbWd8aW5wdXR8a2V5Z2VufGxpbmt8bWV0YXxwYXJhbXxzb3VyY2V8dHJhY2t8d2JyKSQvO1xuZnVuY3Rpb24gaXNfdm9pZChuYW1lKSB7XG4gICAgcmV0dXJuIHZvaWRfZWxlbWVudF9uYW1lcy50ZXN0KG5hbWUpIHx8IG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJyFkb2N0eXBlJztcbn1cblxuY29uc3QgaW52YWxpZF9hdHRyaWJ1dGVfbmFtZV9jaGFyYWN0ZXIgPSAvW1xccydcIj4vPVxcdXtGREQwfS1cXHV7RkRFRn1cXHV7RkZGRX1cXHV7RkZGRn1cXHV7MUZGRkV9XFx1ezFGRkZGfVxcdXsyRkZGRX1cXHV7MkZGRkZ9XFx1ezNGRkZFfVxcdXszRkZGRn1cXHV7NEZGRkV9XFx1ezRGRkZGfVxcdXs1RkZGRX1cXHV7NUZGRkZ9XFx1ezZGRkZFfVxcdXs2RkZGRn1cXHV7N0ZGRkV9XFx1ezdGRkZGfVxcdXs4RkZGRX1cXHV7OEZGRkZ9XFx1ezlGRkZFfVxcdXs5RkZGRn1cXHV7QUZGRkV9XFx1e0FGRkZGfVxcdXtCRkZGRX1cXHV7QkZGRkZ9XFx1e0NGRkZFfVxcdXtDRkZGRn1cXHV7REZGRkV9XFx1e0RGRkZGfVxcdXtFRkZGRX1cXHV7RUZGRkZ9XFx1e0ZGRkZFfVxcdXtGRkZGRn1cXHV7MTBGRkZFfVxcdXsxMEZGRkZ9XS91O1xuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jbm9uY2hhcmFjdGVyXG5mdW5jdGlvbiBzcHJlYWQoYXJncywgYXR0cnNfdG9fYWRkKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpO1xuICAgIGlmIChhdHRyc190b19hZGQpIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlc190b19hZGQgPSBhdHRyc190b19hZGQuY2xhc3NlcztcbiAgICAgICAgY29uc3Qgc3R5bGVzX3RvX2FkZCA9IGF0dHJzX3RvX2FkZC5zdHlsZXM7XG4gICAgICAgIGlmIChjbGFzc2VzX3RvX2FkZCkge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuY2xhc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY2xhc3MgPSBjbGFzc2VzX3RvX2FkZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY2xhc3MgKz0gJyAnICsgY2xhc3Nlc190b19hZGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlc190b19hZGQpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0eWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnN0eWxlID0gc3R5bGVfb2JqZWN0X3RvX3N0cmluZyhzdHlsZXNfdG9fYWRkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuc3R5bGUgPSBzdHlsZV9vYmplY3RfdG9fc3RyaW5nKG1lcmdlX3Nzcl9zdHlsZXMoYXR0cmlidXRlcy5zdHlsZSwgc3R5bGVzX3RvX2FkZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBzdHIgPSAnJztcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBpZiAoaW52YWxpZF9hdHRyaWJ1dGVfbmFtZV9jaGFyYWN0ZXIudGVzdChuYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpXG4gICAgICAgICAgICBzdHIgKz0gJyAnICsgbmFtZTtcbiAgICAgICAgZWxzZSBpZiAoYm9vbGVhbl9hdHRyaWJ1dGVzLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICAgICAgc3RyICs9ICcgJyArIG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3RyICs9IGAgJHtuYW1lfT1cIiR7dmFsdWV9XCJgO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIG1lcmdlX3Nzcl9zdHlsZXMoc3R5bGVfYXR0cmlidXRlLCBzdHlsZV9kaXJlY3RpdmUpIHtcbiAgICBjb25zdCBzdHlsZV9vYmplY3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGluZGl2aWR1YWxfc3R5bGUgb2Ygc3R5bGVfYXR0cmlidXRlLnNwbGl0KCc7JykpIHtcbiAgICAgICAgY29uc3QgY29sb25faW5kZXggPSBpbmRpdmlkdWFsX3N0eWxlLmluZGV4T2YoJzonKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGluZGl2aWR1YWxfc3R5bGUuc2xpY2UoMCwgY29sb25faW5kZXgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRpdmlkdWFsX3N0eWxlLnNsaWNlKGNvbG9uX2luZGV4ICsgMSkudHJpbSgpO1xuICAgICAgICBpZiAoIW5hbWUpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgc3R5bGVfb2JqZWN0W25hbWVdID0gdmFsdWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbmFtZSBpbiBzdHlsZV9kaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHlsZV9kaXJlY3RpdmVbbmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgc3R5bGVfb2JqZWN0W25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgc3R5bGVfb2JqZWN0W25hbWVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHlsZV9vYmplY3Q7XG59XG5jb25zdCBBVFRSX1JFR0VYID0gL1smXCJdL2c7XG5jb25zdCBDT05URU5UX1JFR0VYID0gL1smPF0vZztcbi8qKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGFuZCBoYXMgYmVlbiBvcHRpbWl6ZWRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zdmVsdGVqcy9zdmVsdGUvcHVsbC81NzAxXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZSh2YWx1ZSwgaXNfYXR0ciA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc3RyID0gU3RyaW5nKHZhbHVlKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gaXNfYXR0ciA/IEFUVFJfUkVHRVggOiBDT05URU5UX1JFR0VYO1xuICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBsZXQgZXNjYXBlZCA9ICcnO1xuICAgIGxldCBsYXN0ID0gMDtcbiAgICB3aGlsZSAocGF0dGVybi50ZXN0KHN0cikpIHtcbiAgICAgICAgY29uc3QgaSA9IHBhdHRlcm4ubGFzdEluZGV4IC0gMTtcbiAgICAgICAgY29uc3QgY2ggPSBzdHJbaV07XG4gICAgICAgIGVzY2FwZWQgKz0gc3RyLnN1YnN0cmluZyhsYXN0LCBpKSArIChjaCA9PT0gJyYnID8gJyZhbXA7JyA6IChjaCA9PT0gJ1wiJyA/ICcmcXVvdDsnIDogJyZsdDsnKSk7XG4gICAgICAgIGxhc3QgPSBpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIGVzY2FwZWQgKyBzdHIuc3Vic3RyaW5nKGxhc3QpO1xufVxuZnVuY3Rpb24gZXNjYXBlX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSkge1xuICAgIC8vIGtlZXAgYm9vbGVhbnMsIG51bGwsIGFuZCB1bmRlZmluZWQgZm9yIHRoZSBzYWtlIG9mIGBzcHJlYWRgXG4gICAgY29uc3Qgc2hvdWxkX2VzY2FwZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpO1xuICAgIHJldHVybiBzaG91bGRfZXNjYXBlID8gZXNjYXBlKHZhbHVlLCB0cnVlKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZXNjYXBlX29iamVjdChvYmopIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlc2NhcGVfYXR0cmlidXRlX3ZhbHVlKG9ialtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGVhY2goaXRlbXMsIGZuKSB7XG4gICAgbGV0IHN0ciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgc3RyICs9IGZuKGl0ZW1zW2ldLCBpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmNvbnN0IG1pc3NpbmdfY29tcG9uZW50ID0ge1xuICAgICQkcmVuZGVyOiAoKSA9PiAnJ1xufTtcbmZ1bmN0aW9uIHZhbGlkYXRlX2NvbXBvbmVudChjb21wb25lbnQsIG5hbWUpIHtcbiAgICBpZiAoIWNvbXBvbmVudCB8fCAhY29tcG9uZW50LiQkcmVuZGVyKSB7XG4gICAgICAgIGlmIChuYW1lID09PSAnc3ZlbHRlOmNvbXBvbmVudCcpXG4gICAgICAgICAgICBuYW1lICs9ICcgdGhpcz17Li4ufSc7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgPCR7bmFtZX0+IGlzIG5vdCBhIHZhbGlkIFNTUiBjb21wb25lbnQuIFlvdSBtYXkgbmVlZCB0byByZXZpZXcgeW91ciBidWlsZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgZGVwZW5kZW5jaWVzIGFyZSBjb21waWxlZCwgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgYXMgcHJlLWNvbXBpbGVkIG1vZHVsZXMuIE90aGVyd2lzZSB5b3UgbWF5IG5lZWQgdG8gZml4IGEgPCR7bmFtZX0+LmApO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZnVuY3Rpb24gZGVidWcoZmlsZSwgbGluZSwgY29sdW1uLCB2YWx1ZXMpIHtcbiAgICBjb25zb2xlLmxvZyhge0BkZWJ1Z30gJHtmaWxlID8gZmlsZSArICcgJyA6ICcnfSgke2xpbmV9OiR7Y29sdW1ufSlgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2codmFsdWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgcmV0dXJuICcnO1xufVxubGV0IG9uX2Rlc3Ryb3k7XG5mdW5jdGlvbiBjcmVhdGVfc3NyX2NvbXBvbmVudChmbikge1xuICAgIGZ1bmN0aW9uICQkcmVuZGVyKHJlc3VsdCwgcHJvcHMsIGJpbmRpbmdzLCBzbG90cywgY29udGV4dCkge1xuICAgICAgICBjb25zdCBwYXJlbnRfY29tcG9uZW50ID0gY3VycmVudF9jb21wb25lbnQ7XG4gICAgICAgIGNvbnN0ICQkID0ge1xuICAgICAgICAgICAgb25fZGVzdHJveSxcbiAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBNYXAoY29udGV4dCB8fCAocGFyZW50X2NvbXBvbmVudCA/IHBhcmVudF9jb21wb25lbnQuJCQuY29udGV4dCA6IFtdKSksXG4gICAgICAgICAgICAvLyB0aGVzZSB3aWxsIGJlIGltbWVkaWF0ZWx5IGRpc2NhcmRlZFxuICAgICAgICAgICAgb25fbW91bnQ6IFtdLFxuICAgICAgICAgICAgYmVmb3JlX3VwZGF0ZTogW10sXG4gICAgICAgICAgICBhZnRlcl91cGRhdGU6IFtdLFxuICAgICAgICAgICAgY2FsbGJhY2tzOiBibGFua19vYmplY3QoKVxuICAgICAgICB9O1xuICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQoeyAkJCB9KTtcbiAgICAgICAgY29uc3QgaHRtbCA9IGZuKHJlc3VsdCwgcHJvcHMsIGJpbmRpbmdzLCBzbG90cyk7XG4gICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChwYXJlbnRfY29tcG9uZW50KTtcbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlbmRlcjogKHByb3BzID0ge30sIHsgJCRzbG90cyA9IHt9LCBjb250ZXh0ID0gbmV3IE1hcCgpIH0gPSB7fSkgPT4ge1xuICAgICAgICAgICAgb25fZGVzdHJveSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geyB0aXRsZTogJycsIGhlYWQ6ICcnLCBjc3M6IG5ldyBTZXQoKSB9O1xuICAgICAgICAgICAgY29uc3QgaHRtbCA9ICQkcmVuZGVyKHJlc3VsdCwgcHJvcHMsIHt9LCAkJHNsb3RzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJ1bl9hbGwob25fZGVzdHJveSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgICAgICAgY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IEFycmF5LmZyb20ocmVzdWx0LmNzcykubWFwKGNzcyA9PiBjc3MuY29kZSkuam9pbignXFxuJyksXG4gICAgICAgICAgICAgICAgICAgIG1hcDogbnVsbCAvLyBUT0RPXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoZWFkOiByZXN1bHQudGl0bGUgKyByZXN1bHQuaGVhZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgJCRyZW5kZXJcbiAgICB9O1xufVxuZnVuY3Rpb24gYWRkX2F0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IChib29sZWFuICYmICF2YWx1ZSkpXG4gICAgICAgIHJldHVybiAnJztcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gKGJvb2xlYW4gJiYgdmFsdWUgPT09IHRydWUpID8gJycgOiBgPVwiJHtlc2NhcGUodmFsdWUsIHRydWUpfVwiYDtcbiAgICByZXR1cm4gYCAke25hbWV9JHthc3NpZ25tZW50fWA7XG59XG5mdW5jdGlvbiBhZGRfY2xhc3NlcyhjbGFzc2VzKSB7XG4gICAgcmV0dXJuIGNsYXNzZXMgPyBgIGNsYXNzPVwiJHtjbGFzc2VzfVwiYCA6ICcnO1xufVxuZnVuY3Rpb24gc3R5bGVfb2JqZWN0X3RvX3N0cmluZyhzdHlsZV9vYmplY3QpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVfb2JqZWN0KVxuICAgICAgICAuZmlsdGVyKGtleSA9PiBzdHlsZV9vYmplY3Rba2V5XSlcbiAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fTogJHtlc2NhcGVfYXR0cmlidXRlX3ZhbHVlKHN0eWxlX29iamVjdFtrZXldKX07YClcbiAgICAgICAgLmpvaW4oJyAnKTtcbn1cbmZ1bmN0aW9uIGFkZF9zdHlsZXMoc3R5bGVfb2JqZWN0KSB7XG4gICAgY29uc3Qgc3R5bGVzID0gc3R5bGVfb2JqZWN0X3RvX3N0cmluZyhzdHlsZV9vYmplY3QpO1xuICAgIHJldHVybiBzdHlsZXMgPyBgIHN0eWxlPVwiJHtzdHlsZXN9XCJgIDogJyc7XG59XG5cbmZ1bmN0aW9uIGJpbmQoY29tcG9uZW50LCBuYW1lLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGluZGV4ID0gY29tcG9uZW50LiQkLnByb3BzW25hbWVdO1xuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBvbmVudC4kJC5ib3VuZFtpbmRleF0gPSBjYWxsYmFjaztcbiAgICAgICAgY2FsbGJhY2soY29tcG9uZW50LiQkLmN0eFtpbmRleF0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZV9jb21wb25lbnQoYmxvY2spIHtcbiAgICBibG9jayAmJiBibG9jay5jKCk7XG59XG5mdW5jdGlvbiBjbGFpbV9jb21wb25lbnQoYmxvY2ssIHBhcmVudF9ub2Rlcykge1xuICAgIGJsb2NrICYmIGJsb2NrLmwocGFyZW50X25vZGVzKTtcbn1cbmZ1bmN0aW9uIG1vdW50X2NvbXBvbmVudChjb21wb25lbnQsIHRhcmdldCwgYW5jaG9yLCBjdXN0b21FbGVtZW50KSB7XG4gICAgY29uc3QgeyBmcmFnbWVudCwgYWZ0ZXJfdXBkYXRlIH0gPSBjb21wb25lbnQuJCQ7XG4gICAgZnJhZ21lbnQgJiYgZnJhZ21lbnQubSh0YXJnZXQsIGFuY2hvcik7XG4gICAgaWYgKCFjdXN0b21FbGVtZW50KSB7XG4gICAgICAgIC8vIG9uTW91bnQgaGFwcGVucyBiZWZvcmUgdGhlIGluaXRpYWwgYWZ0ZXJVcGRhdGVcbiAgICAgICAgYWRkX3JlbmRlcl9jYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdfb25fZGVzdHJveSA9IGNvbXBvbmVudC4kJC5vbl9tb3VudC5tYXAocnVuKS5maWx0ZXIoaXNfZnVuY3Rpb24pO1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAvLyBpdCB3aWxsIHVwZGF0ZSB0aGUgYCQkLm9uX2Rlc3Ryb3lgIHJlZmVyZW5jZSB0byBgbnVsbGAuXG4gICAgICAgICAgICAvLyB0aGUgZGVzdHJ1Y3R1cmVkIG9uX2Rlc3Ryb3kgbWF5IHN0aWxsIHJlZmVyZW5jZSB0byB0aGUgb2xkIGFycmF5XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LiQkLm9uX2Rlc3Ryb3kpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuJCQub25fZGVzdHJveS5wdXNoKC4uLm5ld19vbl9kZXN0cm95KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVkZ2UgY2FzZSAtIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGltbWVkaWF0ZWx5LFxuICAgICAgICAgICAgICAgIC8vIG1vc3QgbGlrZWx5IGFzIGEgcmVzdWx0IG9mIGEgYmluZGluZyBpbml0aWFsaXNpbmdcbiAgICAgICAgICAgICAgICBydW5fYWxsKG5ld19vbl9kZXN0cm95KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudC4kJC5vbl9tb3VudCA9IFtdO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWZ0ZXJfdXBkYXRlLmZvckVhY2goYWRkX3JlbmRlcl9jYWxsYmFjayk7XG59XG5mdW5jdGlvbiBkZXN0cm95X2NvbXBvbmVudChjb21wb25lbnQsIGRldGFjaGluZykge1xuICAgIGNvbnN0ICQkID0gY29tcG9uZW50LiQkO1xuICAgIGlmICgkJC5mcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBydW5fYWxsKCQkLm9uX2Rlc3Ryb3kpO1xuICAgICAgICAkJC5mcmFnbWVudCAmJiAkJC5mcmFnbWVudC5kKGRldGFjaGluZyk7XG4gICAgICAgIC8vIFRPRE8gbnVsbCBvdXQgb3RoZXIgcmVmcywgaW5jbHVkaW5nIGNvbXBvbmVudC4kJCAoYnV0IG5lZWQgdG9cbiAgICAgICAgLy8gcHJlc2VydmUgZmluYWwgc3RhdGU/KVxuICAgICAgICAkJC5vbl9kZXN0cm95ID0gJCQuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgICAkJC5jdHggPSBbXTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlX2RpcnR5KGNvbXBvbmVudCwgaSkge1xuICAgIGlmIChjb21wb25lbnQuJCQuZGlydHlbMF0gPT09IC0xKSB7XG4gICAgICAgIGRpcnR5X2NvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgICBzY2hlZHVsZV91cGRhdGUoKTtcbiAgICAgICAgY29tcG9uZW50LiQkLmRpcnR5LmZpbGwoMCk7XG4gICAgfVxuICAgIGNvbXBvbmVudC4kJC5kaXJ0eVsoaSAvIDMxKSB8IDBdIHw9ICgxIDw8IChpICUgMzEpKTtcbn1cbmZ1bmN0aW9uIGluaXQoY29tcG9uZW50LCBvcHRpb25zLCBpbnN0YW5jZSwgY3JlYXRlX2ZyYWdtZW50LCBub3RfZXF1YWwsIHByb3BzLCBhcHBlbmRfc3R5bGVzLCBkaXJ0eSA9IFstMV0pIHtcbiAgICBjb25zdCBwYXJlbnRfY29tcG9uZW50ID0gY3VycmVudF9jb21wb25lbnQ7XG4gICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KGNvbXBvbmVudCk7XG4gICAgY29uc3QgJCQgPSBjb21wb25lbnQuJCQgPSB7XG4gICAgICAgIGZyYWdtZW50OiBudWxsLFxuICAgICAgICBjdHg6IFtdLFxuICAgICAgICAvLyBzdGF0ZVxuICAgICAgICBwcm9wcyxcbiAgICAgICAgdXBkYXRlOiBub29wLFxuICAgICAgICBub3RfZXF1YWwsXG4gICAgICAgIGJvdW5kOiBibGFua19vYmplY3QoKSxcbiAgICAgICAgLy8gbGlmZWN5Y2xlXG4gICAgICAgIG9uX21vdW50OiBbXSxcbiAgICAgICAgb25fZGVzdHJveTogW10sXG4gICAgICAgIG9uX2Rpc2Nvbm5lY3Q6IFtdLFxuICAgICAgICBiZWZvcmVfdXBkYXRlOiBbXSxcbiAgICAgICAgYWZ0ZXJfdXBkYXRlOiBbXSxcbiAgICAgICAgY29udGV4dDogbmV3IE1hcChvcHRpb25zLmNvbnRleHQgfHwgKHBhcmVudF9jb21wb25lbnQgPyBwYXJlbnRfY29tcG9uZW50LiQkLmNvbnRleHQgOiBbXSkpLFxuICAgICAgICAvLyBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgY2FsbGJhY2tzOiBibGFua19vYmplY3QoKSxcbiAgICAgICAgZGlydHksXG4gICAgICAgIHNraXBfYm91bmQ6IGZhbHNlLFxuICAgICAgICByb290OiBvcHRpb25zLnRhcmdldCB8fCBwYXJlbnRfY29tcG9uZW50LiQkLnJvb3RcbiAgICB9O1xuICAgIGFwcGVuZF9zdHlsZXMgJiYgYXBwZW5kX3N0eWxlcygkJC5yb290KTtcbiAgICBsZXQgcmVhZHkgPSBmYWxzZTtcbiAgICAkJC5jdHggPSBpbnN0YW5jZVxuICAgICAgICA/IGluc3RhbmNlKGNvbXBvbmVudCwgb3B0aW9ucy5wcm9wcyB8fCB7fSwgKGksIHJldCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN0Lmxlbmd0aCA/IHJlc3RbMF0gOiByZXQ7XG4gICAgICAgICAgICBpZiAoJCQuY3R4ICYmIG5vdF9lcXVhbCgkJC5jdHhbaV0sICQkLmN0eFtpXSA9IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICghJCQuc2tpcF9ib3VuZCAmJiAkJC5ib3VuZFtpXSlcbiAgICAgICAgICAgICAgICAgICAgJCQuYm91bmRbaV0odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSlcbiAgICAgICAgICAgICAgICAgICAgbWFrZV9kaXJ0eShjb21wb25lbnQsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSlcbiAgICAgICAgOiBbXTtcbiAgICAkJC51cGRhdGUoKTtcbiAgICByZWFkeSA9IHRydWU7XG4gICAgcnVuX2FsbCgkJC5iZWZvcmVfdXBkYXRlKTtcbiAgICAvLyBgZmFsc2VgIGFzIGEgc3BlY2lhbCBjYXNlIG9mIG5vIERPTSBjb21wb25lbnRcbiAgICAkJC5mcmFnbWVudCA9IGNyZWF0ZV9mcmFnbWVudCA/IGNyZWF0ZV9mcmFnbWVudCgkJC5jdHgpIDogZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMudGFyZ2V0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIHN0YXJ0X2h5ZHJhdGluZygpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbihvcHRpb25zLnRhcmdldCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgJCQuZnJhZ21lbnQgJiYgJCQuZnJhZ21lbnQubChub2Rlcyk7XG4gICAgICAgICAgICBub2Rlcy5mb3JFYWNoKGRldGFjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgJCQuZnJhZ21lbnQgJiYgJCQuZnJhZ21lbnQuYygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmludHJvKVxuICAgICAgICAgICAgdHJhbnNpdGlvbl9pbihjb21wb25lbnQuJCQuZnJhZ21lbnQpO1xuICAgICAgICBtb3VudF9jb21wb25lbnQoY29tcG9uZW50LCBvcHRpb25zLnRhcmdldCwgb3B0aW9ucy5hbmNob3IsIG9wdGlvbnMuY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIGVuZF9oeWRyYXRpbmcoKTtcbiAgICAgICAgZmx1c2goKTtcbiAgICB9XG4gICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KHBhcmVudF9jb21wb25lbnQpO1xufVxubGV0IFN2ZWx0ZUVsZW1lbnQ7XG5pZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgU3ZlbHRlRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb25fbW91bnQgfSA9IHRoaXMuJCQ7XG4gICAgICAgICAgICB0aGlzLiQkLm9uX2Rpc2Nvbm5lY3QgPSBvbl9tb3VudC5tYXAocnVuKS5maWx0ZXIoaXNfZnVuY3Rpb24pO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB0b2RvOiBpbXByb3ZlIHR5cGluZ3NcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuJCQuc2xvdHRlZCkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgdG9kbzogaW1wcm92ZSB0eXBpbmdzXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLiQkLnNsb3R0ZWRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHIsIF9vbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXNbYXR0cl0gPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIHJ1bl9hbGwodGhpcy4kJC5vbl9kaXNjb25uZWN0KTtcbiAgICAgICAgfVxuICAgICAgICAkZGVzdHJveSgpIHtcbiAgICAgICAgICAgIGRlc3Ryb3lfY29tcG9uZW50KHRoaXMsIDEpO1xuICAgICAgICAgICAgdGhpcy4kZGVzdHJveSA9IG5vb3A7XG4gICAgICAgIH1cbiAgICAgICAgJG9uKHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBUT0RPIHNob3VsZCB0aGlzIGRlbGVnYXRlIHRvIGFkZEV2ZW50TGlzdGVuZXI/XG4gICAgICAgICAgICBpZiAoIWlzX2Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gKHRoaXMuJCQuY2FsbGJhY2tzW3R5cGVdIHx8ICh0aGlzLiQkLmNhbGxiYWNrc1t0eXBlXSA9IFtdKSk7XG4gICAgICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAkc2V0KCQkcHJvcHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiQkc2V0ICYmICFpc19lbXB0eSgkJHByb3BzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJCQuc2tpcF9ib3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy4kJHNldCgkJHByb3BzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiQkLnNraXBfYm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFN2ZWx0ZSBjb21wb25lbnRzLiBVc2VkIHdoZW4gZGV2PWZhbHNlLlxuICovXG5jbGFzcyBTdmVsdGVDb21wb25lbnQge1xuICAgICRkZXN0cm95KCkge1xuICAgICAgICBkZXN0cm95X2NvbXBvbmVudCh0aGlzLCAxKTtcbiAgICAgICAgdGhpcy4kZGVzdHJveSA9IG5vb3A7XG4gICAgfVxuICAgICRvbih0eXBlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlzX2Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gKHRoaXMuJCQuY2FsbGJhY2tzW3R5cGVdIHx8ICh0aGlzLiQkLmNhbGxiYWNrc1t0eXBlXSA9IFtdKSk7XG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICBjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgJHNldCgkJHByb3BzKSB7XG4gICAgICAgIGlmICh0aGlzLiQkc2V0ICYmICFpc19lbXB0eSgkJHByb3BzKSkge1xuICAgICAgICAgICAgdGhpcy4kJC5za2lwX2JvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuJCRzZXQoJCRwcm9wcyk7XG4gICAgICAgICAgICB0aGlzLiQkLnNraXBfYm91bmQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hfZGV2KHR5cGUsIGRldGFpbCkge1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tX2V2ZW50KHR5cGUsIE9iamVjdC5hc3NpZ24oeyB2ZXJzaW9uOiAnMy41NS4xJyB9LCBkZXRhaWwpLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufVxuZnVuY3Rpb24gYXBwZW5kX2Rldih0YXJnZXQsIG5vZGUpIHtcbiAgICBkaXNwYXRjaF9kZXYoJ1N2ZWx0ZURPTUluc2VydCcsIHsgdGFyZ2V0LCBub2RlIH0pO1xuICAgIGFwcGVuZCh0YXJnZXQsIG5vZGUpO1xufVxuZnVuY3Rpb24gYXBwZW5kX2h5ZHJhdGlvbl9kZXYodGFyZ2V0LCBub2RlKSB7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01JbnNlcnQnLCB7IHRhcmdldCwgbm9kZSB9KTtcbiAgICBhcHBlbmRfaHlkcmF0aW9uKHRhcmdldCwgbm9kZSk7XG59XG5mdW5jdGlvbiBpbnNlcnRfZGV2KHRhcmdldCwgbm9kZSwgYW5jaG9yKSB7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01JbnNlcnQnLCB7IHRhcmdldCwgbm9kZSwgYW5jaG9yIH0pO1xuICAgIGluc2VydCh0YXJnZXQsIG5vZGUsIGFuY2hvcik7XG59XG5mdW5jdGlvbiBpbnNlcnRfaHlkcmF0aW9uX2Rldih0YXJnZXQsIG5vZGUsIGFuY2hvcikge1xuICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NSW5zZXJ0JywgeyB0YXJnZXQsIG5vZGUsIGFuY2hvciB9KTtcbiAgICBpbnNlcnRfaHlkcmF0aW9uKHRhcmdldCwgbm9kZSwgYW5jaG9yKTtcbn1cbmZ1bmN0aW9uIGRldGFjaF9kZXYobm9kZSkge1xuICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NUmVtb3ZlJywgeyBub2RlIH0pO1xuICAgIGRldGFjaChub2RlKTtcbn1cbmZ1bmN0aW9uIGRldGFjaF9iZXR3ZWVuX2RldihiZWZvcmUsIGFmdGVyKSB7XG4gICAgd2hpbGUgKGJlZm9yZS5uZXh0U2libGluZyAmJiBiZWZvcmUubmV4dFNpYmxpbmcgIT09IGFmdGVyKSB7XG4gICAgICAgIGRldGFjaF9kZXYoYmVmb3JlLm5leHRTaWJsaW5nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZXRhY2hfYmVmb3JlX2RldihhZnRlcikge1xuICAgIHdoaWxlIChhZnRlci5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgZGV0YWNoX2RldihhZnRlci5wcmV2aW91c1NpYmxpbmcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRldGFjaF9hZnRlcl9kZXYoYmVmb3JlKSB7XG4gICAgd2hpbGUgKGJlZm9yZS5uZXh0U2libGluZykge1xuICAgICAgICBkZXRhY2hfZGV2KGJlZm9yZS5uZXh0U2libGluZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gbGlzdGVuX2Rldihub2RlLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucywgaGFzX3ByZXZlbnRfZGVmYXVsdCwgaGFzX3N0b3BfcHJvcGFnYXRpb24pIHtcbiAgICBjb25zdCBtb2RpZmllcnMgPSBvcHRpb25zID09PSB0cnVlID8gWydjYXB0dXJlJ10gOiBvcHRpb25zID8gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvcHRpb25zKSkgOiBbXTtcbiAgICBpZiAoaGFzX3ByZXZlbnRfZGVmYXVsdClcbiAgICAgICAgbW9kaWZpZXJzLnB1c2goJ3ByZXZlbnREZWZhdWx0Jyk7XG4gICAgaWYgKGhhc19zdG9wX3Byb3BhZ2F0aW9uKVxuICAgICAgICBtb2RpZmllcnMucHVzaCgnc3RvcFByb3BhZ2F0aW9uJyk7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01BZGRFdmVudExpc3RlbmVyJywgeyBub2RlLCBldmVudCwgaGFuZGxlciwgbW9kaWZpZXJzIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBsaXN0ZW4obm9kZSwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NUmVtb3ZlRXZlbnRMaXN0ZW5lcicsIHsgbm9kZSwgZXZlbnQsIGhhbmRsZXIsIG1vZGlmaWVycyB9KTtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgIH07XG59XG5mdW5jdGlvbiBhdHRyX2Rldihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgYXR0cihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01SZW1vdmVBdHRyaWJ1dGUnLCB7IG5vZGUsIGF0dHJpYnV0ZSB9KTtcbiAgICBlbHNlXG4gICAgICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NU2V0QXR0cmlidXRlJywgeyBub2RlLCBhdHRyaWJ1dGUsIHZhbHVlIH0pO1xufVxuZnVuY3Rpb24gcHJvcF9kZXYobm9kZSwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgbm9kZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICBkaXNwYXRjaF9kZXYoJ1N2ZWx0ZURPTVNldFByb3BlcnR5JywgeyBub2RlLCBwcm9wZXJ0eSwgdmFsdWUgfSk7XG59XG5mdW5jdGlvbiBkYXRhc2V0X2Rldihub2RlLCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICBub2RlLmRhdGFzZXRbcHJvcGVydHldID0gdmFsdWU7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01TZXREYXRhc2V0JywgeyBub2RlLCBwcm9wZXJ0eSwgdmFsdWUgfSk7XG59XG5mdW5jdGlvbiBzZXRfZGF0YV9kZXYodGV4dCwgZGF0YSkge1xuICAgIGRhdGEgPSAnJyArIGRhdGE7XG4gICAgaWYgKHRleHQud2hvbGVUZXh0ID09PSBkYXRhKVxuICAgICAgICByZXR1cm47XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01TZXREYXRhJywgeyBub2RlOiB0ZXh0LCBkYXRhIH0pO1xuICAgIHRleHQuZGF0YSA9IGRhdGE7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV9lYWNoX2FyZ3VtZW50KGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnc3RyaW5nJyAmJiAhKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBhcmcpKSB7XG4gICAgICAgIGxldCBtc2cgPSAneyNlYWNofSBvbmx5IGl0ZXJhdGVzIG92ZXIgYXJyYXktbGlrZSBvYmplY3RzLic7XG4gICAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIGFyZyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gYXJnKSB7XG4gICAgICAgICAgICBtc2cgKz0gJyBZb3UgY2FuIHVzZSBhIHNwcmVhZCB0byBjb252ZXJ0IHRoaXMgaXRlcmFibGUgaW50byBhbiBhcnJheS4nO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlX3Nsb3RzKG5hbWUsIHNsb3QsIGtleXMpIHtcbiAgICBmb3IgKGNvbnN0IHNsb3Rfa2V5IG9mIE9iamVjdC5rZXlzKHNsb3QpKSB7XG4gICAgICAgIGlmICghfmtleXMuaW5kZXhPZihzbG90X2tleSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgPCR7bmFtZX0+IHJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgc2xvdCBcIiR7c2xvdF9rZXl9XCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV9keW5hbWljX2VsZW1lbnQodGFnKSB7XG4gICAgY29uc3QgaXNfc3RyaW5nID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZyc7XG4gICAgaWYgKHRhZyAmJiAhaXNfc3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignPHN2ZWx0ZTplbGVtZW50PiBleHBlY3RzIFwidGhpc1wiIGF0dHJpYnV0ZSB0byBiZSBhIHN0cmluZy4nKTtcbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV92b2lkX2R5bmFtaWNfZWxlbWVudCh0YWcpIHtcbiAgICBpZiAodGFnICYmIGlzX3ZvaWQodGFnKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYDxzdmVsdGU6ZWxlbWVudCB0aGlzPVwiJHt0YWd9XCI+IGlzIHNlbGYtY2xvc2luZyBhbmQgY2Fubm90IGhhdmUgY29udGVudC5gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3Rfc3ZlbHRlX2NvbXBvbmVudF9kZXYoY29tcG9uZW50LCBwcm9wcykge1xuICAgIGNvbnN0IGVycm9yX21lc3NhZ2UgPSAndGhpcz17Li4ufSBvZiA8c3ZlbHRlOmNvbXBvbmVudD4gc2hvdWxkIHNwZWNpZnkgYSBTdmVsdGUgY29tcG9uZW50Lic7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgY29tcG9uZW50KHByb3BzKTtcbiAgICAgICAgaWYgKCFpbnN0YW5jZS4kJCB8fCAhaW5zdGFuY2UuJHNldCB8fCAhaW5zdGFuY2UuJG9uIHx8ICFpbnN0YW5jZS4kZGVzdHJveSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yX21lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IGVycjtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmluZGV4T2YoJ2lzIG5vdCBhIGNvbnN0cnVjdG9yJykgIT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JfbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFN2ZWx0ZSBjb21wb25lbnRzIHdpdGggc29tZSBtaW5vciBkZXYtZW5oYW5jZW1lbnRzLiBVc2VkIHdoZW4gZGV2PXRydWUuXG4gKi9cbmNsYXNzIFN2ZWx0ZUNvbXBvbmVudERldiBleHRlbmRzIFN2ZWx0ZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMgfHwgKCFvcHRpb25zLnRhcmdldCAmJiAhb3B0aW9ucy4kJGlubGluZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIid0YXJnZXQnIGlzIGEgcmVxdWlyZWQgb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgICRkZXN0cm95KCkge1xuICAgICAgICBzdXBlci4kZGVzdHJveSgpO1xuICAgICAgICB0aGlzLiRkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnQgd2FzIGFscmVhZHkgZGVzdHJveWVkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAkY2FwdHVyZV9zdGF0ZSgpIHsgfVxuICAgICRpbmplY3Rfc3RhdGUoKSB7IH1cbn1cbi8qKlxuICogQmFzZSBjbGFzcyB0byBjcmVhdGUgc3Ryb25nbHkgdHlwZWQgU3ZlbHRlIGNvbXBvbmVudHMuXG4gKiBUaGlzIG9ubHkgZXhpc3RzIGZvciB0eXBpbmcgcHVycG9zZXMgYW5kIHNob3VsZCBiZSB1c2VkIGluIGAuZC50c2AgZmlsZXMuXG4gKlxuICogIyMjIEV4YW1wbGU6XG4gKlxuICogWW91IGhhdmUgY29tcG9uZW50IGxpYnJhcnkgb24gbnBtIGNhbGxlZCBgY29tcG9uZW50LWxpYnJhcnlgLCBmcm9tIHdoaWNoXG4gKiB5b3UgZXhwb3J0IGEgY29tcG9uZW50IGNhbGxlZCBgTXlDb21wb25lbnRgLiBGb3IgU3ZlbHRlK1R5cGVTY3JpcHQgdXNlcnMsXG4gKiB5b3Ugd2FudCB0byBwcm92aWRlIHR5cGluZ3MuIFRoZXJlZm9yZSB5b3UgY3JlYXRlIGEgYGluZGV4LmQudHNgOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IFN2ZWx0ZUNvbXBvbmVudFR5cGVkIH0gZnJvbSBcInN2ZWx0ZVwiO1xuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50VHlwZWQ8e2Zvbzogc3RyaW5nfT4ge31cbiAqIGBgYFxuICogVHlwaW5nIHRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIElERXMgbGlrZSBWUyBDb2RlIHdpdGggdGhlIFN2ZWx0ZSBleHRlbnNpb25cbiAqIHRvIHByb3ZpZGUgaW50ZWxsaXNlbnNlIGFuZCB0byB1c2UgdGhlIGNvbXBvbmVudCBsaWtlIHRoaXMgaW4gYSBTdmVsdGUgZmlsZVxuICogd2l0aCBUeXBlU2NyaXB0OlxuICogYGBgc3ZlbHRlXG4gKiA8c2NyaXB0IGxhbmc9XCJ0c1wiPlxuICogXHRpbXBvcnQgeyBNeUNvbXBvbmVudCB9IGZyb20gXCJjb21wb25lbnQtbGlicmFyeVwiO1xuICogPC9zY3JpcHQ+XG4gKiA8TXlDb21wb25lbnQgZm9vPXsnYmFyJ30gLz5cbiAqIGBgYFxuICpcbiAqICMjIyMgV2h5IG5vdCBtYWtlIHRoaXMgcGFydCBvZiBgU3ZlbHRlQ29tcG9uZW50KERldilgP1xuICogQmVjYXVzZVxuICogYGBgdHNcbiAqIGNsYXNzIEFTdWJjbGFzc09mU3ZlbHRlQ29tcG9uZW50IGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50PHtmb286IHN0cmluZ30+IHt9XG4gKiBjb25zdCBjb21wb25lbnQ6IHR5cGVvZiBTdmVsdGVDb21wb25lbnQgPSBBU3ViY2xhc3NPZlN2ZWx0ZUNvbXBvbmVudDtcbiAqIGBgYFxuICogd2lsbCB0aHJvdyBhIHR5cGUgZXJyb3IsIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgdGhlIG1vcmUgc3RyaWN0bHkgdHlwZWQgY2xhc3MuXG4gKi9cbmNsYXNzIFN2ZWx0ZUNvbXBvbmVudFR5cGVkIGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50RGV2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxvb3BfZ3VhcmQodGltZW91dCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID4gdGltZW91dCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmZpbml0ZSBsb29wIGRldGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgeyBIdG1sVGFnLCBIdG1sVGFnSHlkcmF0aW9uLCBTdmVsdGVDb21wb25lbnQsIFN2ZWx0ZUNvbXBvbmVudERldiwgU3ZlbHRlQ29tcG9uZW50VHlwZWQsIFN2ZWx0ZUVsZW1lbnQsIGFjdGlvbl9kZXN0cm95ZXIsIGFkZF9hdHRyaWJ1dGUsIGFkZF9jbGFzc2VzLCBhZGRfZmx1c2hfY2FsbGJhY2ssIGFkZF9sb2NhdGlvbiwgYWRkX3JlbmRlcl9jYWxsYmFjaywgYWRkX3Jlc2l6ZV9saXN0ZW5lciwgYWRkX3N0eWxlcywgYWRkX3RyYW5zZm9ybSwgYWZ0ZXJVcGRhdGUsIGFwcGVuZCwgYXBwZW5kX2RldiwgYXBwZW5kX2VtcHR5X3N0eWxlc2hlZXQsIGFwcGVuZF9oeWRyYXRpb24sIGFwcGVuZF9oeWRyYXRpb25fZGV2LCBhcHBlbmRfc3R5bGVzLCBhc3NpZ24sIGF0dHIsIGF0dHJfZGV2LCBhdHRyaWJ1dGVfdG9fb2JqZWN0LCBiZWZvcmVVcGRhdGUsIGJpbmQsIGJpbmRpbmdfY2FsbGJhY2tzLCBibGFua19vYmplY3QsIGJ1YmJsZSwgY2hlY2tfb3V0cm9zLCBjaGlsZHJlbiwgY2xhaW1fY29tcG9uZW50LCBjbGFpbV9lbGVtZW50LCBjbGFpbV9odG1sX3RhZywgY2xhaW1fc3BhY2UsIGNsYWltX3N2Z19lbGVtZW50LCBjbGFpbV90ZXh0LCBjbGVhcl9sb29wcywgY29tcG9uZW50X3N1YnNjcmliZSwgY29tcHV0ZV9yZXN0X3Byb3BzLCBjb21wdXRlX3Nsb3RzLCBjb25zdHJ1Y3Rfc3ZlbHRlX2NvbXBvbmVudCwgY29uc3RydWN0X3N2ZWx0ZV9jb21wb25lbnRfZGV2LCBjcmVhdGVFdmVudERpc3BhdGNoZXIsIGNyZWF0ZV9hbmltYXRpb24sIGNyZWF0ZV9iaWRpcmVjdGlvbmFsX3RyYW5zaXRpb24sIGNyZWF0ZV9jb21wb25lbnQsIGNyZWF0ZV9pbl90cmFuc2l0aW9uLCBjcmVhdGVfb3V0X3RyYW5zaXRpb24sIGNyZWF0ZV9zbG90LCBjcmVhdGVfc3NyX2NvbXBvbmVudCwgY3VycmVudF9jb21wb25lbnQsIGN1c3RvbV9ldmVudCwgZGF0YXNldF9kZXYsIGRlYnVnLCBkZXN0cm95X2Jsb2NrLCBkZXN0cm95X2NvbXBvbmVudCwgZGVzdHJveV9lYWNoLCBkZXRhY2gsIGRldGFjaF9hZnRlcl9kZXYsIGRldGFjaF9iZWZvcmVfZGV2LCBkZXRhY2hfYmV0d2Vlbl9kZXYsIGRldGFjaF9kZXYsIGRpcnR5X2NvbXBvbmVudHMsIGRpc3BhdGNoX2RldiwgZWFjaCwgZWxlbWVudCwgZWxlbWVudF9pcywgZW1wdHksIGVuZF9oeWRyYXRpbmcsIGVzY2FwZSwgZXNjYXBlX2F0dHJpYnV0ZV92YWx1ZSwgZXNjYXBlX29iamVjdCwgZXhjbHVkZV9pbnRlcm5hbF9wcm9wcywgZml4X2FuZF9kZXN0cm95X2Jsb2NrLCBmaXhfYW5kX291dHJvX2FuZF9kZXN0cm95X2Jsb2NrLCBmaXhfcG9zaXRpb24sIGZsdXNoLCBnZXRBbGxDb250ZXh0cywgZ2V0Q29udGV4dCwgZ2V0X2FsbF9kaXJ0eV9mcm9tX3Njb3BlLCBnZXRfYmluZGluZ19ncm91cF92YWx1ZSwgZ2V0X2N1cnJlbnRfY29tcG9uZW50LCBnZXRfY3VzdG9tX2VsZW1lbnRzX3Nsb3RzLCBnZXRfcm9vdF9mb3Jfc3R5bGUsIGdldF9zbG90X2NoYW5nZXMsIGdldF9zcHJlYWRfb2JqZWN0LCBnZXRfc3ByZWFkX3VwZGF0ZSwgZ2V0X3N0b3JlX3ZhbHVlLCBnbG9iYWxzLCBncm91cF9vdXRyb3MsIGhhbmRsZV9wcm9taXNlLCBoYXNDb250ZXh0LCBoYXNfcHJvcCwgaGVhZF9zZWxlY3RvciwgaWRlbnRpdHksIGluaXQsIGluc2VydCwgaW5zZXJ0X2RldiwgaW5zZXJ0X2h5ZHJhdGlvbiwgaW5zZXJ0X2h5ZHJhdGlvbl9kZXYsIGludHJvcywgaW52YWxpZF9hdHRyaWJ1dGVfbmFtZV9jaGFyYWN0ZXIsIGlzX2NsaWVudCwgaXNfY3Jvc3NvcmlnaW4sIGlzX2VtcHR5LCBpc19mdW5jdGlvbiwgaXNfcHJvbWlzZSwgaXNfdm9pZCwgbGlzdGVuLCBsaXN0ZW5fZGV2LCBsb29wLCBsb29wX2d1YXJkLCBtZXJnZV9zc3Jfc3R5bGVzLCBtaXNzaW5nX2NvbXBvbmVudCwgbW91bnRfY29tcG9uZW50LCBub29wLCBub3RfZXF1YWwsIG5vdywgbnVsbF90b19lbXB0eSwgb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllcywgb25EZXN0cm95LCBvbk1vdW50LCBvbmNlLCBvdXRyb19hbmRfZGVzdHJveV9ibG9jaywgcHJldmVudF9kZWZhdWx0LCBwcm9wX2RldiwgcXVlcnlfc2VsZWN0b3JfYWxsLCByYWYsIHJ1biwgcnVuX2FsbCwgc2FmZV9ub3RfZXF1YWwsIHNjaGVkdWxlX3VwZGF0ZSwgc2VsZWN0X211bHRpcGxlX3ZhbHVlLCBzZWxlY3Rfb3B0aW9uLCBzZWxlY3Rfb3B0aW9ucywgc2VsZWN0X3ZhbHVlLCBzZWxmLCBzZXRDb250ZXh0LCBzZXRfYXR0cmlidXRlcywgc2V0X2N1cnJlbnRfY29tcG9uZW50LCBzZXRfY3VzdG9tX2VsZW1lbnRfZGF0YSwgc2V0X2N1c3RvbV9lbGVtZW50X2RhdGFfbWFwLCBzZXRfZGF0YSwgc2V0X2RhdGFfZGV2LCBzZXRfaW5wdXRfdHlwZSwgc2V0X2lucHV0X3ZhbHVlLCBzZXRfbm93LCBzZXRfcmFmLCBzZXRfc3RvcmVfdmFsdWUsIHNldF9zdHlsZSwgc2V0X3N2Z19hdHRyaWJ1dGVzLCBzcGFjZSwgc3ByZWFkLCBzcmNfdXJsX2VxdWFsLCBzdGFydF9oeWRyYXRpbmcsIHN0b3BfcHJvcGFnYXRpb24sIHN1YnNjcmliZSwgc3ZnX2VsZW1lbnQsIHRleHQsIHRpY2ssIHRpbWVfcmFuZ2VzX3RvX2FycmF5LCB0b19udW1iZXIsIHRvZ2dsZV9jbGFzcywgdHJhbnNpdGlvbl9pbiwgdHJhbnNpdGlvbl9vdXQsIHRydXN0ZWQsIHVwZGF0ZV9hd2FpdF9ibG9ja19icmFuY2gsIHVwZGF0ZV9rZXllZF9lYWNoLCB1cGRhdGVfc2xvdCwgdXBkYXRlX3Nsb3RfYmFzZSwgdmFsaWRhdGVfY29tcG9uZW50LCB2YWxpZGF0ZV9keW5hbWljX2VsZW1lbnQsIHZhbGlkYXRlX2VhY2hfYXJndW1lbnQsIHZhbGlkYXRlX2VhY2hfa2V5cywgdmFsaWRhdGVfc2xvdHMsIHZhbGlkYXRlX3N0b3JlLCB2YWxpZGF0ZV92b2lkX2R5bmFtaWNfZWxlbWVudCwgeGxpbmtfYXR0ciB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/svelte/internal/index.mjs\n");
/***/ }),
/***/ "./node_modules/svelte/store/index.mjs":
/*!*********************************************!*\
!*** ./node_modules/svelte/store/index.mjs ***!
\*********************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"derived\": () => (/* binding */ derived),\n/* harmony export */ \"get\": () => (/* reexport safe */ _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.get_store_value),\n/* harmony export */ \"readable\": () => (/* binding */ readable),\n/* harmony export */ \"writable\": () => (/* binding */ writable)\n/* harmony export */ });\n/* harmony import */ var _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/index.mjs */ \"./node_modules/svelte/internal/index.mjs\");\n\n\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if ((0,_internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.safe_not_equal)(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = (0,_internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.is_function)(result) ? result : _internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => (0,_internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.subscribe)(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n (0,_internal_index_mjs__WEBPACK_IMPORTED_MODULE_0__.run_all)(unsubscribers);\n cleanup();\n };\n });\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3ZlbHRlL3N0b3JlL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE4RjtBQUMvQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSxpQ0FBaUMscURBQUk7QUFDckM7QUFDQTtBQUNBO0FBQ0EsWUFBWSxtRUFBYztBQUMxQjtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsNkJBQTZCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHFEQUFJO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxxREFBSTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHFEQUFJO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdFQUFXLG9CQUFvQixxREFBSTtBQUM3RDtBQUNBO0FBQ0EsNkRBQTZELDhEQUFTO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsWUFBWSw0REFBTztBQUNuQjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUV1QyIsInNvdXJjZXMiOlsid2VicGFjazovL215c2VlbGlhLy4vbm9kZV9tb2R1bGVzL3N2ZWx0ZS9zdG9yZS9pbmRleC5tanM/MjFmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub29wLCBzYWZlX25vdF9lcXVhbCwgc3Vic2NyaWJlLCBydW5fYWxsLCBpc19mdW5jdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2luZGV4Lm1qcyc7XG5leHBvcnQgeyBnZXRfc3RvcmVfdmFsdWUgYXMgZ2V0IH0gZnJvbSAnLi4vaW50ZXJuYWwvaW5kZXgubWpzJztcblxuY29uc3Qgc3Vic2NyaWJlcl9xdWV1ZSA9IFtdO1xuLyoqXG4gKiBDcmVhdGVzIGEgYFJlYWRhYmxlYCBzdG9yZSB0aGF0IGFsbG93cyByZWFkaW5nIGJ5IHN1YnNjcmlwdGlvbi5cbiAqIEBwYXJhbSB2YWx1ZSBpbml0aWFsIHZhbHVlXG4gKiBAcGFyYW0ge1N0YXJ0U3RvcE5vdGlmaWVyfXN0YXJ0IHN0YXJ0IGFuZCBzdG9wIG5vdGlmaWNhdGlvbnMgZm9yIHN1YnNjcmlwdGlvbnNcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGUodmFsdWUsIHN0YXJ0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3Vic2NyaWJlOiB3cml0YWJsZSh2YWx1ZSwgc3RhcnQpLnN1YnNjcmliZVxuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIGBXcml0YWJsZWAgc3RvcmUgdGhhdCBhbGxvd3MgYm90aCB1cGRhdGluZyBhbmQgcmVhZGluZyBieSBzdWJzY3JpcHRpb24uXG4gKiBAcGFyYW0geyo9fXZhbHVlIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7U3RhcnRTdG9wTm90aWZpZXI9fXN0YXJ0IHN0YXJ0IGFuZCBzdG9wIG5vdGlmaWNhdGlvbnMgZm9yIHN1YnNjcmlwdGlvbnNcbiAqL1xuZnVuY3Rpb24gd3JpdGFibGUodmFsdWUsIHN0YXJ0ID0gbm9vcCkge1xuICAgIGxldCBzdG9wO1xuICAgIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xuICAgIGZ1bmN0aW9uIHNldChuZXdfdmFsdWUpIHtcbiAgICAgICAgaWYgKHNhZmVfbm90X2VxdWFsKHZhbHVlLCBuZXdfdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG5ld192YWx1ZTtcbiAgICAgICAgICAgIGlmIChzdG9wKSB7IC8vIHN0b3JlIGlzIHJlYWR5XG4gICAgICAgICAgICAgICAgY29uc3QgcnVuX3F1ZXVlID0gIXN1YnNjcmliZXJfcXVldWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaWJlciBvZiBzdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyWzFdKCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJfcXVldWUucHVzaChzdWJzY3JpYmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydW5fcXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJzY3JpYmVyX3F1ZXVlLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX3F1ZXVlW2ldWzBdKHN1YnNjcmliZXJfcXVldWVbaSArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX3F1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZShmbikge1xuICAgICAgICBzZXQoZm4odmFsdWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3Vic2NyaWJlKHJ1biwgaW52YWxpZGF0ZSA9IG5vb3ApIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IFtydW4sIGludmFsaWRhdGVdO1xuICAgICAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaWJlcik7XG4gICAgICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBzdG9wID0gc3RhcnQoc2V0KSB8fCBub29wO1xuICAgICAgICB9XG4gICAgICAgIHJ1bih2YWx1ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICBzdG9wID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc2V0LCB1cGRhdGUsIHN1YnNjcmliZSB9O1xufVxuZnVuY3Rpb24gZGVyaXZlZChzdG9yZXMsIGZuLCBpbml0aWFsX3ZhbHVlKSB7XG4gICAgY29uc3Qgc2luZ2xlID0gIUFycmF5LmlzQXJyYXkoc3RvcmVzKTtcbiAgICBjb25zdCBzdG9yZXNfYXJyYXkgPSBzaW5nbGVcbiAgICAgICAgPyBbc3RvcmVzXVxuICAgICAgICA6IHN0b3JlcztcbiAgICBjb25zdCBhdXRvID0gZm4ubGVuZ3RoIDwgMjtcbiAgICByZXR1cm4gcmVhZGFibGUoaW5pdGlhbF92YWx1ZSwgKHNldCkgPT4ge1xuICAgICAgICBsZXQgaW5pdGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBsZXQgcGVuZGluZyA9IDA7XG4gICAgICAgIGxldCBjbGVhbnVwID0gbm9vcDtcbiAgICAgICAgY29uc3Qgc3luYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4oc2luZ2xlID8gdmFsdWVzWzBdIDogdmFsdWVzLCBzZXQpO1xuICAgICAgICAgICAgaWYgKGF1dG8pIHtcbiAgICAgICAgICAgICAgICBzZXQocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsZWFudXAgPSBpc19mdW5jdGlvbihyZXN1bHQpID8gcmVzdWx0IDogbm9vcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVycyA9IHN0b3Jlc19hcnJheS5tYXAoKHN0b3JlLCBpKSA9PiBzdWJzY3JpYmUoc3RvcmUsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdmFsdWU7XG4gICAgICAgICAgICBwZW5kaW5nICY9IH4oMSA8PCBpKTtcbiAgICAgICAgICAgIGlmIChpbml0ZWQpIHtcbiAgICAgICAgICAgICAgICBzeW5jKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHBlbmRpbmcgfD0gKDEgPDwgaSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgaW5pdGVkID0gdHJ1ZTtcbiAgICAgICAgc3luYygpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgICAgICAgIHJ1bl9hbGwodW5zdWJzY3JpYmVycyk7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IGRlcml2ZWQsIHJlYWRhYmxlLCB3cml0YWJsZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/svelte/store/index.mjs\n");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ if (cachedModule.error !== undefined) throw cachedModule.error;
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ id: moduleId,
/******/ loaded: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ try {
/******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ };
/******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); });
/******/ module = execOptions.module;
/******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require);
/******/ } catch(e) {
/******/ module.error = e;
/******/ throw e;
/******/ }
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = __webpack_module_cache__;
/******/
/******/ // expose the module execution interceptor
/******/ __webpack_require__.i = [];
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get javascript update chunk filename */
/******/ (() => {
/******/ // This function allow to reference all chunks
/******/ __webpack_require__.hu = (chunkId) => {
/******/ // return url for filenames based on template
/******/ return "71558b0-" + chunkId + "-wps-hmr.js";
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get mini-css chunk filename */
/******/ (() => {
/******/ // This function allow to reference async chunks
/******/ __webpack_require__.miniCssF = (chunkId) => {
/******/ // return url for filenames based on template
/******/ return undefined;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get update manifest filename */
/******/ (() => {
/******/ __webpack_require__.hmrF = () => ("main-71558b0-wps-hmr.json");
/******/ })();
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
/******/ __webpack_require__.h = () => ("bf11bc7a972b35fa1cc1")
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/harmony module decorator */
/******/ (() => {
/******/ __webpack_require__.hmd = (module) => {
/******/ module = Object.create(module);
/******/ if (!module.children) module.children = [];
/******/ Object.defineProperty(module, 'exports', {
/******/ enumerable: true,
/******/ set: () => {
/******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
/******/ }
/******/ });
/******/ return module;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/load script */
/******/ (() => {
/******/ var inProgress = {};
/******/ var dataWebpackPrefix = "myseelia:";
/******/ // loadScript function to load a script via script tag
/******/ __webpack_require__.l = (url, done, key, chunkId) => {
/******/ if(inProgress[url]) { inProgress[url].push(done); return; }
/******/ var script, needAttach;
/******/ if(key !== undefined) {
/******/ var scripts = document.getElementsByTagName("script");
/******/ for(var i = 0; i < scripts.length; i++) {
/******/ var s = scripts[i];
/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; }
/******/ }
/******/ }
/******/ if(!script) {
/******/ needAttach = true;
/******/ script = document.createElement('script');
/******/
/******/ script.charset = 'utf-8';
/******/ script.timeout = 120;
/******/ if (__webpack_require__.nc) {
/******/ script.setAttribute("nonce", __webpack_require__.nc);
/******/ }
/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key);
/******/ script.src = url;
/******/ }
/******/ inProgress[url] = [done];
/******/ var onScriptComplete = (prev, event) => {
/******/ // avoid mem leaks in IE.
/******/ script.onerror = script.onload = null;
/******/ clearTimeout(timeout);
/******/ var doneFns = inProgress[url];
/******/ delete inProgress[url];
/******/ script.parentNode && script.parentNode.removeChild(script);
/******/ doneFns && doneFns.forEach((fn) => (fn(event)));
/******/ if(prev) return prev(event);
/******/ };
/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
/******/ script.onerror = onScriptComplete.bind(null, script.onerror);
/******/ script.onload = onScriptComplete.bind(null, script.onload);
/******/ needAttach && document.head.appendChild(script);
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hot module replacement */
/******/ (() => {
/******/ var currentModuleData = {};
/******/ var installedModules = __webpack_require__.c;
/******/
/******/ // module and require creation
/******/ var currentChildModule;
/******/ var currentParents = [];
/******/
/******/ // status
/******/ var registeredStatusHandlers = [];
/******/ var currentStatus = "idle";
/******/
/******/ // while downloading
/******/ var blockingPromises = 0;
/******/ var blockingPromisesWaiting = [];
/******/
/******/ // The update info
/******/ var currentUpdateApplyHandlers;
/******/ var queuedInvalidatedModules;
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ __webpack_require__.hmrD = currentModuleData;
/******/
/******/ __webpack_require__.i.push(function (options) {
/******/ var module = options.module;
/******/ var require = createRequire(options.require, options.id);
/******/ module.hot = createModuleHotObject(options.id, module);
/******/ module.parents = currentParents;
/******/ module.children = [];
/******/ currentParents = [];
/******/ options.require = require;
/******/ });
/******/
/******/ __webpack_require__.hmrC = {};
/******/ __webpack_require__.hmrI = {};
/******/
/******/ function createRequire(require, moduleId) {
/******/ var me = installedModules[moduleId];
/******/ if (!me) return require;
/******/ var fn = function (request) {
/******/ if (me.hot.active) {
/******/ if (installedModules[request]) {
/******/ var parents = installedModules[request].parents;
/******/ if (parents.indexOf(moduleId) === -1) {
/******/ parents.push(moduleId);
/******/ }
/******/ } else {
/******/ currentParents = [moduleId];
/******/ currentChildModule = request;
/******/ }
/******/ if (me.children.indexOf(request) === -1) {
/******/ me.children.push(request);
/******/ }
/******/ } else {
/******/ console.warn(
/******/ "[HMR] unexpected require(" +
/******/ request +
/******/ ") from disposed module " +
/******/ moduleId
/******/ );
/******/ currentParents = [];
/******/ }
/******/ return require(request);
/******/ };
/******/ var createPropertyDescriptor = function (name) {
/******/ return {
/******/ configurable: true,
/******/ enumerable: true,
/******/ get: function () {
/******/ return require[name];
/******/ },
/******/ set: function (value) {
/******/ require[name] = value;
/******/ }
/******/ };
/******/ };
/******/ for (var name in require) {
/******/ if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
/******/ Object.defineProperty(fn, name, createPropertyDescriptor(name));
/******/ }
/******/ }
/******/ fn.e = function (chunkId) {
/******/ return trackBlockingPromise(require.e(chunkId));
/******/ };
/******/ return fn;
/******/ }
/******/
/******/ function createModuleHotObject(moduleId, me) {
/******/ var _main = currentChildModule !== moduleId;
/******/ var hot = {
/******/ // private stuff
/******/ _acceptedDependencies: {},
/******/ _acceptedErrorHandlers: {},
/******/ _declinedDependencies: {},
/******/ _selfAccepted: false,
/******/ _selfDeclined: false,
/******/ _selfInvalidated: false,
/******/ _disposeHandlers: [],
/******/ _main: _main,
/******/ _requireSelf: function () {
/******/ currentParents = me.parents.slice();
/******/ currentChildModule = _main ? undefined : moduleId;
/******/ __webpack_require__(moduleId);
/******/ },
/******/
/******/ // Module API
/******/ active: true,
/******/ accept: function (dep, callback, errorHandler) {
/******/ if (dep === undefined) hot._selfAccepted = true;
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ else if (typeof dep === "object" && dep !== null) {
/******/ for (var i = 0; i < dep.length; i++) {
/******/ hot._acceptedDependencies[dep[i]] = callback || function () {};
/******/ hot._acceptedErrorHandlers[dep[i]] = errorHandler;
/******/ }
/******/ } else {
/******/ hot._acceptedDependencies[dep] = callback || function () {};
/******/ hot._acceptedErrorHandlers[dep] = errorHandler;
/******/ }
/******/ },
/******/ decline: function (dep) {
/******/ if (dep === undefined) hot._selfDeclined = true;
/******/ else if (typeof dep === "object" && dep !== null)
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._declinedDependencies[dep[i]] = true;
/******/ else hot._declinedDependencies[dep] = true;
/******/ },
/******/ dispose: function (callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ addDisposeHandler: function (callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ removeDisposeHandler: function (callback) {
/******/ var idx = hot._disposeHandlers.indexOf(callback);
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ },
/******/ invalidate: function () {
/******/ this._selfInvalidated = true;
/******/ switch (currentStatus) {
/******/ case "idle":
/******/ currentUpdateApplyHandlers = [];
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ setStatus("ready");
/******/ break;
/******/ case "ready":
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ break;
/******/ case "prepare":
/******/ case "check":
/******/ case "dispose":
/******/ case "apply":
/******/ (queuedInvalidatedModules = queuedInvalidatedModules || []).push(
/******/ moduleId
/******/ );
/******/ break;
/******/ default:
/******/ // ignore requests in error states
/******/ break;
/******/ }
/******/ },
/******/
/******/ // Management API
/******/ check: hotCheck,
/******/ apply: hotApply,
/******/ status: function (l) {
/******/ if (!l) return currentStatus;
/******/ registeredStatusHandlers.push(l);
/******/ },
/******/ addStatusHandler: function (l) {
/******/ registeredStatusHandlers.push(l);
/******/ },
/******/ removeStatusHandler: function (l) {
/******/ var idx = registeredStatusHandlers.indexOf(l);
/******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1);
/******/ },
/******/
/******/ //inherit from previous dispose call
/******/ data: currentModuleData[moduleId]
/******/ };
/******/ currentChildModule = undefined;
/******/ return hot;
/******/ }
/******/
/******/ function setStatus(newStatus) {
/******/ currentStatus = newStatus;
/******/ var results = [];
/******/
/******/ for (var i = 0; i < registeredStatusHandlers.length; i++)
/******/ results[i] = registeredStatusHandlers[i].call(null, newStatus);
/******/
/******/ return Promise.all(results);
/******/ }
/******/
/******/ function unblock() {
/******/ if (--blockingPromises === 0) {
/******/ setStatus("ready").then(function () {
/******/ if (blockingPromises === 0) {
/******/ var list = blockingPromisesWaiting;
/******/ blockingPromisesWaiting = [];
/******/ for (var i = 0; i < list.length; i++) {
/******/ list[i]();
/******/ }
/******/ }
/******/ });
/******/ }
/******/ }
/******/
/******/ function trackBlockingPromise(promise) {
/******/ switch (currentStatus) {
/******/ case "ready":
/******/ setStatus("prepare");
/******/ /* fallthrough */
/******/ case "prepare":
/******/ blockingPromises++;
/******/ promise.then(unblock, unblock);
/******/ return promise;
/******/ default:
/******/ return promise;
/******/ }
/******/ }
/******/
/******/ function waitForBlockingPromises(fn) {
/******/ if (blockingPromises === 0) return fn();
/******/ return new Promise(function (resolve) {
/******/ blockingPromisesWaiting.push(function () {
/******/ resolve(fn());
/******/ });
/******/ });
/******/ }
/******/
/******/ function hotCheck(applyOnUpdate) {
/******/ if (currentStatus !== "idle") {
/******/ throw new Error("check() is only allowed in idle status");
/******/ }
/******/ return setStatus("check")
/******/ .then(__webpack_require__.hmrM)
/******/ .then(function (update) {
/******/ if (!update) {
/******/ return setStatus(applyInvalidatedModules() ? "ready" : "idle").then(
/******/ function () {
/******/ return null;
/******/ }
/******/ );
/******/ }
/******/
/******/ return setStatus("prepare").then(function () {
/******/ var updatedModules = [];
/******/ currentUpdateApplyHandlers = [];
/******/
/******/ return Promise.all(
/******/ Object.keys(__webpack_require__.hmrC).reduce(function (
/******/ promises,
/******/ key
/******/ ) {
/******/ __webpack_require__.hmrC[key](
/******/ update.c,
/******/ update.r,
/******/ update.m,
/******/ promises,
/******/ currentUpdateApplyHandlers,
/******/ updatedModules
/******/ );
/******/ return promises;
/******/ },
/******/ [])
/******/ ).then(function () {
/******/ return waitForBlockingPromises(function () {
/******/ if (applyOnUpdate) {
/******/ return internalApply(applyOnUpdate);
/******/ } else {
/******/ return setStatus("ready").then(function () {
/******/ return updatedModules;
/******/ });
/******/ }
/******/ });
/******/ });
/******/ });
/******/ });
/******/ }
/******/
/******/ function hotApply(options) {
/******/ if (currentStatus !== "ready") {
/******/ return Promise.resolve().then(function () {
/******/ throw new Error(
/******/ "apply() is only allowed in ready status (state: " +
/******/ currentStatus +
/******/ ")"
/******/ );
/******/ });
/******/ }
/******/ return internalApply(options);
/******/ }
/******/
/******/ function internalApply(options) {
/******/ options = options || {};
/******/
/******/ applyInvalidatedModules();
/******/
/******/ var results = currentUpdateApplyHandlers.map(function (handler) {
/******/ return handler(options);
/******/ });
/******/ currentUpdateApplyHandlers = undefined;
/******/
/******/ var errors = results
/******/ .map(function (r) {
/******/ return r.error;
/******/ })
/******/ .filter(Boolean);
/******/
/******/ if (errors.length > 0) {
/******/ return setStatus("abort").then(function () {
/******/ throw errors[0];
/******/ });
/******/ }
/******/
/******/ // Now in "dispose" phase
/******/ var disposePromise = setStatus("dispose");
/******/
/******/ results.forEach(function (result) {
/******/ if (result.dispose) result.dispose();
/******/ });
/******/
/******/ // Now in "apply" phase
/******/ var applyPromise = setStatus("apply");
/******/
/******/ var error;
/******/ var reportError = function (err) {
/******/ if (!error) error = err;
/******/ };
/******/
/******/ var outdatedModules = [];
/******/ results.forEach(function (result) {
/******/ if (result.apply) {
/******/ var modules = result.apply(reportError);
/******/ if (modules) {
/******/ for (var i = 0; i < modules.length; i++) {
/******/ outdatedModules.push(modules[i]);
/******/ }
/******/ }
/******/ }
/******/ });
/******/
/******/ return Promise.all([disposePromise, applyPromise]).then(function () {
/******/ // handle errors in accept handlers and self accepted module load
/******/ if (error) {
/******/ return setStatus("fail").then(function () {
/******/ throw error;
/******/ });
/******/ }
/******/
/******/ if (queuedInvalidatedModules) {
/******/ return internalApply(options).then(function (list) {
/******/ outdatedModules.forEach(function (moduleId) {
/******/ if (list.indexOf(moduleId) < 0) list.push(moduleId);
/******/ });
/******/ return list;
/******/ });
/******/ }
/******/
/******/ return setStatus("idle").then(function () {
/******/ return outdatedModules;
/******/ });
/******/ });
/******/ }
/******/
/******/ function applyInvalidatedModules() {
/******/ if (queuedInvalidatedModules) {
/******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ queuedInvalidatedModules.forEach(function (moduleId) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ });
/******/ queuedInvalidatedModules = undefined;
/******/ return true;
/******/ }
/******/ }
/******/ })();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ (() => {
/******/ var scriptUrl;
/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
/******/ var document = __webpack_require__.g.document;
/******/ if (!scriptUrl && document) {
/******/ if (document.currentScript)
/******/ scriptUrl = document.currentScript.src
/******/ if (!scriptUrl) {
/******/ var scripts = document.getElementsByTagName("script");
/******/ if(scripts.length) scriptUrl = scripts[scripts.length - 1].src
/******/ }
/******/ }
/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
/******/ __webpack_require__.p = scriptUrl;
/******/ })();
/******/
/******/ /* webpack/runtime/css loading */
/******/ (() => {
/******/ if (typeof document === "undefined") return;
/******/ var createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {
/******/ var linkTag = document.createElement("link");
/******/
/******/ linkTag.rel = "stylesheet";
/******/ linkTag.type = "text/css";
/******/ var onLinkComplete = (event) => {
/******/ // avoid mem leaks.
/******/ linkTag.onerror = linkTag.onload = null;
/******/ if (event.type === 'load') {
/******/ resolve();
/******/ } else {
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ var realHref = event && event.target && event.target.href || fullhref;
/******/ var err = new Error("Loading CSS chunk " + chunkId + " failed.\n(" + realHref + ")");
/******/ err.code = "CSS_CHUNK_LOAD_FAILED";
/******/ err.type = errorType;
/******/ err.request = realHref;
/******/ linkTag.parentNode.removeChild(linkTag)
/******/ reject(err);
/******/ }
/******/ }
/******/ linkTag.onerror = linkTag.onload = onLinkComplete;
/******/ linkTag.href = fullhref;
/******/
/******/ if (oldTag) {
/******/ oldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);
/******/ } else {
/******/ document.head.appendChild(linkTag);
/******/ }
/******/ return linkTag;
/******/ };
/******/ var findStylesheet = (href, fullhref) => {
/******/ var existingLinkTags = document.getElementsByTagName("link");
/******/ for(var i = 0; i < existingLinkTags.length; i++) {
/******/ var tag = existingLinkTags[i];
/******/ var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");
/******/ if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return tag;
/******/ }
/******/ var existingStyleTags = document.getElementsByTagName("style");
/******/ for(var i = 0; i < existingStyleTags.length; i++) {
/******/ var tag = existingStyleTags[i];
/******/ var dataHref = tag.getAttribute("data-href");
/******/ if(dataHref === href || dataHref === fullhref) return tag;
/******/ }
/******/ };
/******/ var loadStylesheet = (chunkId) => {
/******/ return new Promise((resolve, reject) => {
/******/ var href = __webpack_require__.miniCssF(chunkId);
/******/ var fullhref = __webpack_require__.p + href;
/******/ if(findStylesheet(href, fullhref)) return resolve();
/******/ createStylesheet(chunkId, fullhref, null, resolve, reject);
/******/ });
/******/ }
/******/ // no chunk loading
/******/
/******/ var oldTags = [];
/******/ var newTags = [];
/******/ var applyHandler = (options) => {
/******/ return { dispose: () => {
/******/ for(var i = 0; i < oldTags.length; i++) {
/******/ var oldTag = oldTags[i];
/******/ if(oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);
/******/ }
/******/ oldTags.length = 0;
/******/ }, apply: () => {
/******/ for(var i = 0; i < newTags.length; i++) newTags[i].rel = "stylesheet";
/******/ newTags.length = 0;
/******/ } };
/******/ }
/******/ __webpack_require__.hmrC.miniCss = (chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList) => {
/******/ applyHandlers.push(applyHandler);
/******/ chunkIds.forEach((chunkId) => {
/******/ var href = __webpack_require__.miniCssF(chunkId);
/******/ var fullhref = __webpack_require__.p + href;
/******/ var oldTag = findStylesheet(href, fullhref);
/******/ if(!oldTag) return;
/******/ promises.push(new Promise((resolve, reject) => {
/******/ var tag = createStylesheet(chunkId, fullhref, oldTag, () => {
/******/ tag.as = "style";
/******/ tag.rel = "preload";
/******/ resolve();
/******/ }, reject);
/******/ oldTags.push(oldTag);
/******/ newTags.push(tag);
/******/ }));
/******/ });
/******/ }
/******/ })();
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || {
/******/ "main": 0
/******/ };
/******/
/******/ // no chunk on demand loading
/******/
/******/ // no prefetching
/******/
/******/ // no preloaded
/******/
/******/ var currentUpdatedModulesList;
/******/ var waitingUpdateResolves = {};
/******/ function loadUpdateChunk(chunkId, updatedModulesList) {
/******/ currentUpdatedModulesList = updatedModulesList;
/******/ return new Promise((resolve, reject) => {
/******/ waitingUpdateResolves[chunkId] = resolve;
/******/ // start update chunk loading
/******/ var url = __webpack_require__.p + __webpack_require__.hu(chunkId);
/******/ // create error before stack unwound to get useful stacktrace later
/******/ var error = new Error();
/******/ var loadingEnded = (event) => {
/******/ if(waitingUpdateResolves[chunkId]) {
/******/ waitingUpdateResolves[chunkId] = undefined
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ var realSrc = event && event.target && event.target.src;
/******/ error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
/******/ error.name = 'ChunkLoadError';
/******/ error.type = errorType;
/******/ error.request = realSrc;
/******/ reject(error);
/******/ }
/******/ };
/******/ __webpack_require__.l(url, loadingEnded);
/******/ });
/******/ }
/******/
/******/ self["webpackHotUpdatemyseelia"] = (chunkId, moreModules, runtime) => {
/******/ for(var moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ currentUpdate[moduleId] = moreModules[moduleId];
/******/ if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId);
/******/ }
/******/ }
/******/ if(runtime) currentUpdateRuntime.push(runtime);
/******/ if(waitingUpdateResolves[chunkId]) {
/******/ waitingUpdateResolves[chunkId]();
/******/ waitingUpdateResolves[chunkId] = undefined;
/******/ }
/******/ };
/******/
/******/ var currentUpdateChunks;
/******/ var currentUpdate;
/******/ var currentUpdateRemovedChunks;
/******/ var currentUpdateRuntime;
/******/ function applyHandler(options) {
/******/ if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr;
/******/ currentUpdateChunks = undefined;
/******/ function getAffectedModuleEffects(updateModuleId) {
/******/ var outdatedModules = [updateModuleId];
/******/ var outdatedDependencies = {};
/******/
/******/ var queue = outdatedModules.map(function (id) {
/******/ return {
/******/ chain: [id],
/******/ id: id
/******/ };
/******/ });
/******/ while (queue.length > 0) {
/******/ var queueItem = queue.pop();
/******/ var moduleId = queueItem.id;
/******/ var chain = queueItem.chain;
/******/ var module = __webpack_require__.c[moduleId];
/******/ if (
/******/ !module ||
/******/ (module.hot._selfAccepted && !module.hot._selfInvalidated)
/******/ )
/******/ continue;
/******/ if (module.hot._selfDeclined) {
/******/ return {
/******/ type: "self-declined",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ if (module.hot._main) {
/******/ return {
/******/ type: "unaccepted",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ for (var i = 0; i < module.parents.length; i++) {
/******/ var parentId = module.parents[i];
/******/ var parent = __webpack_require__.c[parentId];
/******/ if (!parent) continue;
/******/ if (parent.hot._declinedDependencies[moduleId]) {
/******/ return {
/******/ type: "declined",
/******/ chain: chain.concat([parentId]),
/******/ moduleId: moduleId,
/******/ parentId: parentId
/******/ };
/******/ }
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
/******/ if (!outdatedDependencies[parentId])
/******/ outdatedDependencies[parentId] = [];
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ continue;
/******/ }
/******/ delete outdatedDependencies[parentId];
/******/ outdatedModules.push(parentId);
/******/ queue.push({
/******/ chain: chain.concat([parentId]),
/******/ id: parentId
/******/ });
/******/ }
/******/ }
/******/
/******/ return {
/******/ type: "accepted",
/******/ moduleId: updateModuleId,
/******/ outdatedModules: outdatedModules,
/******/ outdatedDependencies: outdatedDependencies
/******/ };
/******/ }
/******/
/******/ function addAllToSet(a, b) {
/******/ for (var i = 0; i < b.length; i++) {
/******/ var item = b[i];
/******/ if (a.indexOf(item) === -1) a.push(item);
/******/ }
/******/ }
/******/
/******/ // at begin all updates modules are outdated
/******/ // the "outdated" status can propagate to parents if they don't accept the children
/******/ var outdatedDependencies = {};
/******/ var outdatedModules = [];
/******/ var appliedUpdate = {};
/******/
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
/******/ console.warn(
/******/ "[HMR] unexpected require(" + module.id + ") to disposed module"
/******/ );
/******/ };
/******/
/******/ for (var moduleId in currentUpdate) {
/******/ if (__webpack_require__.o(currentUpdate, moduleId)) {
/******/ var newModuleFactory = currentUpdate[moduleId];
/******/ /** @type {TODO} */
/******/ var result;
/******/ if (newModuleFactory) {
/******/ result = getAffectedModuleEffects(moduleId);
/******/ } else {
/******/ result = {
/******/ type: "disposed",
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ /** @type {Error|false} */
/******/ var abortError = false;
/******/ var doApply = false;
/******/ var doDispose = false;
/******/ var chainInfo = "";
/******/ if (result.chain) {
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ }
/******/ switch (result.type) {
/******/ case "self-declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of self decline: " +
/******/ result.moduleId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of declined dependency: " +
/******/ result.moduleId +
/******/ " in " +
/******/ result.parentId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "unaccepted":
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
/******/ if (!options.ignoreUnaccepted)
/******/ abortError = new Error(
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ );
/******/ break;
/******/ case "accepted":
/******/ if (options.onAccepted) options.onAccepted(result);
/******/ doApply = true;
/******/ break;
/******/ case "disposed":
/******/ if (options.onDisposed) options.onDisposed(result);
/******/ doDispose = true;
/******/ break;
/******/ default:
/******/ throw new Error("Unexception type " + result.type);
/******/ }
/******/ if (abortError) {
/******/ return {
/******/ error: abortError
/******/ };
/******/ }
/******/ if (doApply) {
/******/ appliedUpdate[moduleId] = newModuleFactory;
/******/ addAllToSet(outdatedModules, result.outdatedModules);
/******/ for (moduleId in result.outdatedDependencies) {
/******/ if (__webpack_require__.o(result.outdatedDependencies, moduleId)) {
/******/ if (!outdatedDependencies[moduleId])
/******/ outdatedDependencies[moduleId] = [];
/******/ addAllToSet(
/******/ outdatedDependencies[moduleId],
/******/ result.outdatedDependencies[moduleId]
/******/ );
/******/ }
/******/ }
/******/ }
/******/ if (doDispose) {
/******/ addAllToSet(outdatedModules, [result.moduleId]);
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ }
/******/ }
/******/ }
/******/ currentUpdate = undefined;
/******/
/******/ // Store self accepted outdated modules to require them later by the module system
/******/ var outdatedSelfAcceptedModules = [];
/******/ for (var j = 0; j < outdatedModules.length; j++) {
/******/ var outdatedModuleId = outdatedModules[j];
/******/ var module = __webpack_require__.c[outdatedModuleId];
/******/ if (
/******/ module &&
/******/ (module.hot._selfAccepted || module.hot._main) &&
/******/ // removed self-accepted modules should not be required
/******/ appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&
/******/ // when called invalidate self-accepting is not possible
/******/ !module.hot._selfInvalidated
/******/ ) {
/******/ outdatedSelfAcceptedModules.push({
/******/ module: outdatedModuleId,
/******/ require: module.hot._requireSelf,
/******/ errorHandler: module.hot._selfAccepted
/******/ });
/******/ }
/******/ }
/******/
/******/ var moduleOutdatedDependencies;
/******/
/******/ return {
/******/ dispose: function () {
/******/ currentUpdateRemovedChunks.forEach(function (chunkId) {
/******/ delete installedChunks[chunkId];
/******/ });
/******/ currentUpdateRemovedChunks = undefined;
/******/
/******/ var idx;
/******/ var queue = outdatedModules.slice();
/******/ while (queue.length > 0) {
/******/ var moduleId = queue.pop();
/******/ var module = __webpack_require__.c[moduleId];
/******/ if (!module) continue;
/******/
/******/ var data = {};
/******/
/******/ // Call dispose handlers
/******/ var disposeHandlers = module.hot._disposeHandlers;
/******/ for (j = 0; j < disposeHandlers.length; j++) {
/******/ disposeHandlers[j].call(null, data);
/******/ }
/******/ __webpack_require__.hmrD[moduleId] = data;
/******/
/******/ // disable module (this disables requires from this module)
/******/ module.hot.active = false;
/******/
/******/ // remove module from cache
/******/ delete __webpack_require__.c[moduleId];
/******/
/******/ // when disposing there is no need to call dispose handler
/******/ delete outdatedDependencies[moduleId];
/******/
/******/ // remove "parents" references from all children
/******/ for (j = 0; j < module.children.length; j++) {
/******/ var child = __webpack_require__.c[module.children[j]];
/******/ if (!child) continue;
/******/ idx = child.parents.indexOf(moduleId);
/******/ if (idx >= 0) {
/******/ child.parents.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/
/******/ // remove outdated dependency from module children
/******/ var dependency;
/******/ for (var outdatedModuleId in outdatedDependencies) {
/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
/******/ module = __webpack_require__.c[outdatedModuleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies =
/******/ outdatedDependencies[outdatedModuleId];
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ dependency = moduleOutdatedDependencies[j];
/******/ idx = module.children.indexOf(dependency);
/******/ if (idx >= 0) module.children.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ },
/******/ apply: function (reportError) {
/******/ // insert new code
/******/ for (var updateModuleId in appliedUpdate) {
/******/ if (__webpack_require__.o(appliedUpdate, updateModuleId)) {
/******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];
/******/ }
/******/ }
/******/
/******/ // run new runtime modules
/******/ for (var i = 0; i < currentUpdateRuntime.length; i++) {
/******/ currentUpdateRuntime[i](__webpack_require__);
/******/ }
/******/
/******/ // call accept handlers
/******/ for (var outdatedModuleId in outdatedDependencies) {
/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
/******/ var module = __webpack_require__.c[outdatedModuleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies =
/******/ outdatedDependencies[outdatedModuleId];
/******/ var callbacks = [];
/******/ var errorHandlers = [];
/******/ var dependenciesForCallbacks = [];
/******/ for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ var dependency = moduleOutdatedDependencies[j];
/******/ var acceptCallback =
/******/ module.hot._acceptedDependencies[dependency];
/******/ var errorHandler =
/******/ module.hot._acceptedErrorHandlers[dependency];
/******/ if (acceptCallback) {
/******/ if (callbacks.indexOf(acceptCallback) !== -1) continue;
/******/ callbacks.push(acceptCallback);
/******/ errorHandlers.push(errorHandler);
/******/ dependenciesForCallbacks.push(dependency);
/******/ }
/******/ }
/******/ for (var k = 0; k < callbacks.length; k++) {
/******/ try {
/******/ callbacks[k].call(null, moduleOutdatedDependencies);
/******/ } catch (err) {
/******/ if (typeof errorHandlers[k] === "function") {
/******/ try {
/******/ errorHandlers[k](err, {
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k]
/******/ });
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-error-handler-errored",
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k],
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err2);
/******/ reportError(err);
/******/ }
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-errored",
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k],
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Load self accepted modules
/******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {
/******/ var item = outdatedSelfAcceptedModules[o];
/******/ var moduleId = item.module;
/******/ try {
/******/ item.require(moduleId);
/******/ } catch (err) {
/******/ if (typeof item.errorHandler === "function") {
/******/ try {
/******/ item.errorHandler(err, {
/******/ moduleId: moduleId,
/******/ module: __webpack_require__.c[moduleId]
/******/ });
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-error-handler-errored",
/******/ moduleId: moduleId,
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err2);
/******/ reportError(err);
/******/ }
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-errored",
/******/ moduleId: moduleId,
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err);
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ return outdatedModules;
/******/ }
/******/ };
/******/ }
/******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) {
/******/ if (!currentUpdate) {
/******/ currentUpdate = {};
/******/ currentUpdateRuntime = [];
/******/ currentUpdateRemovedChunks = [];
/******/ applyHandlers.push(applyHandler);
/******/ }
/******/ if (!__webpack_require__.o(currentUpdate, moduleId)) {
/******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId];
/******/ }
/******/ };
/******/ __webpack_require__.hmrC.jsonp = function (
/******/ chunkIds,
/******/ removedChunks,
/******/ removedModules,
/******/ promises,
/******/ applyHandlers,
/******/ updatedModulesList
/******/ ) {
/******/ applyHandlers.push(applyHandler);
/******/ currentUpdateChunks = {};
/******/ currentUpdateRemovedChunks = removedChunks;
/******/ currentUpdate = removedModules.reduce(function (obj, key) {
/******/ obj[key] = false;
/******/ return obj;
/******/ }, {});
/******/ currentUpdateRuntime = [];
/******/ chunkIds.forEach(function (chunkId) {
/******/ if (
/******/ __webpack_require__.o(installedChunks, chunkId) &&
/******/ installedChunks[chunkId] !== undefined
/******/ ) {
/******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList));
/******/ currentUpdateChunks[chunkId] = true;
/******/ } else {
/******/ currentUpdateChunks[chunkId] = false;
/******/ }
/******/ });
/******/ if (__webpack_require__.f) {
/******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) {
/******/ if (
/******/ currentUpdateChunks &&
/******/ __webpack_require__.o(currentUpdateChunks, chunkId) &&
/******/ !currentUpdateChunks[chunkId]
/******/ ) {
/******/ promises.push(loadUpdateChunk(chunkId));
/******/ currentUpdateChunks[chunkId] = true;
/******/ }
/******/ };
/******/ }
/******/ };
/******/
/******/ __webpack_require__.hmrM = () => {
/******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API");
/******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then((response) => {
/******/ if(response.status === 404) return; // no update available
/******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText);
/******/ return response.json();
/******/ });
/******/ };
/******/
/******/ // no on chunks loaded
/******/
/******/ // no jsonp function
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // module cache are used so entry inlining is disabled
/******/ // startup
/******/ // Load entry module and return exports
/******/ __webpack_require__("./src/routes/+page.svelte");
/******/ var __webpack_exports__ = __webpack_require__("./node_modules/webpack-plugin-serve/client.js");
/******/
/******/ })()
;