From 439da28afa365a0fbe472470e7a0ba24a1b9940c Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Mar 2020 08:48:32 -0500 Subject: [PATCH] docs naming cleanups --- .../markdown/01_nosqlbench/04_support_options.md | 12 ++++-------- _docs/services/docs/markdown/04_designing/index.md | 2 +- .../main/resources/activities/baselines/cql-iot.yaml | 2 +- .../resources/activities/baselines/cql-keyvalue.yaml | 2 +- docsys/src/main/node/docsys/layouts/error.vue | 2 +- docsys/src/main/resources/docsys-guidebook/200.html | 4 ++-- ...1d6118a6d44712272a.js => 4f2a13032e26b25bda78.js} | 2 +- .../src/main/resources/docsys-guidebook/index.html | 4 ++-- .../engine/cli/NBCLIScriptAssemblyTest.java | 5 ++--- .../docs-for-nb/01_nosqlbench/04_support_options.md | 12 ++++-------- .../nosqlbench/virtdata/api/VirtDataFunctions.java | 1 + 11 files changed, 20 insertions(+), 28 deletions(-) rename docsys/src/main/resources/docsys-guidebook/_nuxt/{b31d6118a6d44712272a.js => 4f2a13032e26b25bda78.js} (54%) diff --git a/_docs/services/docs/markdown/01_nosqlbench/04_support_options.md b/_docs/services/docs/markdown/01_nosqlbench/04_support_options.md index dabf105e0..77bb05240 100644 --- a/_docs/services/docs/markdown/01_nosqlbench/04_support_options.md +++ b/_docs/services/docs/markdown/01_nosqlbench/04_support_options.md @@ -5,22 +5,18 @@ weight: 10 # Support Options -These guidelines are mirrored at the [Submitting Feedback](https://github.com/datastax/nosqlbench-labs/wiki/Submitting-Feedback) wiki page at the nosqlbench project site, which is also where the `[Submit Feedback]` link will take you. - -## Community Support - -It is supported by a community of active users at [DataStax nosqlbench Community](https://community.datastax.com/spaces/51/index.html). +These guidelines are mirrored at the [Submitting Feedback](https://github.com/nosqlbench/nosqlbench/wiki/Submitting-Feedback) wiki page at the nosqlbench project site, which is also where the `[Submit Feedback]` link will take you. ## Bug Fixes -If you think you have found a bug, please [file a bug report](https://github.com/datastax/nosqlbench-labs/issues/new?labels=bug). nosqlbench is actively used within DataStax, and verified bugs will get attention as resources permit. Bugs reports which are more detailed, or bug reports which include steps to reproduce will get attention first. +If you think you have found a bug, please [file a bug report](https://github.com/nosqlbench/nosqlbench/issues/new?labels=bug). nosqlbench is actively used within DataStax, and verified bugs will get attention as resources permit. Bugs reports which are more detailed, or bug reports which include steps to reproduce will get attention first. ## Feature Requests If you would like to see something in nosqlbench that is not there yet, -please [submit a feature request](https://github.com/datastax/nosqlbench-labs/issues/new?labels=feature). +please [submit a feature request](https://github.com/nosqlbench/nosqlbench/issues/new?labels=feature). ## Documentation Requests -If you would like to see a specific nosqlbench or testing topic added to the guidebook, please [request docs content](https://github.com/datastax/nosqlbench-labs/issues/new?labels=docrequest). +If you would like to see a specific nosqlbench or testing topic added to the guidebook, please [request docs content](https://github.com/nosqlbench/nosqlbench/issues/new?labels=docrequest). diff --git a/_docs/services/docs/markdown/04_designing/index.md b/_docs/services/docs/markdown/04_designing/index.md index c7f274f69..a2318c984 100644 --- a/_docs/services/docs/markdown/04_designing/index.md +++ b/_docs/services/docs/markdown/04_designing/index.md @@ -21,7 +21,7 @@ You will notice that this guide is not overly CQL-specific. That is because nosq The built-in workloads that are include with nosqlbench are also shared on the github site where we manage the nosqlbench project: -- [baselines](https://github.com/datastax/nosqlbench-labs/tree/master/sample-activities/baselines) +- [baselines](https://github.com/nosqlbench/nosqlbnech/tree/master/sample-activities/baselines) - [bindings](https://github.com/datastax/nosqlbench-labs/tree/master/sample-activities/bindings) ### Follow the conventions diff --git a/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml b/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml index 41999f484..c3586fafe 100644 --- a/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml +++ b/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml @@ -1,4 +1,4 @@ -# dsbench -v run type=cql yaml=baselines/cql-iot tags=phase:schema +# nb -v run type=cql yaml=baselines/cql-iot tags=phase:schema host=dsehost bindings: machine_id: Mod(<>); ToHashedUUID() -> java.util.UUID diff --git a/activitytype-cql/src/main/resources/activities/baselines/cql-keyvalue.yaml b/activitytype-cql/src/main/resources/activities/baselines/cql-keyvalue.yaml index 251cef370..66140eed7 100644 --- a/activitytype-cql/src/main/resources/activities/baselines/cql-keyvalue.yaml +++ b/activitytype-cql/src/main/resources/activities/baselines/cql-keyvalue.yaml @@ -1,4 +1,4 @@ -# dsbench -v run type=cql yaml=baselines/cql-keyvalue tags=phase:schema +# nb -v run type=cql yaml=baselines/cql-keyvalue tags=phase:schema host=dsehost bindings: seq_key: Mod(<>); ToString() -> String diff --git a/docsys/src/main/node/docsys/layouts/error.vue b/docsys/src/main/node/docsys/layouts/error.vue index b99c8fb34..4ea328a99 100644 --- a/docsys/src/main/node/docsys/layouts/error.vue +++ b/docsys/src/main/node/docsys/layouts/error.vue @@ -6,7 +6,7 @@

{{ otherError }}

- + File A UI Bug Report diff --git a/docsys/src/main/resources/docsys-guidebook/200.html b/docsys/src/main/resources/docsys-guidebook/200.html index d816474dc..0e053186f 100644 --- a/docsys/src/main/resources/docsys-guidebook/200.html +++ b/docsys/src/main/resources/docsys-guidebook/200.html @@ -1,9 +1,9 @@ - guidebooknosqlbench docs + guidebooknosqlbench docs
Loading...
- + diff --git a/docsys/src/main/resources/docsys-guidebook/_nuxt/b31d6118a6d44712272a.js b/docsys/src/main/resources/docsys-guidebook/_nuxt/4f2a13032e26b25bda78.js similarity index 54% rename from docsys/src/main/resources/docsys-guidebook/_nuxt/b31d6118a6d44712272a.js rename to docsys/src/main/resources/docsys-guidebook/_nuxt/4f2a13032e26b25bda78.js index 70f1e9fb6..aa786bc28 100644 --- a/docsys/src/main/resources/docsys-guidebook/_nuxt/b31d6118a6d44712272a.js +++ b/docsys/src/main/resources/docsys-guidebook/_nuxt/4f2a13032e26b25bda78.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{1:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* unused harmony export empty */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return globalHandleError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return interopDefault; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return applyAsyncData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return sanitizeComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return getMatchedComponents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return getMatchedComponentsInstances; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return flatMapComponents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return resolveRouteComponents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return getRouteData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return setContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return middlewareSeries; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return promisify; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return getLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return compile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return getQueryDiff; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return normalizeError; });\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_string_starts_with__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(48);\n/* harmony import */ var core_js_modules_es6_string_starts_with__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_starts_with__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_string_repeat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(73);\n/* harmony import */ var core_js_modules_es6_string_repeat__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_repeat__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59);\n/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60);\n/* harmony import */ var core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(165);\n/* harmony import */ var core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es6_regexp_search__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(167);\n/* harmony import */ var core_js_modules_es6_regexp_search__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_search__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(17);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(35);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(18);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(62);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(61);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(6);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(22);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(28);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_17__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(3);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(0);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_18__[/* default */ \"a\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n // window.{{globals.loadedCallback}} hook\n// Useful for jsdom testing or plugins (https://github.com/tmpvar/jsdom#dealing-with-asynchronous-script-loading)\n\nif (true) {\n window.onNuxtReadyCbs = [];\n\n window.onNuxtReady = function (cb) {\n window.onNuxtReadyCbs.push(cb);\n };\n}\n\nfunction empty() {}\nfunction globalHandleError(error) {\n if (vue__WEBPACK_IMPORTED_MODULE_19__[/* default */ \"a\"].config.errorHandler) {\n vue__WEBPACK_IMPORTED_MODULE_19__[/* default */ \"a\"].config.errorHandler(error);\n }\n}\nfunction interopDefault(promise) {\n return promise.then(function (m) {\n return m.default || m;\n });\n}\nfunction applyAsyncData(Component, asyncData) {\n if ( // For SSR, we once all this function without second param to just apply asyncData\n // Prevent doing this for each SSR request\n !asyncData && Component.options.__hasNuxtData) {\n return;\n }\n\n var ComponentData = Component.options._originDataFn || Component.options.data || function () {\n return {};\n };\n\n Component.options._originDataFn = ComponentData;\n\n Component.options.data = function () {\n var data = ComponentData.call(this, this);\n\n if (this.$ssrContext) {\n asyncData = this.$ssrContext.asyncData[Component.cid];\n }\n\n return _objectSpread({}, data, {}, asyncData);\n };\n\n Component.options.__hasNuxtData = true;\n\n if (Component._Ctor && Component._Ctor.options) {\n Component._Ctor.options.data = Component.options.data;\n }\n}\nfunction sanitizeComponent(Component) {\n // If Component already sanitized\n if (Component.options && Component._Ctor === Component) {\n return Component;\n }\n\n if (!Component.options) {\n Component = vue__WEBPACK_IMPORTED_MODULE_19__[/* default */ \"a\"].extend(Component); // fix issue #6\n\n Component._Ctor = Component;\n } else {\n Component._Ctor = Component;\n Component.extendOptions = Component.options;\n } // For debugging purpose\n\n\n if (!Component.options.name && Component.options.__file) {\n Component.options.name = Component.options.__file;\n }\n\n return Component;\n}\nfunction getMatchedComponents(route) {\n var matches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'components';\n return Array.prototype.concat.apply([], route.matched.map(function (m, index) {\n return Object.keys(m[prop]).map(function (key) {\n matches && matches.push(index);\n return m[prop][key];\n });\n }));\n}\nfunction getMatchedComponentsInstances(route) {\n var matches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return getMatchedComponents(route, matches, 'instances');\n}\nfunction flatMapComponents(route, fn) {\n return Array.prototype.concat.apply([], route.matched.map(function (m, index) {\n return Object.keys(m.components).reduce(function (promises, key) {\n if (m.components[key]) {\n promises.push(fn(m.components[key], m.instances[key], m, key, index));\n } else {\n delete m.components[key];\n }\n\n return promises;\n }, []);\n }));\n}\nfunction resolveRouteComponents(route, fn) {\n return Promise.all(flatMapComponents(route, function _callee(Component, instance, match, key) {\n return regeneratorRuntime.async(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(typeof Component === 'function' && !Component.options)) {\n _context.next = 4;\n break;\n }\n\n _context.next = 3;\n return regeneratorRuntime.awrap(Component());\n\n case 3:\n Component = _context.sent;\n\n case 4:\n match.components[key] = Component = sanitizeComponent(Component);\n return _context.abrupt(\"return\", typeof fn === 'function' ? fn(Component, instance, match, key) : Component);\n\n case 6:\n case \"end\":\n return _context.stop();\n }\n }\n });\n }));\n}\nfunction getRouteData(route) {\n return regeneratorRuntime.async(function getRouteData$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (route) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 2:\n _context2.next = 4;\n return regeneratorRuntime.awrap(resolveRouteComponents(route));\n\n case 4:\n return _context2.abrupt(\"return\", _objectSpread({}, route, {\n meta: getMatchedComponents(route).map(function (Component, index) {\n return _objectSpread({}, Component.options.meta, {}, (route.matched[index] || {}).meta);\n })\n }));\n\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }\n });\n}\nfunction setContext(app, context) {\n var _ref, _ref2, currentRouteData, fromRouteData;\n\n return regeneratorRuntime.async(function setContext$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n // If context not defined, create it\n if (!app.context) {\n app.context = {\n isStatic: true,\n isDev: false,\n isHMR: false,\n app: app,\n store: app.store,\n payload: context.payload,\n error: context.error,\n base: '/',\n env: {}\n }; // Only set once\n\n if (context.req) {\n app.context.req = context.req;\n }\n\n if (context.res) {\n app.context.res = context.res;\n }\n\n if (context.ssrContext) {\n app.context.ssrContext = context.ssrContext;\n }\n\n app.context.redirect = function (status, path, query) {\n if (!status) {\n return;\n }\n\n app.context._redirected = true; // if only 1 or 2 arguments: redirect('/') or redirect('/', { foo: 'bar' })\n\n var pathType = Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_11__[/* default */ \"a\"])(path);\n\n if (typeof status !== 'number' && (pathType === 'undefined' || pathType === 'object')) {\n query = path || {};\n path = status;\n pathType = Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_11__[/* default */ \"a\"])(path);\n status = 302;\n }\n\n if (pathType === 'object') {\n path = app.router.resolve(path).route.fullPath;\n } // \"/absolute/route\", \"./relative/route\" or \"../relative/route\"\n\n\n if (/(^[.]{1,2}\\/)|(^\\/(?!\\/))/.test(path)) {\n app.context.next({\n path: path,\n query: query,\n status: status\n });\n } else {\n path = formatUrl(path, query);\n\n if (false) {}\n\n if (true) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Location/replace\n window.location.replace(path); // Throw a redirect error\n\n throw new Error('ERR_REDIRECT');\n }\n }\n };\n\n if (false) {}\n\n if (true) {\n app.context.nuxtState = window.__NUXT__;\n }\n } // Dynamic keys\n\n\n _context3.next = 3;\n return regeneratorRuntime.awrap(Promise.all([getRouteData(context.route), getRouteData(context.from)]));\n\n case 3:\n _ref = _context3.sent;\n _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_9__[/* default */ \"a\"])(_ref, 2);\n currentRouteData = _ref2[0];\n fromRouteData = _ref2[1];\n\n if (context.route) {\n app.context.route = currentRouteData;\n }\n\n if (context.from) {\n app.context.from = fromRouteData;\n }\n\n app.context.next = context.next;\n app.context._redirected = false;\n app.context._errored = false;\n app.context.isHMR = false;\n app.context.params = app.context.route.params || {};\n app.context.query = app.context.route.query || {};\n\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }\n });\n}\nfunction middlewareSeries(promises, appContext) {\n if (!promises.length || appContext._redirected || appContext._errored) {\n return Promise.resolve();\n }\n\n return promisify(promises[0], appContext).then(function () {\n return middlewareSeries(promises.slice(1), appContext);\n });\n}\nfunction promisify(fn, context) {\n var promise;\n\n if (fn.length === 2) {\n // fn(context, callback)\n promise = new Promise(function (resolve) {\n fn(context, function (err, data) {\n if (err) {\n context.error(err);\n }\n\n data = data || {};\n resolve(data);\n });\n });\n } else {\n promise = fn(context);\n }\n\n if (promise && promise instanceof Promise && typeof promise.then === 'function') {\n return promise;\n }\n\n return Promise.resolve(promise);\n} // Imported from vue-router\n\nfunction getLocation(base, mode) {\n var path = decodeURI(window.location.pathname);\n\n if (mode === 'hash') {\n return window.location.hash.replace(/^#\\//, '');\n }\n\n if (base && path.indexOf(base) === 0) {\n path = path.slice(base.length);\n }\n\n return (path || '/') + window.location.search + window.location.hash;\n} // Imported from path-to-regexp\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\n\nfunction compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\nfunction getQueryDiff(toQuery, fromQuery) {\n var diff = {};\n\n var queries = _objectSpread({}, toQuery, {}, fromQuery);\n\n for (var k in queries) {\n if (String(toQuery[k]) !== String(fromQuery[k])) {\n diff[k] = true;\n }\n }\n\n return diff;\n}\nfunction normalizeError(err) {\n var message;\n\n if (!(err.message || typeof err === 'string')) {\n try {\n message = JSON.stringify(err, null, 2);\n } catch (e) {\n message = \"[\".concat(err.constructor.name, \"]\");\n }\n } else {\n message = err.message || err;\n }\n\n return _objectSpread({}, err, {\n message: message,\n statusCode: err.statusCode || err.status || err.response && err.response.status || 500\n });\n}\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\n\nvar PATH_REGEXP = new RegExp([// Match escaped characters that would otherwise appear in future matches.\n// This allows the user to escape special characters that won't transform.\n'(\\\\\\\\.)', // Match Express-style parameters and un-named parameters with a prefix\n// and optional suffixes. Matches appear as:\n//\n// \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n// \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n// \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n'([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'].join('|'), 'g');\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\n\nfunction parse(str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length; // Ignore already escaped sequences.\n\n if (escaped) {\n path += escaped[1];\n continue;\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7]; // Push the current path onto the tokens.\n\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: Boolean(asterisk),\n pattern: pattern ? escapeGroup(pattern) : asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?'\n });\n } // Match any characters still remaining.\n\n\n if (index < str.length) {\n path += str.substr(index);\n } // If the path exists, push it onto the end.\n\n\n if (path) {\n tokens.push(path);\n }\n\n return tokens;\n}\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\n\n\nfunction encodeURIComponentPretty(str, slashAllowed) {\n var re = slashAllowed ? /[?#]/g : /[/?#]/g;\n return encodeURI(str).replace(re, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\n\n\nfunction encodeAsterisk(str) {\n return encodeURIComponentPretty(str, true);\n}\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\n\n\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1');\n}\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\n\n\nfunction escapeGroup(group) {\n return group.replace(/([=!:$/()])/g, '\\\\$1');\n}\n/**\n * Expose a method for transforming tokens into the path function.\n */\n\n\nfunction tokensToFunction(tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length); // Compile all the patterns before compilation.\n\n for (var i = 0; i < tokens.length; i++) {\n if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_11__[/* default */ \"a\"])(tokens[i]) === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var _i = 0; _i < tokens.length; _i++) {\n var token = tokens[_i];\n\n if (typeof token === 'string') {\n path += token;\n continue;\n }\n\n var value = data[token.name || 'pathMatch'];\n var segment = void 0;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue;\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined');\n }\n }\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`');\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue;\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty');\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[_i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`');\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue;\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[_i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"');\n }\n\n path += token.prefix + segment;\n }\n\n return path;\n };\n}\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\n\n\nfunction flags(options) {\n return options && options.sensitive ? '' : 'i';\n}\n/**\n * Format given url, append query to url query string\n *\n * @param {string} url\n * @param {string} query\n * @return {string}\n */\n\n\nfunction formatUrl(url, query) {\n var protocol;\n var index = url.indexOf('://');\n\n if (index !== -1) {\n protocol = url.substring(0, index);\n url = url.substring(index + 3);\n } else if (url.startsWith('//')) {\n url = url.substring(2);\n }\n\n var parts = url.split('/');\n var result = (protocol ? protocol + '://' : '//') + parts.shift();\n var path = parts.filter(Boolean).join('/');\n var hash;\n parts = path.split('#');\n\n if (parts.length === 2) {\n var _parts = parts;\n\n var _parts2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_9__[/* default */ \"a\"])(_parts, 2);\n\n path = _parts2[0];\n hash = _parts2[1];\n }\n\n result += path ? '/' + path : '';\n\n if (query && JSON.stringify(query) !== '{}') {\n result += (url.split('?').length === 2 ? '&' : '?') + formatQuery(query);\n }\n\n result += hash ? '#' + hash : '';\n return result;\n}\n/**\n * Transform data object to query string\n *\n * @param {object} query\n * @return {string}\n */\n\n\nfunction formatQuery(query) {\n return Object.keys(query).sort().map(function (key) {\n var val = query[key];\n\n if (val == null) {\n return '';\n }\n\n if (Array.isArray(val)) {\n return val.slice().map(function (val2) {\n return [key, '=', val2].join('');\n }).join('&');\n }\n\n return key + '=' + val;\n }).filter(Boolean).join('&');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi8ubnV4dC91dGlscy5qcz9lYmVkIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJ3aW5kb3ciLCJvbk51eHRSZWFkeUNicyIsIm9uTnV4dFJlYWR5IiwiY2IiLCJwdXNoIiwiZW1wdHkiLCJnbG9iYWxIYW5kbGVFcnJvciIsImVycm9yIiwiVnVlIiwiY29uZmlnIiwiZXJyb3JIYW5kbGVyIiwiaW50ZXJvcERlZmF1bHQiLCJwcm9taXNlIiwidGhlbiIsIm0iLCJkZWZhdWx0IiwiYXBwbHlBc3luY0RhdGEiLCJDb21wb25lbnQiLCJhc3luY0RhdGEiLCJvcHRpb25zIiwiX19oYXNOdXh0RGF0YSIsIkNvbXBvbmVudERhdGEiLCJfb3JpZ2luRGF0YUZuIiwiZGF0YSIsImNhbGwiLCIkc3NyQ29udGV4dCIsImNpZCIsIl9DdG9yIiwic2FuaXRpemVDb21wb25lbnQiLCJleHRlbmQiLCJleHRlbmRPcHRpb25zIiwibmFtZSIsIl9fZmlsZSIsImdldE1hdGNoZWRDb21wb25lbnRzIiwicm91dGUiLCJtYXRjaGVzIiwicHJvcCIsIkFycmF5IiwicHJvdG90eXBlIiwiY29uY2F0IiwiYXBwbHkiLCJtYXRjaGVkIiwibWFwIiwiaW5kZXgiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZ2V0TWF0Y2hlZENvbXBvbmVudHNJbnN0YW5jZXMiLCJmbGF0TWFwQ29tcG9uZW50cyIsImZuIiwiY29tcG9uZW50cyIsInJlZHVjZSIsInByb21pc2VzIiwiaW5zdGFuY2VzIiwicmVzb2x2ZVJvdXRlQ29tcG9uZW50cyIsIlByb21pc2UiLCJhbGwiLCJpbnN0YW5jZSIsIm1hdGNoIiwiZ2V0Um91dGVEYXRhIiwibWV0YSIsInNldENvbnRleHQiLCJhcHAiLCJjb250ZXh0IiwiaXNTdGF0aWMiLCJpc0RldiIsImlzSE1SIiwic3RvcmUiLCJwYXlsb2FkIiwiYmFzZSIsImVudiIsInJlcSIsInJlcyIsInNzckNvbnRleHQiLCJyZWRpcmVjdCIsInN0YXR1cyIsInBhdGgiLCJxdWVyeSIsIl9yZWRpcmVjdGVkIiwicGF0aFR5cGUiLCJyb3V0ZXIiLCJyZXNvbHZlIiwiZnVsbFBhdGgiLCJ0ZXN0IiwibmV4dCIsImZvcm1hdFVybCIsImxvY2F0aW9uIiwicmVwbGFjZSIsIkVycm9yIiwibnV4dFN0YXRlIiwiX19OVVhUX18iLCJmcm9tIiwiY3VycmVudFJvdXRlRGF0YSIsImZyb21Sb3V0ZURhdGEiLCJfZXJyb3JlZCIsInBhcmFtcyIsIm1pZGRsZXdhcmVTZXJpZXMiLCJhcHBDb250ZXh0IiwibGVuZ3RoIiwicHJvbWlzaWZ5Iiwic2xpY2UiLCJlcnIiLCJnZXRMb2NhdGlvbiIsIm1vZGUiLCJkZWNvZGVVUkkiLCJwYXRobmFtZSIsImhhc2giLCJpbmRleE9mIiwic2VhcmNoIiwiY29tcGlsZSIsInN0ciIsInRva2Vuc1RvRnVuY3Rpb24iLCJwYXJzZSIsImdldFF1ZXJ5RGlmZiIsInRvUXVlcnkiLCJmcm9tUXVlcnkiLCJkaWZmIiwicXVlcmllcyIsImsiLCJTdHJpbmciLCJub3JtYWxpemVFcnJvciIsIm1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZSIsImNvbnN0cnVjdG9yIiwic3RhdHVzQ29kZSIsInJlc3BvbnNlIiwiUEFUSF9SRUdFWFAiLCJSZWdFeHAiLCJqb2luIiwidG9rZW5zIiwiZGVmYXVsdERlbGltaXRlciIsImRlbGltaXRlciIsImV4ZWMiLCJlc2NhcGVkIiwib2Zmc2V0IiwicHJlZml4IiwiY2FwdHVyZSIsImdyb3VwIiwibW9kaWZpZXIiLCJhc3RlcmlzayIsInBhcnRpYWwiLCJyZXBlYXQiLCJvcHRpb25hbCIsInBhdHRlcm4iLCJCb29sZWFuIiwiZXNjYXBlR3JvdXAiLCJlc2NhcGVTdHJpbmciLCJzdWJzdHIiLCJlbmNvZGVVUklDb21wb25lbnRQcmV0dHkiLCJzbGFzaEFsbG93ZWQiLCJyZSIsImVuY29kZVVSSSIsImMiLCJjaGFyQ29kZUF0IiwidG9TdHJpbmciLCJ0b1VwcGVyQ2FzZSIsImVuY29kZUFzdGVyaXNrIiwiaSIsImZsYWdzIiwib2JqIiwib3B0cyIsImVuY29kZSIsInByZXR0eSIsImVuY29kZVVSSUNvbXBvbmVudCIsInRva2VuIiwidmFsdWUiLCJzZWdtZW50IiwiVHlwZUVycm9yIiwiaXNBcnJheSIsImoiLCJzZW5zaXRpdmUiLCJ1cmwiLCJwcm90b2NvbCIsInN1YnN0cmluZyIsInN0YXJ0c1dpdGgiLCJwYXJ0cyIsInNwbGl0IiwicmVzdWx0Iiwic2hpZnQiLCJmaWx0ZXIiLCJmb3JtYXRRdWVyeSIsInNvcnQiLCJ2YWwiLCJ2YWwyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQUVBO0FBQ0E7O0FBQ0EsSUFBSUEsSUFBSixFQUFvQjtBQUNsQkMsUUFBTSxDQUFDQyxjQUFQLEdBQXdCLEVBQXhCOztBQUNBRCxRQUFNLENBQUNFLFdBQVAsR0FBcUIsVUFBQ0MsRUFBRCxFQUFRO0FBQzNCSCxVQUFNLENBQUNDLGNBQVAsQ0FBc0JHLElBQXRCLENBQTJCRCxFQUEzQjtBQUNELEdBRkQ7QUFHRDs7QUFFTSxTQUFTRSxLQUFULEdBQWtCLENBQUU7QUFFcEIsU0FBU0MsaUJBQVQsQ0FBNEJDLEtBQTVCLEVBQW1DO0FBQ3hDLE1BQUlDLG9EQUFHLENBQUNDLE1BQUosQ0FBV0MsWUFBZixFQUE2QjtBQUMzQkYsd0RBQUcsQ0FBQ0MsTUFBSixDQUFXQyxZQUFYLENBQXdCSCxLQUF4QjtBQUNEO0FBQ0Y7QUFFTSxTQUFTSSxjQUFULENBQXlCQyxPQUF6QixFQUFrQztBQUN2QyxTQUFPQSxPQUFPLENBQUNDLElBQVIsQ0FBYSxVQUFBQyxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQWpCO0FBQUEsR0FBZCxDQUFQO0FBQ0Q7QUFFTSxTQUFTRSxjQUFULENBQXlCQyxTQUF6QixFQUFvQ0MsU0FBcEMsRUFBK0M7QUFDcEQsT0FDRTtBQUNBO0FBQ0EsR0FBQ0EsU0FBRCxJQUFjRCxTQUFTLENBQUNFLE9BQVYsQ0FBa0JDLGFBSGxDLEVBSUU7QUFDQTtBQUNEOztBQUVELE1BQU1DLGFBQWEsR0FBR0osU0FBUyxDQUFDRSxPQUFWLENBQWtCRyxhQUFsQixJQUFtQ0wsU0FBUyxDQUFDRSxPQUFWLENBQWtCSSxJQUFyRCxJQUE2RCxZQUFZO0FBQUUsV0FBTyxFQUFQO0FBQVcsR0FBNUc7O0FBQ0FOLFdBQVMsQ0FBQ0UsT0FBVixDQUFrQkcsYUFBbEIsR0FBa0NELGFBQWxDOztBQUVBSixXQUFTLENBQUNFLE9BQVYsQ0FBa0JJLElBQWxCLEdBQXlCLFlBQVk7QUFDbkMsUUFBTUEsSUFBSSxHQUFHRixhQUFhLENBQUNHLElBQWQsQ0FBbUIsSUFBbkIsRUFBeUIsSUFBekIsQ0FBYjs7QUFDQSxRQUFJLEtBQUtDLFdBQVQsRUFBc0I7QUFDcEJQLGVBQVMsR0FBRyxLQUFLTyxXQUFMLENBQWlCUCxTQUFqQixDQUEyQkQsU0FBUyxDQUFDUyxHQUFyQyxDQUFaO0FBQ0Q7O0FBQ0QsNkJBQVlILElBQVosTUFBcUJMLFNBQXJCO0FBQ0QsR0FORDs7QUFRQUQsV0FBUyxDQUFDRSxPQUFWLENBQWtCQyxhQUFsQixHQUFrQyxJQUFsQzs7QUFFQSxNQUFJSCxTQUFTLENBQUNVLEtBQVYsSUFBbUJWLFNBQVMsQ0FBQ1UsS0FBVixDQUFnQlIsT0FBdkMsRUFBZ0Q7QUFDOUNGLGFBQVMsQ0FBQ1UsS0FBVixDQUFnQlIsT0FBaEIsQ0FBd0JJLElBQXhCLEdBQStCTixTQUFTLENBQUNFLE9BQVYsQ0FBa0JJLElBQWpEO0FBQ0Q7QUFDRjtBQUVNLFNBQVNLLGlCQUFULENBQTRCWCxTQUE1QixFQUF1QztBQUM1QztBQUNBLE1BQUlBLFNBQVMsQ0FBQ0UsT0FBVixJQUFxQkYsU0FBUyxDQUFDVSxLQUFWLEtBQW9CVixTQUE3QyxFQUF3RDtBQUN0RCxXQUFPQSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDQSxTQUFTLENBQUNFLE9BQWYsRUFBd0I7QUFDdEJGLGFBQVMsR0FBR1Qsb0RBQUcsQ0FBQ3FCLE1BQUosQ0FBV1osU0FBWCxDQUFaLENBRHNCLENBQ1k7O0FBQ2xDQSxhQUFTLENBQUNVLEtBQVYsR0FBa0JWLFNBQWxCO0FBQ0QsR0FIRCxNQUdPO0FBQ0xBLGFBQVMsQ0FBQ1UsS0FBVixHQUFrQlYsU0FBbEI7QUFDQUEsYUFBUyxDQUFDYSxhQUFWLEdBQTBCYixTQUFTLENBQUNFLE9BQXBDO0FBQ0QsR0FYMkMsQ0FZNUM7OztBQUNBLE1BQUksQ0FBQ0YsU0FBUyxDQUFDRSxPQUFWLENBQWtCWSxJQUFuQixJQUEyQmQsU0FBUyxDQUFDRSxPQUFWLENBQWtCYSxNQUFqRCxFQUF5RDtBQUN2RGYsYUFBUyxDQUFDRSxPQUFWLENBQWtCWSxJQUFsQixHQUF5QmQsU0FBUyxDQUFDRSxPQUFWLENBQWtCYSxNQUEzQztBQUNEOztBQUNELFNBQU9mLFNBQVA7QUFDRDtBQUVNLFNBQVNnQixvQkFBVCxDQUErQkMsS0FBL0IsRUFBNEU7QUFBQSxNQUF0Q0MsT0FBc0MsdUVBQTVCLEtBQTRCO0FBQUEsTUFBckJDLElBQXFCLHVFQUFkLFlBQWM7QUFDakYsU0FBT0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxNQUFoQixDQUF1QkMsS0FBdkIsQ0FBNkIsRUFBN0IsRUFBaUNOLEtBQUssQ0FBQ08sT0FBTixDQUFjQyxHQUFkLENBQWtCLFVBQUM1QixDQUFELEVBQUk2QixLQUFKLEVBQWM7QUFDdEUsV0FBT0MsTUFBTSxDQUFDQyxJQUFQLENBQVkvQixDQUFDLENBQUNzQixJQUFELENBQWIsRUFBcUJNLEdBQXJCLENBQXlCLFVBQUNJLEdBQUQsRUFBUztBQUN2Q1gsYUFBTyxJQUFJQSxPQUFPLENBQUMvQixJQUFSLENBQWF1QyxLQUFiLENBQVg7QUFDQSxhQUFPN0IsQ0FBQyxDQUFDc0IsSUFBRCxDQUFELENBQVFVLEdBQVIsQ0FBUDtBQUNELEtBSE0sQ0FBUDtBQUlELEdBTHVDLENBQWpDLENBQVA7QUFNRDtBQUVNLFNBQVNDLDZCQUFULENBQXdDYixLQUF4QyxFQUFnRTtBQUFBLE1BQWpCQyxPQUFpQix1RUFBUCxLQUFPO0FBQ3JFLFNBQU9GLG9CQUFvQixDQUFDQyxLQUFELEVBQVFDLE9BQVIsRUFBaUIsV0FBakIsQ0FBM0I7QUFDRDtBQUVNLFNBQVNhLGlCQUFULENBQTRCZCxLQUE1QixFQUFtQ2UsRUFBbkMsRUFBdUM7QUFDNUMsU0FBT1osS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxNQUFoQixDQUF1QkMsS0FBdkIsQ0FBNkIsRUFBN0IsRUFBaUNOLEtBQUssQ0FBQ08sT0FBTixDQUFjQyxHQUFkLENBQWtCLFVBQUM1QixDQUFELEVBQUk2QixLQUFKLEVBQWM7QUFDdEUsV0FBT0MsTUFBTSxDQUFDQyxJQUFQLENBQVkvQixDQUFDLENBQUNvQyxVQUFkLEVBQTBCQyxNQUExQixDQUFpQyxVQUFDQyxRQUFELEVBQVdOLEdBQVgsRUFBbUI7QUFDekQsVUFBSWhDLENBQUMsQ0FBQ29DLFVBQUYsQ0FBYUosR0FBYixDQUFKLEVBQXVCO0FBQ3JCTSxnQkFBUSxDQUFDaEQsSUFBVCxDQUFjNkMsRUFBRSxDQUFDbkMsQ0FBQyxDQUFDb0MsVUFBRixDQUFhSixHQUFiLENBQUQsRUFBb0JoQyxDQUFDLENBQUN1QyxTQUFGLENBQVlQLEdBQVosQ0FBcEIsRUFBc0NoQyxDQUF0QyxFQUF5Q2dDLEdBQXpDLEVBQThDSCxLQUE5QyxDQUFoQjtBQUNELE9BRkQsTUFFTztBQUNMLGVBQU83QixDQUFDLENBQUNvQyxVQUFGLENBQWFKLEdBQWIsQ0FBUDtBQUNEOztBQUNELGFBQU9NLFFBQVA7QUFDRCxLQVBNLEVBT0osRUFQSSxDQUFQO0FBUUQsR0FUdUMsQ0FBakMsQ0FBUDtBQVVEO0FBRU0sU0FBU0Usc0JBQVQsQ0FBaUNwQixLQUFqQyxFQUF3Q2UsRUFBeEMsRUFBNEM7QUFDakQsU0FBT00sT0FBTyxDQUFDQyxHQUFSLENBQ0xSLGlCQUFpQixDQUFDZCxLQUFELEVBQVEsaUJBQU9qQixTQUFQLEVBQWtCd0MsUUFBbEIsRUFBNEJDLEtBQTVCLEVBQW1DWixHQUFuQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBRW5CLE9BQU83QixTQUFQLEtBQXFCLFVBQXJCLElBQW1DLENBQUNBLFNBQVMsQ0FBQ0UsT0FGM0I7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSw0Q0FHSEYsU0FBUyxFQUhOOztBQUFBO0FBR3JCQSxxQkFIcUI7O0FBQUE7QUFLdkJ5QyxpQkFBSyxDQUFDUixVQUFOLENBQWlCSixHQUFqQixJQUF3QjdCLFNBQVMsR0FBR1csaUJBQWlCLENBQUNYLFNBQUQsQ0FBckQ7QUFMdUIsNkNBTWhCLE9BQU9nQyxFQUFQLEtBQWMsVUFBZCxHQUEyQkEsRUFBRSxDQUFDaEMsU0FBRCxFQUFZd0MsUUFBWixFQUFzQkMsS0FBdEIsRUFBNkJaLEdBQTdCLENBQTdCLEdBQWlFN0IsU0FOakQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBUixDQURaLENBQVA7QUFVRDtBQUVNLFNBQWUwQyxZQUFmLENBQTZCekIsS0FBN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQ0FBLEtBREE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTtBQUFBLDBDQUtDb0Isc0JBQXNCLENBQUNwQixLQUFELENBTHZCOztBQUFBO0FBQUEsOERBUUFBLEtBUkE7QUFTSDBCLGdCQUFJLEVBQUUzQixvQkFBb0IsQ0FBQ0MsS0FBRCxDQUFwQixDQUE0QlEsR0FBNUIsQ0FBZ0MsVUFBQ3pCLFNBQUQsRUFBWTBCLEtBQVosRUFBc0I7QUFDMUQsdUNBQVkxQixTQUFTLENBQUNFLE9BQVYsQ0FBa0J5QyxJQUE5QixNQUF1QyxDQUFDMUIsS0FBSyxDQUFDTyxPQUFOLENBQWNFLEtBQWQsS0FBd0IsRUFBekIsRUFBNkJpQixJQUFwRTtBQUNELGFBRks7QUFUSDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLFNBQWVDLFVBQWYsQ0FBMkJDLEdBQTNCLEVBQWdDQyxPQUFoQztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0w7QUFDQSxjQUFJLENBQUNELEdBQUcsQ0FBQ0MsT0FBVCxFQUFrQjtBQUNoQkQsZUFBRyxDQUFDQyxPQUFKLEdBQWM7QUFDWkMsc0JBQVEsRUFBRWpFLElBREU7QUFFWmtFLG1CQUFLLEVBQUUsS0FGSztBQUdaQyxtQkFBSyxFQUFFLEtBSEs7QUFJWkosaUJBQUcsRUFBSEEsR0FKWTtBQUtaSyxtQkFBSyxFQUFFTCxHQUFHLENBQUNLLEtBTEM7QUFNWkMscUJBQU8sRUFBRUwsT0FBTyxDQUFDSyxPQU5MO0FBT1o3RCxtQkFBSyxFQUFFd0QsT0FBTyxDQUFDeEQsS0FQSDtBQVFaOEQsa0JBQUksRUFBRSxHQVJNO0FBU1pDLGlCQUFHLEVBQUU7QUFUTyxhQUFkLENBRGdCLENBWWhCOztBQUNBLGdCQUFJUCxPQUFPLENBQUNRLEdBQVosRUFBaUI7QUFDZlQsaUJBQUcsQ0FBQ0MsT0FBSixDQUFZUSxHQUFaLEdBQWtCUixPQUFPLENBQUNRLEdBQTFCO0FBQ0Q7O0FBQ0QsZ0JBQUlSLE9BQU8sQ0FBQ1MsR0FBWixFQUFpQjtBQUNmVixpQkFBRyxDQUFDQyxPQUFKLENBQVlTLEdBQVosR0FBa0JULE9BQU8sQ0FBQ1MsR0FBMUI7QUFDRDs7QUFDRCxnQkFBSVQsT0FBTyxDQUFDVSxVQUFaLEVBQXdCO0FBQ3RCWCxpQkFBRyxDQUFDQyxPQUFKLENBQVlVLFVBQVosR0FBeUJWLE9BQU8sQ0FBQ1UsVUFBakM7QUFDRDs7QUFDRFgsZUFBRyxDQUFDQyxPQUFKLENBQVlXLFFBQVosR0FBdUIsVUFBQ0MsTUFBRCxFQUFTQyxJQUFULEVBQWVDLEtBQWYsRUFBeUI7QUFDOUMsa0JBQUksQ0FBQ0YsTUFBTCxFQUFhO0FBQ1g7QUFDRDs7QUFDRGIsaUJBQUcsQ0FBQ0MsT0FBSixDQUFZZSxXQUFaLEdBQTBCLElBQTFCLENBSjhDLENBSzlDOztBQUNBLGtCQUFJQyxRQUFRLEdBQUcsMkZBQU9ILElBQVYsQ0FBWjs7QUFDQSxrQkFBSSxPQUFPRCxNQUFQLEtBQWtCLFFBQWxCLEtBQStCSSxRQUFRLEtBQUssV0FBYixJQUE0QkEsUUFBUSxLQUFLLFFBQXhFLENBQUosRUFBdUY7QUFDckZGLHFCQUFLLEdBQUdELElBQUksSUFBSSxFQUFoQjtBQUNBQSxvQkFBSSxHQUFHRCxNQUFQO0FBQ0FJLHdCQUFRLEdBQUcsMkZBQU9ILElBQVYsQ0FBUjtBQUNBRCxzQkFBTSxHQUFHLEdBQVQ7QUFDRDs7QUFDRCxrQkFBSUksUUFBUSxLQUFLLFFBQWpCLEVBQTJCO0FBQ3pCSCxvQkFBSSxHQUFHZCxHQUFHLENBQUNrQixNQUFKLENBQVdDLE9BQVgsQ0FBbUJMLElBQW5CLEVBQXlCMUMsS0FBekIsQ0FBK0JnRCxRQUF0QztBQUNELGVBZjZDLENBZ0I5Qzs7O0FBQ0Esa0JBQUksNEJBQTRCQyxJQUE1QixDQUFpQ1AsSUFBakMsQ0FBSixFQUE0QztBQUMxQ2QsbUJBQUcsQ0FBQ0MsT0FBSixDQUFZcUIsSUFBWixDQUFpQjtBQUNmUixzQkFBSSxFQUFKQSxJQURlO0FBRWZDLHVCQUFLLEVBQUxBLEtBRmU7QUFHZkYsd0JBQU0sRUFBTkE7QUFIZSxpQkFBakI7QUFLRCxlQU5ELE1BTU87QUFDTEMsb0JBQUksR0FBR1MsU0FBUyxDQUFDVCxJQUFELEVBQU9DLEtBQVAsQ0FBaEI7O0FBQ0Esb0JBQUk5RSxLQUFKLEVBQW9CLEVBS25COztBQUNELG9CQUFJQSxJQUFKLEVBQW9CO0FBQ2xCO0FBQ0FDLHdCQUFNLENBQUNzRixRQUFQLENBQWdCQyxPQUFoQixDQUF3QlgsSUFBeEIsRUFGa0IsQ0FJbEI7O0FBQ0Esd0JBQU0sSUFBSVksS0FBSixDQUFVLGNBQVYsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixhQXZDRDs7QUF3Q0EsZ0JBQUl6RixLQUFKLEVBQW9CLEVBRW5COztBQUNELGdCQUFJQSxJQUFKLEVBQW9CO0FBQ2xCK0QsaUJBQUcsQ0FBQ0MsT0FBSixDQUFZMEIsU0FBWixHQUF3QnpGLE1BQU0sQ0FBQzBGLFFBQS9CO0FBQ0Q7QUFDRixXQXRFSSxDQXdFTDs7O0FBeEVLO0FBQUEsMENBeUUyQ25DLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLENBQzFERyxZQUFZLENBQUNJLE9BQU8sQ0FBQzdCLEtBQVQsQ0FEOEMsRUFFMUR5QixZQUFZLENBQUNJLE9BQU8sQ0FBQzRCLElBQVQsQ0FGOEMsQ0FBWixDQXpFM0M7O0FBQUE7QUFBQTtBQUFBO0FBeUVFQywwQkF6RUY7QUF5RW9CQyx1QkF6RXBCOztBQThFTCxjQUFJOUIsT0FBTyxDQUFDN0IsS0FBWixFQUFtQjtBQUNqQjRCLGVBQUcsQ0FBQ0MsT0FBSixDQUFZN0IsS0FBWixHQUFvQjBELGdCQUFwQjtBQUNEOztBQUVELGNBQUk3QixPQUFPLENBQUM0QixJQUFaLEVBQWtCO0FBQ2hCN0IsZUFBRyxDQUFDQyxPQUFKLENBQVk0QixJQUFaLEdBQW1CRSxhQUFuQjtBQUNEOztBQUVEL0IsYUFBRyxDQUFDQyxPQUFKLENBQVlxQixJQUFaLEdBQW1CckIsT0FBTyxDQUFDcUIsSUFBM0I7QUFDQXRCLGFBQUcsQ0FBQ0MsT0FBSixDQUFZZSxXQUFaLEdBQTBCLEtBQTFCO0FBQ0FoQixhQUFHLENBQUNDLE9BQUosQ0FBWStCLFFBQVosR0FBdUIsS0FBdkI7QUFDQWhDLGFBQUcsQ0FBQ0MsT0FBSixDQUFZRyxLQUFaLEdBQW9CLEtBQXBCO0FBQ0FKLGFBQUcsQ0FBQ0MsT0FBSixDQUFZZ0MsTUFBWixHQUFxQmpDLEdBQUcsQ0FBQ0MsT0FBSixDQUFZN0IsS0FBWixDQUFrQjZELE1BQWxCLElBQTRCLEVBQWpEO0FBQ0FqQyxhQUFHLENBQUNDLE9BQUosQ0FBWWMsS0FBWixHQUFvQmYsR0FBRyxDQUFDQyxPQUFKLENBQVk3QixLQUFaLENBQWtCMkMsS0FBbEIsSUFBMkIsRUFBL0M7O0FBM0ZLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOEZBLFNBQVNtQixnQkFBVCxDQUEyQjVDLFFBQTNCLEVBQXFDNkMsVUFBckMsRUFBaUQ7QUFDdEQsTUFBSSxDQUFDN0MsUUFBUSxDQUFDOEMsTUFBVixJQUFvQkQsVUFBVSxDQUFDbkIsV0FBL0IsSUFBOENtQixVQUFVLENBQUNILFFBQTdELEVBQXVFO0FBQ3JFLFdBQU92QyxPQUFPLENBQUMwQixPQUFSLEVBQVA7QUFDRDs7QUFDRCxTQUFPa0IsU0FBUyxDQUFDL0MsUUFBUSxDQUFDLENBQUQsQ0FBVCxFQUFjNkMsVUFBZCxDQUFULENBQ0pwRixJQURJLENBQ0MsWUFBTTtBQUNWLFdBQU9tRixnQkFBZ0IsQ0FBQzVDLFFBQVEsQ0FBQ2dELEtBQVQsQ0FBZSxDQUFmLENBQUQsRUFBb0JILFVBQXBCLENBQXZCO0FBQ0QsR0FISSxDQUFQO0FBSUQ7QUFFTSxTQUFTRSxTQUFULENBQW9CbEQsRUFBcEIsRUFBd0JjLE9BQXhCLEVBQWlDO0FBQ3RDLE1BQUluRCxPQUFKOztBQUNBLE1BQUlxQyxFQUFFLENBQUNpRCxNQUFILEtBQWMsQ0FBbEIsRUFBcUI7QUFDbkI7QUFDQXRGLFdBQU8sR0FBRyxJQUFJMkMsT0FBSixDQUFZLFVBQUMwQixPQUFELEVBQWE7QUFDakNoQyxRQUFFLENBQUNjLE9BQUQsRUFBVSxVQUFVc0MsR0FBVixFQUFlOUUsSUFBZixFQUFxQjtBQUMvQixZQUFJOEUsR0FBSixFQUFTO0FBQ1B0QyxpQkFBTyxDQUFDeEQsS0FBUixDQUFjOEYsR0FBZDtBQUNEOztBQUNEOUUsWUFBSSxHQUFHQSxJQUFJLElBQUksRUFBZjtBQUNBMEQsZUFBTyxDQUFDMUQsSUFBRCxDQUFQO0FBQ0QsT0FOQyxDQUFGO0FBT0QsS0FSUyxDQUFWO0FBU0QsR0FYRCxNQVdPO0FBQ0xYLFdBQU8sR0FBR3FDLEVBQUUsQ0FBQ2MsT0FBRCxDQUFaO0FBQ0Q7O0FBRUQsTUFBSW5ELE9BQU8sSUFBSUEsT0FBTyxZQUFZMkMsT0FBOUIsSUFBeUMsT0FBTzNDLE9BQU8sQ0FBQ0MsSUFBZixLQUF3QixVQUFyRSxFQUFpRjtBQUMvRSxXQUFPRCxPQUFQO0FBQ0Q7O0FBQ0QsU0FBTzJDLE9BQU8sQ0FBQzBCLE9BQVIsQ0FBZ0JyRSxPQUFoQixDQUFQO0FBQ0QsQyxDQUVEOztBQUNPLFNBQVMwRixXQUFULENBQXNCakMsSUFBdEIsRUFBNEJrQyxJQUE1QixFQUFrQztBQUN2QyxNQUFJM0IsSUFBSSxHQUFHNEIsU0FBUyxDQUFDeEcsTUFBTSxDQUFDc0YsUUFBUCxDQUFnQm1CLFFBQWpCLENBQXBCOztBQUNBLE1BQUlGLElBQUksS0FBSyxNQUFiLEVBQXFCO0FBQ25CLFdBQU92RyxNQUFNLENBQUNzRixRQUFQLENBQWdCb0IsSUFBaEIsQ0FBcUJuQixPQUFyQixDQUE2QixNQUE3QixFQUFxQyxFQUFyQyxDQUFQO0FBQ0Q7O0FBQ0QsTUFBSWxCLElBQUksSUFBSU8sSUFBSSxDQUFDK0IsT0FBTCxDQUFhdEMsSUFBYixNQUF1QixDQUFuQyxFQUFzQztBQUNwQ08sUUFBSSxHQUFHQSxJQUFJLENBQUN3QixLQUFMLENBQVcvQixJQUFJLENBQUM2QixNQUFoQixDQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxDQUFDdEIsSUFBSSxJQUFJLEdBQVQsSUFBZ0I1RSxNQUFNLENBQUNzRixRQUFQLENBQWdCc0IsTUFBaEMsR0FBeUM1RyxNQUFNLENBQUNzRixRQUFQLENBQWdCb0IsSUFBaEU7QUFDRCxDLENBRUQ7O0FBRUE7Ozs7Ozs7O0FBT08sU0FBU0csT0FBVCxDQUFrQkMsR0FBbEIsRUFBdUIzRixPQUF2QixFQUFnQztBQUNyQyxTQUFPNEYsZ0JBQWdCLENBQUNDLEtBQUssQ0FBQ0YsR0FBRCxFQUFNM0YsT0FBTixDQUFOLEVBQXNCQSxPQUF0QixDQUF2QjtBQUNEO0FBRU0sU0FBUzhGLFlBQVQsQ0FBdUJDLE9BQXZCLEVBQWdDQyxTQUFoQyxFQUEyQztBQUNoRCxNQUFNQyxJQUFJLEdBQUcsRUFBYjs7QUFDQSxNQUFNQyxPQUFPLHFCQUFRSCxPQUFSLE1BQW9CQyxTQUFwQixDQUFiOztBQUNBLE9BQUssSUFBTUcsQ0FBWCxJQUFnQkQsT0FBaEIsRUFBeUI7QUFDdkIsUUFBSUUsTUFBTSxDQUFDTCxPQUFPLENBQUNJLENBQUQsQ0FBUixDQUFOLEtBQXVCQyxNQUFNLENBQUNKLFNBQVMsQ0FBQ0csQ0FBRCxDQUFWLENBQWpDLEVBQWlEO0FBQy9DRixVQUFJLENBQUNFLENBQUQsQ0FBSixHQUFVLElBQVY7QUFDRDtBQUNGOztBQUNELFNBQU9GLElBQVA7QUFDRDtBQUVNLFNBQVNJLGNBQVQsQ0FBeUJuQixHQUF6QixFQUE4QjtBQUNuQyxNQUFJb0IsT0FBSjs7QUFDQSxNQUFJLEVBQUVwQixHQUFHLENBQUNvQixPQUFKLElBQWUsT0FBT3BCLEdBQVAsS0FBZSxRQUFoQyxDQUFKLEVBQStDO0FBQzdDLFFBQUk7QUFDRm9CLGFBQU8sR0FBR0MsSUFBSSxDQUFDQyxTQUFMLENBQWV0QixHQUFmLEVBQW9CLElBQXBCLEVBQTBCLENBQTFCLENBQVY7QUFDRCxLQUZELENBRUUsT0FBT3VCLENBQVAsRUFBVTtBQUNWSCxhQUFPLGNBQU9wQixHQUFHLENBQUN3QixXQUFKLENBQWdCOUYsSUFBdkIsTUFBUDtBQUNEO0FBQ0YsR0FORCxNQU1PO0FBQ0wwRixXQUFPLEdBQUdwQixHQUFHLENBQUNvQixPQUFKLElBQWVwQixHQUF6QjtBQUNEOztBQUNELDJCQUNLQSxHQURMO0FBRUVvQixXQUFPLEVBQVBBLE9BRkY7QUFHRUssY0FBVSxFQUFHekIsR0FBRyxDQUFDeUIsVUFBSixJQUFrQnpCLEdBQUcsQ0FBQzFCLE1BQXRCLElBQWlDMEIsR0FBRyxDQUFDMEIsUUFBSixJQUFnQjFCLEdBQUcsQ0FBQzBCLFFBQUosQ0FBYXBELE1BQTlELElBQXlFO0FBSHhGO0FBS0Q7QUFFRDs7Ozs7O0FBS0EsSUFBTXFELFdBQVcsR0FBRyxJQUFJQyxNQUFKLENBQVcsQ0FDN0I7QUFDQTtBQUNBLFNBSDZCLEVBSTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdHQVY2QixFQVc3QkMsSUFYNkIsQ0FXeEIsR0FYd0IsQ0FBWCxFQVdQLEdBWE8sQ0FBcEI7QUFhQTs7Ozs7Ozs7QUFPQSxTQUFTbEIsS0FBVCxDQUFnQkYsR0FBaEIsRUFBcUIzRixPQUFyQixFQUE4QjtBQUM1QixNQUFNZ0gsTUFBTSxHQUFHLEVBQWY7QUFDQSxNQUFJckYsR0FBRyxHQUFHLENBQVY7QUFDQSxNQUFJSCxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUlpQyxJQUFJLEdBQUcsRUFBWDtBQUNBLE1BQU13RCxnQkFBZ0IsR0FBSWpILE9BQU8sSUFBSUEsT0FBTyxDQUFDa0gsU0FBcEIsSUFBa0MsR0FBM0Q7QUFDQSxNQUFJN0QsR0FBSjs7QUFFQSxTQUFPLENBQUNBLEdBQUcsR0FBR3dELFdBQVcsQ0FBQ00sSUFBWixDQUFpQnhCLEdBQWpCLENBQVAsS0FBaUMsSUFBeEMsRUFBOEM7QUFDNUMsUUFBTWhHLENBQUMsR0FBRzBELEdBQUcsQ0FBQyxDQUFELENBQWI7QUFDQSxRQUFNK0QsT0FBTyxHQUFHL0QsR0FBRyxDQUFDLENBQUQsQ0FBbkI7QUFDQSxRQUFNZ0UsTUFBTSxHQUFHaEUsR0FBRyxDQUFDN0IsS0FBbkI7QUFDQWlDLFFBQUksSUFBSWtDLEdBQUcsQ0FBQ1YsS0FBSixDQUFVekQsS0FBVixFQUFpQjZGLE1BQWpCLENBQVI7QUFDQTdGLFNBQUssR0FBRzZGLE1BQU0sR0FBRzFILENBQUMsQ0FBQ29GLE1BQW5CLENBTDRDLENBTzVDOztBQUNBLFFBQUlxQyxPQUFKLEVBQWE7QUFDWDNELFVBQUksSUFBSTJELE9BQU8sQ0FBQyxDQUFELENBQWY7QUFDQTtBQUNEOztBQUVELFFBQU1uRCxJQUFJLEdBQUcwQixHQUFHLENBQUNuRSxLQUFELENBQWhCO0FBQ0EsUUFBTThGLE1BQU0sR0FBR2pFLEdBQUcsQ0FBQyxDQUFELENBQWxCO0FBQ0EsUUFBTXpDLElBQUksR0FBR3lDLEdBQUcsQ0FBQyxDQUFELENBQWhCO0FBQ0EsUUFBTWtFLE9BQU8sR0FBR2xFLEdBQUcsQ0FBQyxDQUFELENBQW5CO0FBQ0EsUUFBTW1FLEtBQUssR0FBR25FLEdBQUcsQ0FBQyxDQUFELENBQWpCO0FBQ0EsUUFBTW9FLFFBQVEsR0FBR3BFLEdBQUcsQ0FBQyxDQUFELENBQXBCO0FBQ0EsUUFBTXFFLFFBQVEsR0FBR3JFLEdBQUcsQ0FBQyxDQUFELENBQXBCLENBbkI0QyxDQXFCNUM7O0FBQ0EsUUFBSUksSUFBSixFQUFVO0FBQ1J1RCxZQUFNLENBQUMvSCxJQUFQLENBQVl3RSxJQUFaO0FBQ0FBLFVBQUksR0FBRyxFQUFQO0FBQ0Q7O0FBRUQsUUFBTWtFLE9BQU8sR0FBR0wsTUFBTSxJQUFJLElBQVYsSUFBa0JyRCxJQUFJLElBQUksSUFBMUIsSUFBa0NBLElBQUksS0FBS3FELE1BQTNEO0FBQ0EsUUFBTU0sTUFBTSxHQUFHSCxRQUFRLEtBQUssR0FBYixJQUFvQkEsUUFBUSxLQUFLLEdBQWhEO0FBQ0EsUUFBTUksUUFBUSxHQUFHSixRQUFRLEtBQUssR0FBYixJQUFvQkEsUUFBUSxLQUFLLEdBQWxEO0FBQ0EsUUFBTVAsU0FBUyxHQUFHN0QsR0FBRyxDQUFDLENBQUQsQ0FBSCxJQUFVNEQsZ0JBQTVCO0FBQ0EsUUFBTWEsT0FBTyxHQUFHUCxPQUFPLElBQUlDLEtBQTNCO0FBRUFSLFVBQU0sQ0FBQy9ILElBQVAsQ0FBWTtBQUNWMkIsVUFBSSxFQUFFQSxJQUFJLElBQUllLEdBQUcsRUFEUDtBQUVWMkYsWUFBTSxFQUFFQSxNQUFNLElBQUksRUFGUjtBQUdWSixlQUFTLEVBQVRBLFNBSFU7QUFJVlcsY0FBUSxFQUFSQSxRQUpVO0FBS1ZELFlBQU0sRUFBTkEsTUFMVTtBQU1WRCxhQUFPLEVBQVBBLE9BTlU7QUFPVkQsY0FBUSxFQUFFSyxPQUFPLENBQUNMLFFBQUQsQ0FQUDtBQVFWSSxhQUFPLEVBQUVBLE9BQU8sR0FBR0UsV0FBVyxDQUFDRixPQUFELENBQWQsR0FBMkJKLFFBQVEsR0FBRyxJQUFILEdBQVUsT0FBT08sWUFBWSxDQUFDZixTQUFELENBQW5CLEdBQWlDO0FBUnBGLEtBQVo7QUFVRCxHQW5EMkIsQ0FxRDVCOzs7QUFDQSxNQUFJMUYsS0FBSyxHQUFHbUUsR0FBRyxDQUFDWixNQUFoQixFQUF3QjtBQUN0QnRCLFFBQUksSUFBSWtDLEdBQUcsQ0FBQ3VDLE1BQUosQ0FBVzFHLEtBQVgsQ0FBUjtBQUNELEdBeEQyQixDQTBENUI7OztBQUNBLE1BQUlpQyxJQUFKLEVBQVU7QUFDUnVELFVBQU0sQ0FBQy9ILElBQVAsQ0FBWXdFLElBQVo7QUFDRDs7QUFFRCxTQUFPdUQsTUFBUDtBQUNEO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBU21CLHdCQUFULENBQW1DeEMsR0FBbkMsRUFBd0N5QyxZQUF4QyxFQUFzRDtBQUNwRCxNQUFNQyxFQUFFLEdBQUdELFlBQVksR0FBRyxPQUFILEdBQWEsUUFBcEM7QUFDQSxTQUFPRSxTQUFTLENBQUMzQyxHQUFELENBQVQsQ0FBZXZCLE9BQWYsQ0FBdUJpRSxFQUF2QixFQUEyQixVQUFDRSxDQUFELEVBQU87QUFDdkMsV0FBTyxNQUFNQSxDQUFDLENBQUNDLFVBQUYsQ0FBYSxDQUFiLEVBQWdCQyxRQUFoQixDQUF5QixFQUF6QixFQUE2QkMsV0FBN0IsRUFBYjtBQUNELEdBRk0sQ0FBUDtBQUdEO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBU0MsY0FBVCxDQUF5QmhELEdBQXpCLEVBQThCO0FBQzVCLFNBQU93Qyx3QkFBd0IsQ0FBQ3hDLEdBQUQsRUFBTSxJQUFOLENBQS9CO0FBQ0Q7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFTc0MsWUFBVCxDQUF1QnRDLEdBQXZCLEVBQTRCO0FBQzFCLFNBQU9BLEdBQUcsQ0FBQ3ZCLE9BQUosQ0FBWSwyQkFBWixFQUF5QyxNQUF6QyxDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFTNEQsV0FBVCxDQUFzQlIsS0FBdEIsRUFBNkI7QUFDM0IsU0FBT0EsS0FBSyxDQUFDcEQsT0FBTixDQUFjLGNBQWQsRUFBOEIsTUFBOUIsQ0FBUDtBQUNEO0FBRUQ7Ozs7O0FBR0EsU0FBU3dCLGdCQUFULENBQTJCb0IsTUFBM0IsRUFBbUNoSCxPQUFuQyxFQUE0QztBQUMxQztBQUNBLE1BQU1nQixPQUFPLEdBQUcsSUFBSUUsS0FBSixDQUFVOEYsTUFBTSxDQUFDakMsTUFBakIsQ0FBaEIsQ0FGMEMsQ0FJMUM7O0FBQ0EsT0FBSyxJQUFJNkQsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzVCLE1BQU0sQ0FBQ2pDLE1BQTNCLEVBQW1DNkQsQ0FBQyxFQUFwQyxFQUF3QztBQUN0QyxRQUFJLDJGQUFPNUIsTUFBTSxDQUFDNEIsQ0FBRCxDQUFiLE1BQXFCLFFBQXpCLEVBQW1DO0FBQ2pDNUgsYUFBTyxDQUFDNEgsQ0FBRCxDQUFQLEdBQWEsSUFBSTlCLE1BQUosQ0FBVyxTQUFTRSxNQUFNLENBQUM0QixDQUFELENBQU4sQ0FBVWQsT0FBbkIsR0FBNkIsSUFBeEMsRUFBOENlLEtBQUssQ0FBQzdJLE9BQUQsQ0FBbkQsQ0FBYjtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxVQUFVOEksR0FBVixFQUFlQyxJQUFmLEVBQXFCO0FBQzFCLFFBQUl0RixJQUFJLEdBQUcsRUFBWDtBQUNBLFFBQU1yRCxJQUFJLEdBQUcwSSxHQUFHLElBQUksRUFBcEI7QUFDQSxRQUFNOUksT0FBTyxHQUFHK0ksSUFBSSxJQUFJLEVBQXhCO0FBQ0EsUUFBTUMsTUFBTSxHQUFHaEosT0FBTyxDQUFDaUosTUFBUixHQUFpQmQsd0JBQWpCLEdBQTRDZSxrQkFBM0Q7O0FBRUEsU0FBSyxJQUFJTixFQUFDLEdBQUcsQ0FBYixFQUFnQkEsRUFBQyxHQUFHNUIsTUFBTSxDQUFDakMsTUFBM0IsRUFBbUM2RCxFQUFDLEVBQXBDLEVBQXdDO0FBQ3RDLFVBQU1PLEtBQUssR0FBR25DLE1BQU0sQ0FBQzRCLEVBQUQsQ0FBcEI7O0FBRUEsVUFBSSxPQUFPTyxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCMUYsWUFBSSxJQUFJMEYsS0FBUjtBQUVBO0FBQ0Q7O0FBRUQsVUFBTUMsS0FBSyxHQUFHaEosSUFBSSxDQUFDK0ksS0FBSyxDQUFDdkksSUFBTixJQUFjLFdBQWYsQ0FBbEI7QUFDQSxVQUFJeUksT0FBTyxTQUFYOztBQUVBLFVBQUlELEtBQUssSUFBSSxJQUFiLEVBQW1CO0FBQ2pCLFlBQUlELEtBQUssQ0FBQ3RCLFFBQVYsRUFBb0I7QUFDbEI7QUFDQSxjQUFJc0IsS0FBSyxDQUFDeEIsT0FBVixFQUFtQjtBQUNqQmxFLGdCQUFJLElBQUkwRixLQUFLLENBQUM3QixNQUFkO0FBQ0Q7O0FBRUQ7QUFDRCxTQVBELE1BT087QUFDTCxnQkFBTSxJQUFJZ0MsU0FBSixDQUFjLGVBQWVILEtBQUssQ0FBQ3ZJLElBQXJCLEdBQTRCLGlCQUExQyxDQUFOO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJTSxLQUFLLENBQUNxSSxPQUFOLENBQWNILEtBQWQsQ0FBSixFQUEwQjtBQUN4QixZQUFJLENBQUNELEtBQUssQ0FBQ3ZCLE1BQVgsRUFBbUI7QUFDakIsZ0JBQU0sSUFBSTBCLFNBQUosQ0FBYyxlQUFlSCxLQUFLLENBQUN2SSxJQUFyQixHQUE0QixpQ0FBNUIsR0FBZ0UyRixJQUFJLENBQUNDLFNBQUwsQ0FBZTRDLEtBQWYsQ0FBaEUsR0FBd0YsR0FBdEcsQ0FBTjtBQUNEOztBQUVELFlBQUlBLEtBQUssQ0FBQ3JFLE1BQU4sS0FBaUIsQ0FBckIsRUFBd0I7QUFDdEIsY0FBSW9FLEtBQUssQ0FBQ3RCLFFBQVYsRUFBb0I7QUFDbEI7QUFDRCxXQUZELE1BRU87QUFDTCxrQkFBTSxJQUFJeUIsU0FBSixDQUFjLGVBQWVILEtBQUssQ0FBQ3ZJLElBQXJCLEdBQTRCLG1CQUExQyxDQUFOO0FBQ0Q7QUFDRjs7QUFFRCxhQUFLLElBQUk0SSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixLQUFLLENBQUNyRSxNQUExQixFQUFrQ3lFLENBQUMsRUFBbkMsRUFBdUM7QUFDckNILGlCQUFPLEdBQUdMLE1BQU0sQ0FBQ0ksS0FBSyxDQUFDSSxDQUFELENBQU4sQ0FBaEI7O0FBRUEsY0FBSSxDQUFDeEksT0FBTyxDQUFDNEgsRUFBRCxDQUFQLENBQVc1RSxJQUFYLENBQWdCcUYsT0FBaEIsQ0FBTCxFQUErQjtBQUM3QixrQkFBTSxJQUFJQyxTQUFKLENBQWMsbUJBQW1CSCxLQUFLLENBQUN2SSxJQUF6QixHQUFnQyxjQUFoQyxHQUFpRHVJLEtBQUssQ0FBQ3JCLE9BQXZELEdBQWlFLG1CQUFqRSxHQUF1RnZCLElBQUksQ0FBQ0MsU0FBTCxDQUFlNkMsT0FBZixDQUF2RixHQUFpSCxHQUEvSCxDQUFOO0FBQ0Q7O0FBRUQ1RixjQUFJLElBQUksQ0FBQytGLENBQUMsS0FBSyxDQUFOLEdBQVVMLEtBQUssQ0FBQzdCLE1BQWhCLEdBQXlCNkIsS0FBSyxDQUFDakMsU0FBaEMsSUFBNkNtQyxPQUFyRDtBQUNEOztBQUVEO0FBQ0Q7O0FBRURBLGFBQU8sR0FBR0YsS0FBSyxDQUFDekIsUUFBTixHQUFpQmlCLGNBQWMsQ0FBQ1MsS0FBRCxDQUEvQixHQUF5Q0osTUFBTSxDQUFDSSxLQUFELENBQXpEOztBQUVBLFVBQUksQ0FBQ3BJLE9BQU8sQ0FBQzRILEVBQUQsQ0FBUCxDQUFXNUUsSUFBWCxDQUFnQnFGLE9BQWhCLENBQUwsRUFBK0I7QUFDN0IsY0FBTSxJQUFJQyxTQUFKLENBQWMsZUFBZUgsS0FBSyxDQUFDdkksSUFBckIsR0FBNEIsY0FBNUIsR0FBNkN1SSxLQUFLLENBQUNyQixPQUFuRCxHQUE2RCxtQkFBN0QsR0FBbUZ1QixPQUFuRixHQUE2RixHQUEzRyxDQUFOO0FBQ0Q7O0FBRUQ1RixVQUFJLElBQUkwRixLQUFLLENBQUM3QixNQUFOLEdBQWUrQixPQUF2QjtBQUNEOztBQUVELFdBQU81RixJQUFQO0FBQ0QsR0FuRUQ7QUFvRUQ7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFTb0YsS0FBVCxDQUFnQjdJLE9BQWhCLEVBQXlCO0FBQ3ZCLFNBQU9BLE9BQU8sSUFBSUEsT0FBTyxDQUFDeUosU0FBbkIsR0FBK0IsRUFBL0IsR0FBb0MsR0FBM0M7QUFDRDtBQUVEOzs7Ozs7Ozs7QUFPQSxTQUFTdkYsU0FBVCxDQUFvQndGLEdBQXBCLEVBQXlCaEcsS0FBekIsRUFBZ0M7QUFDOUIsTUFBSWlHLFFBQUo7QUFDQSxNQUFNbkksS0FBSyxHQUFHa0ksR0FBRyxDQUFDbEUsT0FBSixDQUFZLEtBQVosQ0FBZDs7QUFDQSxNQUFJaEUsS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQjtBQUNoQm1JLFlBQVEsR0FBR0QsR0FBRyxDQUFDRSxTQUFKLENBQWMsQ0FBZCxFQUFpQnBJLEtBQWpCLENBQVg7QUFDQWtJLE9BQUcsR0FBR0EsR0FBRyxDQUFDRSxTQUFKLENBQWNwSSxLQUFLLEdBQUcsQ0FBdEIsQ0FBTjtBQUNELEdBSEQsTUFHTyxJQUFJa0ksR0FBRyxDQUFDRyxVQUFKLENBQWUsSUFBZixDQUFKLEVBQTBCO0FBQy9CSCxPQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsU0FBSixDQUFjLENBQWQsQ0FBTjtBQUNEOztBQUVELE1BQUlFLEtBQUssR0FBR0osR0FBRyxDQUFDSyxLQUFKLENBQVUsR0FBVixDQUFaO0FBQ0EsTUFBSUMsTUFBTSxHQUFHLENBQUNMLFFBQVEsR0FBR0EsUUFBUSxHQUFHLEtBQWQsR0FBc0IsSUFBL0IsSUFBdUNHLEtBQUssQ0FBQ0csS0FBTixFQUFwRDtBQUVBLE1BQUl4RyxJQUFJLEdBQUdxRyxLQUFLLENBQUNJLE1BQU4sQ0FBYW5DLE9BQWIsRUFBc0JoQixJQUF0QixDQUEyQixHQUEzQixDQUFYO0FBQ0EsTUFBSXhCLElBQUo7QUFDQXVFLE9BQUssR0FBR3JHLElBQUksQ0FBQ3NHLEtBQUwsQ0FBVyxHQUFYLENBQVI7O0FBQ0EsTUFBSUQsS0FBSyxDQUFDL0UsTUFBTixLQUFpQixDQUFyQixFQUF3QjtBQUFBLGlCQUNQK0UsS0FETzs7QUFBQTs7QUFDckJyRyxRQURxQjtBQUNmOEIsUUFEZTtBQUV2Qjs7QUFFRHlFLFFBQU0sSUFBSXZHLElBQUksR0FBRyxNQUFNQSxJQUFULEdBQWdCLEVBQTlCOztBQUVBLE1BQUlDLEtBQUssSUFBSTZDLElBQUksQ0FBQ0MsU0FBTCxDQUFlOUMsS0FBZixNQUEwQixJQUF2QyxFQUE2QztBQUMzQ3NHLFVBQU0sSUFBSSxDQUFDTixHQUFHLENBQUNLLEtBQUosQ0FBVSxHQUFWLEVBQWVoRixNQUFmLEtBQTBCLENBQTFCLEdBQThCLEdBQTlCLEdBQW9DLEdBQXJDLElBQTRDb0YsV0FBVyxDQUFDekcsS0FBRCxDQUFqRTtBQUNEOztBQUNEc0csUUFBTSxJQUFJekUsSUFBSSxHQUFHLE1BQU1BLElBQVQsR0FBZ0IsRUFBOUI7QUFFQSxTQUFPeUUsTUFBUDtBQUNEO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBU0csV0FBVCxDQUFzQnpHLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU9qQyxNQUFNLENBQUNDLElBQVAsQ0FBWWdDLEtBQVosRUFBbUIwRyxJQUFuQixHQUEwQjdJLEdBQTFCLENBQThCLFVBQUNJLEdBQUQsRUFBUztBQUM1QyxRQUFNMEksR0FBRyxHQUFHM0csS0FBSyxDQUFDL0IsR0FBRCxDQUFqQjs7QUFDQSxRQUFJMEksR0FBRyxJQUFJLElBQVgsRUFBaUI7QUFDZixhQUFPLEVBQVA7QUFDRDs7QUFDRCxRQUFJbkosS0FBSyxDQUFDcUksT0FBTixDQUFjYyxHQUFkLENBQUosRUFBd0I7QUFDdEIsYUFBT0EsR0FBRyxDQUFDcEYsS0FBSixHQUFZMUQsR0FBWixDQUFnQixVQUFBK0ksSUFBSTtBQUFBLGVBQUksQ0FBQzNJLEdBQUQsRUFBTSxHQUFOLEVBQVcySSxJQUFYLEVBQWlCdkQsSUFBakIsQ0FBc0IsRUFBdEIsQ0FBSjtBQUFBLE9BQXBCLEVBQW1EQSxJQUFuRCxDQUF3RCxHQUF4RCxDQUFQO0FBQ0Q7O0FBQ0QsV0FBT3BGLEdBQUcsR0FBRyxHQUFOLEdBQVkwSSxHQUFuQjtBQUNELEdBVE0sRUFTSkgsTUFUSSxDQVNHbkMsT0FUSCxFQVNZaEIsSUFUWixDQVNpQixHQVRqQixDQUFQO0FBVUQiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuXG4vLyB3aW5kb3cue3tnbG9iYWxzLmxvYWRlZENhbGxiYWNrfX0gaG9va1xuLy8gVXNlZnVsIGZvciBqc2RvbSB0ZXN0aW5nIG9yIHBsdWdpbnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20jZGVhbGluZy13aXRoLWFzeW5jaHJvbm91cy1zY3JpcHQtbG9hZGluZylcbmlmIChwcm9jZXNzLmNsaWVudCkge1xuICB3aW5kb3cub25OdXh0UmVhZHlDYnMgPSBbXVxuICB3aW5kb3cub25OdXh0UmVhZHkgPSAoY2IpID0+IHtcbiAgICB3aW5kb3cub25OdXh0UmVhZHlDYnMucHVzaChjYilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHkgKCkge31cblxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JhbEhhbmRsZUVycm9yIChlcnJvcikge1xuICBpZiAoVnVlLmNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICBWdWUuY29uZmlnLmVycm9ySGFuZGxlcihlcnJvcilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJvcERlZmF1bHQgKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UudGhlbihtID0+IG0uZGVmYXVsdCB8fCBtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBc3luY0RhdGEgKENvbXBvbmVudCwgYXN5bmNEYXRhKSB7XG4gIGlmIChcbiAgICAvLyBGb3IgU1NSLCB3ZSBvbmNlIGFsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgc2Vjb25kIHBhcmFtIHRvIGp1c3QgYXBwbHkgYXN5bmNEYXRhXG4gICAgLy8gUHJldmVudCBkb2luZyB0aGlzIGZvciBlYWNoIFNTUiByZXF1ZXN0XG4gICAgIWFzeW5jRGF0YSAmJiBDb21wb25lbnQub3B0aW9ucy5fX2hhc051eHREYXRhXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgQ29tcG9uZW50RGF0YSA9IENvbXBvbmVudC5vcHRpb25zLl9vcmlnaW5EYXRhRm4gfHwgQ29tcG9uZW50Lm9wdGlvbnMuZGF0YSB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB7fSB9XG4gIENvbXBvbmVudC5vcHRpb25zLl9vcmlnaW5EYXRhRm4gPSBDb21wb25lbnREYXRhXG5cbiAgQ29tcG9uZW50Lm9wdGlvbnMuZGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkYXRhID0gQ29tcG9uZW50RGF0YS5jYWxsKHRoaXMsIHRoaXMpXG4gICAgaWYgKHRoaXMuJHNzckNvbnRleHQpIHtcbiAgICAgIGFzeW5jRGF0YSA9IHRoaXMuJHNzckNvbnRleHQuYXN5bmNEYXRhW0NvbXBvbmVudC5jaWRdXG4gICAgfVxuICAgIHJldHVybiB7IC4uLmRhdGEsIC4uLmFzeW5jRGF0YSB9XG4gIH1cblxuICBDb21wb25lbnQub3B0aW9ucy5fX2hhc051eHREYXRhID0gdHJ1ZVxuXG4gIGlmIChDb21wb25lbnQuX0N0b3IgJiYgQ29tcG9uZW50Ll9DdG9yLm9wdGlvbnMpIHtcbiAgICBDb21wb25lbnQuX0N0b3Iub3B0aW9ucy5kYXRhID0gQ29tcG9uZW50Lm9wdGlvbnMuZGF0YVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNvbXBvbmVudCAoQ29tcG9uZW50KSB7XG4gIC8vIElmIENvbXBvbmVudCBhbHJlYWR5IHNhbml0aXplZFxuICBpZiAoQ29tcG9uZW50Lm9wdGlvbnMgJiYgQ29tcG9uZW50Ll9DdG9yID09PSBDb21wb25lbnQpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50XG4gIH1cbiAgaWYgKCFDb21wb25lbnQub3B0aW9ucykge1xuICAgIENvbXBvbmVudCA9IFZ1ZS5leHRlbmQoQ29tcG9uZW50KSAvLyBmaXggaXNzdWUgIzZcbiAgICBDb21wb25lbnQuX0N0b3IgPSBDb21wb25lbnRcbiAgfSBlbHNlIHtcbiAgICBDb21wb25lbnQuX0N0b3IgPSBDb21wb25lbnRcbiAgICBDb21wb25lbnQuZXh0ZW5kT3B0aW9ucyA9IENvbXBvbmVudC5vcHRpb25zXG4gIH1cbiAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlXG4gIGlmICghQ29tcG9uZW50Lm9wdGlvbnMubmFtZSAmJiBDb21wb25lbnQub3B0aW9ucy5fX2ZpbGUpIHtcbiAgICBDb21wb25lbnQub3B0aW9ucy5uYW1lID0gQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlXG4gIH1cbiAgcmV0dXJuIENvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hlZENvbXBvbmVudHMgKHJvdXRlLCBtYXRjaGVzID0gZmFsc2UsIHByb3AgPSAnY29tcG9uZW50cycpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIHJvdXRlLm1hdGNoZWQubWFwKChtLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtW3Byb3BdKS5tYXAoKGtleSkgPT4ge1xuICAgICAgbWF0Y2hlcyAmJiBtYXRjaGVzLnB1c2goaW5kZXgpXG4gICAgICByZXR1cm4gbVtwcm9wXVtrZXldXG4gICAgfSlcbiAgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXRjaGVkQ29tcG9uZW50c0luc3RhbmNlcyAocm91dGUsIG1hdGNoZXMgPSBmYWxzZSkge1xuICByZXR1cm4gZ2V0TWF0Y2hlZENvbXBvbmVudHMocm91dGUsIG1hdGNoZXMsICdpbnN0YW5jZXMnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdE1hcENvbXBvbmVudHMgKHJvdXRlLCBmbikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgcm91dGUubWF0Y2hlZC5tYXAoKG0sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykucmVkdWNlKChwcm9taXNlcywga2V5KSA9PiB7XG4gICAgICBpZiAobS5jb21wb25lbnRzW2tleV0pIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChmbihtLmNvbXBvbmVudHNba2V5XSwgbS5pbnN0YW5jZXNba2V5XSwgbSwga2V5LCBpbmRleCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgbS5jb21wb25lbnRzW2tleV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9taXNlc1xuICAgIH0sIFtdKVxuICB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSb3V0ZUNvbXBvbmVudHMgKHJvdXRlLCBmbikge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgZmxhdE1hcENvbXBvbmVudHMocm91dGUsIGFzeW5jIChDb21wb25lbnQsIGluc3RhbmNlLCBtYXRjaCwga2V5KSA9PiB7XG4gICAgICAvLyBJZiBjb21wb25lbnQgaXMgYSBmdW5jdGlvbiwgcmVzb2x2ZSBpdFxuICAgICAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgIUNvbXBvbmVudC5vcHRpb25zKSB7XG4gICAgICAgIENvbXBvbmVudCA9IGF3YWl0IENvbXBvbmVudCgpXG4gICAgICB9XG4gICAgICBtYXRjaC5jb21wb25lbnRzW2tleV0gPSBDb21wb25lbnQgPSBzYW5pdGl6ZUNvbXBvbmVudChDb21wb25lbnQpXG4gICAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gZm4oQ29tcG9uZW50LCBpbnN0YW5jZSwgbWF0Y2gsIGtleSkgOiBDb21wb25lbnRcbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSb3V0ZURhdGEgKHJvdXRlKSB7XG4gIGlmICghcm91dGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGNvbXBvbmVudHMgYXJlIHJlc29sdmVkIChjb2RlLXNwbGl0dGluZylcbiAgYXdhaXQgcmVzb2x2ZVJvdXRlQ29tcG9uZW50cyhyb3V0ZSlcbiAgLy8gU2VuZCBiYWNrIGEgY29weSBvZiByb3V0ZSB3aXRoIG1ldGEgYmFzZWQgb24gQ29tcG9uZW50IGRlZmluaXRpb25cbiAgcmV0dXJuIHtcbiAgICAuLi5yb3V0ZSxcbiAgICBtZXRhOiBnZXRNYXRjaGVkQ29tcG9uZW50cyhyb3V0ZSkubWFwKChDb21wb25lbnQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5Db21wb25lbnQub3B0aW9ucy5tZXRhLCAuLi4ocm91dGUubWF0Y2hlZFtpbmRleF0gfHwge30pLm1ldGEgfVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKGFwcCwgY29udGV4dCkge1xuICAvLyBJZiBjb250ZXh0IG5vdCBkZWZpbmVkLCBjcmVhdGUgaXRcbiAgaWYgKCFhcHAuY29udGV4dCkge1xuICAgIGFwcC5jb250ZXh0ID0ge1xuICAgICAgaXNTdGF0aWM6IHByb2Nlc3Muc3RhdGljLFxuICAgICAgaXNEZXY6IGZhbHNlLFxuICAgICAgaXNITVI6IGZhbHNlLFxuICAgICAgYXBwLFxuICAgICAgc3RvcmU6IGFwcC5zdG9yZSxcbiAgICAgIHBheWxvYWQ6IGNvbnRleHQucGF5bG9hZCxcbiAgICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgICAgYmFzZTogJy8nLFxuICAgICAgZW52OiB7fVxuICAgIH1cbiAgICAvLyBPbmx5IHNldCBvbmNlXG4gICAgaWYgKGNvbnRleHQucmVxKSB7XG4gICAgICBhcHAuY29udGV4dC5yZXEgPSBjb250ZXh0LnJlcVxuICAgIH1cbiAgICBpZiAoY29udGV4dC5yZXMpIHtcbiAgICAgIGFwcC5jb250ZXh0LnJlcyA9IGNvbnRleHQucmVzXG4gICAgfVxuICAgIGlmIChjb250ZXh0LnNzckNvbnRleHQpIHtcbiAgICAgIGFwcC5jb250ZXh0LnNzckNvbnRleHQgPSBjb250ZXh0LnNzckNvbnRleHRcbiAgICB9XG4gICAgYXBwLmNvbnRleHQucmVkaXJlY3QgPSAoc3RhdHVzLCBwYXRoLCBxdWVyeSkgPT4ge1xuICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBhcHAuY29udGV4dC5fcmVkaXJlY3RlZCA9IHRydWVcbiAgICAgIC8vIGlmIG9ubHkgMSBvciAyIGFyZ3VtZW50czogcmVkaXJlY3QoJy8nKSBvciByZWRpcmVjdCgnLycsIHsgZm9vOiAnYmFyJyB9KVxuICAgICAgbGV0IHBhdGhUeXBlID0gdHlwZW9mIHBhdGhcbiAgICAgIGlmICh0eXBlb2Ygc3RhdHVzICE9PSAnbnVtYmVyJyAmJiAocGF0aFR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHBhdGhUeXBlID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgcXVlcnkgPSBwYXRoIHx8IHt9XG4gICAgICAgIHBhdGggPSBzdGF0dXNcbiAgICAgICAgcGF0aFR5cGUgPSB0eXBlb2YgcGF0aFxuICAgICAgICBzdGF0dXMgPSAzMDJcbiAgICAgIH1cbiAgICAgIGlmIChwYXRoVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcGF0aCA9IGFwcC5yb3V0ZXIucmVzb2x2ZShwYXRoKS5yb3V0ZS5mdWxsUGF0aFxuICAgICAgfVxuICAgICAgLy8gXCIvYWJzb2x1dGUvcm91dGVcIiwgXCIuL3JlbGF0aXZlL3JvdXRlXCIgb3IgXCIuLi9yZWxhdGl2ZS9yb3V0ZVwiXG4gICAgICBpZiAoLyheWy5dezEsMn1cXC8pfCheXFwvKD8hXFwvKSkvLnRlc3QocGF0aCkpIHtcbiAgICAgICAgYXBwLmNvbnRleHQubmV4dCh7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICBzdGF0dXNcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGggPSBmb3JtYXRVcmwocGF0aCwgcXVlcnkpXG4gICAgICAgIGlmIChwcm9jZXNzLnNlcnZlcikge1xuICAgICAgICAgIGFwcC5jb250ZXh0Lm5leHQoe1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHN0YXR1c1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuY2xpZW50KSB7XG4gICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0xvY2F0aW9uL3JlcGxhY2VcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShwYXRoKVxuXG4gICAgICAgICAgLy8gVGhyb3cgYSByZWRpcmVjdCBlcnJvclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRVJSX1JFRElSRUNUJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5zZXJ2ZXIpIHtcbiAgICAgIGFwcC5jb250ZXh0LmJlZm9yZU51eHRSZW5kZXIgPSBmbiA9PiBjb250ZXh0LmJlZm9yZVJlbmRlckZucy5wdXNoKGZuKVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5jbGllbnQpIHtcbiAgICAgIGFwcC5jb250ZXh0Lm51eHRTdGF0ZSA9IHdpbmRvdy5fX05VWFRfX1xuICAgIH1cbiAgfVxuXG4gIC8vIER5bmFtaWMga2V5c1xuICBjb25zdCBbY3VycmVudFJvdXRlRGF0YSwgZnJvbVJvdXRlRGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0Um91dGVEYXRhKGNvbnRleHQucm91dGUpLFxuICAgIGdldFJvdXRlRGF0YShjb250ZXh0LmZyb20pXG4gIF0pXG5cbiAgaWYgKGNvbnRleHQucm91dGUpIHtcbiAgICBhcHAuY29udGV4dC5yb3V0ZSA9IGN1cnJlbnRSb3V0ZURhdGFcbiAgfVxuXG4gIGlmIChjb250ZXh0LmZyb20pIHtcbiAgICBhcHAuY29udGV4dC5mcm9tID0gZnJvbVJvdXRlRGF0YVxuICB9XG5cbiAgYXBwLmNvbnRleHQubmV4dCA9IGNvbnRleHQubmV4dFxuICBhcHAuY29udGV4dC5fcmVkaXJlY3RlZCA9IGZhbHNlXG4gIGFwcC5jb250ZXh0Ll9lcnJvcmVkID0gZmFsc2VcbiAgYXBwLmNvbnRleHQuaXNITVIgPSBmYWxzZVxuICBhcHAuY29udGV4dC5wYXJhbXMgPSBhcHAuY29udGV4dC5yb3V0ZS5wYXJhbXMgfHwge31cbiAgYXBwLmNvbnRleHQucXVlcnkgPSBhcHAuY29udGV4dC5yb3V0ZS5xdWVyeSB8fCB7fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZVNlcmllcyAocHJvbWlzZXMsIGFwcENvbnRleHQpIHtcbiAgaWYgKCFwcm9taXNlcy5sZW5ndGggfHwgYXBwQ29udGV4dC5fcmVkaXJlY3RlZCB8fCBhcHBDb250ZXh0Ll9lcnJvcmVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cbiAgcmV0dXJuIHByb21pc2lmeShwcm9taXNlc1swXSwgYXBwQ29udGV4dClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbWlkZGxld2FyZVNlcmllcyhwcm9taXNlcy5zbGljZSgxKSwgYXBwQ29udGV4dClcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzaWZ5IChmbiwgY29udGV4dCkge1xuICBsZXQgcHJvbWlzZVxuICBpZiAoZm4ubGVuZ3RoID09PSAyKSB7XG4gICAgLy8gZm4oY29udGV4dCwgY2FsbGJhY2spXG4gICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBmbihjb250ZXh0LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb250ZXh0LmVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gZGF0YSB8fCB7fVxuICAgICAgICByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgcHJvbWlzZSA9IGZuKGNvbnRleHQpXG4gIH1cblxuICBpZiAocHJvbWlzZSAmJiBwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSAmJiB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb21pc2UpXG59XG5cbi8vIEltcG9ydGVkIGZyb20gdnVlLXJvdXRlclxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2F0aW9uIChiYXNlLCBtb2RlKSB7XG4gIGxldCBwYXRoID0gZGVjb2RlVVJJKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgaWYgKG1vZGUgPT09ICdoYXNoJykge1xuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKC9eI1xcLy8sICcnKVxuICB9XG4gIGlmIChiYXNlICYmIHBhdGguaW5kZXhPZihiYXNlKSA9PT0gMCkge1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKGJhc2UubGVuZ3RoKVxuICB9XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoXG59XG5cbi8vIEltcG9ydGVkIGZyb20gcGF0aC10by1yZWdleHBcblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFmdW5jdGlvbihPYmplY3Q9LCBPYmplY3Q9KX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlEaWZmICh0b1F1ZXJ5LCBmcm9tUXVlcnkpIHtcbiAgY29uc3QgZGlmZiA9IHt9XG4gIGNvbnN0IHF1ZXJpZXMgPSB7IC4uLnRvUXVlcnksIC4uLmZyb21RdWVyeSB9XG4gIGZvciAoY29uc3QgayBpbiBxdWVyaWVzKSB7XG4gICAgaWYgKFN0cmluZyh0b1F1ZXJ5W2tdKSAhPT0gU3RyaW5nKGZyb21RdWVyeVtrXSkpIHtcbiAgICAgIGRpZmZba10gPSB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBkaWZmXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFcnJvciAoZXJyKSB7XG4gIGxldCBtZXNzYWdlXG4gIGlmICghKGVyci5tZXNzYWdlIHx8IHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSkge1xuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoZXJyLCBudWxsLCAyKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG1lc3NhZ2UgPSBgWyR7ZXJyLmNvbnN0cnVjdG9yLm5hbWV9XWBcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IGVyci5tZXNzYWdlIHx8IGVyclxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZXJyLFxuICAgIG1lc3NhZ2UsXG4gICAgc3RhdHVzQ29kZTogKGVyci5zdGF0dXNDb2RlIHx8IGVyci5zdGF0dXMgfHwgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzKSB8fCA1MDApXG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbmNvbnN0IFBBVEhfUkVHRVhQID0gbmV3IFJlZ0V4cChbXG4gIC8vIE1hdGNoIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBhcHBlYXIgaW4gZnV0dXJlIG1hdGNoZXMuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCB3b24ndCB0cmFuc2Zvcm0uXG4gICcoXFxcXFxcXFwuKScsXG4gIC8vIE1hdGNoIEV4cHJlc3Mtc3R5bGUgcGFyYW1ldGVycyBhbmQgdW4tbmFtZWQgcGFyYW1ldGVycyB3aXRoIGEgcHJlZml4XG4gIC8vIGFuZCBvcHRpb25hbCBzdWZmaXhlcy4gTWF0Y2hlcyBhcHBlYXIgYXM6XG4gIC8vXG4gIC8vIFwiLzp0ZXN0KFxcXFxkKyk/XCIgPT4gW1wiL1wiLCBcInRlc3RcIiwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgXCI/XCIsIHVuZGVmaW5lZF1cbiAgLy8gXCIvcm91dGUoXFxcXGQrKVwiICA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAvLyBcIi8qXCIgICAgICAgICAgICA9PiBbXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCIqXCJdXG4gICcoW1xcXFwvLl0pPyg/Oig/OlxcXFw6KFxcXFx3KykoPzpcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKT98XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gb3B0aW9uc1xuICogQHJldHVybiB7IUFycmF5fVxuICovXG5mdW5jdGlvbiBwYXJzZSAoc3RyLCBvcHRpb25zKSB7XG4gIGNvbnN0IHRva2VucyA9IFtdXG4gIGxldCBrZXkgPSAwXG4gIGxldCBpbmRleCA9IDBcbiAgbGV0IHBhdGggPSAnJ1xuICBjb25zdCBkZWZhdWx0RGVsaW1pdGVyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIpIHx8ICcvJ1xuICBsZXQgcmVzXG5cbiAgd2hpbGUgKChyZXMgPSBQQVRIX1JFR0VYUC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICBjb25zdCBtID0gcmVzWzBdXG4gICAgY29uc3QgZXNjYXBlZCA9IHJlc1sxXVxuICAgIGNvbnN0IG9mZnNldCA9IHJlcy5pbmRleFxuICAgIHBhdGggKz0gc3RyLnNsaWNlKGluZGV4LCBvZmZzZXQpXG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aFxuXG4gICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHBhdGggKz0gZXNjYXBlZFsxXVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0ID0gc3RyW2luZGV4XVxuICAgIGNvbnN0IHByZWZpeCA9IHJlc1syXVxuICAgIGNvbnN0IG5hbWUgPSByZXNbM11cbiAgICBjb25zdCBjYXB0dXJlID0gcmVzWzRdXG4gICAgY29uc3QgZ3JvdXAgPSByZXNbNV1cbiAgICBjb25zdCBtb2RpZmllciA9IHJlc1s2XVxuICAgIGNvbnN0IGFzdGVyaXNrID0gcmVzWzddXG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKVxuICAgICAgcGF0aCA9ICcnXG4gICAgfVxuXG4gICAgY29uc3QgcGFydGlhbCA9IHByZWZpeCAhPSBudWxsICYmIG5leHQgIT0gbnVsbCAmJiBuZXh0ICE9PSBwcmVmaXhcbiAgICBjb25zdCByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKidcbiAgICBjb25zdCBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIGNvbnN0IGRlbGltaXRlciA9IHJlc1syXSB8fCBkZWZhdWx0RGVsaW1pdGVyXG4gICAgY29uc3QgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXBcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9wdGlvbmFsLFxuICAgICAgcmVwZWF0LFxuICAgICAgcGFydGlhbCxcbiAgICAgIGFzdGVyaXNrOiBCb29sZWFuKGFzdGVyaXNrKSxcbiAgICAgIHBhdHRlcm46IHBhdHRlcm4gPyBlc2NhcGVHcm91cChwYXR0ZXJuKSA6IChhc3RlcmlzayA/ICcuKicgOiAnW14nICsgZXNjYXBlU3RyaW5nKGRlbGltaXRlcikgKyAnXSs/JylcbiAgICB9KVxuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KVxuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIsIHNsYXNoQWxsb3dlZCkge1xuICBjb25zdCByZSA9IHNsYXNoQWxsb3dlZCA/IC9bPyNdL2cgOiAvWy8/I10vZ1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZShyZSwgKGMpID0+IHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudFByZXR0eShzdHIsIHRydWUpXG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18L1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JC8oKV0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uICh0b2tlbnMsIG9wdGlvbnMpIHtcbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHRva2VucyBpbnRvIHJlZ2V4cHMuXG4gIGNvbnN0IG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14oPzonICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnKSQnLCBmbGFncyhvcHRpb25zKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIGxldCBwYXRoID0gJydcbiAgICBjb25zdCBkYXRhID0gb2JqIHx8IHt9XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdHMgfHwge31cbiAgICBjb25zdCBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhdGggKz0gdG9rZW5cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZSB8fCAncGF0aE1hdGNoJ11cbiAgICAgIGxldCBzZWdtZW50XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIC8vIFByZXBlbmQgcGFydGlhbCBzZWdtZW50IHByZWZpeGVzLlxuICAgICAgICAgIGlmICh0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgICBwYXRoICs9IHRva2VuLnByZWZpeFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICdgJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IGVuY29kZSh2YWx1ZVtqXSlcblxuICAgICAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeShzZWdtZW50KSArICdgJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoICs9IChqID09PSAwID8gdG9rZW4ucHJlZml4IDogdG9rZW4uZGVsaW1pdGVyKSArIHNlZ21lbnRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQgPSB0b2tlbi5hc3RlcmlzayA/IGVuY29kZUFzdGVyaXNrKHZhbHVlKSA6IGVuY29kZSh2YWx1ZSlcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudFxuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZsYWdzIGZvciBhIHJlZ2V4cCBmcm9tIHRoZSBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmbGFncyAob3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLnNlbnNpdGl2ZSA/ICcnIDogJ2knXG59XG5cbi8qKlxuICogRm9ybWF0IGdpdmVuIHVybCwgYXBwZW5kIHF1ZXJ5IHRvIHVybCBxdWVyeSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHVybFxuICogQHBhcmFtICB7c3RyaW5nfSBxdWVyeVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRVcmwgKHVybCwgcXVlcnkpIHtcbiAgbGV0IHByb3RvY29sXG4gIGNvbnN0IGluZGV4ID0gdXJsLmluZGV4T2YoJzovLycpXG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBwcm90b2NvbCA9IHVybC5zdWJzdHJpbmcoMCwgaW5kZXgpXG4gICAgdXJsID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDMpXG4gIH0gZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDIpXG4gIH1cblxuICBsZXQgcGFydHMgPSB1cmwuc3BsaXQoJy8nKVxuICBsZXQgcmVzdWx0ID0gKHByb3RvY29sID8gcHJvdG9jb2wgKyAnOi8vJyA6ICcvLycpICsgcGFydHMuc2hpZnQoKVxuXG4gIGxldCBwYXRoID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKVxuICBsZXQgaGFzaFxuICBwYXJ0cyA9IHBhdGguc3BsaXQoJyMnKVxuICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgW3BhdGgsIGhhc2hdID0gcGFydHNcbiAgfVxuXG4gIHJlc3VsdCArPSBwYXRoID8gJy8nICsgcGF0aCA6ICcnXG5cbiAgaWYgKHF1ZXJ5ICYmIEpTT04uc3RyaW5naWZ5KHF1ZXJ5KSAhPT0gJ3t9Jykge1xuICAgIHJlc3VsdCArPSAodXJsLnNwbGl0KCc/JykubGVuZ3RoID09PSAyID8gJyYnIDogJz8nKSArIGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICB9XG4gIHJlc3VsdCArPSBoYXNoID8gJyMnICsgaGFzaCA6ICcnXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBkYXRhIG9iamVjdCB0byBxdWVyeSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gIHtvYmplY3R9IHF1ZXJ5XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFF1ZXJ5IChxdWVyeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocXVlcnkpLnNvcnQoKS5tYXAoKGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IHF1ZXJ5W2tleV1cbiAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsLnNsaWNlKCkubWFwKHZhbDIgPT4gW2tleSwgJz0nLCB2YWwyXS5qb2luKCcnKSkuam9pbignJicpXG4gICAgfVxuICAgIHJldHVybiBrZXkgKyAnPScgKyB2YWxcbiAgfSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyYnKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n")},144:function(Q,B,F){Q.exports=F(145)},145:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(47);\n/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(95);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(62);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(45);\n/* harmony import */ var core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(58);\n/* harmony import */ var core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(22);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(28);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(113);\n/* harmony import */ var core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_iterator__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_es6_promise__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(154);\n/* harmony import */ var core_js_modules_es6_promise__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_promise__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_es6_object_assign__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(159);\n/* harmony import */ var core_js_modules_es6_object_assign__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_assign__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_es7_promise_finally__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(161);\n/* harmony import */ var core_js_modules_es7_promise_finally__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_promise_finally__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(0);\n/* harmony import */ var unfetch__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(130);\n/* harmony import */ var _middleware_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(89);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(1);\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(27);\n/* harmony import */ var _components_nuxt_link_client_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(77);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // should be included after ./index.js\n// Component: \n\nvue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].component(_components_nuxt_link_client_js__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].name, _components_nuxt_link_client_js__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"]);\nvue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].component(\'NLink\', _components_nuxt_link_client_js__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"]);\n\nif (!global.fetch) {\n global.fetch = unfetch__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"];\n} // Global shared references\n\n\nvar _lastPaths = [];\nvar app;\nvar router;\nvar store; // Try to rehydrate SSR data from window\n\nvar NUXT = window.__NUXT__ || {};\nObject.assign(vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].config, {\n "silent": true,\n "performance": false\n});\nvar errorHandler = vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].config.errorHandler || console.error; // Create and mount App\n\nObject(_index_js__WEBPACK_IMPORTED_MODULE_20__[/* createApp */ "b"])().then(mountApp).catch(errorHandler);\n\nfunction componentOption(component, key) {\n if (!component || !component.options || !component.options[key]) {\n return {};\n }\n\n var option = component.options[key];\n\n if (typeof option === \'function\') {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n return option.apply(void 0, args);\n }\n\n return option;\n}\n\nfunction mapTransitions(Components, to, from) {\n var componentTransitions = function componentTransitions(component) {\n var transition = componentOption(component, \'transition\', to, from) || {};\n return typeof transition === \'string\' ? {\n name: transition\n } : transition;\n };\n\n return Components.map(function (Component) {\n // Clone original object to prevent overrides\n var transitions = Object.assign({}, componentTransitions(Component)); // Combine transitions & prefer `leave` transitions of \'from\' route\n\n if (from && from.matched.length && from.matched[0].components.default) {\n var fromTransitions = componentTransitions(from.matched[0].components.default);\n Object.keys(fromTransitions).filter(function (key) {\n return fromTransitions[key] && key.toLowerCase().includes(\'leave\');\n }).forEach(function (key) {\n transitions[key] = fromTransitions[key];\n });\n }\n\n return transitions;\n });\n}\n\nfunction loadAsyncComponents(to, from, next) {\n var _this = this;\n\n var Components, startLoader, err, statusCode, message;\n return regeneratorRuntime.async(function loadAsyncComponents$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // Check if route path changed (this._pathChanged), only if the page is not an error (for validate())\n this._pathChanged = Boolean(app.nuxt.err) || from.path !== to.path;\n this._queryChanged = JSON.stringify(to.query) !== JSON.stringify(from.query);\n this._diffQuery = this._queryChanged ? Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getQueryDiff */ "g"])(to.query, from.query) : [];\n\n if (this._pathChanged && this.$loading.start && !this.$loading.manual) {\n this.$loading.start();\n }\n\n _context.prev = 4;\n\n if (!(!this._pathChanged && this._queryChanged)) {\n _context.next = 11;\n break;\n }\n\n _context.next = 8;\n return regeneratorRuntime.awrap(Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* resolveRouteComponents */ "n"])(to, function (Component, instance) {\n return {\n Component: Component,\n instance: instance\n };\n }));\n\n case 8:\n Components = _context.sent;\n // Add a marker on each component that it needs to refresh or not\n startLoader = Components.some(function (_ref) {\n var Component = _ref.Component,\n instance = _ref.instance;\n var watchQuery = Component.options.watchQuery;\n\n if (watchQuery === true) {\n return true;\n }\n\n if (Array.isArray(watchQuery)) {\n return watchQuery.some(function (key) {\n return _this._diffQuery[key];\n });\n }\n\n if (typeof watchQuery === \'function\') {\n return watchQuery.apply(instance, [to.query, from.query]);\n }\n\n return false;\n });\n\n if (startLoader && this.$loading.start && !this.$loading.manual) {\n this.$loading.start();\n }\n\n case 11:\n // Call next()\n next();\n _context.next = 25;\n break;\n\n case 14:\n _context.prev = 14;\n _context.t0 = _context["catch"](4);\n err = _context.t0 || {};\n statusCode = err.statusCode || err.status || err.response && err.response.status || 500;\n message = err.message || \'\'; // Handle chunk loading errors\n // This may be due to a new deployment or a network problem\n\n if (!/^Loading( CSS)? chunk (\\d)+ failed\\./.test(message)) {\n _context.next = 22;\n break;\n }\n\n window.location.reload(true\n /* skip cache */\n );\n return _context.abrupt("return");\n\n case 22:\n this.error({\n statusCode: statusCode,\n message: message\n });\n this.$nuxt.$emit(\'routeChanged\', to, from, err);\n next();\n\n case 25:\n case "end":\n return _context.stop();\n }\n }\n }, null, this, [[4, 14]]);\n}\n\nfunction applySSRData(Component, ssrData) {\n if (NUXT.serverRendered && ssrData) {\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* applyAsyncData */ "a"])(Component, ssrData);\n }\n\n Component._Ctor = Component;\n return Component;\n} // Get matched components\n\n\nfunction resolveComponents(router) {\n var path = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getLocation */ "d"])(router.options.base, router.options.mode);\n return Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* flatMapComponents */ "c"])(router.match(path), function _callee(Component, _, match, key, index) {\n var _Component;\n\n return regeneratorRuntime.async(function _callee$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(typeof Component === \'function\' && !Component.options)) {\n _context2.next = 4;\n break;\n }\n\n _context2.next = 3;\n return regeneratorRuntime.awrap(Component());\n\n case 3:\n Component = _context2.sent;\n\n case 4:\n // Sanitize it and save it\n _Component = applySSRData(Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* sanitizeComponent */ "o"])(Component), NUXT.data ? NUXT.data[index] : null);\n match.components[key] = _Component;\n return _context2.abrupt("return", _Component);\n\n case 7:\n case "end":\n return _context2.stop();\n }\n }\n });\n });\n}\n\nfunction callMiddleware(Components, context, layout) {\n var _this2 = this;\n\n var midd = [];\n var unknownMiddleware = false; // If layout is undefined, only call global middleware\n\n if (typeof layout !== \'undefined\') {\n midd = []; // Exclude global middleware if layout defined (already called before)\n\n layout = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* sanitizeComponent */ "o"])(layout);\n\n if (layout.options.middleware) {\n midd = midd.concat(layout.options.middleware);\n }\n\n Components.forEach(function (Component) {\n if (Component.options.middleware) {\n midd = midd.concat(Component.options.middleware);\n }\n });\n }\n\n midd = midd.map(function (name) {\n if (typeof name === \'function\') {\n return name;\n }\n\n if (typeof _middleware_js__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"][name] !== \'function\') {\n unknownMiddleware = true;\n\n _this2.error({\n statusCode: 500,\n message: \'Unknown middleware \' + name\n });\n }\n\n return _middleware_js__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"][name];\n });\n\n if (unknownMiddleware) {\n return;\n }\n\n return Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* middlewareSeries */ "k"])(midd, context);\n}\n\nfunction render(to, from, next) {\n var _this3 = this;\n\n var fromMatches, nextCalled, _next, matches, Components, errorLayout, layout, _layout, isValid, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, Component, instances, error, _layout2;\n\n return regeneratorRuntime.async(function render$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(this._pathChanged === false && this._queryChanged === false)) {\n _context3.next = 2;\n break;\n }\n\n return _context3.abrupt("return", next());\n\n case 2:\n // Handle first render on SPA mode\n if (to === from) {\n _lastPaths = [];\n } else {\n fromMatches = [];\n _lastPaths = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getMatchedComponents */ "e"])(from, fromMatches).map(function (Component, i) {\n return Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* compile */ "b"])(from.matched[fromMatches[i]].path)(from.params);\n });\n } // nextCalled is true when redirected\n\n\n nextCalled = false;\n\n _next = function _next(path) {\n if (from.path === path.path && _this3.$loading.finish) {\n _this3.$loading.finish();\n }\n\n if (from.path !== path.path && _this3.$loading.pause) {\n _this3.$loading.pause();\n }\n\n if (nextCalled) {\n return;\n }\n\n nextCalled = true;\n next(path);\n }; // Update context\n\n\n _context3.next = 7;\n return regeneratorRuntime.awrap(Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* setContext */ "p"])(app, {\n route: to,\n from: from,\n next: _next.bind(this)\n }));\n\n case 7:\n this._dateLastError = app.nuxt.dateErr;\n this._hadError = Boolean(app.nuxt.err); // Get route\'s matched components\n\n matches = [];\n Components = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getMatchedComponents */ "e"])(to, matches); // If no Components matched, generate 404\n\n if (Components.length) {\n _context3.next = 26;\n break;\n }\n\n _context3.next = 14;\n return regeneratorRuntime.awrap(callMiddleware.call(this, Components, app.context));\n\n case 14:\n if (!nextCalled) {\n _context3.next = 16;\n break;\n }\n\n return _context3.abrupt("return");\n\n case 16:\n // Load layout for error page\n errorLayout = (_index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"].options || _index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"]).layout;\n _context3.next = 19;\n return regeneratorRuntime.awrap(this.loadLayout(typeof errorLayout === \'function\' ? errorLayout.call(_index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"], app.context) : errorLayout));\n\n case 19:\n layout = _context3.sent;\n _context3.next = 22;\n return regeneratorRuntime.awrap(callMiddleware.call(this, Components, app.context, layout));\n\n case 22:\n if (!nextCalled) {\n _context3.next = 24;\n break;\n }\n\n return _context3.abrupt("return");\n\n case 24:\n // Show error page\n app.context.error({\n statusCode: 404,\n message: \'This page could not be found\'\n });\n return _context3.abrupt("return", next());\n\n case 26:\n // Update ._data and other properties if hot reloaded\n Components.forEach(function (Component) {\n if (Component._Ctor && Component._Ctor.options) {\n Component.options.asyncData = Component._Ctor.options.asyncData;\n Component.options.fetch = Component._Ctor.options.fetch;\n }\n }); // Apply transitions\n\n this.setTransitions(mapTransitions(Components, to, from));\n _context3.prev = 28;\n _context3.next = 31;\n return regeneratorRuntime.awrap(callMiddleware.call(this, Components, app.context));\n\n case 31:\n if (!nextCalled) {\n _context3.next = 33;\n break;\n }\n\n return _context3.abrupt("return");\n\n case 33:\n if (!app.context._errored) {\n _context3.next = 35;\n break;\n }\n\n return _context3.abrupt("return", next());\n\n case 35:\n // Set layout\n _layout = Components[0].options.layout;\n\n if (typeof _layout === \'function\') {\n _layout = _layout(app.context);\n }\n\n _context3.next = 39;\n return regeneratorRuntime.awrap(this.loadLayout(_layout));\n\n case 39:\n _layout = _context3.sent;\n _context3.next = 42;\n return regeneratorRuntime.awrap(callMiddleware.call(this, Components, app.context, _layout));\n\n case 42:\n if (!nextCalled) {\n _context3.next = 44;\n break;\n }\n\n return _context3.abrupt("return");\n\n case 44:\n if (!app.context._errored) {\n _context3.next = 46;\n break;\n }\n\n return _context3.abrupt("return", next());\n\n case 46:\n // Call .validate()\n isValid = true;\n _context3.prev = 47;\n _iteratorNormalCompletion = true;\n _didIteratorError = false;\n _iteratorError = undefined;\n _context3.prev = 51;\n _iterator = Components[Symbol.iterator]();\n\n case 53:\n if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {\n _context3.next = 65;\n break;\n }\n\n Component = _step.value;\n\n if (!(typeof Component.options.validate !== \'function\')) {\n _context3.next = 57;\n break;\n }\n\n return _context3.abrupt("continue", 62);\n\n case 57:\n _context3.next = 59;\n return regeneratorRuntime.awrap(Component.options.validate(app.context));\n\n case 59:\n isValid = _context3.sent;\n\n if (isValid) {\n _context3.next = 62;\n break;\n }\n\n return _context3.abrupt("break", 65);\n\n case 62:\n _iteratorNormalCompletion = true;\n _context3.next = 53;\n break;\n\n case 65:\n _context3.next = 71;\n break;\n\n case 67:\n _context3.prev = 67;\n _context3.t0 = _context3["catch"](51);\n _didIteratorError = true;\n _iteratorError = _context3.t0;\n\n case 71:\n _context3.prev = 71;\n _context3.prev = 72;\n\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n\n case 74:\n _context3.prev = 74;\n\n if (!_didIteratorError) {\n _context3.next = 77;\n break;\n }\n\n throw _iteratorError;\n\n case 77:\n return _context3.finish(74);\n\n case 78:\n return _context3.finish(71);\n\n case 79:\n _context3.next = 85;\n break;\n\n case 81:\n _context3.prev = 81;\n _context3.t1 = _context3["catch"](47);\n // ...If .validate() threw an error\n this.error({\n statusCode: _context3.t1.statusCode || \'500\',\n message: _context3.t1.message\n });\n return _context3.abrupt("return", next());\n\n case 85:\n if (isValid) {\n _context3.next = 88;\n break;\n }\n\n this.error({\n statusCode: 404,\n message: \'This page could not be found\'\n });\n return _context3.abrupt("return", next());\n\n case 88:\n _context3.next = 90;\n return regeneratorRuntime.awrap(Promise.all(Components.map(function (Component, i) {\n // Check if only children route changed\n Component._path = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* compile */ "b"])(to.matched[matches[i]].path)(to.params);\n Component._dataRefresh = false; // Check if Component need to be refreshed (call asyncData & fetch)\n // Only if its slug has changed or is watch query changes\n\n if (_this3._pathChanged && _this3._queryChanged || Component._path !== _lastPaths[i]) {\n Component._dataRefresh = true;\n } else if (!_this3._pathChanged && _this3._queryChanged) {\n var watchQuery = Component.options.watchQuery;\n\n if (watchQuery === true) {\n Component._dataRefresh = true;\n } else if (Array.isArray(watchQuery)) {\n Component._dataRefresh = watchQuery.some(function (key) {\n return _this3._diffQuery[key];\n });\n } else if (typeof watchQuery === \'function\') {\n if (!instances) {\n instances = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getMatchedComponentsInstances */ "f"])(to);\n }\n\n Component._dataRefresh = watchQuery.apply(instances[i], [to.query, from.query]);\n }\n }\n\n if (!_this3._hadError && _this3._isMounted && !Component._dataRefresh) {\n return;\n }\n\n var promises = [];\n var hasAsyncData = Component.options.asyncData && typeof Component.options.asyncData === \'function\';\n var hasFetch = Boolean(Component.options.fetch);\n var loadingIncrease = hasAsyncData && hasFetch ? 30 : 45; // Call asyncData(context)\n\n if (hasAsyncData) {\n var promise = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* promisify */ "m"])(Component.options.asyncData, app.context).then(function (asyncDataResult) {\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* applyAsyncData */ "a"])(Component, asyncDataResult);\n\n if (_this3.$loading.increase) {\n _this3.$loading.increase(loadingIncrease);\n }\n });\n promises.push(promise);\n } // Check disabled page loading\n\n\n _this3.$loading.manual = Component.options.loading === false; // Call fetch(context)\n\n if (hasFetch) {\n var p = Component.options.fetch(app.context);\n\n if (!p || !(p instanceof Promise) && typeof p.then !== \'function\') {\n p = Promise.resolve(p);\n }\n\n p.then(function (fetchResult) {\n if (_this3.$loading.increase) {\n _this3.$loading.increase(loadingIncrease);\n }\n });\n promises.push(p);\n }\n\n return Promise.all(promises);\n })));\n\n case 90:\n // If not redirected\n if (!nextCalled) {\n if (this.$loading.finish && !this.$loading.manual) {\n this.$loading.finish();\n }\n\n next();\n }\n\n _context3.next = 107;\n break;\n\n case 93:\n _context3.prev = 93;\n _context3.t2 = _context3["catch"](28);\n error = _context3.t2 || {};\n\n if (!(error.message === \'ERR_REDIRECT\')) {\n _context3.next = 98;\n break;\n }\n\n return _context3.abrupt("return", this.$nuxt.$emit(\'routeChanged\', to, from, error));\n\n case 98:\n _lastPaths = [];\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* globalHandleError */ "i"])(error); // Load error layout\n\n _layout2 = (_index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"].options || _index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"]).layout;\n\n if (typeof _layout2 === \'function\') {\n _layout2 = _layout2(app.context);\n }\n\n _context3.next = 104;\n return regeneratorRuntime.awrap(this.loadLayout(_layout2));\n\n case 104:\n this.error(error);\n this.$nuxt.$emit(\'routeChanged\', to, from, error);\n next();\n\n case 107:\n case "end":\n return _context3.stop();\n }\n }\n }, null, this, [[28, 93], [47, 81], [51, 67, 71, 79], [72,, 74, 78]]);\n} // Fix components format in matched, it\'s due to code-splitting of vue-router\n\n\nfunction normalizeComponents(to, ___) {\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* flatMapComponents */ "c"])(to, function (Component, _, match, key) {\n if (Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(Component) === \'object\' && !Component.options) {\n // Updated via vue-router resolveAsyncComponents()\n Component = vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].extend(Component);\n Component._Ctor = Component;\n match.components[key] = Component;\n }\n\n return Component;\n });\n}\n\nfunction showNextPage(to) {\n // Hide error component if no error\n if (this._hadError && this._dateLastError === this.$options.nuxt.dateErr) {\n this.error();\n } // Set layout\n\n\n var layout = this.$options.nuxt.err ? (_index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"].options || _index_js__WEBPACK_IMPORTED_MODULE_20__[/* NuxtError */ "a"]).layout : to.matched[0].components.default.options.layout;\n\n if (typeof layout === \'function\') {\n layout = layout(app.context);\n }\n\n this.setLayout(layout);\n} // When navigating on a different route but the same component is used, Vue.js\n// Will not update the instance data, so we have to update $data ourselves\n\n\nfunction fixPrepatch(to, ___) {\n var _this4 = this;\n\n if (this._pathChanged === false && this._queryChanged === false) {\n return;\n }\n\n var instances = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getMatchedComponentsInstances */ "f"])(to);\n var Components = Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* getMatchedComponents */ "e"])(to);\n vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].nextTick(function () {\n instances.forEach(function (instance, i) {\n if (!instance || instance._isDestroyed) {\n return;\n }\n\n if (instance.constructor._dataRefresh && Components[i] === instance.constructor && instance.$vnode.data.keepAlive !== true && typeof instance.constructor.options.data === \'function\') {\n var newData = instance.constructor.options.data.call(instance);\n\n for (var key in newData) {\n vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].set(instance.$data, key, newData[key]);\n } // Ensure to trigger scroll event after calling scrollBehavior\n\n\n window.$nuxt.$nextTick(function () {\n window.$nuxt.$emit(\'triggerScroll\');\n });\n }\n });\n showNextPage.call(_this4, to);\n });\n}\n\nfunction nuxtReady(_app) {\n window.onNuxtReadyCbs.forEach(function (cb) {\n if (typeof cb === \'function\') {\n cb(_app);\n }\n }); // Special JSDOM\n\n if (typeof window._onNuxtLoaded === \'function\') {\n window._onNuxtLoaded(_app);\n } // Add router hooks\n\n\n router.afterEach(function (to, from) {\n // Wait for fixPrepatch + $data updates\n vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].nextTick(function () {\n return _app.$nuxt.$emit(\'routeChanged\', to, from);\n });\n });\n}\n\nfunction mountApp(__app) {\n var _app, mount, Components, clientFirstMount;\n\n return regeneratorRuntime.async(function mountApp$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n // Set global variables\n app = __app.app;\n router = __app.router;\n store = __app.store; // Create Vue instance\n\n _app = new vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"](app); // Mounts Vue app to DOM element\n\n mount = function mount() {\n _app.$mount(\'#__nuxt\'); // Add afterEach router hooks\n\n\n router.afterEach(normalizeComponents);\n router.afterEach(fixPrepatch.bind(_app)); // Listen for first Vue update\n\n vue__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].nextTick(function () {\n // Call window.{{globals.readyCallback}} callbacks\n nuxtReady(_app);\n });\n }; // Resolve route components\n\n\n _context4.next = 7;\n return regeneratorRuntime.awrap(Promise.all(resolveComponents(router)));\n\n case 7:\n Components = _context4.sent;\n // Enable transitions\n _app.setTransitions = _app.$options.nuxt.setTransitions.bind(_app);\n\n if (Components.length) {\n _app.setTransitions(mapTransitions(Components, router.currentRoute));\n\n _lastPaths = router.currentRoute.matched.map(function (route) {\n return Object(_utils_js__WEBPACK_IMPORTED_MODULE_19__[/* compile */ "b"])(route.path)(router.currentRoute.params);\n });\n } // Initialize error handler\n\n\n _app.$loading = {}; // To avoid error while _app.$nuxt does not exist\n\n if (NUXT.error) {\n _app.error(NUXT.error);\n } // Add beforeEach router hooks\n\n\n router.beforeEach(loadAsyncComponents.bind(_app));\n router.beforeEach(render.bind(_app)); // If page already is server rendered\n\n if (!NUXT.serverRendered) {\n _context4.next = 17;\n break;\n }\n\n mount();\n return _context4.abrupt("return");\n\n case 17:\n // First render on client-side\n clientFirstMount = function clientFirstMount() {\n normalizeComponents(router.currentRoute, router.currentRoute);\n showNextPage.call(_app, router.currentRoute); // Don\'t call fixPrepatch.call(_app, router.currentRoute, router.currentRoute) since it\'s first render\n\n mount();\n };\n\n render.call(_app, router.currentRoute, router.currentRoute, function (path) {\n // If not redirected\n if (!path) {\n clientFirstMount();\n return;\n } // Add a one-time afterEach hook to\n // mount the app wait for redirect and route gets resolved\n\n\n var unregisterHook = router.afterEach(function (to, from) {\n unregisterHook();\n clientFirstMount();\n }); // Push the path and let route to be resolved\n\n router.push(path, undefined, function (err) {\n if (err) {\n errorHandler(err);\n }\n });\n });\n\n case 19:\n case "end":\n return _context4.stop();\n }\n }\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(41)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi8ubnV4dC9jbGllbnQuanM/MDZhMCJdLCJuYW1lcyI6WyJWdWUiLCJjb21wb25lbnQiLCJOdXh0TGluayIsIm5hbWUiLCJnbG9iYWwiLCJmZXRjaCIsIl9sYXN0UGF0aHMiLCJhcHAiLCJyb3V0ZXIiLCJzdG9yZSIsIk5VWFQiLCJ3aW5kb3ciLCJfX05VWFRfXyIsIk9iamVjdCIsImFzc2lnbiIsImNvbmZpZyIsImVycm9ySGFuZGxlciIsImNvbnNvbGUiLCJlcnJvciIsImNyZWF0ZUFwcCIsInRoZW4iLCJtb3VudEFwcCIsImNhdGNoIiwiY29tcG9uZW50T3B0aW9uIiwia2V5Iiwib3B0aW9ucyIsIm9wdGlvbiIsImFyZ3MiLCJtYXBUcmFuc2l0aW9ucyIsIkNvbXBvbmVudHMiLCJ0byIsImZyb20iLCJjb21wb25lbnRUcmFuc2l0aW9ucyIsInRyYW5zaXRpb24iLCJtYXAiLCJDb21wb25lbnQiLCJ0cmFuc2l0aW9ucyIsIm1hdGNoZWQiLCJsZW5ndGgiLCJjb21wb25lbnRzIiwiZGVmYXVsdCIsImZyb21UcmFuc2l0aW9ucyIsImtleXMiLCJmaWx0ZXIiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiZm9yRWFjaCIsImxvYWRBc3luY0NvbXBvbmVudHMiLCJuZXh0IiwiX3BhdGhDaGFuZ2VkIiwiQm9vbGVhbiIsIm51eHQiLCJlcnIiLCJwYXRoIiwiX3F1ZXJ5Q2hhbmdlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJxdWVyeSIsIl9kaWZmUXVlcnkiLCJnZXRRdWVyeURpZmYiLCIkbG9hZGluZyIsInN0YXJ0IiwibWFudWFsIiwicmVzb2x2ZVJvdXRlQ29tcG9uZW50cyIsImluc3RhbmNlIiwic3RhcnRMb2FkZXIiLCJzb21lIiwid2F0Y2hRdWVyeSIsIkFycmF5IiwiaXNBcnJheSIsImFwcGx5Iiwic3RhdHVzQ29kZSIsInN0YXR1cyIsInJlc3BvbnNlIiwibWVzc2FnZSIsInRlc3QiLCJsb2NhdGlvbiIsInJlbG9hZCIsIiRudXh0IiwiJGVtaXQiLCJhcHBseVNTUkRhdGEiLCJzc3JEYXRhIiwic2VydmVyUmVuZGVyZWQiLCJhcHBseUFzeW5jRGF0YSIsIl9DdG9yIiwicmVzb2x2ZUNvbXBvbmVudHMiLCJnZXRMb2NhdGlvbiIsImJhc2UiLCJtb2RlIiwiZmxhdE1hcENvbXBvbmVudHMiLCJtYXRjaCIsIl8iLCJpbmRleCIsIl9Db21wb25lbnQiLCJzYW5pdGl6ZUNvbXBvbmVudCIsImRhdGEiLCJjYWxsTWlkZGxld2FyZSIsImNvbnRleHQiLCJsYXlvdXQiLCJtaWRkIiwidW5rbm93bk1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlIiwiY29uY2F0IiwibWlkZGxld2FyZVNlcmllcyIsInJlbmRlciIsImZyb21NYXRjaGVzIiwiZ2V0TWF0Y2hlZENvbXBvbmVudHMiLCJpIiwiY29tcGlsZSIsInBhcmFtcyIsIm5leHRDYWxsZWQiLCJfbmV4dCIsImZpbmlzaCIsInBhdXNlIiwic2V0Q29udGV4dCIsInJvdXRlIiwiYmluZCIsIl9kYXRlTGFzdEVycm9yIiwiZGF0ZUVyciIsIl9oYWRFcnJvciIsIm1hdGNoZXMiLCJjYWxsIiwiZXJyb3JMYXlvdXQiLCJOdXh0RXJyb3IiLCJsb2FkTGF5b3V0IiwiYXN5bmNEYXRhIiwic2V0VHJhbnNpdGlvbnMiLCJfZXJyb3JlZCIsImlzVmFsaWQiLCJ2YWxpZGF0ZSIsIlByb21pc2UiLCJhbGwiLCJfcGF0aCIsIl9kYXRhUmVmcmVzaCIsImluc3RhbmNlcyIsImdldE1hdGNoZWRDb21wb25lbnRzSW5zdGFuY2VzIiwiX2lzTW91bnRlZCIsInByb21pc2VzIiwiaGFzQXN5bmNEYXRhIiwiaGFzRmV0Y2giLCJsb2FkaW5nSW5jcmVhc2UiLCJwcm9taXNlIiwicHJvbWlzaWZ5IiwiYXN5bmNEYXRhUmVzdWx0IiwiaW5jcmVhc2UiLCJwdXNoIiwibG9hZGluZyIsInAiLCJyZXNvbHZlIiwiZmV0Y2hSZXN1bHQiLCJnbG9iYWxIYW5kbGVFcnJvciIsIm5vcm1hbGl6ZUNvbXBvbmVudHMiLCJfX18iLCJleHRlbmQiLCJzaG93TmV4dFBhZ2UiLCIkb3B0aW9ucyIsInNldExheW91dCIsImZpeFByZXBhdGNoIiwibmV4dFRpY2siLCJfaXNEZXN0cm95ZWQiLCJjb25zdHJ1Y3RvciIsIiR2bm9kZSIsImtlZXBBbGl2ZSIsIm5ld0RhdGEiLCJzZXQiLCIkZGF0YSIsIiRuZXh0VGljayIsIm51eHRSZWFkeSIsIl9hcHAiLCJvbk51eHRSZWFkeUNicyIsImNiIiwiX29uTnV4dExvYWRlZCIsImFmdGVyRWFjaCIsIl9fYXBwIiwibW91bnQiLCIkbW91bnQiLCJjdXJyZW50Um91dGUiLCJiZWZvcmVFYWNoIiwiY2xpZW50Rmlyc3RNb3VudCIsInVucmVnaXN0ZXJIb29rIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWVBO0NBQ3dEO0FBRXhEOztBQUNBQSxvREFBRyxDQUFDQyxTQUFKLENBQWNDLGdGQUFRLENBQUNDLElBQXZCLEVBQTZCRCxnRkFBN0I7QUFDQUYsb0RBQUcsQ0FBQ0MsU0FBSixDQUFjLE9BQWQsRUFBdUJDLGdGQUF2Qjs7QUFFQSxJQUFJLENBQUNFLE1BQU0sQ0FBQ0MsS0FBWixFQUFtQjtBQUFFRCxRQUFNLENBQUNDLEtBQVAsR0FBZUEsd0RBQWY7QUFBc0IsQyxDQUUzQzs7O0FBQ0EsSUFBSUMsVUFBVSxHQUFHLEVBQWpCO0FBQ0EsSUFBSUMsR0FBSjtBQUNBLElBQUlDLE1BQUo7QUFDQSxJQUFJQyxLQUFKLEMsQ0FFQTs7QUFDQSxJQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsUUFBUCxJQUFtQixFQUFoQztBQUVBQyxNQUFNLENBQUNDLE1BQVAsQ0FBY2Qsb0RBQUcsQ0FBQ2UsTUFBbEIsRUFBMEI7QUFBQyxZQUFTLElBQVY7QUFBZSxpQkFBYztBQUE3QixDQUExQjtBQUVBLElBQU1DLFlBQVksR0FBR2hCLG9EQUFHLENBQUNlLE1BQUosQ0FBV0MsWUFBWCxJ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LENBQWtCK0MsSUFBbEIsRUFBd0JoSyxNQUFNLENBQUN3SyxZQUEvQixFQUY2QixDQUc3Qjs7QUFDQUYsaUJBQUs7QUFDTixXQXhESDs7QUEwREV0RSxnQkFBTSxDQUFDaUIsSUFBUCxDQUFZK0MsSUFBWixFQUFrQmhLLE1BQU0sQ0FBQ3dLLFlBQXpCLEVBQXVDeEssTUFBTSxDQUFDd0ssWUFBOUMsRUFBNEQsVUFBQzNILElBQUQsRUFBVTtBQUNwRTtBQUNBLGdCQUFJLENBQUNBLElBQUwsRUFBVztBQUNUNkgsOEJBQWdCO0FBQ2hCO0FBQ0QsYUFMbUUsQ0FPcEU7QUFDQTs7O0FBQ0EsZ0JBQU1DLGNBQWMsR0FBRzNLLE1BQU0sQ0FBQ29LLFNBQVAsQ0FBaUIsVUFBQzlJLEVBQUQsRUFBS0MsSUFBTCxFQUFjO0FBQ3BEb0osNEJBQWM7QUFDZEQsOEJBQWdCO0FBQ2pCLGFBSHNCLENBQXZCLENBVG9FLENBY3BFOztBQUNBMUssa0JBQU0sQ0FBQ3lJLElBQVAsQ0FBWTVGLElBQVosRUFBa0IrSCxTQUFsQixFQUE2QixVQUFDaEksR0FBRCxFQUFTO0FBQ3BDLGtCQUFJQSxHQUFKLEVBQVM7QUFDUHBDLDRCQUFZLENBQUNvQyxHQUFELENBQVo7QUFDRDtBQUNGLGFBSkQ7QUFLRCxXQXBCRDs7QUExREY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsQyIsImZpbGUiOiIxNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBmZXRjaCBmcm9tICd1bmZldGNoJ1xuaW1wb3J0IG1pZGRsZXdhcmUgZnJvbSAnLi9taWRkbGV3YXJlLmpzJ1xuaW1wb3J0IHtcbiAgYXBwbHlBc3luY0RhdGEsXG4gIHByb21pc2lmeSxcbiAgbWlkZGxld2FyZVNlcmllcyxcbiAgc2FuaXRpemVDb21wb25lbnQsXG4gIHJlc29sdmVSb3V0ZUNvbXBvbmVudHMsXG4gIGdldE1hdGNoZWRDb21wb25lbnRzLFxuICBnZXRNYXRjaGVkQ29tcG9uZW50c0luc3RhbmNlcyxcbiAgZmxhdE1hcENvbXBvbmVudHMsXG4gIHNldENvbnRleHQsXG4gIGdldExvY2F0aW9uLFxuICBjb21waWxlLFxuICBnZXRRdWVyeURpZmYsXG4gIGdsb2JhbEhhbmRsZUVycm9yXG59IGZyb20gJy4vdXRpbHMuanMnXG5pbXBvcnQgeyBjcmVhdGVBcHAsIE51eHRFcnJvciB9IGZyb20gJy4vaW5kZXguanMnXG5pbXBvcnQgTnV4dExpbmsgZnJvbSAnLi9jb21wb25lbnRzL251eHQtbGluay5jbGllbnQuanMnIC8vIHNob3VsZCBiZSBpbmNsdWRlZCBhZnRlciAuL2luZGV4LmpzXG5cbi8vIENvbXBvbmVudDogPE51eHRMaW5rPlxuVnVlLmNvbXBvbmVudChOdXh0TGluay5uYW1lLCBOdXh0TGluaylcblZ1ZS5jb21wb25lbnQoJ05MaW5rJywgTnV4dExpbmspXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7IGdsb2JhbC5mZXRjaCA9IGZldGNoIH1cblxuLy8gR2xvYmFsIHNoYXJlZCByZWZlcmVuY2VzXG5sZXQgX2xhc3RQYXRocyA9IFtdXG5sZXQgYXBwXG5sZXQgcm91dGVyXG5sZXQgc3RvcmVcblxuLy8gVHJ5IHRvIHJlaHlkcmF0ZSBTU1IgZGF0YSBmcm9tIHdpbmRvd1xuY29uc3QgTlVYVCA9IHdpbmRvdy5fX05VWFRfXyB8fCB7fVxuXG5PYmplY3QuYXNzaWduKFZ1ZS5jb25maWcsIHtcInNpbGVudFwiOnRydWUsXCJwZXJmb3JtYW5jZVwiOmZhbHNlfSlcblxuY29uc3QgZXJyb3JIYW5kbGVyID0gVnVlLmNvbmZpZy5lcnJvckhhbmRsZXIgfHwgY29uc29sZS5lcnJvclxuXG4vLyBDcmVhdGUgYW5kIG1vdW50IEFwcFxuY3JlYXRlQXBwKCkudGhlbihtb3VudEFwcCkuY2F0Y2goZXJyb3JIYW5kbGVyKVxuXG5mdW5jdGlvbiBjb21wb25lbnRPcHRpb24gKGNvbXBvbmVudCwga2V5LCAuLi5hcmdzKSB7XG4gIGlmICghY29tcG9uZW50IHx8ICFjb21wb25lbnQub3B0aW9ucyB8fCAhY29tcG9uZW50Lm9wdGlvbnNba2V5XSkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIGNvbnN0IG9wdGlvbiA9IGNvbXBvbmVudC5vcHRpb25zW2tleV1cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb3B0aW9uKC4uLmFyZ3MpXG4gIH1cbiAgcmV0dXJuIG9wdGlvblxufVxuXG5mdW5jdGlvbiBtYXBUcmFuc2l0aW9ucyAoQ29tcG9uZW50cywgdG8sIGZyb20pIHtcbiAgY29uc3QgY29tcG9uZW50VHJhbnNpdGlvbnMgPSAoY29tcG9uZW50KSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvbiA9IGNvbXBvbmVudE9wdGlvbihjb21wb25lbnQsICd0cmFuc2l0aW9uJywgdG8sIGZyb20pIHx8IHt9XG4gICAgcmV0dXJuICh0eXBlb2YgdHJhbnNpdGlvbiA9PT0gJ3N0cmluZycgPyB7IG5hbWU6IHRyYW5zaXRpb24gfSA6IHRyYW5zaXRpb24pXG4gIH1cblxuICByZXR1cm4gQ29tcG9uZW50cy5tYXAoKENvbXBvbmVudCkgPT4ge1xuICAgIC8vIENsb25lIG9yaWdpbmFsIG9iamVjdCB0byBwcmV2ZW50IG92ZXJyaWRlc1xuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29tcG9uZW50VHJhbnNpdGlvbnMoQ29tcG9uZW50KSlcblxuICAgIC8vIENvbWJpbmUgdHJhbnNpdGlvbnMgJiBwcmVmZXIgYGxlYXZlYCB0cmFuc2l0aW9ucyBvZiAnZnJvbScgcm91dGVcbiAgICBpZiAoZnJvbSAmJiBmcm9tLm1hdGNoZWQubGVuZ3RoICYmIGZyb20ubWF0Y2hlZFswXS5jb21wb25lbnRzLmRlZmF1bHQpIHtcbiAgICAgIGNvbnN0IGZyb21UcmFuc2l0aW9ucyA9IGNvbXBvbmVudFRyYW5zaXRpb25zKGZyb20ubWF0Y2hlZFswXS5jb21wb25lbnRzLmRlZmF1bHQpXG4gICAgICBPYmplY3Qua2V5cyhmcm9tVHJhbnNpdGlvbnMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IGZyb21UcmFuc2l0aW9uc1trZXldICYmIGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdsZWF2ZScpKVxuICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7IHRyYW5zaXRpb25zW2tleV0gPSBmcm9tVHJhbnNpdGlvbnNba2V5XSB9KVxuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2l0aW9uc1xuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkQXN5bmNDb21wb25lbnRzICh0bywgZnJvbSwgbmV4dCkge1xuICAvLyBDaGVjayBpZiByb3V0ZSBwYXRoIGNoYW5nZWQgKHRoaXMuX3BhdGhDaGFuZ2VkKSwgb25seSBpZiB0aGUgcGFnZSBpcyBub3QgYW4gZXJyb3IgKGZvciB2YWxpZGF0ZSgpKVxuICB0aGlzLl9wYXRoQ2hhbmdlZCA9IEJvb2xlYW4oYXBwLm51eHQuZXJyKSB8fCBmcm9tLnBhdGggIT09IHRvLnBhdGhcbiAgdGhpcy5fcXVlcnlDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodG8ucXVlcnkpICE9PSBKU09OLnN0cmluZ2lmeShmcm9tLnF1ZXJ5KVxuICB0aGlzLl9kaWZmUXVlcnkgPSAodGhpcy5fcXVlcnlDaGFuZ2VkID8gZ2V0UXVlcnlEaWZmKHRvLnF1ZXJ5LCBmcm9tLnF1ZXJ5KSA6IFtdKVxuXG4gIGlmICh0aGlzLl9wYXRoQ2hhbmdlZCAmJiB0aGlzLiRsb2FkaW5nLnN0YXJ0ICYmICF0aGlzLiRsb2FkaW5nLm1hbnVhbCkge1xuICAgIHRoaXMuJGxvYWRpbmcuc3RhcnQoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoIXRoaXMuX3BhdGhDaGFuZ2VkICYmIHRoaXMuX3F1ZXJ5Q2hhbmdlZCkge1xuICAgICAgY29uc3QgQ29tcG9uZW50cyA9IGF3YWl0IHJlc29sdmVSb3V0ZUNvbXBvbmVudHMoXG4gICAgICAgIHRvLFxuICAgICAgICAoQ29tcG9uZW50LCBpbnN0YW5jZSkgPT4gKHsgQ29tcG9uZW50LCBpbnN0YW5jZSB9KVxuICAgICAgKVxuICAgICAgLy8gQWRkIGEgbWFya2VyIG9uIGVhY2ggY29tcG9uZW50IHRoYXQgaXQgbmVlZHMgdG8gcmVmcmVzaCBvciBub3RcbiAgICAgIGNvbnN0IHN0YXJ0TG9hZGVyID0gQ29tcG9uZW50cy5zb21lKCh7IENvbXBvbmVudCwgaW5zdGFuY2UgfSkgPT4ge1xuICAgICAgICBjb25zdCB3YXRjaFF1ZXJ5ID0gQ29tcG9uZW50Lm9wdGlvbnMud2F0Y2hRdWVyeVxuICAgICAgICBpZiAod2F0Y2hRdWVyeSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2F0Y2hRdWVyeSkpIHtcbiAgICAgICAgICByZXR1cm4gd2F0Y2hRdWVyeS5zb21lKGtleSA9PiB0aGlzLl9kaWZmUXVlcnlba2V5XSlcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdhdGNoUXVlcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gd2F0Y2hRdWVyeS5hcHBseShpbnN0YW5jZSwgW3RvLnF1ZXJ5LCBmcm9tLnF1ZXJ5XSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnRMb2FkZXIgJiYgdGhpcy4kbG9hZGluZy5zdGFydCAmJiAhdGhpcy4kbG9hZGluZy5tYW51YWwpIHtcbiAgICAgICAgdGhpcy4kbG9hZGluZy5zdGFydCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBuZXh0KClcbiAgICBuZXh0KClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciB8fCB7fVxuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSBlcnIuc3RhdHVzQ29kZSB8fCBlcnIuc3RhdHVzIHx8IChlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cykgfHwgNTAwXG4gICAgY29uc3QgbWVzc2FnZSA9IGVyci5tZXNzYWdlIHx8ICcnXG5cbiAgICAvLyBIYW5kbGUgY2h1bmsgbG9hZGluZyBlcnJvcnNcbiAgICAvLyBUaGlzIG1heSBiZSBkdWUgdG8gYSBuZXcgZGVwbG95bWVudCBvciBhIG5ldHdvcmsgcHJvYmxlbVxuICAgIGlmICgvXkxvYWRpbmcoIENTUyk/IGNodW5rIChcXGQpKyBmYWlsZWRcXC4vLnRlc3QobWVzc2FnZSkpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQodHJ1ZSAvKiBza2lwIGNhY2hlICovKVxuICAgICAgcmV0dXJuIC8vIHByZXZlbnQgZXJyb3IgcGFnZSBibGlua2luZyBmb3IgdXNlclxuICAgIH1cblxuICAgIHRoaXMuZXJyb3IoeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0pXG4gICAgdGhpcy4kbnV4dC4kZW1pdCgncm91dGVDaGFuZ2VkJywgdG8sIGZyb20sIGVycilcbiAgICBuZXh0KClcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVNTUkRhdGEgKENvbXBvbmVudCwgc3NyRGF0YSkge1xuICBpZiAoTlVYVC5zZXJ2ZXJSZW5kZXJlZCAmJiBzc3JEYXRhKSB7XG4gICAgYXBwbHlBc3luY0RhdGEoQ29tcG9uZW50LCBzc3JEYXRhKVxuICB9XG5cbiAgQ29tcG9uZW50Ll9DdG9yID0gQ29tcG9uZW50XG4gIHJldHVybiBDb21wb25lbnRcbn1cblxuLy8gR2V0IG1hdGNoZWQgY29tcG9uZW50c1xuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudHMgKHJvdXRlcikge1xuICBjb25zdCBwYXRoID0gZ2V0TG9jYXRpb24ocm91dGVyLm9wdGlvbnMuYmFzZSwgcm91dGVyLm9wdGlvbnMubW9kZSlcblxuICByZXR1cm4gZmxhdE1hcENvbXBvbmVudHMocm91dGVyLm1hdGNoKHBhdGgpLCBhc3luYyAoQ29tcG9uZW50LCBfLCBtYXRjaCwga2V5LCBpbmRleCkgPT4ge1xuICAgIC8vIElmIGNvbXBvbmVudCBpcyBub3QgcmVzb2x2ZWQgeWV0LCByZXNvbHZlIGl0XG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgIUNvbXBvbmVudC5vcHRpb25zKSB7XG4gICAgICBDb21wb25lbnQgPSBhd2FpdCBDb21wb25lbnQoKVxuICAgIH1cbiAgICAvLyBTYW5pdGl6ZSBpdCBhbmQgc2F2ZSBpdFxuICAgIGNvbnN0IF9Db21wb25lbnQgPSBhcHBseVNTUkRhdGEoc2FuaXRpemVDb21wb25lbnQoQ29tcG9uZW50KSwgTlVYVC5kYXRhID8gTlVYVC5kYXRhW2luZGV4XSA6IG51bGwpXG4gICAgbWF0Y2guY29tcG9uZW50c1trZXldID0gX0NvbXBvbmVudFxuICAgIHJldHVybiBfQ29tcG9uZW50XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNhbGxNaWRkbGV3YXJlIChDb21wb25lbnRzLCBjb250ZXh0LCBsYXlvdXQpIHtcbiAgbGV0IG1pZGQgPSBbXVxuICBsZXQgdW5rbm93bk1pZGRsZXdhcmUgPSBmYWxzZVxuXG4gIC8vIElmIGxheW91dCBpcyB1bmRlZmluZWQsIG9ubHkgY2FsbCBnbG9iYWwgbWlkZGxld2FyZVxuICBpZiAodHlwZW9mIGxheW91dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtaWRkID0gW10gLy8gRXhjbHVkZSBnbG9iYWwgbWlkZGxld2FyZSBpZiBsYXlvdXQgZGVmaW5lZCAoYWxyZWFkeSBjYWxsZWQgYmVmb3JlKVxuICAgIGxheW91dCA9IHNhbml0aXplQ29tcG9uZW50KGxheW91dClcbiAgICBpZiAobGF5b3V0Lm9wdGlvbnMubWlkZGxld2FyZSkge1xuICAgICAgbWlkZCA9IG1pZGQuY29uY2F0KGxheW91dC5vcHRpb25zLm1pZGRsZXdhcmUpXG4gICAgfVxuICAgIENvbXBvbmVudHMuZm9yRWFjaCgoQ29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoQ29tcG9uZW50Lm9wdGlvbnMubWlkZGxld2FyZSkge1xuICAgICAgICBtaWRkID0gbWlkZC5jb25jYXQoQ29tcG9uZW50Lm9wdGlvbnMubWlkZGxld2FyZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbWlkZCA9IG1pZGQubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG1pZGRsZXdhcmVbbmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHVua25vd25NaWRkbGV3YXJlID0gdHJ1ZVxuICAgICAgdGhpcy5lcnJvcih7IHN0YXR1c0NvZGU6IDUwMCwgbWVzc2FnZTogJ1Vua25vd24gbWlkZGxld2FyZSAnICsgbmFtZSB9KVxuICAgIH1cbiAgICByZXR1cm4gbWlkZGxld2FyZVtuYW1lXVxuICB9KVxuXG4gIGlmICh1bmtub3duTWlkZGxld2FyZSkge1xuICAgIHJldHVyblxuICB9XG4gIHJldHVybiBtaWRkbGV3YXJlU2VyaWVzKG1pZGQsIGNvbnRleHQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmRlciAodG8sIGZyb20sIG5leHQpIHtcbiAgaWYgKHRoaXMuX3BhdGhDaGFuZ2VkID09PSBmYWxzZSAmJiB0aGlzLl9xdWVyeUNoYW5nZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5leHQoKVxuICB9XG4gIC8vIEhhbmRsZSBmaXJzdCByZW5kZXIgb24gU1BBIG1vZGVcbiAgaWYgKHRvID09PSBmcm9tKSB7XG4gICAgX2xhc3RQYXRocyA9IFtdXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZnJvbU1hdGNoZXMgPSBbXVxuICAgIF9sYXN0UGF0aHMgPSBnZXRNYXRjaGVkQ29tcG9uZW50cyhmcm9tLCBmcm9tTWF0Y2hlcykubWFwKChDb21wb25lbnQsIGkpID0+IHtcbiAgICAgIHJldHVybiBjb21waWxlKGZyb20ubWF0Y2hlZFtmcm9tTWF0Y2hlc1tpXV0ucGF0aCkoZnJvbS5wYXJhbXMpXG4gICAgfSlcbiAgfVxuXG4gIC8vIG5leHRDYWxsZWQgaXMgdHJ1ZSB3aGVuIHJlZGlyZWN0ZWRcbiAgbGV0IG5leHRDYWxsZWQgPSBmYWxzZVxuICBjb25zdCBfbmV4dCA9IChwYXRoKSA9PiB7XG4gICAgaWYgKGZyb20ucGF0aCA9PT0gcGF0aC5wYXRoICYmIHRoaXMuJGxvYWRpbmcuZmluaXNoKSB7XG4gICAgICB0aGlzLiRsb2FkaW5nLmZpbmlzaCgpXG4gICAgfVxuXG4gICAgaWYgKGZyb20ucGF0aCAhPT0gcGF0aC5wYXRoICYmIHRoaXMuJGxvYWRpbmcucGF1c2UpIHtcbiAgICAgIHRoaXMuJGxvYWRpbmcucGF1c2UoKVxuICAgIH1cblxuICAgIGlmIChuZXh0Q2FsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBuZXh0Q2FsbGVkID0gdHJ1ZVxuICAgIG5leHQocGF0aClcbiAgfVxuXG4gIC8vIFVwZGF0ZSBjb250ZXh0XG4gIGF3YWl0IHNldENvbnRleHQoYXBwLCB7XG4gICAgcm91dGU6IHRvLFxuICAgIGZyb20sXG4gICAgbmV4dDogX25leHQuYmluZCh0aGlzKVxuICB9KVxuICB0aGlzLl9kYXRlTGFzdEVycm9yID0gYXBwLm51eHQuZGF0ZUVyclxuICB0aGlzLl9oYWRFcnJvciA9IEJvb2xlYW4oYXBwLm51eHQuZXJyKVxuXG4gIC8vIEdldCByb3V0ZSdzIG1hdGNoZWQgY29tcG9uZW50c1xuICBjb25zdCBtYXRjaGVzID0gW11cbiAgY29uc3QgQ29tcG9uZW50cyA9IGdldE1hdGNoZWRDb21wb25lbnRzKHRvLCBtYXRjaGVzKVxuXG4gIC8vIElmIG5vIENvbXBvbmVudHMgbWF0Y2hlZCwgZ2VuZXJhdGUgNDA0XG4gIGlmICghQ29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAvLyBEZWZhdWx0IGxheW91dFxuICAgIGF3YWl0IGNhbGxNaWRkbGV3YXJlLmNhbGwodGhpcywgQ29tcG9uZW50cywgYXBwLmNvbnRleHQpXG4gICAgaWYgKG5leHRDYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIExvYWQgbGF5b3V0IGZvciBlcnJvciBwYWdlXG4gICAgY29uc3QgZXJyb3JMYXlvdXQgPSAoTnV4dEVycm9yLm9wdGlvbnMgfHwgTnV4dEVycm9yKS5sYXlvdXRcbiAgICBjb25zdCBsYXlvdXQgPSBhd2FpdCB0aGlzLmxvYWRMYXlvdXQoXG4gICAgICB0eXBlb2YgZXJyb3JMYXlvdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBlcnJvckxheW91dC5jYWxsKE51eHRFcnJvciwgYXBwLmNvbnRleHQpXG4gICAgICAgIDogZXJyb3JMYXlvdXRcbiAgICApXG5cbiAgICBhd2FpdCBjYWxsTWlkZGxld2FyZS5jYWxsKHRoaXMsIENvbXBvbmVudHMsIGFwcC5jb250ZXh0LCBsYXlvdXQpXG4gICAgaWYgKG5leHRDYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNob3cgZXJyb3IgcGFnZVxuICAgIGFwcC5jb250ZXh0LmVycm9yKHsgc3RhdHVzQ29kZTogNDA0LCBtZXNzYWdlOiAnVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZCcgfSlcbiAgICByZXR1cm4gbmV4dCgpXG4gIH1cblxuICAvLyBVcGRhdGUgLl9kYXRhIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGlmIGhvdCByZWxvYWRlZFxuICBDb21wb25lbnRzLmZvckVhY2goKENvbXBvbmVudCkgPT4ge1xuICAgIGlmIChDb21wb25lbnQuX0N0b3IgJiYgQ29tcG9uZW50Ll9DdG9yLm9wdGlvbnMpIHtcbiAgICAgIENvbXBvbmVudC5vcHRpb25zLmFzeW5jRGF0YSA9IENvbXBvbmVudC5fQ3Rvci5vcHRpb25zLmFzeW5jRGF0YVxuICAgICAgQ29tcG9uZW50Lm9wdGlvbnMuZmV0Y2ggPSBDb21wb25lbnQuX0N0b3Iub3B0aW9ucy5mZXRjaFxuICAgIH1cbiAgfSlcblxuICAvLyBBcHBseSB0cmFuc2l0aW9uc1xuICB0aGlzLnNldFRyYW5zaXRpb25zKG1hcFRyYW5zaXRpb25zKENvbXBvbmVudHMsIHRvLCBmcm9tKSlcblxuICB0cnkge1xuICAgIC8vIENhbGwgbWlkZGxld2FyZVxuICAgIGF3YWl0IGNhbGxNaWRkbGV3YXJlLmNhbGwodGhpcywgQ29tcG9uZW50cywgYXBwLmNvbnRleHQpXG4gICAgaWYgKG5leHRDYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXBwLmNvbnRleHQuX2Vycm9yZWQpIHtcbiAgICAgIHJldHVybiBuZXh0KClcbiAgICB9XG5cbiAgICAvLyBTZXQgbGF5b3V0XG4gICAgbGV0IGxheW91dCA9IENvbXBvbmVudHNbMF0ub3B0aW9ucy5sYXlvdXRcbiAgICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGF5b3V0ID0gbGF5b3V0KGFwcC5jb250ZXh0KVxuICAgIH1cbiAgICBsYXlvdXQgPSBhd2FpdCB0aGlzLmxvYWRMYXlvdXQobGF5b3V0KVxuXG4gICAgLy8gQ2FsbCBtaWRkbGV3YXJlIGZvciBsYXlvdXRcbiAgICBhd2FpdCBjYWxsTWlkZGxld2FyZS5jYWxsKHRoaXMsIENvbXBvbmVudHMsIGFwcC5jb250ZXh0LCBsYXlvdXQpXG4gICAgaWYgKG5leHRDYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXBwLmNvbnRleHQuX2Vycm9yZWQpIHtcbiAgICAgIHJldHVybiBuZXh0KClcbiAgICB9XG5cbiAgICAvLyBDYWxsIC52YWxpZGF0ZSgpXG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgQ29tcG9uZW50IG9mIENvbXBvbmVudHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBDb21wb25lbnQub3B0aW9ucy52YWxpZGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpc1ZhbGlkID0gYXdhaXQgQ29tcG9uZW50Lm9wdGlvbnMudmFsaWRhdGUoYXBwLmNvbnRleHQpXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgLy8gLi4uSWYgLnZhbGlkYXRlKCkgdGhyZXcgYW4gZXJyb3JcbiAgICAgIHRoaXMuZXJyb3Ioe1xuICAgICAgICBzdGF0dXNDb2RlOiB2YWxpZGF0aW9uRXJyb3Iuc3RhdHVzQ29kZSB8fCAnNTAwJyxcbiAgICAgICAgbWVzc2FnZTogdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2VcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbmV4dCgpXG4gICAgfVxuXG4gICAgLy8gLi4uSWYgLnZhbGlkYXRlKCkgcmV0dXJuZWQgZmFsc2VcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZXJyb3IoeyBzdGF0dXNDb2RlOiA0MDQsIG1lc3NhZ2U6ICdUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kJyB9KVxuICAgICAgcmV0dXJuIG5leHQoKVxuICAgIH1cblxuICAgIGxldCBpbnN0YW5jZXNcbiAgICAvLyBDYWxsIGFzeW5jRGF0YSAmIGZldGNoIGhvb2tzIG9uIGNvbXBvbmVudHMgbWF0Y2hlZCBieSB0aGUgcm91dGUuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQ29tcG9uZW50cy5tYXAoKENvbXBvbmVudCwgaSkgPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgb25seSBjaGlsZHJlbiByb3V0ZSBjaGFuZ2VkXG4gICAgICBDb21wb25lbnQuX3BhdGggPSBjb21waWxlKHRvLm1hdGNoZWRbbWF0Y2hlc1tpXV0ucGF0aCkodG8ucGFyYW1zKVxuICAgICAgQ29tcG9uZW50Ll9kYXRhUmVmcmVzaCA9IGZhbHNlXG4gICAgICAvLyBDaGVjayBpZiBDb21wb25lbnQgbmVlZCB0byBiZSByZWZyZXNoZWQgKGNhbGwgYXN5bmNEYXRhICYgZmV0Y2gpXG4gICAgICAvLyBPbmx5IGlmIGl0cyBzbHVnIGhhcyBjaGFuZ2VkIG9yIGlzIHdhdGNoIHF1ZXJ5IGNoYW5nZXNcbiAgICAgIGlmICgodGhpcy5fcGF0aENoYW5nZWQgJiYgdGhpcy5fcXVlcnlDaGFuZ2VkKSB8fCBDb21wb25lbnQuX3BhdGggIT09IF9sYXN0UGF0aHNbaV0pIHtcbiAgICAgICAgQ29tcG9uZW50Ll9kYXRhUmVmcmVzaCA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3BhdGhDaGFuZ2VkICYmIHRoaXMuX3F1ZXJ5Q2hhbmdlZCkge1xuICAgICAgICBjb25zdCB3YXRjaFF1ZXJ5ID0gQ29tcG9uZW50Lm9wdGlvbnMud2F0Y2hRdWVyeVxuICAgICAgICBpZiAod2F0Y2hRdWVyeSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIENvbXBvbmVudC5fZGF0YVJlZnJlc2ggPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh3YXRjaFF1ZXJ5KSkge1xuICAgICAgICAgIENvbXBvbmVudC5fZGF0YVJlZnJlc2ggPSB3YXRjaFF1ZXJ5LnNvbWUoa2V5ID0+IHRoaXMuX2RpZmZRdWVyeVtrZXldKVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3YXRjaFF1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKCFpbnN0YW5jZXMpIHtcbiAgICAgICAgICAgIGluc3RhbmNlcyA9IGdldE1hdGNoZWRDb21wb25lbnRzSW5zdGFuY2VzKHRvKVxuICAgICAgICAgIH1cbiAgICAgICAgICBDb21wb25lbnQuX2RhdGFSZWZyZXNoID0gd2F0Y2hRdWVyeS5hcHBseShpbnN0YW5jZXNbaV0sIFt0by5xdWVyeSwgZnJvbS5xdWVyeV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5faGFkRXJyb3IgJiYgdGhpcy5faXNNb3VudGVkICYmICFDb21wb25lbnQuX2RhdGFSZWZyZXNoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG5cbiAgICAgIGNvbnN0IGhhc0FzeW5jRGF0YSA9IChcbiAgICAgICAgQ29tcG9uZW50Lm9wdGlvbnMuYXN5bmNEYXRhICYmXG4gICAgICAgIHR5cGVvZiBDb21wb25lbnQub3B0aW9ucy5hc3luY0RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgIClcblxuICAgICAgY29uc3QgaGFzRmV0Y2ggPSBCb29sZWFuKENvbXBvbmVudC5vcHRpb25zLmZldGNoKVxuXG4gICAgICBjb25zdCBsb2FkaW5nSW5jcmVhc2UgPSAoaGFzQXN5bmNEYXRhICYmIGhhc0ZldGNoKSA/IDMwIDogNDVcblxuICAgICAgLy8gQ2FsbCBhc3luY0RhdGEoY29udGV4dClcbiAgICAgIGlmIChoYXNBc3luY0RhdGEpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHByb21pc2lmeShDb21wb25lbnQub3B0aW9ucy5hc3luY0RhdGEsIGFwcC5jb250ZXh0KVxuICAgICAgICAgIC50aGVuKChhc3luY0RhdGFSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGFwcGx5QXN5bmNEYXRhKENvbXBvbmVudCwgYXN5bmNEYXRhUmVzdWx0KVxuXG4gICAgICAgICAgICBpZiAodGhpcy4kbG9hZGluZy5pbmNyZWFzZSkge1xuICAgICAgICAgICAgICB0aGlzLiRsb2FkaW5nLmluY3JlYXNlKGxvYWRpbmdJbmNyZWFzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGRpc2FibGVkIHBhZ2UgbG9hZGluZ1xuICAgICAgdGhpcy4kbG9hZGluZy5tYW51YWwgPSBDb21wb25lbnQub3B0aW9ucy5sb2FkaW5nID09PSBmYWxzZVxuXG4gICAgICAvLyBDYWxsIGZldGNoKGNvbnRleHQpXG4gICAgICBpZiAoaGFzRmV0Y2gpIHtcbiAgICAgICAgbGV0IHAgPSBDb21wb25lbnQub3B0aW9ucy5mZXRjaChhcHAuY29udGV4dClcbiAgICAgICAgaWYgKCFwIHx8ICghKHAgaW5zdGFuY2VvZiBQcm9taXNlKSAmJiAodHlwZW9mIHAudGhlbiAhPT0gJ2Z1bmN0aW9uJykpKSB7XG4gICAgICAgICAgcCA9IFByb21pc2UucmVzb2x2ZShwKVxuICAgICAgICB9XG4gICAgICAgIHAudGhlbigoZmV0Y2hSZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy4kbG9hZGluZy5pbmNyZWFzZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9hZGluZy5pbmNyZWFzZShsb2FkaW5nSW5jcmVhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBwcm9taXNlcy5wdXNoKHApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICB9KSlcblxuICAgIC8vIElmIG5vdCByZWRpcmVjdGVkXG4gICAgaWYgKCFuZXh0Q2FsbGVkKSB7XG4gICAgICBpZiAodGhpcy4kbG9hZGluZy5maW5pc2ggJiYgIXRoaXMuJGxvYWRpbmcubWFudWFsKSB7XG4gICAgICAgIHRoaXMuJGxvYWRpbmcuZmluaXNoKClcbiAgICAgIH1cblxuICAgICAgbmV4dCgpXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBlcnJvciA9IGVyciB8fCB7fVxuICAgIGlmIChlcnJvci5tZXNzYWdlID09PSAnRVJSX1JFRElSRUNUJykge1xuICAgICAgcmV0dXJuIHRoaXMuJG51eHQuJGVtaXQoJ3JvdXRlQ2hhbmdlZCcsIHRvLCBmcm9tLCBlcnJvcilcbiAgICB9XG4gICAgX2xhc3RQYXRocyA9IFtdXG5cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnJvcilcblxuICAgIC8vIExvYWQgZXJyb3IgbGF5b3V0XG4gICAgbGV0IGxheW91dCA9IChOdXh0RXJyb3Iub3B0aW9ucyB8fCBOdXh0RXJyb3IpLmxheW91dFxuICAgIGlmICh0eXBlb2YgbGF5b3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsYXlvdXQgPSBsYXlvdXQoYXBwLmNvbnRleHQpXG4gICAgfVxuICAgIGF3YWl0IHRoaXMubG9hZExheW91dChsYXlvdXQpXG5cbiAgICB0aGlzLmVycm9yKGVycm9yKVxuICAgIHRoaXMuJG51eHQuJGVtaXQoJ3JvdXRlQ2hhbmdlZCcsIHRvLCBmcm9tLCBlcnJvcilcbiAgICBuZXh0KClcbiAgfVxufVxuXG4vLyBGaXggY29tcG9uZW50cyBmb3JtYXQgaW4gbWF0Y2hlZCwgaXQncyBkdWUgdG8gY29kZS1zcGxpdHRpbmcgb2YgdnVlLXJvdXRlclxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50cyAodG8sIF9fXykge1xuICBmbGF0TWFwQ29tcG9uZW50cyh0bywgKENvbXBvbmVudCwgXywgbWF0Y2gsIGtleSkgPT4ge1xuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiAhQ29tcG9uZW50Lm9wdGlvbnMpIHtcbiAgICAgIC8vIFVwZGF0ZWQgdmlhIHZ1ZS1yb3V0ZXIgcmVzb2x2ZUFzeW5jQ29tcG9uZW50cygpXG4gICAgICBDb21wb25lbnQgPSBWdWUuZXh0ZW5kKENvbXBvbmVudClcbiAgICAgIENvbXBvbmVudC5fQ3RvciA9IENvbXBvbmVudFxuICAgICAgbWF0Y2guY29tcG9uZW50c1trZXldID0gQ29tcG9uZW50XG4gICAgfVxuICAgIHJldHVybiBDb21wb25lbnRcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2hvd05leHRQYWdlICh0bykge1xuICAvLyBIaWRlIGVycm9yIGNvbXBvbmVudCBpZiBubyBlcnJvclxuICBpZiAodGhpcy5faGFkRXJyb3IgJiYgdGhpcy5fZGF0ZUxhc3RFcnJvciA9PT0gdGhpcy4kb3B0aW9ucy5udXh0LmRhdGVFcnIpIHtcbiAgICB0aGlzLmVycm9yKClcbiAgfVxuXG4gIC8vIFNldCBsYXlvdXRcbiAgbGV0IGxheW91dCA9IHRoaXMuJG9wdGlvbnMubnV4dC5lcnJcbiAgICA/IChOdXh0RXJyb3Iub3B0aW9ucyB8fCBOdXh0RXJyb3IpLmxheW91dFxuICAgIDogdG8ubWF0Y2hlZFswXS5jb21wb25lbnRzLmRlZmF1bHQub3B0aW9ucy5sYXlvdXRcblxuICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxheW91dCA9IGxheW91dChhcHAuY29udGV4dClcbiAgfVxuICB0aGlzLnNldExheW91dChsYXlvdXQpXG59XG5cbi8vIFdoZW4gbmF2aWdhdGluZyBvbiBhIGRpZmZlcmVudCByb3V0ZSBidXQgdGhlIHNhbWUgY29tcG9uZW50IGlzIHVzZWQsIFZ1ZS5qc1xuLy8gV2lsbCBub3QgdXBkYXRlIHRoZSBpbnN0YW5jZSBkYXRhLCBzbyB3ZSBoYXZlIHRvIHVwZGF0ZSAkZGF0YSBvdXJzZWx2ZXNcbmZ1bmN0aW9uIGZpeFByZXBhdGNoICh0bywgX19fKSB7XG4gIGlmICh0aGlzLl9wYXRoQ2hhbmdlZCA9PT0gZmFsc2UgJiYgdGhpcy5fcXVlcnlDaGFuZ2VkID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgaW5zdGFuY2VzID0gZ2V0TWF0Y2hlZENvbXBvbmVudHNJbnN0YW5jZXModG8pXG4gIGNvbnN0IENvbXBvbmVudHMgPSBnZXRNYXRjaGVkQ29tcG9uZW50cyh0bylcblxuICBWdWUubmV4dFRpY2soKCkgPT4ge1xuICAgIGluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSwgaSkgPT4ge1xuICAgICAgaWYgKCFpbnN0YW5jZSB8fCBpbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaW5zdGFuY2UuY29uc3RydWN0b3IuX2RhdGFSZWZyZXNoICYmXG4gICAgICAgIENvbXBvbmVudHNbaV0gPT09IGluc3RhbmNlLmNvbnN0cnVjdG9yICYmXG4gICAgICAgIGluc3RhbmNlLiR2bm9kZS5kYXRhLmtlZXBBbGl2ZSAhPT0gdHJ1ZSAmJlxuICAgICAgICB0eXBlb2YgaW5zdGFuY2UuY29uc3RydWN0b3Iub3B0aW9ucy5kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLm9wdGlvbnMuZGF0YS5jYWxsKGluc3RhbmNlKVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdEYXRhKSB7XG4gICAgICAgICAgVnVlLnNldChpbnN0YW5jZS4kZGF0YSwga2V5LCBuZXdEYXRhW2tleV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbnN1cmUgdG8gdHJpZ2dlciBzY3JvbGwgZXZlbnQgYWZ0ZXIgY2FsbGluZyBzY3JvbGxCZWhhdmlvclxuICAgICAgICB3aW5kb3cuJG51eHQuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuJG51eHQuJGVtaXQoJ3RyaWdnZXJTY3JvbGwnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgc2hvd05leHRQYWdlLmNhbGwodGhpcywgdG8pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG51eHRSZWFkeSAoX2FwcCkge1xuICB3aW5kb3cub25OdXh0UmVhZHlDYnMuZm9yRWFjaCgoY2IpID0+IHtcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYihfYXBwKVxuICAgIH1cbiAgfSlcbiAgLy8gU3BlY2lhbCBKU0RPTVxuICBpZiAodHlwZW9mIHdpbmRvdy5fb25OdXh0TG9hZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd2luZG93Ll9vbk51eHRMb2FkZWQoX2FwcClcbiAgfVxuICAvLyBBZGQgcm91dGVyIGhvb2tzXG4gIHJvdXRlci5hZnRlckVhY2goKHRvLCBmcm9tKSA9PiB7XG4gICAgLy8gV2FpdCBmb3IgZml4UHJlcGF0Y2ggKyAkZGF0YSB1cGRhdGVzXG4gICAgVnVlLm5leHRUaWNrKCgpID0+IF9hcHAuJG51eHQuJGVtaXQoJ3JvdXRlQ2hhbmdlZCcsIHRvLCBmcm9tKSlcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gbW91bnRBcHAgKF9fYXBwKSB7XG4gIC8vIFNldCBnbG9iYWwgdmFyaWFibGVzXG4gIGFwcCA9IF9fYXBwLmFwcFxuICByb3V0ZXIgPSBfX2FwcC5yb3V0ZXJcbiAgc3RvcmUgPSBfX2FwcC5zdG9yZVxuXG4gIC8vIENyZWF0ZSBWdWUgaW5zdGFuY2VcbiAgY29uc3QgX2FwcCA9IG5ldyBWdWUoYXBwKVxuXG4gIC8vIE1vdW50cyBWdWUgYXBwIHRvIERPTSBlbGVtZW50XG4gIGNvbnN0IG1vdW50ID0gKCkgPT4ge1xuICAgIF9hcHAuJG1vdW50KCcjX19udXh0JylcblxuICAgIC8vIEFkZCBhZnRlckVhY2ggcm91dGVyIGhvb2tzXG4gICAgcm91dGVyLmFmdGVyRWFjaChub3JtYWxpemVDb21wb25lbnRzKVxuICAgIHJvdXRlci5hZnRlckVhY2goZml4UHJlcGF0Y2guYmluZChfYXBwKSlcblxuICAgIC8vIExpc3RlbiBmb3IgZmlyc3QgVnVlIHVwZGF0ZVxuICAgIFZ1ZS5uZXh0VGljaygoKSA9PiB7XG4gICAgICAvLyBDYWxsIHdpbmRvdy57e2dsb2JhbHMucmVhZHlDYWxsYmFja319IGNhbGxiYWNrc1xuICAgICAgbnV4dFJlYWR5KF9hcHApXG4gICAgfSlcbiAgfVxuXG4gIC8vIFJlc29sdmUgcm91dGUgY29tcG9uZW50c1xuICBjb25zdCBDb21wb25lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwocmVzb2x2ZUNvbXBvbmVudHMocm91dGVyKSlcblxuICAvLyBFbmFibGUgdHJhbnNpdGlvbnNcbiAgX2FwcC5zZXRUcmFuc2l0aW9ucyA9IF9hcHAuJG9wdGlvbnMubnV4dC5zZXRUcmFuc2l0aW9ucy5iaW5kKF9hcHApXG4gIGlmIChDb21wb25lbnRzLmxlbmd0aCkge1xuICAgIF9hcHAuc2V0VHJhbnNpdGlvbnMobWFwVHJhbnNpdGlvbnMoQ29tcG9uZW50cywgcm91dGVyLmN1cnJlbnRSb3V0ZSkpXG4gICAgX2xhc3RQYXRocyA9IHJvdXRlci5jdXJyZW50Um91dGUubWF0Y2hlZC5tYXAocm91dGUgPT4gY29tcGlsZShyb3V0ZS5wYXRoKShyb3V0ZXIuY3VycmVudFJvdXRlLnBhcmFtcykpXG4gIH1cblxuICAvLyBJbml0aWFsaXplIGVycm9yIGhhbmRsZXJcbiAgX2FwcC4kbG9hZGluZyA9IHt9IC8vIFRvIGF2b2lkIGVycm9yIHdoaWxlIF9hcHAuJG51eHQgZG9lcyBub3QgZXhpc3RcbiAgaWYgKE5VWFQuZXJyb3IpIHtcbiAgICBfYXBwLmVycm9yKE5VWFQuZXJyb3IpXG4gIH1cblxuICAvLyBBZGQgYmVmb3JlRWFjaCByb3V0ZXIgaG9va3NcbiAgcm91dGVyLmJlZm9yZUVhY2gobG9hZEFzeW5jQ29tcG9uZW50cy5iaW5kKF9hcHApKVxuICByb3V0ZXIuYmVmb3JlRWFjaChyZW5kZXIuYmluZChfYXBwKSlcblxuICAvLyBJZiBwYWdlIGFscmVhZHkgaXMgc2VydmVyIHJlbmRlcmVkXG4gIGlmIChOVVhULnNlcnZlclJlbmRlcmVkKSB7XG4gICAgbW91bnQoKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gRmlyc3QgcmVuZGVyIG9uIGNsaWVudC1zaWRlXG4gIGNvbnN0IGNsaWVudEZpcnN0TW91bnQgPSAoKSA9PiB7XG4gICAgbm9ybWFsaXplQ29tcG9uZW50cyhyb3V0ZXIuY3VycmVudFJvdXRlLCByb3V0ZXIuY3VycmVudFJvdXRlKVxuICAgIHNob3dOZXh0UGFnZS5jYWxsKF9hcHAsIHJvdXRlci5jdXJyZW50Um91dGUpXG4gICAgLy8gRG9uJ3QgY2FsbCBmaXhQcmVwYXRjaC5jYWxsKF9hcHAsIHJvdXRlci5jdXJyZW50Um91dGUsIHJvdXRlci5jdXJyZW50Um91dGUpIHNpbmNlIGl0J3MgZmlyc3QgcmVuZGVyXG4gICAgbW91bnQoKVxuICB9XG5cbiAgcmVuZGVyLmNhbGwoX2FwcCwgcm91dGVyLmN1cnJlbnRSb3V0ZSwgcm91dGVyLmN1cnJlbnRSb3V0ZSwgKHBhdGgpID0+IHtcbiAgICAvLyBJZiBub3QgcmVkaXJlY3RlZFxuICAgIGlmICghcGF0aCkge1xuICAgICAgY2xpZW50Rmlyc3RNb3VudCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBBZGQgYSBvbmUtdGltZSBhZnRlckVhY2ggaG9vayB0b1xuICAgIC8vIG1vdW50IHRoZSBhcHAgd2FpdCBmb3IgcmVkaXJlY3QgYW5kIHJvdXRlIGdldHMgcmVzb2x2ZWRcbiAgICBjb25zdCB1bnJlZ2lzdGVySG9vayA9IHJvdXRlci5hZnRlckVhY2goKHRvLCBmcm9tKSA9PiB7XG4gICAgICB1bnJlZ2lzdGVySG9vaygpXG4gICAgICBjbGllbnRGaXJzdE1vdW50KClcbiAgICB9KVxuXG4gICAgLy8gUHVzaCB0aGUgcGF0aCBhbmQgbGV0IHJvdXRlIHRvIGJlIHJlc29sdmVkXG4gICAgcm91dGVyLnB1c2gocGF0aCwgdW5kZWZpbmVkLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVycm9ySGFuZGxlcihlcnIpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///145\n')},170:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_error_vue_vue_type_style_index_0_id_481e28b8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_error_vue_vue_type_style_index_0_id_481e28b8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_error_vue_vue_type_style_index_0_id_481e28b8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* unused harmony reexport * */\n /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_error_vue_vue_type_style_index_0_id_481e28b8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9sYXlvdXRzL2Vycm9yLnZ1ZT9kZTAyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUEwYixDQUFnQiwwZkFBRyxFQUFDIiwiZmlsZSI6IjE3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTAhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMy1vbmVPZi0xLTEhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTYtMCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Vycm9yLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQ4MWUyOGI4JnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTMtb25lT2YtMS0wIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTMtb25lT2YtMS0xIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTMtb25lT2YtMS0yIS4uL25vZGVfbW9kdWxlcy92dWV0aWZ5LWxvYWRlci9saWIvbG9hZGVyLmpzPz9yZWYtLTE2LTAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lcnJvci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ODFlMjhiOCZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///170\n")},171:function(module,exports,__webpack_require__){eval('// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(43);\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, "h1[data-v-481e28b8]{font-size:20px}", ""]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9sYXlvdXRzL2Vycm9yLnZ1ZT9lYTc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esa0NBQWtDLG1CQUFPLENBQUMsRUFBZ0Q7QUFDMUY7QUFDQTtBQUNBLGNBQWMsUUFBUyx1QkFBdUIsZUFBZTtBQUM3RDtBQUNBIiwiZmlsZSI6IjE3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbnZhciBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKTtcbmV4cG9ydHMgPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJoMVtkYXRhLXYtNDgxZTI4Yjhde2ZvbnQtc2l6ZToyMHB4fVwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///171\n')},174:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_nuxt_loading_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_nuxt_loading_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_nuxt_loading_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* unused harmony reexport * */\n /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_nuxt_loading_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi8ubnV4dC9jb21wb25lbnRzL251eHQtbG9hZGluZy52dWU/NDkyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBMmIsQ0FBZ0IseWVBQUcsRUFBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTMtb25lT2YtMS0wIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTMtb25lT2YtMS0xIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTMtb25lT2YtMS0yIS4uLy4uL25vZGVfbW9kdWxlcy92dWV0aWZ5LWxvYWRlci9saWIvbG9hZGVyLmpzPz9yZWYtLTE2LTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9udXh0LWxvYWRpbmcudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1jc3MmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTAhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMy1vbmVPZi0xLTEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTYtMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL251eHQtbG9hZGluZy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzcyZcIiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///174\n")},175:function(module,exports,__webpack_require__){eval('// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(43);\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, ".nuxt-progress{position:fixed;top:0;left:0;right:0;height:2px;width:0;opacity:1;-webkit-transition:width .1s,opacity .4s;transition:width .1s,opacity .4s;background-color:#fff;z-index:999999}.nuxt-progress.nuxt-progress-notransition{-webkit-transition:none;transition:none}.nuxt-progress-failed{background-color:red}", ""]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi8ubnV4dC9jb21wb25lbnRzL251eHQtbG9hZGluZy52dWU/NWI1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtDQUFrQyxtQkFBTyxDQUFDLEVBQW1EO0FBQzdGO0FBQ0E7QUFDQSxjQUFjLFFBQVMsa0JBQWtCLGVBQWUsTUFBTSxPQUFPLFFBQVEsV0FBVyxRQUFRLFVBQVUseUNBQXlDLGlDQUFpQyxzQkFBc0IsZUFBZSwwQ0FBMEMsd0JBQXdCLGdCQUFnQixzQkFBc0IscUJBQXFCO0FBQ3RWO0FBQ0EiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5udXh0LXByb2dyZXNze3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtyaWdodDowO2hlaWdodDoycHg7d2lkdGg6MDtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4xcyxvcGFjaXR5IC40czt0cmFuc2l0aW9uOndpZHRoIC4xcyxvcGFjaXR5IC40cztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDo5OTk5OTl9Lm51eHQtcHJvZ3Jlc3MubnV4dC1wcm9ncmVzcy1ub3RyYW5zaXRpb257LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5udXh0LXByb2dyZXNzLWZhaWxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJlZH1cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///175\n')},176:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* unused harmony reexport * */\n /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9sYXlvdXRzL2RlZmF1bHQudnVlP2Y5MjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQW9hLENBQWdCLG9lQUFHLEVBQUMiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8/cmVmLS0zLW9uZU9mLTEtMCEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0zLW9uZU9mLTEtMSEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS0zLW9uZU9mLTEtMiEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xNi0wIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8/cmVmLS0zLW9uZU9mLTEtMCEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0zLW9uZU9mLTEtMSEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS0zLW9uZU9mLTEtMiEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xNi0wIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzcyZcIiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///176\n")},177:function(module,exports,__webpack_require__){eval('// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(43);\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, "html{font-family:Source Sans Pro,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:16px;word-spacing:1px;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;box-sizing:border-box}*,:after,:before{box-sizing:border-box;margin:0}.button--purple{display:inline-block;border-radius:4px;border:1px solid #0c1439;color:#0c1439;text-decoration:none;padding:10px 30px}.button--purple:hover{color:#fff;background-color:#0c1439}.button--grey{display:inline-block;border-radius:4px;border:1px solid #35495e;color:#35495e;text-decoration:none;padding:10px 30px;margin-left:15px}.button--grey:hover{color:#fff;background-color:#35495e}", ""]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9sYXlvdXRzL2RlZmF1bHQudnVlPzBlZjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQ0FBa0MsbUJBQU8sQ0FBQyxFQUFnRDtBQUMxRjtBQUNBO0FBQ0EsY0FBYyxRQUFTLFFBQVEsNkdBQTZHLGVBQWUsaUJBQWlCLDBCQUEwQiw4QkFBOEIsa0NBQWtDLG1DQUFtQyxzQkFBc0IsaUJBQWlCLHNCQUFzQixTQUFTLGdCQUFnQixxQkFBcUIsa0JBQWtCLHlCQUF5QixjQUFjLHFCQUFxQixrQkFBa0Isc0JBQXNCLFdBQVcseUJBQXlCLGNBQWMscUJBQXFCLGtCQUFrQix5QkFBeUIsY0FBYyxxQkFBcUIsa0JBQWtCLGlCQUFpQixvQkFBb0IsV0FBVyx5QkFBeUI7QUFDMXZCO0FBQ0EiLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcImh0bWx7Zm9udC1mYW1pbHk6U291cmNlIFNhbnMgUHJvLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O3dvcmQtc3BhY2luZzoxcHg7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtib3gtc2l6aW5nOmJvcmRlci1ib3h9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjB9LmJ1dHRvbi0tcHVycGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgIzBjMTQzOTtjb2xvcjojMGMxNDM5O3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6MTBweCAzMHB4fS5idXR0b24tLXB1cnBsZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzBjMTQzOX0uYnV0dG9uLS1ncmV5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgIzM1NDk1ZTtjb2xvcjojMzU0OTVlO3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6MTBweCAzMHB4O21hcmdpbi1sZWZ0OjE1cHh9LmJ1dHRvbi0tZ3JleTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzM1NDk1ZX1cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///177\n')},178:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "state", function() { return state; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getters", function() { return getters; });\nvar state = function state() {\n return {};\n};\nvar getters = {};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zdG9yZS9pbmRleC5qcz85MTAxIl0sIm5hbWVzIjpbInN0YXRlIiwiZ2V0dGVycyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQU8sSUFBTUEsS0FBSyxHQUFHLFNBQVJBLEtBQVE7QUFBQSxTQUFPLEVBQVA7QUFBQSxDQUFkO0FBSUEsSUFBTUMsT0FBTyxHQUFHLEVBQWhCIiwiZmlsZSI6IjE3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBzdGF0ZSA9ICgpID0+ICh7XG5cbn0pXG5cbmV4cG9ydCBjb25zdCBnZXR0ZXJzID0ge30iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n')},179:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"state\", function() { return state; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mutations\", function() { return mutations; });\n// https://www.mikestreety.co.uk/blog/vue-js-using-localstorage-with-the-vuex-store\nvar state = function state() {\n return {\n isDrawerOpen: true,\n isDrawerPinned: false\n };\n};\nvar mutations = {\n // initializeStore(state) {\n // if(localStorage.getItem('store')) {\n // this.replaceState(\n // Object.assign(state,JSON.parse(localStorage.getItem('store')))\n // );\n // }\n // },\n toggleDrawerState: function toggleDrawerState(state, newDrawerState) {\n if (state.isDrawerPinned) {\n return;\n }\n\n state.isDrawerOpen = !state.isDrawerOpen;\n },\n setDrawer: function setDrawer(state, newDrawerState) {\n if (state.isDrawerPinned) {\n return;\n }\n\n state.isDrawerOpen = newDrawerState;\n },\n setMenuLock: function setMenuLock(state, newLockState) {\n state.isDrawerPinned = newLockState;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zdG9yZS9kb2NzLmpzPzNiYjAiXSwibmFtZXMiOlsic3RhdGUiLCJpc0RyYXdlck9wZW4iLCJpc0RyYXdlclBpbm5lZCIsIm11dGF0aW9ucyIsInRvZ2dsZURyYXdlclN0YXRlIiwibmV3RHJhd2VyU3RhdGUiLCJzZXREcmF3ZXIiLCJzZXRNZW51TG9jayIsIm5ld0xvY2tTdGF0ZSJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDTyxJQUFNQSxLQUFLLEdBQUcsU0FBUkEsS0FBUTtBQUFBLFNBQU87QUFDeEJDLGdCQUFZLEVBQUUsSUFEVTtBQUV4QkMsa0JBQWMsRUFBRTtBQUZRLEdBQVA7QUFBQSxDQUFkO0FBS0EsSUFBTUMsU0FBUyxHQUFHO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FDLG1CQVJxQiw2QkFRSEosS0FSRyxFQVFJSyxjQVJKLEVBUW9CO0FBQ3JDLFFBQUlMLEtBQUssQ0FBQ0UsY0FBVixFQUEwQjtBQUN0QjtBQUNIOztBQUNERixTQUFLLENBQUNDLFlBQU4sR0FBbUIsQ0FBQ0QsS0FBSyxDQUFDQyxZQUExQjtBQUNILEdBYm9CO0FBY3JCSyxXQWRxQixxQkFjWE4sS0FkVyxFQWNKSyxjQWRJLEVBY1k7QUFDN0IsUUFBSUwsS0FBSyxDQUFDRSxjQUFWLEVBQTBCO0FBQ3RCO0FBQ0g7O0FBQ0RGLFNBQUssQ0FBQ0MsWUFBTixHQUFtQkksY0FBbkI7QUFDSCxHQW5Cb0I7QUFvQnJCRSxhQXBCcUIsdUJBb0JUUCxLQXBCUyxFQW9CRlEsWUFwQkUsRUFvQlk7QUFDN0JSLFNBQUssQ0FBQ0UsY0FBTixHQUFxQk0sWUFBckI7QUFDSDtBQXRCb0IsQ0FBbEIiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBodHRwczovL3d3dy5taWtlc3RyZWV0eS5jby51ay9ibG9nL3Z1ZS1qcy11c2luZy1sb2NhbHN0b3JhZ2Utd2l0aC10aGUtdnVleC1zdG9yZVxuZXhwb3J0IGNvbnN0IHN0YXRlID0gKCkgPT4gKHtcbiAgICBpc0RyYXdlck9wZW46IHRydWUsXG4gICAgaXNEcmF3ZXJQaW5uZWQ6IGZhbHNlXG59KTtcblxuZXhwb3J0IGNvbnN0IG11dGF0aW9ucyA9IHtcbiAgICAvLyBpbml0aWFsaXplU3RvcmUoc3RhdGUpIHtcbiAgICAvLyAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0b3JlJykpIHtcbiAgICAvLyAgICAgICAgIHRoaXMucmVwbGFjZVN0YXRlKFxuICAgIC8vICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmUnKSkpXG4gICAgLy8gICAgICAgICApO1xuICAgIC8vICAgICB9XG4gICAgLy8gfSxcbiAgICB0b2dnbGVEcmF3ZXJTdGF0ZShzdGF0ZSwgbmV3RHJhd2VyU3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLmlzRHJhd2VyUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuaXNEcmF3ZXJPcGVuPSFzdGF0ZS5pc0RyYXdlck9wZW47XG4gICAgfSxcbiAgICBzZXREcmF3ZXIoc3RhdGUsIG5ld0RyYXdlclN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5pc0RyYXdlclBpbm5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmlzRHJhd2VyT3Blbj1uZXdEcmF3ZXJTdGF0ZTtcbiAgICB9LFxuICAgIHNldE1lbnVMb2NrKHN0YXRlLCBuZXdMb2NrU3RhdGUpIHtcbiAgICAgICAgc3RhdGUuaXNEcmF3ZXJQaW5uZWQ9bmV3TG9ja1N0YXRlO1xuICAgIH1cbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///179\n")},27:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js\nvar es7_object_get_own_property_descriptors = __webpack_require__(24);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.symbol.js\nvar es6_symbol = __webpack_require__(10);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js\nvar web_dom_iterable = __webpack_require__(7);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js\nvar es6_object_keys = __webpack_require__(22);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.to-string.js\nvar es6_object_to_string = __webpack_require__(6);\n\n// EXTERNAL MODULE: ./node_modules/regenerator-runtime/runtime.js\nvar runtime = __webpack_require__(62);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\nvar defineProperty = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.function.name.js\nvar es6_function_name = __webpack_require__(28);\n\n// EXTERNAL MODULE: ./node_modules/vue/dist/vue.runtime.esm.js\nvar vue_runtime_esm = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/vue-meta/dist/vue-meta.esm.browser.js\nvar vue_meta_esm_browser = __webpack_require__(131);\n\n// EXTERNAL MODULE: ./node_modules/vue-client-only/dist/vue-client-only.common.js\nvar vue_client_only_common = __webpack_require__(90);\nvar vue_client_only_common_default = /*#__PURE__*/__webpack_require__.n(vue_client_only_common);\n\n// EXTERNAL MODULE: ./node_modules/vue-no-ssr/dist/vue-no-ssr.common.js\nvar vue_no_ssr_common = __webpack_require__(42);\nvar vue_no_ssr_common_default = /*#__PURE__*/__webpack_require__.n(vue_no_ssr_common);\n\n// EXTERNAL MODULE: ./node_modules/vue-router/dist/vue-router.esm.js\nvar vue_router_esm = __webpack_require__(56);\n\n// EXTERNAL MODULE: ./.nuxt/utils.js\nvar utils = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./.nuxt/router.scrollBehavior.js\n\n\n\nif (true) {\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual'; // reset scrollRestoration to auto when leaving page, allowing page reload\n // and back-navigation from other pages to use the browser to restore the\n // scrolling position.\n\n window.addEventListener('beforeunload', function () {\n window.history.scrollRestoration = 'auto';\n }); // Setting scrollRestoration to manual again when returning to this page.\n\n window.addEventListener('load', function () {\n window.history.scrollRestoration = 'manual';\n });\n }\n}\n\n/* harmony default export */ var router_scrollBehavior = (function (to, from, savedPosition) {\n // if the returned position is falsy or an empty object,\n // will retain current scroll position.\n var position = false; // if no children detected and scrollToTop is not explicitly disabled\n\n var Pages = Object(utils[\"e\" /* getMatchedComponents */])(to);\n\n if (Pages.length < 2 && Pages.every(function (Page) {\n return Page.options.scrollToTop !== false;\n })) {\n // scroll to the top of the page\n position = {\n x: 0,\n y: 0\n };\n } else if (Pages.some(function (Page) {\n return Page.options.scrollToTop;\n })) {\n // if one of the children has scrollToTop option set to true\n position = {\n x: 0,\n y: 0\n };\n } // savedPosition is only available for popstate navigations (back button)\n\n\n if (savedPosition) {\n position = savedPosition;\n }\n\n var nuxt = window.$nuxt; // triggerScroll is only fired when a new component is loaded\n\n if (to.path === from.path && to.hash !== from.hash) {\n nuxt.$nextTick(function () {\n return nuxt.$emit('triggerScroll');\n });\n }\n\n return new Promise(function (resolve) {\n // wait for the out transition to complete (if necessary)\n nuxt.$once('triggerScroll', function () {\n // coords will be used if no selector is provided,\n // or if the selector didn't match any element.\n if (to.hash) {\n var hash = to.hash; // CSS.escape() is not supported with IE and Edge.\n\n if (typeof window.CSS !== 'undefined' && typeof window.CSS.escape !== 'undefined') {\n hash = '#' + window.CSS.escape(hash.substr(1));\n }\n\n try {\n if (document.querySelector(hash)) {\n // scroll to anchor by returning the selector\n position = {\n selector: hash\n };\n }\n } catch (e) {\n console.warn('Failed to save scroll position. Please add CSS.escape() polyfill (https://github.com/mathiasbynens/CSS.escape).');\n }\n }\n\n resolve(position);\n });\n });\n});\n// CONCATENATED MODULE: ./.nuxt/router.js\n\n\n\n\n\nvar router_04927a0e = function _04927a0e() {\n return Object(utils[\"j\" /* interopDefault */])(Promise.all(/* import() | pages/docs/index */[__webpack_require__.e(0), __webpack_require__.e(1), __webpack_require__.e(5)]).then(__webpack_require__.bind(null, 372)));\n};\n\nvar router_b005243e = function _b005243e() {\n return Object(utils[\"j\" /* interopDefault */])(Promise.all(/* import() | pages/docs/namespaces */[__webpack_require__.e(0), __webpack_require__.e(6)]).then(__webpack_require__.bind(null, 371)));\n};\n\nvar router_07ffbc9e = function _07ffbc9e() {\n return Object(utils[\"j\" /* interopDefault */])(Promise.all(/* import() | pages/docs/_slug */[__webpack_require__.e(0), __webpack_require__.e(1), __webpack_require__.e(4)]).then(__webpack_require__.bind(null, 373)));\n};\n\nvar router_64c66db2 = function _64c66db2() {\n return Object(utils[\"j\" /* interopDefault */])(__webpack_require__.e(/* import() | pages/index */ 7).then(__webpack_require__.bind(null, 370)));\n}; // TODO: remove in Nuxt 3\n\n\nvar emptyFn = function emptyFn() {};\n\nvar originalPush = vue_router_esm[\"a\" /* default */].prototype.push;\n\nvue_router_esm[\"a\" /* default */].prototype.push = function push(location) {\n var onComplete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : emptyFn;\n var onAbort = arguments.length > 2 ? arguments[2] : undefined;\n return originalPush.call(this, location, onComplete, onAbort);\n};\n\nvue_runtime_esm[\"a\" /* default */].use(vue_router_esm[\"a\" /* default */]);\nvar routerOptions = {\n mode: 'hash',\n base: decodeURI('/'),\n linkActiveClass: 'nuxt-link-active',\n linkExactActiveClass: 'nuxt-link-exact-active',\n scrollBehavior: router_scrollBehavior,\n routes: [{\n path: \"/docs\",\n component: router_04927a0e,\n name: \"docs\"\n }, {\n path: \"/docs/namespaces\",\n component: router_b005243e,\n name: \"docs-namespaces\"\n }, {\n path: \"/docs/:slug\",\n component: router_07ffbc9e,\n name: \"docs-slug\"\n }, {\n path: \"/\",\n component: router_64c66db2,\n name: \"index\"\n }],\n fallback: false\n};\nfunction createRouter() {\n return new vue_router_esm[\"a\" /* default */](routerOptions);\n}\n// CONCATENATED MODULE: ./.nuxt/components/nuxt-child.js\n/* harmony default export */ var nuxt_child = ({\n name: 'NuxtChild',\n functional: true,\n props: {\n nuxtChildKey: {\n type: String,\n default: ''\n },\n keepAlive: Boolean,\n keepAliveProps: {\n type: Object,\n default: undefined\n }\n },\n render: function render(h, _ref) {\n var parent = _ref.parent,\n data = _ref.data,\n props = _ref.props;\n data.nuxtChild = true;\n var _parent = parent;\n var transitions = parent.$nuxt.nuxt.transitions;\n var defaultTransition = parent.$nuxt.nuxt.defaultTransition;\n var depth = 0;\n\n while (parent) {\n if (parent.$vnode && parent.$vnode.data.nuxtChild) {\n depth++;\n }\n\n parent = parent.$parent;\n }\n\n data.nuxtChildDepth = depth;\n var transition = transitions[depth] || defaultTransition;\n var transitionProps = {};\n transitionsKeys.forEach(function (key) {\n if (typeof transition[key] !== 'undefined') {\n transitionProps[key] = transition[key];\n }\n });\n var listeners = {};\n listenersKeys.forEach(function (key) {\n if (typeof transition[key] === 'function') {\n listeners[key] = transition[key].bind(_parent);\n }\n }); // Add triggerScroll event on beforeEnter (fix #1376)\n\n var beforeEnter = listeners.beforeEnter;\n\n listeners.beforeEnter = function (el) {\n // Ensure to trigger scroll event after calling scrollBehavior\n window.$nuxt.$nextTick(function () {\n window.$nuxt.$emit('triggerScroll');\n });\n\n if (beforeEnter) {\n return beforeEnter.call(_parent, el);\n }\n }; // make sure that leave is called asynchronous (fix #5703)\n\n\n if (transition.css === false) {\n var leave = listeners.leave; // only add leave listener when user didnt provide one\n // or when it misses the done argument\n\n if (!leave || leave.length < 2) {\n listeners.leave = function (el, done) {\n if (leave) {\n leave.call(_parent, el);\n }\n\n _parent.$nextTick(done);\n };\n }\n }\n\n var routerView = h('routerView', data);\n\n if (props.keepAlive) {\n routerView = h('keep-alive', {\n props: props.keepAliveProps\n }, [routerView]);\n }\n\n return h('transition', {\n props: transitionProps,\n on: listeners\n }, [routerView]);\n }\n});\nvar transitionsKeys = ['name', 'mode', 'appear', 'css', 'type', 'duration', 'enterClass', 'leaveClass', 'appearClass', 'enterActiveClass', 'enterActiveClass', 'leaveActiveClass', 'appearActiveClass', 'enterToClass', 'leaveToClass', 'appearToClass'];\nvar listenersKeys = ['beforeEnter', 'enter', 'afterEnter', 'enterCancelled', 'beforeLeave', 'leave', 'afterLeave', 'leaveCancelled', 'beforeAppear', 'appear', 'afterAppear', 'appearCancelled'];\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vuetify-loader/lib/loader.js??ref--16-0!./node_modules/vue-loader/lib??vue-loader-options!./layouts/error.vue?vue&type=template&id=481e28b8&scoped=true&\nvar errorvue_type_template_id_481e28b8_scoped_true_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"dark\":\"\"}},[(_vm.error.statusCode === 404)?_c('h1',[_vm._v(\"\\n \"+_vm._s(_vm.pageNotFound)+\"\\n \")]):_c('h1',[_vm._v(\"\\n \"+_vm._s(_vm.otherError)+\"\\n \")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"https://github.com/datastax/nosqlbench-labs/issues/new?labels=APPUSE,UX,documentation\"}},[_vm._v(\"\\n File A UI Bug Report\\n \")]),_vm._v(\" \"),_c('NuxtLink',{attrs:{\"to\":\"/\"}},[_vm._v(\"\\n Home page\\n \")])],1)}\nvar staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./layouts/error.vue?vue&type=template&id=481e28b8&scoped=true&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vuetify-loader/lib/loader.js??ref--16-0!./node_modules/vue-loader/lib??vue-loader-options!./layouts/error.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var errorvue_type_script_lang_js_ = ({\n layout: 'empty',\n props: {\n error: {\n type: Object,\n default: null\n }\n },\n head: function head() {\n var title = this.error.statusCode === 404 ? this.pageNotFound : this.otherError;\n return {\n title: title\n };\n },\n data: function data() {\n return {\n pageNotFound: '404 Not Found',\n otherError: 'An error occurred'\n };\n }\n});\n// CONCATENATED MODULE: ./layouts/error.vue?vue&type=script&lang=js&\n /* harmony default export */ var layouts_errorvue_type_script_lang_js_ = (errorvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./layouts/error.vue?vue&type=style&index=0&id=481e28b8&scoped=true&lang=css&\nvar errorvue_type_style_index_0_id_481e28b8_scoped_true_lang_css_ = __webpack_require__(170);\n\n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(40);\n\n// EXTERNAL MODULE: ./node_modules/vuetify-loader/lib/runtime/installComponents.js\nvar installComponents = __webpack_require__(96);\nvar installComponents_default = /*#__PURE__*/__webpack_require__.n(installComponents);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VApp/VApp.js\nvar VApp = __webpack_require__(211);\n\n// CONCATENATED MODULE: ./layouts/error.vue\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n layouts_errorvue_type_script_lang_js_,\n errorvue_type_template_id_481e28b8_scoped_true_render,\n staticRenderFns,\n false,\n null,\n \"481e28b8\",\n null\n \n)\n\n/* harmony default export */ var layouts_error = (component.exports);\n\n/* vuetify-loader */\n\n\ninstallComponents_default()(component, {VApp: VApp[\"a\" /* default */]})\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.regexp.to-string.js\nvar es6_regexp_to_string = __webpack_require__(59);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.date.to-string.js\nvar es6_date_to_string = __webpack_require__(60);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.regexp.replace.js\nvar es6_regexp_replace = __webpack_require__(35);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 3 modules\nvar slicedToArray = __webpack_require__(17);\n\n// CONCATENATED MODULE: ./.nuxt/components/nuxt.js\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var components_nuxt = ({\n name: 'Nuxt',\n components: {\n NuxtChild: nuxt_child,\n NuxtError: layouts_error\n },\n props: {\n nuxtChildKey: {\n type: String,\n default: undefined\n },\n keepAlive: Boolean,\n keepAliveProps: {\n type: Object,\n default: undefined\n },\n name: {\n type: String,\n default: 'default'\n }\n },\n errorCaptured: function errorCaptured(error) {\n // if we receive and error while showing the NuxtError component\n // capture the error and force an immediate update so we re-render\n // without the NuxtError component\n if (this.displayingNuxtError) {\n this.errorFromNuxtError = error;\n this.$forceUpdate();\n }\n },\n computed: {\n routerViewKey: function routerViewKey() {\n // If nuxtChildKey prop is given or current route has children\n if (typeof this.nuxtChildKey !== 'undefined' || this.$route.matched.length > 1) {\n return this.nuxtChildKey || Object(utils[\"b\" /* compile */])(this.$route.matched[0].path)(this.$route.params);\n }\n\n var _this$$route$matched = Object(slicedToArray[\"a\" /* default */])(this.$route.matched, 1),\n matchedRoute = _this$$route$matched[0];\n\n if (!matchedRoute) {\n return this.$route.path;\n }\n\n var Component = matchedRoute.components.default;\n\n if (Component && Component.options) {\n var options = Component.options;\n\n if (options.key) {\n return typeof options.key === 'function' ? options.key(this.$route) : options.key;\n }\n }\n\n var strict = /\\/$/.test(matchedRoute.path);\n return strict ? this.$route.path : this.$route.path.replace(/\\/$/, '');\n }\n },\n beforeCreate: function beforeCreate() {\n vue_runtime_esm[\"a\" /* default */].util.defineReactive(this, 'nuxt', this.$root.$options.nuxt);\n },\n render: function render(h) {\n var _this = this;\n\n // if there is no error\n if (!this.nuxt.err) {\n // Directly return nuxt child\n return h('NuxtChild', {\n key: this.routerViewKey,\n props: this.$props\n });\n } // if an error occured within NuxtError show a simple\n // error message instead to prevent looping\n\n\n if (this.errorFromNuxtError) {\n this.$nextTick(function () {\n return _this.errorFromNuxtError = false;\n });\n return h('div', {}, [h('h2', 'An error occured while showing the error page'), h('p', 'Unfortunately an error occured and while showing the error page another error occured'), h('p', \"Error details: \".concat(this.errorFromNuxtError.toString())), h('nuxt-link', {\n props: {\n to: '/'\n }\n }, 'Go back to home')]);\n } // track if we are showing the NuxtError component\n\n\n this.displayingNuxtError = true;\n this.$nextTick(function () {\n return _this.displayingNuxtError = false;\n });\n return h(layouts_error, {\n props: {\n error: this.nuxt.err\n }\n });\n }\n});\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.iterator.js\nvar es6_string_iterator = __webpack_require__(61);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vuetify-loader/lib/loader.js??ref--16-0!./node_modules/vue-loader/lib??vue-loader-options!./.nuxt/components/nuxt-loading.vue?vue&type=script&lang=js&\n/* harmony default export */ var nuxt_loadingvue_type_script_lang_js_ = ({\n name: 'NuxtLoading',\n data: function data() {\n return {\n percent: 0,\n show: false,\n canSucceed: true,\n reversed: false,\n skipTimerCount: 0,\n rtl: false,\n throttle: 200,\n duration: 5000,\n continuous: false\n };\n },\n computed: {\n left: function left() {\n if (!this.continuous && !this.rtl) {\n return false;\n }\n\n return this.rtl ? this.reversed ? '0px' : 'auto' : !this.reversed ? '0px' : 'auto';\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.clear();\n },\n methods: {\n clear: function clear() {\n clearInterval(this._timer);\n clearTimeout(this._throttle);\n this._timer = null;\n },\n start: function start() {\n var _this = this;\n\n this.clear();\n this.percent = 0;\n this.reversed = false;\n this.skipTimerCount = 0;\n this.canSucceed = true;\n\n if (this.throttle) {\n this._throttle = setTimeout(function () {\n return _this.startTimer();\n }, this.throttle);\n } else {\n this.startTimer();\n }\n\n return this;\n },\n set: function set(num) {\n this.show = true;\n this.canSucceed = true;\n this.percent = Math.min(100, Math.max(0, Math.floor(num)));\n return this;\n },\n get: function get() {\n return this.percent;\n },\n increase: function increase(num) {\n this.percent = Math.min(100, Math.floor(this.percent + num));\n return this;\n },\n decrease: function decrease(num) {\n this.percent = Math.max(0, Math.floor(this.percent - num));\n return this;\n },\n pause: function pause() {\n clearInterval(this._timer);\n return this;\n },\n resume: function resume() {\n this.startTimer();\n return this;\n },\n finish: function finish() {\n this.percent = this.reversed ? 0 : 100;\n this.hide();\n return this;\n },\n hide: function hide() {\n var _this2 = this;\n\n this.clear();\n setTimeout(function () {\n _this2.show = false;\n\n _this2.$nextTick(function () {\n _this2.percent = 0;\n _this2.reversed = false;\n });\n }, 500);\n return this;\n },\n fail: function fail() {\n this.canSucceed = false;\n return this;\n },\n startTimer: function startTimer() {\n var _this3 = this;\n\n if (!this.show) {\n this.show = true;\n }\n\n if (typeof this._cut === 'undefined') {\n this._cut = 10000 / Math.floor(this.duration);\n }\n\n this._timer = setInterval(function () {\n /**\n * When reversing direction skip one timers\n * so 0, 100 are displayed for two iterations\n * also disable css width transitioning\n * which otherwise interferes and shows\n * a jojo effect\n */\n if (_this3.skipTimerCount > 0) {\n _this3.skipTimerCount--;\n return;\n }\n\n if (_this3.reversed) {\n _this3.decrease(_this3._cut);\n } else {\n _this3.increase(_this3._cut);\n }\n\n if (_this3.continuous) {\n if (_this3.percent >= 100) {\n _this3.skipTimerCount = 1;\n _this3.reversed = !_this3.reversed;\n } else if (_this3.percent <= 0) {\n _this3.skipTimerCount = 1;\n _this3.reversed = !_this3.reversed;\n }\n }\n }, 100);\n }\n },\n render: function render(h) {\n var el = h(false);\n\n if (this.show) {\n el = h('div', {\n staticClass: 'nuxt-progress',\n class: {\n 'nuxt-progress-notransition': this.skipTimerCount > 0,\n 'nuxt-progress-failed': !this.canSucceed\n },\n style: {\n width: this.percent + '%',\n left: this.left\n }\n });\n }\n\n return el;\n }\n});\n// CONCATENATED MODULE: ./.nuxt/components/nuxt-loading.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_nuxt_loadingvue_type_script_lang_js_ = (nuxt_loadingvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./.nuxt/components/nuxt-loading.vue?vue&type=style&index=0&lang=css&\nvar nuxt_loadingvue_type_style_index_0_lang_css_ = __webpack_require__(174);\n\n// CONCATENATED MODULE: ./.nuxt/components/nuxt-loading.vue\nvar nuxt_loading_render, nuxt_loading_staticRenderFns\n\n\n\n\n\n/* normalize component */\n\nvar nuxt_loading_component = Object(componentNormalizer[\"a\" /* default */])(\n components_nuxt_loadingvue_type_script_lang_js_,\n nuxt_loading_render,\n nuxt_loading_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var nuxt_loading = (nuxt_loading_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vuetify-loader/lib/loader.js??ref--16-0!./node_modules/vue-loader/lib??vue-loader-options!./layouts/default.vue?vue&type=template&id=760914e3&\nvar defaultvue_type_template_id_760914e3_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('nuxt')],1)}\nvar defaultvue_type_template_id_760914e3_staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./layouts/default.vue?vue&type=template&id=760914e3&\n\n// EXTERNAL MODULE: ./layouts/default.vue?vue&type=style&index=0&lang=css&\nvar defaultvue_type_style_index_0_lang_css_ = __webpack_require__(176);\n\n// CONCATENATED MODULE: ./layouts/default.vue\n\nvar script = {}\n\n\n\n/* normalize component */\n\nvar default_component = Object(componentNormalizer[\"a\" /* default */])(\n script,\n defaultvue_type_template_id_760914e3_render,\n defaultvue_type_template_id_760914e3_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var layouts_default = (default_component.exports);\n// CONCATENATED MODULE: ./.nuxt/App.js\n\n\n\n\n\n\n\n\n\nvar layouts = {\n \"_default\": layouts_default\n};\n/* harmony default export */ var App = ({\n head: {\n \"titleTemplate\": \"%snosqlbench docs\",\n \"title\": \"guidebook\",\n \"meta\": [{\n \"charset\": \"utf-8\"\n }, {\n \"name\": \"viewport\",\n \"content\": \"width=device-width, initial-scale=1\"\n }, {\n \"hid\": \"description\",\n \"name\": \"description\",\n \"content\": \"Docs App for NoSQLBench\"\n }],\n \"link\": [{\n \"rel\": \"icon\",\n \"type\": \"image/x-icon\",\n \"href\": \"/favicon.ico\"\n }, {\n \"rel\": \"stylesheet\",\n \"type\": \"text/css\",\n \"href\": \"https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap\"\n }, {\n \"rel\": \"stylesheet\",\n \"type\": \"text/css\",\n \"href\": \"https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css\"\n }],\n \"style\": [],\n \"script\": []\n },\n render: function render(h, props) {\n var loadingEl = h('NuxtLoading', {\n ref: 'loading'\n });\n\n if (this.nuxt.err && layouts_error) {\n var errorLayout = (layouts_error.options || layouts_error).layout;\n\n if (errorLayout) {\n this.setLayout(typeof errorLayout === 'function' ? errorLayout.call(layouts_error, this.context) : errorLayout);\n }\n }\n\n var layoutEl = h(this.layout || 'nuxt');\n var templateEl = h('div', {\n domProps: {\n id: '__layout'\n },\n key: this.layoutName\n }, [layoutEl]);\n var transitionEl = h('transition', {\n props: {\n name: 'layout',\n mode: 'out-in'\n },\n on: {\n beforeEnter: function beforeEnter(el) {\n // Ensure to trigger scroll event after calling scrollBehavior\n window.$nuxt.$nextTick(function () {\n window.$nuxt.$emit('triggerScroll');\n });\n }\n }\n }, [templateEl]);\n return h('div', {\n domProps: {\n id: '__nuxt'\n }\n }, [loadingEl, transitionEl]);\n },\n data: function data() {\n return {\n isOnline: true,\n layout: null,\n layoutName: ''\n };\n },\n beforeCreate: function beforeCreate() {\n vue_runtime_esm[\"a\" /* default */].util.defineReactive(this, 'nuxt', this.$options.nuxt);\n },\n created: function created() {\n // Add this.$nuxt in child instances\n vue_runtime_esm[\"a\" /* default */].prototype.$nuxt = this; // add to window so we can listen when ready\n\n if (true) {\n window.$nuxt = this;\n this.refreshOnlineStatus(); // Setup the listeners\n\n window.addEventListener('online', this.refreshOnlineStatus);\n window.addEventListener('offline', this.refreshOnlineStatus);\n } // Add $nuxt.error()\n\n\n this.error = this.nuxt.error; // Add $nuxt.context\n\n this.context = this.$options.context;\n },\n mounted: function mounted() {\n this.$loading = this.$refs.loading;\n },\n watch: {\n 'nuxt.err': 'errorChanged'\n },\n computed: {\n isOffline: function isOffline() {\n return !this.isOnline;\n }\n },\n methods: {\n refreshOnlineStatus: function refreshOnlineStatus() {\n if (true) {\n if (typeof window.navigator.onLine === 'undefined') {\n // If the browser doesn't support connection status reports\n // assume that we are online because most apps' only react\n // when they now that the connection has been interrupted\n this.isOnline = true;\n } else {\n this.isOnline = window.navigator.onLine;\n }\n }\n },\n refresh: function refresh() {\n var _this = this;\n\n var pages, promises;\n return regeneratorRuntime.async(function refresh$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n pages = Object(utils[\"f\" /* getMatchedComponentsInstances */])(this.$route);\n\n if (pages.length) {\n _context.next = 3;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 3:\n this.$loading.start();\n promises = pages.map(function (page) {\n var p = [];\n\n if (page.$options.fetch) {\n p.push(Object(utils[\"m\" /* promisify */])(page.$options.fetch, _this.context));\n }\n\n if (page.$options.asyncData) {\n p.push(Object(utils[\"m\" /* promisify */])(page.$options.asyncData, _this.context).then(function (newData) {\n for (var key in newData) {\n vue_runtime_esm[\"a\" /* default */].set(page.$data, key, newData[key]);\n }\n }));\n }\n\n return Promise.all(p);\n });\n _context.prev = 5;\n _context.next = 8;\n return regeneratorRuntime.awrap(Promise.all(promises));\n\n case 8:\n _context.next = 15;\n break;\n\n case 10:\n _context.prev = 10;\n _context.t0 = _context[\"catch\"](5);\n this.$loading.fail();\n Object(utils[\"i\" /* globalHandleError */])(_context.t0);\n this.error(_context.t0);\n\n case 15:\n this.$loading.finish();\n\n case 16:\n case \"end\":\n return _context.stop();\n }\n }\n }, null, this, [[5, 10]]);\n },\n errorChanged: function errorChanged() {\n if (this.nuxt.err && this.$loading) {\n if (this.$loading.fail) {\n this.$loading.fail();\n }\n\n if (this.$loading.finish) {\n this.$loading.finish();\n }\n }\n },\n setLayout: function setLayout(layout) {\n if (!layout || !layouts['_' + layout]) {\n layout = 'default';\n }\n\n this.layoutName = layout;\n this.layout = layouts['_' + layout];\n return this.layout;\n },\n loadLayout: function loadLayout(layout) {\n if (!layout || !layouts['_' + layout]) {\n layout = 'default';\n }\n\n return Promise.resolve(layouts['_' + layout]);\n }\n },\n components: {\n NuxtLoading: nuxt_loading\n }\n});\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.symbol.async-iterator.js\nvar es7_symbol_async_iterator = __webpack_require__(47);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.array.includes.js\nvar es7_array_includes = __webpack_require__(45);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.regexp.split.js\nvar es6_regexp_split = __webpack_require__(46);\n\n// EXTERNAL MODULE: ./node_modules/vuex/dist/vuex.esm.js\nvar vuex_esm = __webpack_require__(91);\n\n// CONCATENATED MODULE: ./.nuxt/store.js\n\n\n\n\n\n\n\n\nvue_runtime_esm[\"a\" /* default */].use(vuex_esm[\"a\" /* default */]);\nvar VUEX_PROPERTIES = ['state', 'getters', 'actions', 'mutations'];\nvar store_store = {};\n\n(function updateModules() {\n store_store = normalizeRoot(__webpack_require__(178), 'store/index.js'); // If store is an exported method = classic mode (deprecated)\n // Enforce store modules\n\n store_store.modules = store_store.modules || {};\n resolveStoreModules(__webpack_require__(179), 'docs.js'); // If the environment supports hot reloading...\n})(); // createStore\n\n\nvar createStore = store_store instanceof Function ? store_store : function () {\n return new vuex_esm[\"a\" /* default */].Store(Object.assign({\n strict: \"production\" !== 'production'\n }, store_store));\n};\n\nfunction normalizeRoot(moduleData, filePath) {\n moduleData = moduleData.default || moduleData;\n\n if (moduleData.commit) {\n throw new Error(\"[nuxt] \".concat(filePath, \" should export a method that returns a Vuex instance.\"));\n }\n\n if (typeof moduleData !== 'function') {\n // Avoid TypeError: setting a property that has only a getter when overwriting top level keys\n moduleData = Object.assign({}, moduleData);\n }\n\n return normalizeModule(moduleData, filePath);\n}\n\nfunction normalizeModule(moduleData, filePath) {\n if (moduleData.state && typeof moduleData.state !== 'function') {\n console.warn(\"'state' should be a method that returns an object in \".concat(filePath));\n\n var _state = Object.assign({}, moduleData.state); // Avoid TypeError: setting a property that has only a getter when overwriting top level keys\n\n\n moduleData = Object.assign({}, moduleData, {\n state: function state() {\n return _state;\n }\n });\n }\n\n return moduleData;\n}\n\nfunction resolveStoreModules(moduleData, filename) {\n moduleData = moduleData.default || moduleData; // Remove store src + extension (./foo/index.js -> foo/index)\n\n var namespace = filename.replace(/\\.(js|mjs)$/, '');\n var namespaces = namespace.split('/');\n var moduleName = namespaces[namespaces.length - 1];\n var filePath = \"store/\".concat(filename);\n moduleData = moduleName === 'state' ? normalizeState(moduleData, filePath) : normalizeModule(moduleData, filePath); // If src is a known Vuex property\n\n if (VUEX_PROPERTIES.includes(moduleName)) {\n var property = moduleName;\n\n var _storeModule = getStoreModule(store_store, namespaces, {\n isProperty: true\n }); // Replace state since it's a function\n\n\n mergeProperty(_storeModule, moduleData, property);\n return;\n } // If file is foo/index.js, it should be saved as foo\n\n\n var isIndexModule = moduleName === 'index';\n\n if (isIndexModule) {\n namespaces.pop();\n moduleName = namespaces[namespaces.length - 1];\n }\n\n var storeModule = getStoreModule(store_store, namespaces);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = VUEX_PROPERTIES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _property = _step.value;\n mergeProperty(storeModule, moduleData[_property], _property);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n if (moduleData.namespaced === false) {\n delete storeModule.namespaced;\n }\n}\n\nfunction normalizeState(moduleData, filePath) {\n if (typeof moduleData !== 'function') {\n console.warn(\"\".concat(filePath, \" should export a method that returns an object\"));\n var state = Object.assign({}, moduleData);\n return function () {\n return state;\n };\n }\n\n return normalizeModule(moduleData, filePath);\n}\n\nfunction getStoreModule(storeModule, namespaces) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$isProperty = _ref.isProperty,\n isProperty = _ref$isProperty === void 0 ? false : _ref$isProperty;\n\n // If ./mutations.js\n if (!namespaces.length || isProperty && namespaces.length === 1) {\n return storeModule;\n }\n\n var namespace = namespaces.shift();\n storeModule.modules[namespace] = storeModule.modules[namespace] || {};\n storeModule.modules[namespace].namespaced = true;\n storeModule.modules[namespace].modules = storeModule.modules[namespace].modules || {};\n return getStoreModule(storeModule.modules[namespace], namespaces, {\n isProperty: isProperty\n });\n}\n\nfunction mergeProperty(storeModule, moduleData, property) {\n if (!moduleData) {\n return;\n }\n\n if (property === 'state') {\n storeModule.state = moduleData || storeModule.state;\n } else {\n storeModule[property] = Object.assign({}, storeModule[property], moduleData);\n }\n}\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/framework.js + 21 modules\nvar framework = __webpack_require__(212);\n\n// CONCATENATED MODULE: ./.nuxt/vuetify/options.js\n/* harmony default export */ var vuetify_options = ({\n \"theme\": {\n \"dark\": false,\n \"themes\": {\n \"light\": {\n \"primary\": \"#51DDBD\",\n \"secondary\": \"#2D4ADE\",\n \"accent\": \"#FA7D2B\"\n }\n }\n }\n});\n// CONCATENATED MODULE: ./.nuxt/vuetify/plugin.js\n\n\n\nvue_runtime_esm[\"a\" /* default */].use(framework[\"a\" /* default */], {});\n/* harmony default export */ var vuetify_plugin = (function (ctx) {\n var vuetifyOptions = typeof vuetify_options === 'function' ? vuetify_options(ctx) : vuetify_options;\n vuetifyOptions.icons = vuetifyOptions.icons || {};\n vuetifyOptions.icons.iconfont = 'mdi';\n var vuetify = new framework[\"a\" /* default */](vuetifyOptions);\n ctx.app.vuetify = vuetify;\n ctx.$vuetify = vuetify.framework;\n});\n// EXTERNAL MODULE: ./node_modules/axios/index.js\nvar node_modules_axios = __webpack_require__(57);\nvar axios_default = /*#__PURE__*/__webpack_require__.n(node_modules_axios);\n\n// EXTERNAL MODULE: ./node_modules/defu/lib/index.js\nvar lib = __webpack_require__(133);\nvar lib_default = /*#__PURE__*/__webpack_require__.n(lib);\n\n// CONCATENATED MODULE: ./.nuxt/axios.js\n\n\n\n\n\n // Axios.prototype cannot be modified\n\nvar axiosExtra = {\n setBaseURL: function setBaseURL(baseURL) {\n this.defaults.baseURL = baseURL;\n },\n setHeader: function setHeader(name, value) {\n var scopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'common';\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = (Array.isArray(scopes) ? scopes : [scopes])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var scope = _step.value;\n\n if (!value) {\n delete this.defaults.headers[scope][name];\n return;\n }\n\n this.defaults.headers[scope][name] = value;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n },\n setToken: function setToken(token, type) {\n var scopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'common';\n var value = !token ? null : (type ? type + ' ' : '') + token;\n this.setHeader('Authorization', value, scopes);\n },\n onRequest: function onRequest(fn) {\n this.interceptors.request.use(function (config) {\n return fn(config) || config;\n });\n },\n onResponse: function onResponse(fn) {\n this.interceptors.response.use(function (response) {\n return fn(response) || response;\n });\n },\n onRequestError: function onRequestError(fn) {\n this.interceptors.request.use(undefined, function (error) {\n return fn(error) || Promise.reject(error);\n });\n },\n onResponseError: function onResponseError(fn) {\n this.interceptors.response.use(undefined, function (error) {\n return fn(error) || Promise.reject(error);\n });\n },\n onError: function onError(fn) {\n this.onRequestError(fn);\n this.onResponseError(fn);\n },\n create: function create(options) {\n return axios_createAxiosInstance(lib_default()(options, this.defaults));\n }\n}; // Request helpers ($get, $post, ...)\n\nvar _loop = function _loop() {\n var method = _arr[_i];\n\n axiosExtra['$' + method] = function () {\n return this[method].apply(this, arguments).then(function (res) {\n return res && res.data;\n });\n };\n};\n\nfor (var _i = 0, _arr = ['request', 'delete', 'get', 'head', 'options', 'post', 'put', 'patch']; _i < _arr.length; _i++) {\n _loop();\n}\n\nvar extendAxiosInstance = function extendAxiosInstance(axios) {\n for (var key in axiosExtra) {\n axios[key] = axiosExtra[key].bind(axios);\n }\n};\n\nvar axios_createAxiosInstance = function createAxiosInstance(axiosOptions) {\n // Create new axios instance\n var axios = axios_default.a.create(axiosOptions);\n axios.CancelToken = axios_default.a.CancelToken;\n axios.isCancel = axios_default.a.isCancel; // Extend axios proto\n\n extendAxiosInstance(axios); // Setup interceptors\n\n axios_setupProgress(axios);\n return axios;\n};\n\nvar axios_setupProgress = function setupProgress(axios) {\n if (false) {} // A noop loading inteterface for when $nuxt is not yet ready\n\n\n var noopLoading = {\n finish: function finish() {},\n start: function start() {},\n fail: function fail() {},\n set: function set() {}\n };\n\n var $loading = function $loading() {\n return window.$nuxt && window.$nuxt.$loading && window.$nuxt.$loading.set ? window.$nuxt.$loading : noopLoading;\n };\n\n var currentRequests = 0;\n axios.onRequest(function (config) {\n if (config && config.progress === false) {\n return;\n }\n\n currentRequests++;\n });\n axios.onResponse(function (response) {\n if (response && response.config && response.config.progress === false) {\n return;\n }\n\n currentRequests--;\n\n if (currentRequests <= 0) {\n currentRequests = 0;\n $loading().finish();\n }\n });\n axios.onError(function (error) {\n if (error && error.config && error.config.progress === false) {\n return;\n }\n\n currentRequests--;\n\n if (axios_default.a.isCancel(error)) {\n return;\n }\n\n $loading().fail();\n $loading().finish();\n });\n\n var onProgress = function onProgress(e) {\n if (!currentRequests) {\n return;\n }\n\n var progress = e.loaded * 100 / (e.total * currentRequests);\n $loading().set(Math.min(100, progress));\n };\n\n axios.defaults.onUploadProgress = onProgress;\n axios.defaults.onDownloadProgress = onProgress;\n};\n\n/* harmony default export */ var _nuxt_axios = (function (ctx, inject) {\n // baseURL\n var baseURL = true ? 'http://localhost:3000/' : undefined; // Create fresh objects for all default header scopes\n // Axios creates only one which is shared across SSR requests!\n // https://github.com/mzabriskie/axios/blob/master/lib/defaults.js\n\n var headers = {\n \"common\": {\n \"Accept\": \"application/json, text/plain, */*\"\n },\n \"delete\": {},\n \"get\": {},\n \"head\": {},\n \"post\": {},\n \"put\": {},\n \"patch\": {}\n };\n var axiosOptions = {\n baseURL: baseURL,\n headers: headers\n }; // Proxy SSR request headers headers\n\n axiosOptions.headers.common = ctx.req && ctx.req.headers ? Object.assign({}, ctx.req.headers) : {};\n delete axiosOptions.headers.common['accept'];\n delete axiosOptions.headers.common['host'];\n delete axiosOptions.headers.common['cf-ray'];\n delete axiosOptions.headers.common['cf-connecting-ip'];\n delete axiosOptions.headers.common['content-length'];\n delete axiosOptions.headers.common['content-md5'];\n delete axiosOptions.headers.common['content-type'];\n\n if (false) {}\n\n var axios = axios_createAxiosInstance(axiosOptions); // Inject axios to the context as $axios\n\n ctx.$axios = axios;\n inject('axios', axios);\n});\n// CONCATENATED MODULE: ./.nuxt/index.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return createApp; });\n/* concated harmony reexport NuxtError */__webpack_require__.d(__webpack_exports__, \"a\", function() { return layouts_error; });\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty[\"a\" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n\n\n\n\n\n\n\n\n/* Plugins */\n\n // Source: ./vuetify/plugin.js (mode: 'all')\n\n // Source: ./axios.js (mode: 'all')\n// Component: \n\nvue_runtime_esm[\"a\" /* default */].component(vue_client_only_common_default.a.name, vue_client_only_common_default.a); // TODO: Remove in Nuxt 3: \n\nvue_runtime_esm[\"a\" /* default */].component(vue_no_ssr_common_default.a.name, _objectSpread({}, vue_no_ssr_common_default.a, {\n render: function render(h, ctx) {\n if ( true && !vue_no_ssr_common_default.a._warned) {\n vue_no_ssr_common_default.a._warned = true;\n console.warn(' has been deprecated and will be removed in Nuxt 3, please use instead');\n }\n\n return vue_no_ssr_common_default.a.render(h, ctx);\n }\n})); // Component: \n\nvue_runtime_esm[\"a\" /* default */].component(nuxt_child.name, nuxt_child);\nvue_runtime_esm[\"a\" /* default */].component('NChild', nuxt_child); // Component NuxtLink is imported in server.js or client.js\n// Component: \n\nvue_runtime_esm[\"a\" /* default */].component(components_nuxt.name, components_nuxt);\nvue_runtime_esm[\"a\" /* default */].use(vue_meta_esm_browser[\"a\" /* default */], {\n \"keyName\": \"head\",\n \"attribute\": \"data-n-head\",\n \"ssrAttribute\": \"data-n-head-ssr\",\n \"tagIDKeyName\": \"hid\"\n});\nvar defaultTransition = {\n \"name\": \"page\",\n \"mode\": \"out-in\",\n \"appear\": true,\n \"appearClass\": \"appear\",\n \"appearActiveClass\": \"appear-active\",\n \"appearToClass\": \"appear-to\"\n};\n\nfunction createApp(ssrContext) {\n var router, store, app, next, route, path, inject;\n return regeneratorRuntime.async(function createApp$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return regeneratorRuntime.awrap(createRouter(ssrContext));\n\n case 2:\n router = _context2.sent;\n store = createStore(ssrContext); // Add this.$router into store actions/mutations\n\n store.$router = router; // Create Root instance\n // here we inject the router and store to all child components,\n // making them available everywhere as `this.$router` and `this.$store`.\n\n app = _objectSpread({\n store: store,\n router: router,\n nuxt: {\n defaultTransition: defaultTransition,\n transitions: [defaultTransition],\n setTransitions: function setTransitions(transitions) {\n if (!Array.isArray(transitions)) {\n transitions = [transitions];\n }\n\n transitions = transitions.map(function (transition) {\n if (!transition) {\n transition = defaultTransition;\n } else if (typeof transition === 'string') {\n transition = Object.assign({}, defaultTransition, {\n name: transition\n });\n } else {\n transition = Object.assign({}, defaultTransition, transition);\n }\n\n return transition;\n });\n this.$options.nuxt.transitions = transitions;\n return transitions;\n },\n err: null,\n dateErr: null,\n error: function error(err) {\n err = err || null;\n app.context._errored = Boolean(err);\n err = err ? Object(utils[\"l\" /* normalizeError */])(err) : null;\n var nuxt = this.nuxt || this.$options.nuxt;\n nuxt.dateErr = Date.now();\n nuxt.err = err; // Used in src/server.js\n\n if (ssrContext) {\n ssrContext.nuxt.error = err;\n }\n\n return err;\n }\n }\n }, App); // Make app available into store via this.app\n\n store.app = app;\n next = ssrContext ? ssrContext.next : function (location) {\n return app.router.push(location);\n }; // Resolve route\n\n if (ssrContext) {\n route = router.resolve(ssrContext.url).route;\n } else {\n path = Object(utils[\"d\" /* getLocation */])(router.options.base, router.options.mode);\n route = router.resolve(path).route;\n } // Set context to app.context\n\n\n _context2.next = 11;\n return regeneratorRuntime.awrap(Object(utils[\"p\" /* setContext */])(app, {\n store: store,\n route: route,\n next: next,\n error: app.nuxt.error.bind(app),\n payload: ssrContext ? ssrContext.payload : undefined,\n req: ssrContext ? ssrContext.req : undefined,\n res: ssrContext ? ssrContext.res : undefined,\n beforeRenderFns: ssrContext ? ssrContext.beforeRenderFns : undefined,\n ssrContext: ssrContext\n }));\n\n case 11:\n inject = function inject(key, value) {\n if (!key) {\n throw new Error('inject(key, value) has no key provided');\n }\n\n if (value === undefined) {\n throw new Error('inject(key, value) has no value provided');\n }\n\n key = '$' + key; // Add into app\n\n app[key] = value; // Add into store\n\n store[key] = app[key]; // Check if plugin not already installed\n\n var installKey = '__nuxt_' + key + '_installed__';\n\n if (vue_runtime_esm[\"a\" /* default */][installKey]) {\n return;\n }\n\n vue_runtime_esm[\"a\" /* default */][installKey] = true; // Call Vue.use() to install the plugin into vm\n\n vue_runtime_esm[\"a\" /* default */].use(function () {\n if (!Object.prototype.hasOwnProperty.call(vue_runtime_esm[\"a\" /* default */], key)) {\n Object.defineProperty(vue_runtime_esm[\"a\" /* default */].prototype, key, {\n get: function get() {\n return this.$root.$options[key];\n }\n });\n }\n });\n };\n\n if (true) {\n // Replace store state before plugins execution\n if (window.__NUXT__ && window.__NUXT__.state) {\n store.replaceState(window.__NUXT__.state);\n }\n } // Plugin execution\n\n\n if (!(typeof vuetify_plugin === 'function')) {\n _context2.next = 16;\n break;\n }\n\n _context2.next = 16;\n return regeneratorRuntime.awrap(vuetify_plugin(app.context, inject));\n\n case 16:\n if (!(typeof _nuxt_axios === 'function')) {\n _context2.next = 19;\n break;\n }\n\n _context2.next = 19;\n return regeneratorRuntime.awrap(_nuxt_axios(app.context, inject));\n\n case 19:\n if (true) {\n _context2.next = 22;\n break;\n }\n\n _context2.next = 22;\n return regeneratorRuntime.awrap(new Promise(function (resolve, reject) {\n router.push(ssrContext.url, resolve, function () {\n // navigated to a different route in router guard\n var unregister = router.afterEach(function _callee(to, from, next) {\n return regeneratorRuntime.async(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n ssrContext.url = to.fullPath;\n _context.next = 3;\n return regeneratorRuntime.awrap(Object(utils[\"h\" /* getRouteData */])(to));\n\n case 3:\n app.context.route = _context.sent;\n app.context.params = to.params || {};\n app.context.query = to.query || {};\n unregister();\n resolve();\n\n case 8:\n case \"end\":\n return _context.stop();\n }\n }\n });\n });\n });\n }));\n\n case 22:\n return _context2.abrupt(\"return\", {\n store: store,\n app: app,\n router: router\n });\n\n case 23:\n case \"end\":\n return _context2.stop();\n }\n }\n });\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi8ubnV4dC9yb3V0ZXIuc2Nyb2xsQmVoYXZpb3IuanM/NTVjNCIsIndlYnBhY2s6Ly8vLi8ubnV4dC9yb3V0ZXIuanM/NTc4MyIsIndlYnBhY2s6Ly8vLi8ubnV4dC9jb21wb25lbnRzL251eHQtY2hpbGQuanM/MjQ1MiIsIndlYnBhY2s6Ly8vLi9sYXlvdXRzL2Vycm9yLnZ1ZT9kM2FlIiwid2VicGFjazovLy9sYXlvdXRzL2Vycm9yLnZ1ZT82NzZkIiwid2VicGFjazovLy8uL2xheW91dHMvZXJyb3IudnVlP2UyMGQiLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0cy9lcnJvci52dWU/YzRiMyIsIndlYnBhY2s6Ly8vLi8ubnV4dC9jb21wb25lbnRzL251eHQuanM/Yjg5YiIsIndlYnBhY2s6Ly8vLm51eHQvY29tcG9uZW50cy9udXh0LWxvYWRpbmcudnVlP2ZlOGYiLCJ3ZWJwYWNrOi8vLy4vLm51eHQvY29tcG9uZW50cy9udXh0LWxvYWRpbmcudnVlPzVhNDciLCJ3ZWJwYWNrOi8vLy4vLm51eHQvY29tcG9uZW50cy9udXh0LWxvYWRpbmcudnVlPzNhN2MiLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0cy9kZWZhdWx0LnZ1ZT9kZTcyIiwid2VicGFjazovLy8uL2xheW91dHMvZGVmYXVsdC52dWU/ZWJhMCIsIndlYnBhY2s6Ly8vLi8ubnV4dC9BcHAuanM/ZWZlNyIsIndlYnBhY2s6Ly8vLi8ubnV4dC9zdG9yZS5qcz82YzZiIiwid2VicGFjazovLy8uLy5udXh0L3Z1ZXRpZnkvb3B0aW9ucy5qcz83ZTI3Iiwid2VicGFjazovLy8uLy5udXh0L3Z1ZXRpZnkvcGx1Z2luLmpzP2M4YmMiLCJ3ZWJwYWNrOi8vLy4vLm51eHQvYXhpb3MuanM/MTBlOCIsIndlYnBhY2s6Ly8vLi8ubnV4dC9pbmRleC5qcz9mMjZlIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJ3aW5kb3ciLCJoaXN0b3J5Iiwic2Nyb2xsUmVzdG9yYXRpb24iLCJhZGRFdmVudExpc3RlbmVyIiwidG8iLCJmcm9tIiwic2F2ZWRQb3NpdGlvbiIsInBvc2l0aW9uIiwiUGFnZXMiLCJnZXRNYXRjaGVkQ29tcG9uZW50cyIsImxlbmd0aCIsImV2ZXJ5IiwiUGFnZSIsIm9wdGlvbnMiLCJzY3JvbGxUb1RvcCIsIngiLCJ5Iiwic29tZSIsIm51eHQiLCIkbnV4dCIsInBhdGgiLCJoYXNoIiwiJG5leHRUaWNrIiwiJGVtaXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIiRvbmNlIiwiQ1NTIiwiZXNjYXBlIiwic3Vic3RyIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic2VsZWN0b3IiLCJlIiwiY29uc29sZSIsIndhcm4iLCJfMDQ5MjdhMGUiLCJpbnRlcm9wRGVmYXVsdCIsIl9iMDA1MjQzZSIsIl8wN2ZmYmM5ZSIsIl82NGM2NmRiMiIsImVtcHR5Rm4iLCJvcmlnaW5hbFB1c2giLCJSb3V0ZXIiLCJwcm90b3R5cGUiLCJwdXNoIiwibG9jYXRpb24iLCJvbkNvbXBsZXRlIiwib25BYm9ydCIsImNhbGwiLCJWdWUiLCJ1c2UiLCJyb3V0ZXJPcHRpb25zIiwibW9kZSIsImJhc2UiLCJkZWNvZGVVUkkiLCJsaW5rQWN0aXZlQ2xhc3MiLCJsaW5rRXhhY3RBY3RpdmVDbGFzcyIsInNjcm9sbEJlaGF2aW9yIiwicm91dGVzIiwiY29tcG9uZW50IiwibmFtZSIsImZhbGxiYWNrIiwiY3JlYXRlUm91dGVyIiwiZnVuY3Rpb25hbCIsInByb3BzIiwibnV4dENoaWxkS2V5IiwidHlwZSIsIlN0cmluZyIsImRlZmF1bHQiLCJrZWVwQWxpdmUiLCJCb29sZWFuIiwia2VlcEFsaXZlUHJvcHMiLCJPYmplY3QiLCJ1bmRlZmluZWQiLCJyZW5kZXIiLCJoIiwicGFyZW50IiwiZGF0YSIsIm51eHRDaGlsZCIsIl9wYXJlbnQiLCJ0cmFuc2l0aW9ucyIsImRlZmF1bHRUcmFuc2l0aW9uIiwiZGVwdGgiLCIkdm5vZGUiLCIkcGFyZW50IiwibnV4dENoaWxkRGVwdGgiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvblByb3BzIiwidHJhbnNpdGlvbnNLZXlzIiwiZm9yRWFjaCIsImtleSIsImxpc3RlbmVycyIsImxpc3RlbmVyc0tleXMiLCJiaW5kIiwiYmVmb3JlRW50ZXIiLCJlbCIsImNzcyIsImxlYXZlIiwiZG9uZSIsInJvdXRlclZpZXciLCJvbiIsImNvbXBvbmVudHMiLCJOdXh0Q2hpbGQiLCJOdXh0RXJyb3IiLCJlcnJvckNhcHR1cmVkIiwiZXJyb3IiLCJkaXNwbGF5aW5nTnV4dEVycm9yIiwiZXJyb3JGcm9tTnV4dEVycm9yIiwiJGZvcmNlVXBkYXRlIiwiY29tcHV0ZWQiLCJyb3V0ZXJWaWV3S2V5IiwiJHJvdXRlIiwibWF0Y2hlZCIsImNvbXBpbGUiLCJwYXJhbXMiLCJtYXRjaGVkUm91dGUiLCJDb21wb25lbnQiLCJzdHJpY3QiLCJ0ZXN0IiwicmVwbGFjZSIsImJlZm9yZUNyZWF0ZSIsInV0aWwiLCJkZWZpbmVSZWFjdGl2ZSIsIiRyb290IiwiJG9wdGlvbnMiLCJlcnIiLCIkcHJvcHMiLCJ0b1N0cmluZyIsImxheW91dHMiLCJfNmY2YzA5OGIiLCJoZWFkIiwibG9hZGluZ0VsIiwicmVmIiwiZXJyb3JMYXlvdXQiLCJsYXlvdXQiLCJzZXRMYXlvdXQiLCJjb250ZXh0IiwibGF5b3V0RWwiLCJ0ZW1wbGF0ZUVsIiwiZG9tUHJvcHMiLCJpZCIsImxheW91dE5hbWUiLCJ0cmFuc2l0aW9uRWwiLCJpc09ubGluZSIsImNyZWF0ZWQiLCJyZWZyZXNoT25saW5lU3RhdHVzIiwibW91bnRlZCIsIiRsb2FkaW5nIiwiJHJlZnMiLCJsb2FkaW5nIiwid2F0Y2giLCJpc09mZmxpbmUiLCJtZXRob2RzIiwibmF2aWdhdG9yIiwib25MaW5lIiwicmVmcmVzaCIsInBhZ2VzIiwiZ2V0TWF0Y2hlZENvbXBvbmVudHNJbnN0YW5jZXMiLCJzdGFydCIsInByb21pc2VzIiwibWFwIiwicGFnZSIsInAiLCJmZXRjaCIsInByb21pc2lmeSIsImFzeW5jRGF0YSIsInRoZW4iLCJuZXdEYXRhIiwic2V0IiwiJGRhdGEiLCJhbGwiLCJmYWlsIiwiZ2xvYmFsSGFuZGxlRXJyb3IiLCJmaW5pc2giLCJlcnJvckNoYW5nZWQiLCJsb2FkTGF5b3V0IiwiTnV4dExvYWRpbmciLCJWdWV4IiwiVlVFWF9QUk9QRVJUSUVTIiwic3RvcmUiLCJ1cGRhdGVNb2R1bGVzIiwibm9ybWFsaXplUm9vdCIsInJlcXVpcmUiLCJtb2R1bGVzIiwicmVzb2x2ZVN0b3JlTW9kdWxlcyIsImNyZWF0ZVN0b3JlIiwiRnVuY3Rpb24iLCJTdG9yZSIsImFzc2lnbiIsIm1vZHVsZURhdGEiLCJmaWxlUGF0aCIsImNvbW1pdCIsIkVycm9yIiwibm9ybWFsaXplTW9kdWxlIiwic3RhdGUiLCJmaWxlbmFtZSIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZXMiLCJzcGxpdCIsIm1vZHVsZU5hbWUiLCJub3JtYWxpemVTdGF0ZSIsImluY2x1ZGVzIiwicHJvcGVydHkiLCJzdG9yZU1vZHVsZSIsImdldFN0b3JlTW9kdWxlIiwiaXNQcm9wZXJ0eSIsIm1lcmdlUHJvcGVydHkiLCJpc0luZGV4TW9kdWxlIiwicG9wIiwibmFtZXNwYWNlZCIsInNoaWZ0IiwiVnVldGlmeSIsImN0eCIsInZ1ZXRpZnlPcHRpb25zIiwiaWNvbnMiLCJpY29uZm9udCIsInZ1ZXRpZnkiLCJhcHAiLCIkdnVldGlmeSIsImZyYW1ld29yayIsImF4aW9zRXh0cmEiLCJzZXRCYXNlVVJMIiwiYmFzZVVSTCIsImRlZmF1bHRzIiwic2V0SGVhZGVyIiwidmFsdWUiLCJzY29wZXMiLCJBcnJheSIsImlzQXJyYXkiLCJzY29wZSIsImhlYWRlcnMiLCJzZXRUb2tlbiIsInRva2VuIiwib25SZXF1ZXN0IiwiZm4iLCJpbnRlcmNlcHRvcnMiLCJyZXF1ZXN0IiwiY29uZmlnIiwib25SZXNwb25zZSIsInJlc3BvbnNlIiwib25SZXF1ZXN0RXJyb3IiLCJyZWplY3QiLCJvblJlc3BvbnNlRXJyb3IiLCJvbkVycm9yIiwiY3JlYXRlIiwiY3JlYXRlQXhpb3NJbnN0YW5jZSIsImRlZnUiLCJtZXRob2QiLCJhcHBseSIsImFyZ3VtZW50cyIsInJlcyIsImV4dGVuZEF4aW9zSW5zdGFuY2UiLCJheGlvcyIsImF4aW9zT3B0aW9ucyIsIkF4aW9zIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsInNldHVwUHJvZ3Jlc3MiLCJub29wTG9hZGluZyIsImN1cnJlbnRSZXF1ZXN0cyIsInByb2dyZXNzIiwib25Qcm9ncmVzcyIsImxvYWRlZCIsInRvdGFsIiwiTWF0aCIsIm1pbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJpbmplY3QiLCJjb21tb24iLCJyZXEiLCIkYXhpb3MiLCJDbGllbnRPbmx5IiwiTm9Tc3IiLCJfd2FybmVkIiwiTnV4dCIsIk1ldGEiLCJjcmVhdGVBcHAiLCJzc3JDb250ZXh0Iiwicm91dGVyIiwiJHJvdXRlciIsInNldFRyYW5zaXRpb25zIiwiZGF0ZUVyciIsIl9lcnJvcmVkIiwibm9ybWFsaXplRXJyb3IiLCJEYXRlIiwibm93IiwiQXBwIiwibmV4dCIsInJvdXRlIiwidXJsIiwiZ2V0TG9jYXRpb24iLCJzZXRDb250ZXh0IiwicGF5bG9hZCIsImJlZm9yZVJlbmRlckZucyIsImluc3RhbGxLZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiX19OVVhUX18iLCJyZXBsYWNlU3RhdGUiLCJudXh0X3BsdWdpbl9wbHVnaW5fODczYjkyZTYiLCJudXh0X3BsdWdpbl9heGlvc180MGEwZjk5NyIsInVucmVnaXN0ZXIiLCJhZnRlckVhY2giLCJmdWxsUGF0aCIsImdldFJvdXRlRGF0YSIsInF1ZXJ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBLElBQUlBLElBQUosRUFBb0I7QUFDbEIsTUFBSSx1QkFBdUJDLE1BQU0sQ0FBQ0MsT0FBbEMsRUFBMkM7QUFDekNELFVBQU0sQ0FBQ0MsT0FBUCxDQUFlQyxpQkFBZixHQUFtQyxRQUFuQyxDQUR5QyxDQUd6QztBQUNBO0FB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LEdBQVgsR0FBaUIvUixFQUFFLENBQUM4UyxRQUFwQjtBQURrQztBQUFBLHdEQUVSQyxxQ0FBWSxDQUFDL1MsRUFBRCxDQUZKOztBQUFBO0FBRWxDc04sMkJBQUcsQ0FBQ2pGLE9BQUosQ0FBWXlKLEtBRnNCO0FBR2xDeEUsMkJBQUcsQ0FBQ2pGLE9BQUosQ0FBWXRCLE1BQVosR0FBcUIvRyxFQUFFLENBQUMrRyxNQUFILElBQWEsRUFBbEM7QUFDQXVHLDJCQUFHLENBQUNqRixPQUFKLENBQVkySyxLQUFaLEdBQW9CaFQsRUFBRSxDQUFDZ1QsS0FBSCxJQUFZLEVBQWhDO0FBQ0FKLGtDQUFVO0FBQ1Z2UiwrQkFBTzs7QUFOMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBakIsQ0FBbkI7QUFRRCxhQVZEO0FBV0QsV0FaSyxDQXBJVjs7QUFBQTtBQUFBLDRDQW1KUztBQUNMMkosaUJBQUssRUFBTEEsS0FESztBQUVMc0MsZUFBRyxFQUFIQSxHQUZLO0FBR0w4RCxrQkFBTSxFQUFOQTtBQUhLLFdBbkpUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwiZmlsZSI6IjI3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWF0Y2hlZENvbXBvbmVudHMgfSBmcm9tICcuL3V0aWxzJ1xuXG5pZiAocHJvY2Vzcy5jbGllbnQpIHtcbiAgaWYgKCdzY3JvbGxSZXN0b3JhdGlvbicgaW4gd2luZG93Lmhpc3RvcnkpIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9ICdtYW51YWwnXG5cbiAgICAvLyByZXNldCBzY3JvbGxSZXN0b3JhdGlvbiB0byBhdXRvIHdoZW4gbGVhdmluZyBwYWdlLCBhbGxvd2luZyBwYWdlIHJlbG9hZFxuICAgIC8vIGFuZCBiYWNrLW5hdmlnYXRpb24gZnJvbSBvdGhlciBwYWdlcyB0byB1c2UgdGhlIGJyb3dzZXIgdG8gcmVzdG9yZSB0aGVcbiAgICAvLyBzY3JvbGxpbmcgcG9zaXRpb24uXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsICgpID0+IHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gJ2F1dG8nXG4gICAgfSlcblxuICAgIC8vIFNldHRpbmcgc2Nyb2xsUmVzdG9yYXRpb24gdG8gbWFudWFsIGFnYWluIHdoZW4gcmV0dXJuaW5nIHRvIHRoaXMgcGFnZS5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gJ21hbnVhbCdcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0bywgZnJvbSwgc2F2ZWRQb3NpdGlvbikge1xuICAvLyBpZiB0aGUgcmV0dXJuZWQgcG9zaXRpb24gaXMgZmFsc3kgb3IgYW4gZW1wdHkgb2JqZWN0LFxuICAvLyB3aWxsIHJldGFpbiBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi5cbiAgbGV0IHBvc2l0aW9uID0gZmFsc2VcblxuICAvLyBpZiBubyBjaGlsZHJlbiBkZXRlY3RlZCBhbmQgc2Nyb2xsVG9Ub3AgaXMgbm90IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgY29uc3QgUGFnZXMgPSBnZXRNYXRjaGVkQ29tcG9uZW50cyh0bylcbiAgaWYgKFxuICAgIFBhZ2VzLmxlbmd0aCA8IDIgJiZcbiAgICBQYWdlcy5ldmVyeShQYWdlID0+IFBhZ2Uub3B0aW9ucy5zY3JvbGxUb1RvcCAhPT0gZmFsc2UpXG4gICkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlXG4gICAgcG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfVxuICB9IGVsc2UgaWYgKFBhZ2VzLnNvbWUoUGFnZSA9PiBQYWdlLm9wdGlvbnMuc2Nyb2xsVG9Ub3ApKSB7XG4gICAgLy8gaWYgb25lIG9mIHRoZSBjaGlsZHJlbiBoYXMgc2Nyb2xsVG9Ub3Agb3B0aW9uIHNldCB0byB0cnVlXG4gICAgcG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfVxuICB9XG5cbiAgLy8gc2F2ZWRQb3NpdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgcG9wc3RhdGUgbmF2aWdhdGlvbnMgKGJhY2sgYnV0dG9uKVxuICBpZiAoc2F2ZWRQb3NpdGlvbikge1xuICAgIHBvc2l0aW9uID0gc2F2ZWRQb3NpdGlvblxuICB9XG5cbiAgY29uc3QgbnV4dCA9IHdpbmRvdy4kbnV4dFxuXG4gIC8vIHRyaWdnZXJTY3JvbGwgaXMgb25seSBmaXJlZCB3aGVuIGEgbmV3IGNvbXBvbmVudCBpcyBsb2FkZWRcbiAgaWYgKHRvLnBhdGggPT09IGZyb20ucGF0aCAmJiB0by5oYXNoICE9PSBmcm9tLmhhc2gpIHtcbiAgICBudXh0LiRuZXh0VGljaygoKSA9PiBudXh0LiRlbWl0KCd0cmlnZ2VyU2Nyb2xsJykpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAvLyB3YWl0IGZvciB0aGUgb3V0IHRyYW5zaXRpb24gdG8gY29tcGxldGUgKGlmIG5lY2Vzc2FyeSlcbiAgICBudXh0LiRvbmNlKCd0cmlnZ2VyU2Nyb2xsJywgKCkgPT4ge1xuICAgICAgLy8gY29vcmRzIHdpbGwgYmUgdXNlZCBpZiBubyBzZWxlY3RvciBpcyBwcm92aWRlZCxcbiAgICAgIC8vIG9yIGlmIHRoZSBzZWxlY3RvciBkaWRuJ3QgbWF0Y2ggYW55IGVsZW1lbnQuXG4gICAgICBpZiAodG8uaGFzaCkge1xuICAgICAgICBsZXQgaGFzaCA9IHRvLmhhc2hcbiAgICAgICAgLy8gQ1NTLmVzY2FwZSgpIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBJRSBhbmQgRWRnZS5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuQ1NTICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaGFzaCA9ICcjJyArIHdpbmRvdy5DU1MuZXNjYXBlKGhhc2guc3Vic3RyKDEpKVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaGFzaCkpIHtcbiAgICAgICAgICAgIC8vIHNjcm9sbCB0byBhbmNob3IgYnkgcmV0dXJuaW5nIHRoZSBzZWxlY3RvclxuICAgICAgICAgICAgcG9zaXRpb24gPSB7IHNlbGVjdG9yOiBoYXNoIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIHNjcm9sbCBwb3NpdGlvbi4gUGxlYXNlIGFkZCBDU1MuZXNjYXBlKCkgcG9seWZpbGwgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL0NTUy5lc2NhcGUpLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc29sdmUocG9zaXRpb24pXG4gICAgfSlcbiAgfSlcbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IHsgaW50ZXJvcERlZmF1bHQgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHNjcm9sbEJlaGF2aW9yIGZyb20gJy4vcm91dGVyLnNjcm9sbEJlaGF2aW9yLmpzJ1xuXG5jb25zdCBfMDQ5MjdhMGUgPSAoKSA9PiBpbnRlcm9wRGVmYXVsdChpbXBvcnQoJy4uL3BhZ2VzL2RvY3MvaW5kZXgudnVlJyAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcInBhZ2VzL2RvY3MvaW5kZXhcIiAqLykpXG5jb25zdCBfYjAwNTI0M2UgPSAoKSA9PiBpbnRlcm9wRGVmYXVsdChpbXBvcnQoJy4uL3BhZ2VzL2RvY3MvbmFtZXNwYWNlcy52dWUnIC8qIHdlYnBhY2tDaHVua05hbWU6IFwicGFnZXMvZG9jcy9uYW1lc3BhY2VzXCIgKi8pKVxuY29uc3QgXzA3ZmZiYzllID0gKCkgPT4gaW50ZXJvcERlZmF1bHQoaW1wb3J0KCcuLi9wYWdlcy9kb2NzL19zbHVnLnZ1ZScgLyogd2VicGFja0NodW5rTmFtZTogXCJwYWdlcy9kb2NzL19zbHVnXCIgKi8pKVxuY29uc3QgXzY0YzY2ZGIyID0gKCkgPT4gaW50ZXJvcERlZmF1bHQoaW1wb3J0KCcuLi9wYWdlcy9pbmRleC52dWUnIC8qIHdlYnBhY2tDaHVua05hbWU6IFwicGFnZXMvaW5kZXhcIiAqLykpXG5cbi8vIFRPRE86IHJlbW92ZSBpbiBOdXh0IDNcbmNvbnN0IGVtcHR5Rm4gPSAoKSA9PiB7fVxuY29uc3Qgb3JpZ2luYWxQdXNoID0gUm91dGVyLnByb3RvdHlwZS5wdXNoXG5Sb3V0ZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSA9IGVtcHR5Rm4sIG9uQWJvcnQpIHtcbiAgcmV0dXJuIG9yaWdpbmFsUHVzaC5jYWxsKHRoaXMsIGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KVxufVxuXG5WdWUudXNlKFJvdXRlcilcblxuZXhwb3J0IGNvbnN0IHJvdXRlck9wdGlvbnMgPSB7XG4gIG1vZGU6ICdoYXNoJyxcbiAgYmFzZTogZGVjb2RlVVJJKCcvJyksXG4gIGxpbmtBY3RpdmVDbGFzczogJ251eHQtbGluay1hY3RpdmUnLFxuICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ251eHQtbGluay1leGFjdC1hY3RpdmUnLFxuICBzY3JvbGxCZWhhdmlvcixcblxuICByb3V0ZXM6IFt7XG4gICAgcGF0aDogXCIvZG9jc1wiLFxuICAgIGNvbXBvbmVudDogXzA0OTI3YTBlLFxuICAgIG5hbWU6IFwiZG9jc1wiXG4gIH0sIHtcbiAgICBwYXRoOiBcIi9kb2NzL25hbWVzcGFjZXNcIixcbiAgICBjb21wb25lbnQ6IF9iMDA1MjQzZSxcbiAgICBuYW1lOiBcImRvY3MtbmFtZXNwYWNlc1wiXG4gIH0sIHtcbiAgICBwYXRoOiBcIi9kb2NzLzpzbHVnXCIsXG4gICAgY29tcG9uZW50OiBfMDdmZmJjOWUsXG4gICAgbmFtZTogXCJkb2NzLXNsdWdcIlxuICB9LCB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgY29tcG9uZW50OiBfNjRjNjZkYjIsXG4gICAgbmFtZTogXCJpbmRleFwiXG4gIH1dLFxuXG4gIGZhbGxiYWNrOiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVyICgpIHtcbiAgcmV0dXJuIG5ldyBSb3V0ZXIocm91dGVyT3B0aW9ucylcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnTnV4dENoaWxkJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICBudXh0Q2hpbGRLZXk6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBrZWVwQWxpdmU6IEJvb2xlYW4sXG4gICAga2VlcEFsaXZlUHJvcHM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcbiAgcmVuZGVyIChoLCB7IHBhcmVudCwgZGF0YSwgcHJvcHMgfSkge1xuICAgIGRhdGEubnV4dENoaWxkID0gdHJ1ZVxuICAgIGNvbnN0IF9wYXJlbnQgPSBwYXJlbnRcbiAgICBjb25zdCB0cmFuc2l0aW9ucyA9IHBhcmVudC4kbnV4dC5udXh0LnRyYW5zaXRpb25zXG4gICAgY29uc3QgZGVmYXVsdFRyYW5zaXRpb24gPSBwYXJlbnQuJG51eHQubnV4dC5kZWZhdWx0VHJhbnNpdGlvblxuXG4gICAgbGV0IGRlcHRoID0gMFxuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGlmIChwYXJlbnQuJHZub2RlICYmIHBhcmVudC4kdm5vZGUuZGF0YS5udXh0Q2hpbGQpIHtcbiAgICAgICAgZGVwdGgrK1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnRcbiAgICB9XG4gICAgZGF0YS5udXh0Q2hpbGREZXB0aCA9IGRlcHRoXG4gICAgY29uc3QgdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25zW2RlcHRoXSB8fCBkZWZhdWx0VHJhbnNpdGlvblxuICAgIGNvbnN0IHRyYW5zaXRpb25Qcm9wcyA9IHt9XG4gICAgdHJhbnNpdGlvbnNLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0cmFuc2l0aW9uW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRyYW5zaXRpb25Qcm9wc1trZXldID0gdHJhbnNpdGlvbltrZXldXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGxpc3RlbmVycyA9IHt9XG4gICAgbGlzdGVuZXJzS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdHJhbnNpdGlvbltrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxpc3RlbmVyc1trZXldID0gdHJhbnNpdGlvbltrZXldLmJpbmQoX3BhcmVudClcbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIEFkZCB0cmlnZ2VyU2Nyb2xsIGV2ZW50IG9uIGJlZm9yZUVudGVyIChmaXggIzEzNzYpXG4gICAgY29uc3QgYmVmb3JlRW50ZXIgPSBsaXN0ZW5lcnMuYmVmb3JlRW50ZXJcbiAgICBsaXN0ZW5lcnMuYmVmb3JlRW50ZXIgPSAoZWwpID0+IHtcbiAgICAgIC8vIEVuc3VyZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudCBhZnRlciBjYWxsaW5nIHNjcm9sbEJlaGF2aW9yXG4gICAgICB3aW5kb3cuJG51eHQuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgd2luZG93LiRudXh0LiRlbWl0KCd0cmlnZ2VyU2Nyb2xsJylcbiAgICAgIH0pXG4gICAgICBpZiAoYmVmb3JlRW50ZXIpIHtcbiAgICAgICAgcmV0dXJuIGJlZm9yZUVudGVyLmNhbGwoX3BhcmVudCwgZWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgbGVhdmUgaXMgY2FsbGVkIGFzeW5jaHJvbm91cyAoZml4ICM1NzAzKVxuICAgIGlmICh0cmFuc2l0aW9uLmNzcyA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGxlYXZlID0gbGlzdGVuZXJzLmxlYXZlXG5cbiAgICAgIC8vIG9ubHkgYWRkIGxlYXZlIGxpc3RlbmVyIHdoZW4gdXNlciBkaWRudCBwcm92aWRlIG9uZVxuICAgICAgLy8gb3Igd2hlbiBpdCBtaXNzZXMgdGhlIGRvbmUgYXJndW1lbnRcbiAgICAgIGlmICghbGVhdmUgfHwgbGVhdmUubGVuZ3RoIDwgMikge1xuICAgICAgICBsaXN0ZW5lcnMubGVhdmUgPSAoZWwsIGRvbmUpID0+IHtcbiAgICAgICAgICBpZiAobGVhdmUpIHtcbiAgICAgICAgICAgIGxlYXZlLmNhbGwoX3BhcmVudCwgZWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3BhcmVudC4kbmV4dFRpY2soZG9uZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByb3V0ZXJWaWV3ID0gaCgncm91dGVyVmlldycsIGRhdGEpXG5cbiAgICBpZiAocHJvcHMua2VlcEFsaXZlKSB7XG4gICAgICByb3V0ZXJWaWV3ID0gaCgna2VlcC1hbGl2ZScsIHsgcHJvcHM6IHByb3BzLmtlZXBBbGl2ZVByb3BzIH0sIFtyb3V0ZXJWaWV3XSlcbiAgICB9XG5cbiAgICByZXR1cm4gaCgndHJhbnNpdGlvbicsIHtcbiAgICAgIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gICAgICBvbjogbGlzdGVuZXJzXG4gICAgfSwgW3JvdXRlclZpZXddKVxuICB9XG59XG5cbmNvbnN0IHRyYW5zaXRpb25zS2V5cyA9IFtcbiAgJ25hbWUnLFxuICAnbW9kZScsXG4gICdhcHBlYXInLFxuICAnY3NzJyxcbiAgJ3R5cGUnLFxuICAnZHVyYXRpb24nLFxuICAnZW50ZXJDbGFzcycsXG4gICdsZWF2ZUNsYXNzJyxcbiAgJ2FwcGVhckNsYXNzJyxcbiAgJ2VudGVyQWN0aXZlQ2xhc3MnLFxuICAnZW50ZXJBY3RpdmVDbGFzcycsXG4gICdsZWF2ZUFjdGl2ZUNsYXNzJyxcbiAgJ2FwcGVhckFjdGl2ZUNsYXNzJyxcbiAgJ2VudGVyVG9DbGFzcycsXG4gICdsZWF2ZVRvQ2xhc3MnLFxuICAnYXBwZWFyVG9DbGFzcydcbl1cblxuY29uc3QgbGlzdGVuZXJzS2V5cyA9IFtcbiAgJ2JlZm9yZUVudGVyJyxcbiAgJ2VudGVyJyxcbiAgJ2FmdGVyRW50ZXInLFxuICAnZW50ZXJDYW5jZWxsZWQnLFxuICAnYmVmb3JlTGVhdmUnLFxuICAnbGVhdmUnLFxuICAnYWZ0ZXJMZWF2ZScsXG4gICdsZWF2ZUNhbmNlbGxlZCcsXG4gICdiZWZvcmVBcHBlYXInLFxuICAnYXBwZWFyJyxcbiAgJ2FmdGVyQXBwZWFyJyxcbiAgJ2FwcGVhckNhbmNlbGxlZCdcbl1cbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCd2LWFwcCcse2F0dHJzOntcImRhcmtcIjpcIlwifX0sWyhfdm0uZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDA0KT9fYygnaDEnLFtfdm0uX3YoXCJcXG4gICAgICAgIFwiK192bS5fcyhfdm0ucGFnZU5vdEZvdW5kKStcIlxcbiAgICBcIildKTpfYygnaDEnLFtfdm0uX3YoXCJcXG4gICAgICAgIFwiK192bS5fcyhfdm0ub3RoZXJFcnJvcikrXCJcXG4gICAgXCIpXSksX3ZtLl92KFwiIFwiKSxfYygnYScse2F0dHJzOntcImhyZWZcIjpcImh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhc3RheC9ub3NxbGJlbmNoLWxhYnMvaXNzdWVzL25ldz9sYWJlbHM9QVBQVVNFLFVYLGRvY3VtZW50YXRpb25cIn19LFtfdm0uX3YoXCJcXG4gICAgICAgIEZpbGUgQSBVSSBCdWcgUmVwb3J0XFxuICAgIFwiKV0pLF92bS5fdihcIiBcIiksX2MoJ051eHRMaW5rJyx7YXR0cnM6e1widG9cIjpcIi9cIn19LFtfdm0uX3YoXCJcXG4gICAgICAgIEhvbWUgcGFnZVxcbiAgICBcIildKV0sMSl9XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cbiAgICA8di1hcHAgZGFyaz5cbiAgICAgICAgPGgxIHYtaWY9XCJlcnJvci5zdGF0dXNDb2RlID09PSA0MDRcIj5cbiAgICAgICAgICAgIHt7IHBhZ2VOb3RGb3VuZCB9fVxuICAgICAgICA8L2gxPlxuICAgICAgICA8aDEgdi1lbHNlPlxuICAgICAgICAgICAge3sgb3RoZXJFcnJvciB9fVxuICAgICAgICA8L2gxPlxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2RhdGFzdGF4L25vc3FsYmVuY2gtbGFicy9pc3N1ZXMvbmV3P2xhYmVscz1BUFBVU0UsVVgsZG9jdW1lbnRhdGlvblwiPlxuICAgICAgICAgICAgRmlsZSBBIFVJIEJ1ZyBSZXBvcnRcbiAgICAgICAgPC9hPlxuICAgICAgICA8TnV4dExpbmsgdG89XCIvXCI+XG4gICAgICAgICAgICBIb21lIHBhZ2VcbiAgICAgICAgPC9OdXh0TGluaz5cbiAgICA8L3YtYXBwPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIGxheW91dDogJ2VtcHR5JyxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID1cbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yLnN0YXR1c0NvZGUgPT09IDQwNCA/IHRoaXMucGFnZU5vdEZvdW5kIDogdGhpcy5vdGhlckVycm9yXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRpdGxlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGEoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBhZ2VOb3RGb3VuZDogJzQwNCBOb3QgRm91bmQnLFxuICAgICAgICAgICAgICAgIG90aGVyRXJyb3I6ICdBbiBlcnJvciBvY2N1cnJlZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTItMCEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xNi0wIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTItMCEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xNi0wIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lcnJvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDgxZTI4Yjgmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZXJyb3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vZXJyb3IudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDgxZTI4Yjgmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjQ4MWUyOGI4XCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzXG5cbi8qIHZ1ZXRpZnktbG9hZGVyICovXG5pbXBvcnQgaW5zdGFsbENvbXBvbmVudHMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL3J1bnRpbWUvaW5zdGFsbENvbXBvbmVudHMuanNcIlxuaW1wb3J0IHsgVkFwcCB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVkFwcCc7XG5pbnN0YWxsQ29tcG9uZW50cyhjb21wb25lbnQsIHtWQXBwfSlcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgY29tcGlsZSB9IGZyb20gJy4uL3V0aWxzJ1xuXG5pbXBvcnQgTnV4dEVycm9yIGZyb20gJy4uLy4uL2xheW91dHMvZXJyb3IudnVlJ1xuXG5pbXBvcnQgTnV4dENoaWxkIGZyb20gJy4vbnV4dC1jaGlsZCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnTnV4dCcsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBOdXh0Q2hpbGQsXG4gICAgTnV4dEVycm9yXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbnV4dENoaWxkS2V5OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiB1bmRlZmluZWRcbiAgICB9LFxuICAgIGtlZXBBbGl2ZTogQm9vbGVhbixcbiAgICBrZWVwQWxpdmVQcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGVmYXVsdCdcbiAgICB9XG4gIH0sXG4gIGVycm9yQ2FwdHVyZWQgKGVycm9yKSB7XG4gICAgLy8gaWYgd2UgcmVjZWl2ZSBhbmQgZXJyb3Igd2hpbGUgc2hvd2luZyB0aGUgTnV4dEVycm9yIGNvbXBvbmVudFxuICAgIC8vIGNhcHR1cmUgdGhlIGVycm9yIGFuZCBmb3JjZSBhbiBpbW1lZGlhdGUgdXBkYXRlIHNvIHdlIHJlLXJlbmRlclxuICAgIC8vIHdpdGhvdXQgdGhlIE51eHRFcnJvciBjb21wb25lbnRcbiAgICBpZiAodGhpcy5kaXNwbGF5aW5nTnV4dEVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yRnJvbU51eHRFcnJvciA9IGVycm9yXG4gICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlclZpZXdLZXkgKCkge1xuICAgICAgLy8gSWYgbnV4dENoaWxkS2V5IHByb3AgaXMgZ2l2ZW4gb3IgY3VycmVudCByb3V0ZSBoYXMgY2hpbGRyZW5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5udXh0Q2hpbGRLZXkgIT09ICd1bmRlZmluZWQnIHx8IHRoaXMuJHJvdXRlLm1hdGNoZWQubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5udXh0Q2hpbGRLZXkgfHwgY29tcGlsZSh0aGlzLiRyb3V0ZS5tYXRjaGVkWzBdLnBhdGgpKHRoaXMuJHJvdXRlLnBhcmFtcylcbiAgICAgIH1cblxuICAgICAgY29uc3QgW21hdGNoZWRSb3V0ZV0gPSB0aGlzLiRyb3V0ZS5tYXRjaGVkXG5cbiAgICAgIGlmICghbWF0Y2hlZFJvdXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IG1hdGNoZWRSb3V0ZS5jb21wb25lbnRzLmRlZmF1bHRcblxuICAgICAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQub3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IENvbXBvbmVudFxuXG4gICAgICAgIGlmIChvcHRpb25zLmtleSkge1xuICAgICAgICAgIHJldHVybiAodHlwZW9mIG9wdGlvbnMua2V5ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5rZXkodGhpcy4kcm91dGUpIDogb3B0aW9ucy5rZXkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RyaWN0ID0gL1xcLyQvLnRlc3QobWF0Y2hlZFJvdXRlLnBhdGgpXG4gICAgICByZXR1cm4gc3RyaWN0ID8gdGhpcy4kcm91dGUucGF0aCA6IHRoaXMuJHJvdXRlLnBhdGgucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgIH1cbiAgfSxcbiAgYmVmb3JlQ3JlYXRlICgpIHtcbiAgICBWdWUudXRpbC5kZWZpbmVSZWFjdGl2ZSh0aGlzLCAnbnV4dCcsIHRoaXMuJHJvb3QuJG9wdGlvbnMubnV4dClcbiAgfSxcbiAgcmVuZGVyIChoKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gZXJyb3JcbiAgICBpZiAoIXRoaXMubnV4dC5lcnIpIHtcbiAgICAgIC8vIERpcmVjdGx5IHJldHVybiBudXh0IGNoaWxkXG4gICAgICByZXR1cm4gaCgnTnV4dENoaWxkJywge1xuICAgICAgICBrZXk6IHRoaXMucm91dGVyVmlld0tleSxcbiAgICAgICAgcHJvcHM6IHRoaXMuJHByb3BzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGlmIGFuIGVycm9yIG9jY3VyZWQgd2l0aGluIE51eHRFcnJvciBzaG93IGEgc2ltcGxlXG4gICAgLy8gZXJyb3IgbWVzc2FnZSBpbnN0ZWFkIHRvIHByZXZlbnQgbG9vcGluZ1xuICAgIGlmICh0aGlzLmVycm9yRnJvbU51eHRFcnJvcikge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gKHRoaXMuZXJyb3JGcm9tTnV4dEVycm9yID0gZmFsc2UpKVxuXG4gICAgICByZXR1cm4gaCgnZGl2Jywge30sIFtcbiAgICAgICAgaCgnaDInLCAnQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBzaG93aW5nIHRoZSBlcnJvciBwYWdlJyksXG4gICAgICAgIGgoJ3AnLCAnVW5mb3J0dW5hdGVseSBhbiBlcnJvciBvY2N1cmVkIGFuZCB3aGlsZSBzaG93aW5nIHRoZSBlcnJvciBwYWdlIGFub3RoZXIgZXJyb3Igb2NjdXJlZCcpLFxuICAgICAgICBoKCdwJywgYEVycm9yIGRldGFpbHM6ICR7dGhpcy5lcnJvckZyb21OdXh0RXJyb3IudG9TdHJpbmcoKX1gKSxcbiAgICAgICAgaCgnbnV4dC1saW5rJywgeyBwcm9wczogeyB0bzogJy8nIH0gfSwgJ0dvIGJhY2sgdG8gaG9tZScpXG4gICAgICBdKVxuICAgIH1cblxuICAgIC8vIHRyYWNrIGlmIHdlIGFyZSBzaG93aW5nIHRoZSBOdXh0RXJyb3IgY29tcG9uZW50XG4gICAgdGhpcy5kaXNwbGF5aW5nTnV4dEVycm9yID0gdHJ1ZVxuICAgIHRoaXMuJG5leHRUaWNrKCgpID0+ICh0aGlzLmRpc3BsYXlpbmdOdXh0RXJyb3IgPSBmYWxzZSkpXG5cbiAgICByZXR1cm4gaChOdXh0RXJyb3IsIHtcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGVycm9yOiB0aGlzLm51eHQuZXJyXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuIiwiPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ051eHRMb2FkaW5nJyxcbiAgZGF0YSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIGNhblN1Y2NlZWQ6IHRydWUsXG4gICAgICByZXZlcnNlZDogZmFsc2UsXG4gICAgICBza2lwVGltZXJDb3VudDogMCxcbiAgICAgIHJ0bDogZmFsc2UsXG4gICAgICB0aHJvdHRsZTogMjAwLFxuICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICBjb250aW51b3VzOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBsZWZ0ICgpIHtcbiAgICAgIGlmICghdGhpcy5jb250aW51b3VzICYmICF0aGlzLnJ0bCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJ0bFxuICAgICAgICA/ICh0aGlzLnJldmVyc2VkID8gJzBweCcgOiAnYXV0bycpXG4gICAgICAgIDogKCF0aGlzLnJldmVyc2VkID8gJzBweCcgOiAnYXV0bycpXG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95ICgpIHtcbiAgICB0aGlzLmNsZWFyKClcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNsZWFyICgpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGhyb3R0bGUpXG4gICAgICB0aGlzLl90aW1lciA9IG51bGxcbiAgICB9LFxuICAgIHN0YXJ0ICgpIHtcbiAgICAgIHRoaXMuY2xlYXIoKVxuICAgICAgdGhpcy5wZXJjZW50ID0gMFxuICAgICAgdGhpcy5yZXZlcnNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnNraXBUaW1lckNvdW50ID0gMFxuICAgICAgdGhpcy5jYW5TdWNjZWVkID0gdHJ1ZVxuXG4gICAgICBpZiAodGhpcy50aHJvdHRsZSkge1xuICAgICAgICB0aGlzLl90aHJvdHRsZSA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdGFydFRpbWVyKCksIHRoaXMudGhyb3R0bGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuICAgIHNldCAobnVtKSB7XG4gICAgICB0aGlzLnNob3cgPSB0cnVlXG4gICAgICB0aGlzLmNhblN1Y2NlZWQgPSB0cnVlXG4gICAgICB0aGlzLnBlcmNlbnQgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IobnVtKSkpXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG4gICAgZ2V0ICgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBlcmNlbnRcbiAgICB9LFxuICAgIGluY3JlYXNlIChudW0pIHtcbiAgICAgIHRoaXMucGVyY2VudCA9IE1hdGgubWluKDEwMCwgTWF0aC5mbG9vcih0aGlzLnBlcmNlbnQgKyBudW0pKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuICAgIGRlY3JlYXNlIChudW0pIHtcbiAgICAgIHRoaXMucGVyY2VudCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodGhpcy5wZXJjZW50IC0gbnVtKSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcbiAgICBwYXVzZSAoKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX3RpbWVyKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIoKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuICAgIGZpbmlzaCAoKSB7XG4gICAgICB0aGlzLnBlcmNlbnQgPSB0aGlzLnJldmVyc2VkID8gMCA6IDEwMFxuICAgICAgdGhpcy5oaWRlKClcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcbiAgICBoaWRlICgpIHtcbiAgICAgIHRoaXMuY2xlYXIoKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXG4gICAgICAgICAgdGhpcy5yZXZlcnNlZCA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICB9LCA1MDApXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG4gICAgZmFpbCAoKSB7XG4gICAgICB0aGlzLmNhblN1Y2NlZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuICAgIHN0YXJ0VGltZXIgKCkge1xuICAgICAgaWYgKCF0aGlzLnNob3cpIHtcbiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuX2N1dCA9IDEwMDAwIC8gTWF0aC5mbG9vcih0aGlzLmR1cmF0aW9uKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl90aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZW4gcmV2ZXJzaW5nIGRpcmVjdGlvbiBza2lwIG9uZSB0aW1lcnNcbiAgICAgICAgICogc28gMCwgMTAwIGFyZSBkaXNwbGF5ZWQgZm9yIHR3byBpdGVyYXRpb25zXG4gICAgICAgICAqIGFsc28gZGlzYWJsZSBjc3Mgd2lkdGggdHJhbnNpdGlvbmluZ1xuICAgICAgICAgKiB3aGljaCBvdGhlcndpc2UgaW50ZXJmZXJlcyBhbmQgc2hvd3NcbiAgICAgICAgICogYSBqb2pvIGVmZmVjdFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuc2tpcFRpbWVyQ291bnQgPiAwKSB7XG4gICAgICAgICAgdGhpcy5za2lwVGltZXJDb3VudC0tXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZXZlcnNlZCkge1xuICAgICAgICAgIHRoaXMuZGVjcmVhc2UodGhpcy5fY3V0KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5jcmVhc2UodGhpcy5fY3V0KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGludW91cykge1xuICAgICAgICAgIGlmICh0aGlzLnBlcmNlbnQgPj0gMTAwKSB7XG4gICAgICAgICAgICB0aGlzLnNraXBUaW1lckNvdW50ID0gMVxuXG4gICAgICAgICAgICB0aGlzLnJldmVyc2VkID0gIXRoaXMucmV2ZXJzZWRcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVyY2VudCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNraXBUaW1lckNvdW50ID0gMVxuXG4gICAgICAgICAgICB0aGlzLnJldmVyc2VkID0gIXRoaXMucmV2ZXJzZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMClcbiAgICB9XG4gIH0sXG4gIHJlbmRlciAoaCkge1xuICAgIGxldCBlbCA9IGgoZmFsc2UpXG4gICAgaWYgKHRoaXMuc2hvdykge1xuICAgICAgZWwgPSBoKCdkaXYnLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiAnbnV4dC1wcm9ncmVzcycsXG4gICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgJ251eHQtcHJvZ3Jlc3Mtbm90cmFuc2l0aW9uJzogdGhpcy5za2lwVGltZXJDb3VudCA+IDAsXG4gICAgICAgICAgJ251eHQtcHJvZ3Jlc3MtZmFpbGVkJzogIXRoaXMuY2FuU3VjY2VlZFxuICAgICAgICB9LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHdpZHRoOiB0aGlzLnBlcmNlbnQgKyAnJScsXG4gICAgICAgICAgbGVmdDogdGhpcy5sZWZ0XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBlbFxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLm51eHQtcHJvZ3Jlc3Mge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMHB4O1xuICBsZWZ0OiAwcHg7XG4gIHJpZ2h0OiAwcHg7XG4gIGhlaWdodDogMnB4O1xuICB3aWR0aDogMCU7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIG9wYWNpdHkgMC40cztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgei1pbmRleDogOTk5OTk5O1xufVxuXG4ubnV4dC1wcm9ncmVzcy5udXh0LXByb2dyZXNzLW5vdHJhbnNpdGlvbiB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbi5udXh0LXByb2dyZXNzLWZhaWxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTItMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL2xvYWRlci5qcz8/cmVmLS0xNi0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbnV4dC1sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0yLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTYtMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL251eHQtbG9hZGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJ2YXIgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnNcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbnV4dC1sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbnV4dC1sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9udXh0LWxvYWRpbmcudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCdkaXYnLFtfYygnbnV4dCcpXSwxKX1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kZWZhdWx0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NjA5MTRlMyZcIlxudmFyIHNjcmlwdCA9IHt9XG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2RlZmF1bHQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuXG5pbXBvcnQge1xuICBnZXRNYXRjaGVkQ29tcG9uZW50c0luc3RhbmNlcyxcbiAgcHJvbWlzaWZ5LFxuICBnbG9iYWxIYW5kbGVFcnJvclxufSBmcm9tICcuL3V0aWxzJ1xuXG5pbXBvcnQgTnV4dEVycm9yIGZyb20gJy4uL2xheW91dHMvZXJyb3IudnVlJ1xuaW1wb3J0IE51eHRMb2FkaW5nIGZyb20gJy4vY29tcG9uZW50cy9udXh0LWxvYWRpbmcudnVlJ1xuXG5pbXBvcnQgXzZmNmMwOThiIGZyb20gJy4uL2xheW91dHMvZGVmYXVsdC52dWUnXG5cbmNvbnN0IGxheW91dHMgPSB7IFwiX2RlZmF1bHRcIjogXzZmNmMwOThiIH1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBoZWFkOiB7XCJ0aXRsZVRlbXBsYXRlXCI6XCIlc25vc3FsYmVuY2ggZG9jc1wiLFwidGl0bGVcIjpcImd1aWRlYm9va1wiLFwibWV0YVwiOlt7XCJjaGFyc2V0XCI6XCJ1dGYtOFwifSx7XCJuYW1lXCI6XCJ2aWV3cG9ydFwiLFwiY29udGVudFwiOlwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIn0se1wiaGlkXCI6XCJkZXNjcmlwdGlvblwiLFwibmFtZVwiOlwiZGVzY3JpcHRpb25cIixcImNvbnRlbnRcIjpcIkRvY3MgQXBwIGZvciBOb1NRTEJlbmNoXCJ9XSxcImxpbmtcIjpbe1wicmVsXCI6XCJpY29uXCIsXCJ0eXBlXCI6XCJpbWFnZVxcdTAwMkZ4LWljb25cIixcImhyZWZcIjpcIlxcdTAwMkZmYXZpY29uLmljb1wifSx7XCJyZWxcIjpcInN0eWxlc2hlZXRcIixcInR5cGVcIjpcInRleHRcXHUwMDJGY3NzXCIsXCJocmVmXCI6XCJodHRwczpcXHUwMDJGXFx1MDAyRmZvbnRzLmdvb2dsZWFwaXMuY29tXFx1MDAyRmNzcz9mYW1pbHk9Um9ib3RvOjEwMCwzMDAsNDAwLDUwMCw3MDAsOTAwJmRpc3BsYXk9c3dhcFwifSx7XCJyZWxcIjpcInN0eWxlc2hlZXRcIixcInR5cGVcIjpcInRleHRcXHUwMDJGY3NzXCIsXCJocmVmXCI6XCJodHRwczpcXHUwMDJGXFx1MDAyRmNkbi5qc2RlbGl2ci5uZXRcXHUwMDJGbnBtXFx1MDAyRkBtZGlcXHUwMDJGZm9udEBsYXRlc3RcXHUwMDJGY3NzXFx1MDAyRm1hdGVyaWFsZGVzaWduaWNvbnMubWluLmNzc1wifV0sXCJzdHlsZVwiOltdLFwic2NyaXB0XCI6W119LFxuXG4gIHJlbmRlciAoaCwgcHJvcHMpIHtcbiAgICBjb25zdCBsb2FkaW5nRWwgPSBoKCdOdXh0TG9hZGluZycsIHsgcmVmOiAnbG9hZGluZycgfSlcblxuICAgIGlmICh0aGlzLm51eHQuZXJyICYmIE51eHRFcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JMYXlvdXQgPSAoTnV4dEVycm9yLm9wdGlvbnMgfHwgTnV4dEVycm9yKS5sYXlvdXRcbiAgICAgIGlmIChlcnJvckxheW91dCkge1xuICAgICAgICB0aGlzLnNldExheW91dChcbiAgICAgICAgICB0eXBlb2YgZXJyb3JMYXlvdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gZXJyb3JMYXlvdXQuY2FsbChOdXh0RXJyb3IsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZXJyb3JMYXlvdXRcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxheW91dEVsID0gaCh0aGlzLmxheW91dCB8fCAnbnV4dCcpXG4gICAgY29uc3QgdGVtcGxhdGVFbCA9IGgoJ2RpdicsIHtcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIGlkOiAnX19sYXlvdXQnXG4gICAgICB9LFxuICAgICAga2V5OiB0aGlzLmxheW91dE5hbWVcbiAgICB9LCBbbGF5b3V0RWxdKVxuXG4gICAgY29uc3QgdHJhbnNpdGlvbkVsID0gaCgndHJhbnNpdGlvbicsIHtcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIG5hbWU6ICdsYXlvdXQnLFxuICAgICAgICBtb2RlOiAnb3V0LWluJ1xuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGJlZm9yZUVudGVyIChlbCkge1xuICAgICAgICAgIC8vIEVuc3VyZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudCBhZnRlciBjYWxsaW5nIHNjcm9sbEJlaGF2aW9yXG4gICAgICAgICAgd2luZG93LiRudXh0LiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuJG51eHQuJGVtaXQoJ3RyaWdnZXJTY3JvbGwnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBbdGVtcGxhdGVFbF0pXG5cbiAgICByZXR1cm4gaCgnZGl2Jywge1xuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgaWQ6ICdfX251eHQnXG4gICAgICB9XG4gICAgfSwgW1xuICAgICAgbG9hZGluZ0VsLFxuXG4gICAgICB0cmFuc2l0aW9uRWxcbiAgICBdKVxuICB9LFxuXG4gIGRhdGE6ICgpID0+ICh7XG4gICAgaXNPbmxpbmU6IHRydWUsXG5cbiAgICBsYXlvdXQ6IG51bGwsXG4gICAgbGF5b3V0TmFtZTogJydcbiAgfSksXG5cbiAgYmVmb3JlQ3JlYXRlICgpIHtcbiAgICBWdWUudXRpbC5kZWZpbmVSZWFjdGl2ZSh0aGlzLCAnbnV4dCcsIHRoaXMuJG9wdGlvbnMubnV4dClcbiAgfSxcbiAgY3JlYXRlZCAoKSB7XG4gICAgLy8gQWRkIHRoaXMuJG51eHQgaW4gY2hpbGQgaW5zdGFuY2VzXG4gICAgVnVlLnByb3RvdHlwZS4kbnV4dCA9IHRoaXNcbiAgICAvLyBhZGQgdG8gd2luZG93IHNvIHdlIGNhbiBsaXN0ZW4gd2hlbiByZWFkeVxuICAgIGlmIChwcm9jZXNzLmNsaWVudCkge1xuICAgICAgd2luZG93LiRudXh0ID0gdGhpc1xuXG4gICAgICB0aGlzLnJlZnJlc2hPbmxpbmVTdGF0dXMoKVxuICAgICAgLy8gU2V0dXAgdGhlIGxpc3RlbmVyc1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMucmVmcmVzaE9ubGluZVN0YXR1cylcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5yZWZyZXNoT25saW5lU3RhdHVzKVxuICAgIH1cbiAgICAvLyBBZGQgJG51eHQuZXJyb3IoKVxuICAgIHRoaXMuZXJyb3IgPSB0aGlzLm51eHQuZXJyb3JcbiAgICAvLyBBZGQgJG51eHQuY29udGV4dFxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuJG9wdGlvbnMuY29udGV4dFxuICB9LFxuXG4gIG1vdW50ZWQgKCkge1xuICAgIHRoaXMuJGxvYWRpbmcgPSB0aGlzLiRyZWZzLmxvYWRpbmdcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICAnbnV4dC5lcnInOiAnZXJyb3JDaGFuZ2VkJ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNPZmZsaW5lICgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc09ubGluZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVmcmVzaE9ubGluZVN0YXR1cyAoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5jbGllbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm9uTGluZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY29ubmVjdGlvbiBzdGF0dXMgcmVwb3J0c1xuICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IHdlIGFyZSBvbmxpbmUgYmVjYXVzZSBtb3N0IGFwcHMnIG9ubHkgcmVhY3RcbiAgICAgICAgICAvLyB3aGVuIHRoZXkgbm93IHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gaW50ZXJydXB0ZWRcbiAgICAgICAgICB0aGlzLmlzT25saW5lID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNPbmxpbmUgPSB3aW5kb3cubmF2aWdhdG9yLm9uTGluZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlZnJlc2ggKCkge1xuICAgICAgY29uc3QgcGFnZXMgPSBnZXRNYXRjaGVkQ29tcG9uZW50c0luc3RhbmNlcyh0aGlzLiRyb3V0ZSlcblxuICAgICAgaWYgKCFwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLiRsb2FkaW5nLnN0YXJ0KClcblxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBwYWdlcy5tYXAoKHBhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IFtdXG5cbiAgICAgICAgaWYgKHBhZ2UuJG9wdGlvbnMuZmV0Y2gpIHtcbiAgICAgICAgICBwLnB1c2gocHJvbWlzaWZ5KHBhZ2UuJG9wdGlvbnMuZmV0Y2gsIHRoaXMuY29udGV4dCkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFnZS4kb3B0aW9ucy5hc3luY0RhdGEpIHtcbiAgICAgICAgICBwLnB1c2goXG4gICAgICAgICAgICBwcm9taXNpZnkocGFnZS4kb3B0aW9ucy5hc3luY0RhdGEsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgICAgLnRoZW4oKG5ld0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICBWdWUuc2V0KHBhZ2UuJGRhdGEsIGtleSwgbmV3RGF0YVtrZXldKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocClcbiAgICAgIH0pXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuJGxvYWRpbmcuZmFpbCgpXG4gICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGVycm9yKVxuICAgICAgICB0aGlzLmVycm9yKGVycm9yKVxuICAgICAgfVxuICAgICAgdGhpcy4kbG9hZGluZy5maW5pc2goKVxuICAgIH0sXG5cbiAgICBlcnJvckNoYW5nZWQgKCkge1xuICAgICAgaWYgKHRoaXMubnV4dC5lcnIgJiYgdGhpcy4kbG9hZGluZykge1xuICAgICAgICBpZiAodGhpcy4kbG9hZGluZy5mYWlsKSB7XG4gICAgICAgICAgdGhpcy4kbG9hZGluZy5mYWlsKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4kbG9hZGluZy5maW5pc2gpIHtcbiAgICAgICAgICB0aGlzLiRsb2FkaW5nLmZpbmlzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0TGF5b3V0IChsYXlvdXQpIHtcbiAgICAgIGlmICghbGF5b3V0IHx8ICFsYXlvdXRzWydfJyArIGxheW91dF0pIHtcbiAgICAgICAgbGF5b3V0ID0gJ2RlZmF1bHQnXG4gICAgICB9XG4gICAgICB0aGlzLmxheW91dE5hbWUgPSBsYXlvdXRcbiAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0c1snXycgKyBsYXlvdXRdXG4gICAgICByZXR1cm4gdGhpcy5sYXlvdXRcbiAgICB9LFxuICAgIGxvYWRMYXlvdXQgKGxheW91dCkge1xuICAgICAgaWYgKCFsYXlvdXQgfHwgIWxheW91dHNbJ18nICsgbGF5b3V0XSkge1xuICAgICAgICBsYXlvdXQgPSAnZGVmYXVsdCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobGF5b3V0c1snXycgKyBsYXlvdXRdKVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgTnV4dExvYWRpbmdcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVleCBmcm9tICd2dWV4J1xuXG5WdWUudXNlKFZ1ZXgpXG5cbmNvbnN0IFZVRVhfUFJPUEVSVElFUyA9IFsnc3RhdGUnLCAnZ2V0dGVycycsICdhY3Rpb25zJywgJ211dGF0aW9ucyddXG5cbmxldCBzdG9yZSA9IHt9O1xuXG4oZnVuY3Rpb24gdXBkYXRlTW9kdWxlcyAoKSB7XG4gIHN0b3JlID0gbm9ybWFsaXplUm9vdChyZXF1aXJlKCcuLi9zdG9yZS9pbmRleC5qcycpLCAnc3RvcmUvaW5kZXguanMnKVxuXG4gIC8vIElmIHN0b3JlIGlzIGFuIGV4cG9ydGVkIG1ldGhvZCA9IGNsYXNzaWMgbW9kZSAoZGVwcmVjYXRlZClcblxuICAvLyBFbmZvcmNlIHN0b3JlIG1vZHVsZXNcbiAgc3RvcmUubW9kdWxlcyA9IHN0b3JlLm1vZHVsZXMgfHwge31cblxuICByZXNvbHZlU3RvcmVNb2R1bGVzKHJlcXVpcmUoJy4uL3N0b3JlL2RvY3MuanMnKSwgJ2RvY3MuanMnKVxuXG4gIC8vIElmIHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBob3QgcmVsb2FkaW5nLi4uXG59KSgpXG5cbi8vIGNyZWF0ZVN0b3JlXG5leHBvcnQgY29uc3QgY3JlYXRlU3RvcmUgPSBzdG9yZSBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gc3RvcmUgOiAoKSA9PiB7XG4gIHJldHVybiBuZXcgVnVleC5TdG9yZShPYmplY3QuYXNzaWduKHtcbiAgICBzdHJpY3Q6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxuICB9LCBzdG9yZSkpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJvb3QgKG1vZHVsZURhdGEsIGZpbGVQYXRoKSB7XG4gIG1vZHVsZURhdGEgPSBtb2R1bGVEYXRhLmRlZmF1bHQgfHwgbW9kdWxlRGF0YVxuXG4gIGlmIChtb2R1bGVEYXRhLmNvbW1pdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW251eHRdICR7ZmlsZVBhdGh9IHNob3VsZCBleHBvcnQgYSBtZXRob2QgdGhhdCByZXR1cm5zIGEgVnVleCBpbnN0YW5jZS5gKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGVEYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gQXZvaWQgVHlwZUVycm9yOiBzZXR0aW5nIGEgcHJvcGVydHkgdGhhdCBoYXMgb25seSBhIGdldHRlciB3aGVuIG92ZXJ3cml0aW5nIHRvcCBsZXZlbCBrZXlzXG4gICAgbW9kdWxlRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZHVsZURhdGEpXG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVEYXRhLCBmaWxlUGF0aClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTW9kdWxlIChtb2R1bGVEYXRhLCBmaWxlUGF0aCkge1xuICBpZiAobW9kdWxlRGF0YS5zdGF0ZSAmJiB0eXBlb2YgbW9kdWxlRGF0YS5zdGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUud2FybihgJ3N0YXRlJyBzaG91bGQgYmUgYSBtZXRob2QgdGhhdCByZXR1cm5zIGFuIG9iamVjdCBpbiAke2ZpbGVQYXRofWApXG5cbiAgICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZHVsZURhdGEuc3RhdGUpXG4gICAgLy8gQXZvaWQgVHlwZUVycm9yOiBzZXR0aW5nIGEgcHJvcGVydHkgdGhhdCBoYXMgb25seSBhIGdldHRlciB3aGVuIG92ZXJ3cml0aW5nIHRvcCBsZXZlbCBrZXlzXG4gICAgbW9kdWxlRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZHVsZURhdGEsIHsgc3RhdGU6ICgpID0+IHN0YXRlIH0pXG4gIH1cbiAgcmV0dXJuIG1vZHVsZURhdGFcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVN0b3JlTW9kdWxlcyAobW9kdWxlRGF0YSwgZmlsZW5hbWUpIHtcbiAgbW9kdWxlRGF0YSA9IG1vZHVsZURhdGEuZGVmYXVsdCB8fCBtb2R1bGVEYXRhXG4gIC8vIFJlbW92ZSBzdG9yZSBzcmMgKyBleHRlbnNpb24gKC4vZm9vL2luZGV4LmpzIC0+IGZvby9pbmRleClcbiAgY29uc3QgbmFtZXNwYWNlID0gZmlsZW5hbWUucmVwbGFjZSgvXFwuKGpzfG1qcykkLywgJycpXG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBuYW1lc3BhY2Uuc3BsaXQoJy8nKVxuICBsZXQgbW9kdWxlTmFtZSA9IG5hbWVzcGFjZXNbbmFtZXNwYWNlcy5sZW5ndGggLSAxXVxuICBjb25zdCBmaWxlUGF0aCA9IGBzdG9yZS8ke2ZpbGVuYW1lfWBcblxuICBtb2R1bGVEYXRhID0gbW9kdWxlTmFtZSA9PT0gJ3N0YXRlJ1xuICAgID8gbm9ybWFsaXplU3RhdGUobW9kdWxlRGF0YSwgZmlsZVBhdGgpXG4gICAgOiBub3JtYWxpemVNb2R1bGUobW9kdWxlRGF0YSwgZmlsZVBhdGgpXG5cbiAgLy8gSWYgc3JjIGlzIGEga25vd24gVnVleCBwcm9wZXJ0eVxuICBpZiAoVlVFWF9QUk9QRVJUSUVTLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBtb2R1bGVOYW1lXG4gICAgY29uc3Qgc3RvcmVNb2R1bGUgPSBnZXRTdG9yZU1vZHVsZShzdG9yZSwgbmFtZXNwYWNlcywgeyBpc1Byb3BlcnR5OiB0cnVlIH0pXG5cbiAgICAvLyBSZXBsYWNlIHN0YXRlIHNpbmNlIGl0J3MgYSBmdW5jdGlvblxuICAgIG1lcmdlUHJvcGVydHkoc3RvcmVNb2R1bGUsIG1vZHVsZURhdGEsIHByb3BlcnR5KVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gSWYgZmlsZSBpcyBmb28vaW5kZXguanMsIGl0IHNob3VsZCBiZSBzYXZlZCBhcyBmb29cbiAgY29uc3QgaXNJbmRleE1vZHVsZSA9IChtb2R1bGVOYW1lID09PSAnaW5kZXgnKVxuICBpZiAoaXNJbmRleE1vZHVsZSkge1xuICAgIG5hbWVzcGFjZXMucG9wKClcbiAgICBtb2R1bGVOYW1lID0gbmFtZXNwYWNlc1tuYW1lc3BhY2VzLmxlbmd0aCAtIDFdXG4gIH1cblxuICBjb25zdCBzdG9yZU1vZHVsZSA9IGdldFN0b3JlTW9kdWxlKHN0b3JlLCBuYW1lc3BhY2VzKVxuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgVlVFWF9QUk9QRVJUSUVTKSB7XG4gICAgbWVyZ2VQcm9wZXJ0eShzdG9yZU1vZHVsZSwgbW9kdWxlRGF0YVtwcm9wZXJ0eV0sIHByb3BlcnR5KVxuICB9XG5cbiAgaWYgKG1vZHVsZURhdGEubmFtZXNwYWNlZCA9PT0gZmFsc2UpIHtcbiAgICBkZWxldGUgc3RvcmVNb2R1bGUubmFtZXNwYWNlZFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0YXRlIChtb2R1bGVEYXRhLCBmaWxlUGF0aCkge1xuICBpZiAodHlwZW9mIG1vZHVsZURhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zb2xlLndhcm4oYCR7ZmlsZVBhdGh9IHNob3VsZCBleHBvcnQgYSBtZXRob2QgdGhhdCByZXR1cm5zIGFuIG9iamVjdGApXG4gICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBtb2R1bGVEYXRhKVxuICAgIHJldHVybiAoKSA9PiBzdGF0ZVxuICB9XG4gIHJldHVybiBub3JtYWxpemVNb2R1bGUobW9kdWxlRGF0YSwgZmlsZVBhdGgpXG59XG5cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlIChzdG9yZU1vZHVsZSwgbmFtZXNwYWNlcywgeyBpc1Byb3BlcnR5ID0gZmFsc2UgfSA9IHt9KSB7XG4gIC8vIElmIC4vbXV0YXRpb25zLmpzXG4gIGlmICghbmFtZXNwYWNlcy5sZW5ndGggfHwgKGlzUHJvcGVydHkgJiYgbmFtZXNwYWNlcy5sZW5ndGggPT09IDEpKSB7XG4gICAgcmV0dXJuIHN0b3JlTW9kdWxlXG4gIH1cblxuICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLnNoaWZ0KClcblxuICBzdG9yZU1vZHVsZS5tb2R1bGVzW25hbWVzcGFjZV0gPSBzdG9yZU1vZHVsZS5tb2R1bGVzW25hbWVzcGFjZV0gfHwge31cbiAgc3RvcmVNb2R1bGUubW9kdWxlc1tuYW1lc3BhY2VdLm5hbWVzcGFjZWQgPSB0cnVlXG4gIHN0b3JlTW9kdWxlLm1vZHVsZXNbbmFtZXNwYWNlXS5tb2R1bGVzID0gc3RvcmVNb2R1bGUubW9kdWxlc1tuYW1lc3BhY2VdLm1vZHVsZXMgfHwge31cblxuICByZXR1cm4gZ2V0U3RvcmVNb2R1bGUoc3RvcmVNb2R1bGUubW9kdWxlc1tuYW1lc3BhY2VdLCBuYW1lc3BhY2VzLCB7IGlzUHJvcGVydHkgfSlcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wZXJ0eSAoc3RvcmVNb2R1bGUsIG1vZHVsZURhdGEsIHByb3BlcnR5KSB7XG4gIGlmICghbW9kdWxlRGF0YSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHByb3BlcnR5ID09PSAnc3RhdGUnKSB7XG4gICAgc3RvcmVNb2R1bGUuc3RhdGUgPSBtb2R1bGVEYXRhIHx8IHN0b3JlTW9kdWxlLnN0YXRlXG4gIH0gZWxzZSB7XG4gICAgc3RvcmVNb2R1bGVbcHJvcGVydHldID0gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmVNb2R1bGVbcHJvcGVydHldLCBtb2R1bGVEYXRhKVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCB7XCJ0aGVtZVwiOntcImRhcmtcIjpmYWxzZSxcInRoZW1lc1wiOntcImxpZ2h0XCI6e1wicHJpbWFyeVwiOlwiIzUxRERCRFwiLFwic2Vjb25kYXJ5XCI6XCIjMkQ0QURFXCIsXCJhY2NlbnRcIjpcIiNGQTdEMkJcIn19fX1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZXRpZnkgZnJvbSAndnVldGlmeS9saWInXG5cbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucydcblxuVnVlLnVzZShWdWV0aWZ5LCB7XG59KVxuXG5leHBvcnQgZGVmYXVsdCAoY3R4KSA9PiB7XG4gIGNvbnN0IHZ1ZXRpZnlPcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zKGN0eCkgOiBvcHRpb25zXG5cbiAgdnVldGlmeU9wdGlvbnMuaWNvbnMgPSB2dWV0aWZ5T3B0aW9ucy5pY29ucyB8fCB7fVxuICB2dWV0aWZ5T3B0aW9ucy5pY29ucy5pY29uZm9udCA9ICdtZGknXG5cbiAgY29uc3QgdnVldGlmeSA9IG5ldyBWdWV0aWZ5KHZ1ZXRpZnlPcHRpb25zKVxuXG4gIGN0eC5hcHAudnVldGlmeSA9IHZ1ZXRpZnlcbiAgY3R4LiR2dWV0aWZ5ID0gdnVldGlmeS5mcmFtZXdvcmtcbn1cbiIsImltcG9ydCBBeGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBkZWZ1IGZyb20gJ2RlZnUnXG5cbi8vIEF4aW9zLnByb3RvdHlwZSBjYW5ub3QgYmUgbW9kaWZpZWRcbmNvbnN0IGF4aW9zRXh0cmEgPSB7XG4gIHNldEJhc2VVUkwgKGJhc2VVUkwpIHtcbiAgICB0aGlzLmRlZmF1bHRzLmJhc2VVUkwgPSBiYXNlVVJMXG4gIH0sXG4gIHNldEhlYWRlciAobmFtZSwgdmFsdWUsIHNjb3BlcyA9ICdjb21tb24nKSB7XG4gICAgZm9yIChsZXQgc2NvcGUgb2YgQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogWyBzY29wZXMgXSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5kZWZhdWx0cy5oZWFkZXJzW3Njb3BlXVtuYW1lXTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLmRlZmF1bHRzLmhlYWRlcnNbc2NvcGVdW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH0sXG4gIHNldFRva2VuICh0b2tlbiwgdHlwZSwgc2NvcGVzID0gJ2NvbW1vbicpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICF0b2tlbiA/IG51bGwgOiAodHlwZSA/IHR5cGUgKyAnICcgOiAnJykgKyB0b2tlblxuICAgIHRoaXMuc2V0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgdmFsdWUsIHNjb3BlcylcbiAgfSxcbiAgb25SZXF1ZXN0KGZuKSB7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoY29uZmlnID0+IGZuKGNvbmZpZykgfHwgY29uZmlnKVxuICB9LFxuICBvblJlc3BvbnNlKGZuKSB7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlID0+IGZuKHJlc3BvbnNlKSB8fCByZXNwb25zZSlcbiAgfSxcbiAgb25SZXF1ZXN0RXJyb3IoZm4pIHtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSh1bmRlZmluZWQsIGVycm9yID0+IGZuKGVycm9yKSB8fCBQcm9taXNlLnJlamVjdChlcnJvcikpXG4gIH0sXG4gIG9uUmVzcG9uc2VFcnJvcihmbikge1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSh1bmRlZmluZWQsIGVycm9yID0+IGZuKGVycm9yKSB8fCBQcm9taXNlLnJlamVjdChlcnJvcikpXG4gIH0sXG4gIG9uRXJyb3IoZm4pIHtcbiAgICB0aGlzLm9uUmVxdWVzdEVycm9yKGZuKVxuICAgIHRoaXMub25SZXNwb25zZUVycm9yKGZuKVxuICB9LFxuICBjcmVhdGUob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVBeGlvc0luc3RhbmNlKGRlZnUob3B0aW9ucywgdGhpcy5kZWZhdWx0cykpXG4gIH1cbn1cblxuLy8gUmVxdWVzdCBoZWxwZXJzICgkZ2V0LCAkcG9zdCwgLi4uKVxuZm9yIChsZXQgbWV0aG9kIG9mIFsncmVxdWVzdCcsICdkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucycsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddKSB7XG4gIGF4aW9zRXh0cmFbJyQnICsgbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbbWV0aG9kXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLnRoZW4ocmVzID0+IHJlcyAmJiByZXMuZGF0YSkgfVxufVxuXG5jb25zdCBleHRlbmRBeGlvc0luc3RhbmNlID0gYXhpb3MgPT4ge1xuICBmb3IgKGxldCBrZXkgaW4gYXhpb3NFeHRyYSkge1xuICAgIGF4aW9zW2tleV0gPSBheGlvc0V4dHJhW2tleV0uYmluZChheGlvcylcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVBeGlvc0luc3RhbmNlID0gYXhpb3NPcHRpb25zID0+IHtcbiAgLy8gQ3JlYXRlIG5ldyBheGlvcyBpbnN0YW5jZVxuICBjb25zdCBheGlvcyA9IEF4aW9zLmNyZWF0ZShheGlvc09wdGlvbnMpXG4gIGF4aW9zLkNhbmNlbFRva2VuID0gQXhpb3MuQ2FuY2VsVG9rZW5cbiAgYXhpb3MuaXNDYW5jZWwgPSBBeGlvcy5pc0NhbmNlbFxuXG4gIC8vIEV4dGVuZCBheGlvcyBwcm90b1xuICBleHRlbmRBeGlvc0luc3RhbmNlKGF4aW9zKVxuXG4gIC8vIFNldHVwIGludGVyY2VwdG9yc1xuXG4gIHNldHVwUHJvZ3Jlc3MoYXhpb3MpXG5cbiAgcmV0dXJuIGF4aW9zXG59XG5cbmNvbnN0IHNldHVwUHJvZ3Jlc3MgPSAoYXhpb3MpID0+IHtcbiAgaWYgKHByb2Nlc3Muc2VydmVyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBBIG5vb3AgbG9hZGluZyBpbnRldGVyZmFjZSBmb3Igd2hlbiAkbnV4dCBpcyBub3QgeWV0IHJlYWR5XG4gIGNvbnN0IG5vb3BMb2FkaW5nID0ge1xuICAgIGZpbmlzaDogKCkgPT4geyB9LFxuICAgIHN0YXJ0OiAoKSA9PiB7IH0sXG4gICAgZmFpbDogKCkgPT4geyB9LFxuICAgIHNldDogKCkgPT4geyB9XG4gIH1cblxuICBjb25zdCAkbG9hZGluZyA9ICgpID0+ICh3aW5kb3cuJG51eHQgJiYgd2luZG93LiRudXh0LiRsb2FkaW5nICYmIHdpbmRvdy4kbnV4dC4kbG9hZGluZy5zZXQpID8gd2luZG93LiRudXh0LiRsb2FkaW5nIDogbm9vcExvYWRpbmdcblxuICBsZXQgY3VycmVudFJlcXVlc3RzID0gMFxuXG4gIGF4aW9zLm9uUmVxdWVzdChjb25maWcgPT4ge1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLnByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY3VycmVudFJlcXVlc3RzKytcbiAgfSlcblxuICBheGlvcy5vblJlc3BvbnNlKHJlc3BvbnNlID0+IHtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY29uZmlnICYmIHJlc3BvbnNlLmNvbmZpZy5wcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGN1cnJlbnRSZXF1ZXN0cy0tXG4gICAgaWYgKGN1cnJlbnRSZXF1ZXN0cyA8PSAwKSB7XG4gICAgICBjdXJyZW50UmVxdWVzdHMgPSAwXG4gICAgICAkbG9hZGluZygpLmZpbmlzaCgpXG4gICAgfVxuICB9KVxuXG4gIGF4aW9zLm9uRXJyb3IoZXJyb3IgPT4ge1xuICAgIGlmIChlcnJvciAmJiBlcnJvci5jb25maWcgJiYgZXJyb3IuY29uZmlnLnByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY3VycmVudFJlcXVlc3RzLS1cblxuICAgIGlmIChBeGlvcy5pc0NhbmNlbChlcnJvcikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgICRsb2FkaW5nKCkuZmFpbCgpXG4gICAgJGxvYWRpbmcoKS5maW5pc2goKVxuICB9KVxuXG4gIGNvbnN0IG9uUHJvZ3Jlc3MgPSBlID0+IHtcbiAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0cykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHByb2dyZXNzID0gKChlLmxvYWRlZCAqIDEwMCkgLyAoZS50b3RhbCAqIGN1cnJlbnRSZXF1ZXN0cykpXG4gICAgJGxvYWRpbmcoKS5zZXQoTWF0aC5taW4oMTAwLCBwcm9ncmVzcykpXG4gIH1cblxuICBheGlvcy5kZWZhdWx0cy5vblVwbG9hZFByb2dyZXNzID0gb25Qcm9ncmVzc1xuICBheGlvcy5kZWZhdWx0cy5vbkRvd25sb2FkUHJvZ3Jlc3MgPSBvblByb2dyZXNzXG59XG5cbmV4cG9ydCBkZWZhdWx0IChjdHgsIGluamVjdCkgPT4ge1xuICAvLyBiYXNlVVJMXG4gIGNvbnN0IGJhc2VVUkwgPSBwcm9jZXNzLmJyb3dzZXJcbiAgICAgID8gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8nXG4gICAgICA6IChwcm9jZXNzLmVudi5fQVhJT1NfQkFTRV9VUkxfIHx8ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvJylcblxuICAvLyBDcmVhdGUgZnJlc2ggb2JqZWN0cyBmb3IgYWxsIGRlZmF1bHQgaGVhZGVyIHNjb3Blc1xuICAvLyBBeGlvcyBjcmVhdGVzIG9ubHkgb25lIHdoaWNoIGlzIHNoYXJlZCBhY3Jvc3MgU1NSIHJlcXVlc3RzIVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbXphYnJpc2tpZS9heGlvcy9ibG9iL21hc3Rlci9saWIvZGVmYXVsdHMuanNcbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICBcImNvbW1vblwiOiB7XG4gICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXCJcbiAgICB9LFxuICAgIFwiZGVsZXRlXCI6IHt9LFxuICAgIFwiZ2V0XCI6IHt9LFxuICAgIFwiaGVhZFwiOiB7fSxcbiAgICBcInBvc3RcIjoge30sXG4gICAgXCJwdXRcIjoge30sXG4gICAgXCJwYXRjaFwiOiB7fVxufVxuXG4gIGNvbnN0IGF4aW9zT3B0aW9ucyA9IHtcbiAgICBiYXNlVVJMLFxuICAgIGhlYWRlcnNcbiAgfVxuXG4gIC8vIFByb3h5IFNTUiByZXF1ZXN0IGhlYWRlcnMgaGVhZGVyc1xuICBheGlvc09wdGlvbnMuaGVhZGVycy5jb21tb24gPSAoY3R4LnJlcSAmJiBjdHgucmVxLmhlYWRlcnMpID8gT2JqZWN0LmFzc2lnbih7fSwgY3R4LnJlcS5oZWFkZXJzKSA6IHt9XG4gIGRlbGV0ZSBheGlvc09wdGlvbnMuaGVhZGVycy5jb21tb25bJ2FjY2VwdCddXG4gIGRlbGV0ZSBheGlvc09wdGlvbnMuaGVhZGVycy5jb21tb25bJ2hvc3QnXVxuICBkZWxldGUgYXhpb3NPcHRpb25zLmhlYWRlcnMuY29tbW9uWydjZi1yYXknXVxuICBkZWxldGUgYXhpb3NPcHRpb25zLmhlYWRlcnMuY29tbW9uWydjZi1jb25uZWN0aW5nLWlwJ11cbiAgZGVsZXRlIGF4aW9zT3B0aW9ucy5oZWFkZXJzLmNvbW1vblsnY29udGVudC1sZW5ndGgnXVxuICBkZWxldGUgYXhpb3NPcHRpb25zLmhlYWRlcnMuY29tbW9uWydjb250ZW50LW1kNSddXG4gIGRlbGV0ZSBheGlvc09wdGlvbnMuaGVhZGVycy5jb21tb25bJ2NvbnRlbnQtdHlwZSddXG5cbiAgaWYgKHByb2Nlc3Muc2VydmVyKSB7XG4gICAgLy8gRG9uJ3QgYWNjZXB0IGJyb3RsaSBlbmNvZGluZyBiZWNhdXNlIE5vZGUgY2FuJ3QgcGFyc2UgaXRcbiAgICBheGlvc09wdGlvbnMuaGVhZGVycy5jb21tb25bJ2FjY2VwdC1lbmNvZGluZyddID0gJ2d6aXAsIGRlZmxhdGUnXG4gIH1cblxuICBjb25zdCBheGlvcyA9IGNyZWF0ZUF4aW9zSW5zdGFuY2UoYXhpb3NPcHRpb25zKVxuXG4gIC8vIEluamVjdCBheGlvcyB0byB0aGUgY29udGV4dCBhcyAkYXhpb3NcbiAgY3R4LiRheGlvcyA9IGF4aW9zXG4gIGluamVjdCgnYXhpb3MnLCBheGlvcylcbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IE1ldGEgZnJvbSAndnVlLW1ldGEnXG5pbXBvcnQgQ2xpZW50T25seSBmcm9tICd2dWUtY2xpZW50LW9ubHknXG5pbXBvcnQgTm9Tc3IgZnJvbSAndnVlLW5vLXNzcidcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciB9IGZyb20gJy4vcm91dGVyLmpzJ1xuaW1wb3J0IE51eHRDaGlsZCBmcm9tICcuL2NvbXBvbmVudHMvbnV4dC1jaGlsZC5qcydcbmltcG9ydCBOdXh0RXJyb3IgZnJvbSAnLi4vbGF5b3V0cy9lcnJvci52dWUnXG5pbXBvcnQgTnV4dCBmcm9tICcuL2NvbXBvbmVudHMvbnV4dC5qcydcbmltcG9ydCBBcHAgZnJvbSAnLi9BcHAuanMnXG5pbXBvcnQgeyBzZXRDb250ZXh0LCBnZXRMb2NhdGlvbiwgZ2V0Um91dGVEYXRhLCBub3JtYWxpemVFcnJvciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJy4vc3RvcmUuanMnXG5cbi8qIFBsdWdpbnMgKi9cblxuaW1wb3J0IG51eHRfcGx1Z2luX3BsdWdpbl84NzNiOTJlNiBmcm9tICdudXh0X3BsdWdpbl9wbHVnaW5fODczYjkyZTYnIC8vIFNvdXJjZTogLi92dWV0aWZ5L3BsdWdpbi5qcyAobW9kZTogJ2FsbCcpXG5pbXBvcnQgbnV4dF9wbHVnaW5fYXhpb3NfNDBhMGY5OTcgZnJvbSAnbnV4dF9wbHVnaW5fYXhpb3NfNDBhMGY5OTcnIC8vIFNvdXJjZTogLi9heGlvcy5qcyAobW9kZTogJ2FsbCcpXG5cbi8vIENvbXBvbmVudDogPENsaWVudE9ubHk+XG5WdWUuY29tcG9uZW50KENsaWVudE9ubHkubmFtZSwgQ2xpZW50T25seSlcblxuLy8gVE9ETzogUmVtb3ZlIGluIE51eHQgMzogPE5vU3NyPlxuVnVlLmNvbXBvbmVudChOb1Nzci5uYW1lLCB7XG4gIC4uLk5vU3NyLFxuICByZW5kZXIgKGgsIGN0eCkge1xuICAgIGlmIChwcm9jZXNzLmNsaWVudCAmJiAhTm9Tc3IuX3dhcm5lZCkge1xuICAgICAgTm9Tc3IuX3dhcm5lZCA9IHRydWVcblxuICAgICAgY29uc29sZS53YXJuKCc8bm8tc3NyPiBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gTnV4dCAzLCBwbGVhc2UgdXNlIDxjbGllbnQtb25seT4gaW5zdGVhZCcpXG4gICAgfVxuICAgIHJldHVybiBOb1Nzci5yZW5kZXIoaCwgY3R4KVxuICB9XG59KVxuXG4vLyBDb21wb25lbnQ6IDxOdXh0Q2hpbGQ+XG5WdWUuY29tcG9uZW50KE51eHRDaGlsZC5uYW1lLCBOdXh0Q2hpbGQpXG5WdWUuY29tcG9uZW50KCdOQ2hpbGQnLCBOdXh0Q2hpbGQpXG5cbi8vIENvbXBvbmVudCBOdXh0TGluayBpcyBpbXBvcnRlZCBpbiBzZXJ2ZXIuanMgb3IgY2xpZW50LmpzXG5cbi8vIENvbXBvbmVudDogPE51eHQ+XG5WdWUuY29tcG9uZW50KE51eHQubmFtZSwgTnV4dClcblxuVnVlLnVzZShNZXRhLCB7XCJrZXlOYW1lXCI6XCJoZWFkXCIsXCJhdHRyaWJ1dGVcIjpcImRhdGEtbi1oZWFkXCIsXCJzc3JBdHRyaWJ1dGVcIjpcImRhdGEtbi1oZWFkLXNzclwiLFwidGFnSURLZXlOYW1lXCI6XCJoaWRcIn0pXG5cbmNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uID0ge1wibmFtZVwiOlwicGFnZVwiLFwibW9kZVwiOlwib3V0LWluXCIsXCJhcHBlYXJcIjp0cnVlLFwiYXBwZWFyQ2xhc3NcIjpcImFwcGVhclwiLFwiYXBwZWFyQWN0aXZlQ2xhc3NcIjpcImFwcGVhci1hY3RpdmVcIixcImFwcGVhclRvQ2xhc3NcIjpcImFwcGVhci10b1wifVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHAgKHNzckNvbnRleHQpIHtcbiAgY29uc3Qgcm91dGVyID0gYXdhaXQgY3JlYXRlUm91dGVyKHNzckNvbnRleHQpXG5cbiAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShzc3JDb250ZXh0KVxuICAvLyBBZGQgdGhpcy4kcm91dGVyIGludG8gc3RvcmUgYWN0aW9ucy9tdXRhdGlvbnNcbiAgc3RvcmUuJHJvdXRlciA9IHJvdXRlclxuXG4gIC8vIENyZWF0ZSBSb290IGluc3RhbmNlXG5cbiAgLy8gaGVyZSB3ZSBpbmplY3QgdGhlIHJvdXRlciBhbmQgc3RvcmUgdG8gYWxsIGNoaWxkIGNvbXBvbmVudHMsXG4gIC8vIG1ha2luZyB0aGVtIGF2YWlsYWJsZSBldmVyeXdoZXJlIGFzIGB0aGlzLiRyb3V0ZXJgIGFuZCBgdGhpcy4kc3RvcmVgLlxuICBjb25zdCBhcHAgPSB7XG4gICAgc3RvcmUsXG4gICAgcm91dGVyLFxuICAgIG51eHQ6IHtcbiAgICAgIGRlZmF1bHRUcmFuc2l0aW9uLFxuICAgICAgdHJhbnNpdGlvbnM6IFtkZWZhdWx0VHJhbnNpdGlvbl0sXG4gICAgICBzZXRUcmFuc2l0aW9ucyAodHJhbnNpdGlvbnMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyYW5zaXRpb25zKSkge1xuICAgICAgICAgIHRyYW5zaXRpb25zID0gW3RyYW5zaXRpb25zXVxuICAgICAgICB9XG4gICAgICAgIHRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnMubWFwKCh0cmFuc2l0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKCF0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uID0gZGVmYXVsdFRyYW5zaXRpb25cbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0cmFuc2l0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRUcmFuc2l0aW9uLCB7IG5hbWU6IHRyYW5zaXRpb24gfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRUcmFuc2l0aW9uLCB0cmFuc2l0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLiRvcHRpb25zLm51eHQudHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9uc1xuICAgICAgICByZXR1cm4gdHJhbnNpdGlvbnNcbiAgICAgIH0sXG5cbiAgICAgIGVycjogbnVsbCxcbiAgICAgIGRhdGVFcnI6IG51bGwsXG4gICAgICBlcnJvciAoZXJyKSB7XG4gICAgICAgIGVyciA9IGVyciB8fCBudWxsXG4gICAgICAgIGFwcC5jb250ZXh0Ll9lcnJvcmVkID0gQm9vbGVhbihlcnIpXG4gICAgICAgIGVyciA9IGVyciA/IG5vcm1hbGl6ZUVycm9yKGVycikgOiBudWxsXG4gICAgICAgIGNvbnN0IG51eHQgPSB0aGlzLm51eHQgfHwgdGhpcy4kb3B0aW9ucy5udXh0XG4gICAgICAgIG51eHQuZGF0ZUVyciA9IERhdGUubm93KClcbiAgICAgICAgbnV4dC5lcnIgPSBlcnJcbiAgICAgICAgLy8gVXNlZCBpbiBzcmMvc2VydmVyLmpzXG4gICAgICAgIGlmIChzc3JDb250ZXh0KSB7XG4gICAgICAgICAgc3NyQ29udGV4dC5udXh0LmVycm9yID0gZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyclxuICAgICAgfVxuICAgIH0sXG4gICAgLi4uQXBwXG4gIH1cblxuICAvLyBNYWtlIGFwcCBhdmFpbGFibGUgaW50byBzdG9yZSB2aWEgdGhpcy5hcHBcbiAgc3RvcmUuYXBwID0gYXBwXG5cbiAgY29uc3QgbmV4dCA9IHNzckNvbnRleHQgPyBzc3JDb250ZXh0Lm5leHQgOiBsb2NhdGlvbiA9PiBhcHAucm91dGVyLnB1c2gobG9jYXRpb24pXG4gIC8vIFJlc29sdmUgcm91dGVcbiAgbGV0IHJvdXRlXG4gIGlmIChzc3JDb250ZXh0KSB7XG4gICAgcm91dGUgPSByb3V0ZXIucmVzb2x2ZShzc3JDb250ZXh0LnVybCkucm91dGVcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXRoID0gZ2V0TG9jYXRpb24ocm91dGVyLm9wdGlvbnMuYmFzZSwgcm91dGVyLm9wdGlvbnMubW9kZSlcbiAgICByb3V0ZSA9IHJvdXRlci5yZXNvbHZlKHBhdGgpLnJvdXRlXG4gIH1cblxuICAvLyBTZXQgY29udGV4dCB0byBhcHAuY29udGV4dFxuICBhd2FpdCBzZXRDb250ZXh0KGFwcCwge1xuICAgIHN0b3JlLFxuICAgIHJvdXRlLFxuICAgIG5leHQsXG4gICAgZXJyb3I6IGFwcC5udXh0LmVycm9yLmJpbmQoYXBwKSxcbiAgICBwYXlsb2FkOiBzc3JDb250ZXh0ID8gc3NyQ29udGV4dC5wYXlsb2FkIDogdW5kZWZpbmVkLFxuICAgIHJlcTogc3NyQ29udGV4dCA/IHNzckNvbnRleHQucmVxIDogdW5kZWZpbmVkLFxuICAgIHJlczogc3NyQ29udGV4dCA/IHNzckNvbnRleHQucmVzIDogdW5kZWZpbmVkLFxuICAgIGJlZm9yZVJlbmRlckZuczogc3NyQ29udGV4dCA/IHNzckNvbnRleHQuYmVmb3JlUmVuZGVyRm5zIDogdW5kZWZpbmVkLFxuICAgIHNzckNvbnRleHRcbiAgfSlcblxuICBjb25zdCBpbmplY3QgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luamVjdChrZXksIHZhbHVlKSBoYXMgbm8ga2V5IHByb3ZpZGVkJylcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5qZWN0KGtleSwgdmFsdWUpIGhhcyBubyB2YWx1ZSBwcm92aWRlZCcpXG4gICAgfVxuXG4gICAga2V5ID0gJyQnICsga2V5XG4gICAgLy8gQWRkIGludG8gYXBwXG4gICAgYXBwW2tleV0gPSB2YWx1ZVxuXG4gICAgLy8gQWRkIGludG8gc3RvcmVcbiAgICBzdG9yZVtrZXldID0gYXBwW2tleV1cblxuICAgIC8vIENoZWNrIGlmIHBsdWdpbiBub3QgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICBjb25zdCBpbnN0YWxsS2V5ID0gJ19fbnV4dF8nICsga2V5ICsgJ19pbnN0YWxsZWRfXydcbiAgICBpZiAoVnVlW2luc3RhbGxLZXldKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgVnVlW2luc3RhbGxLZXldID0gdHJ1ZVxuICAgIC8vIENhbGwgVnVlLnVzZSgpIHRvIGluc3RhbGwgdGhlIHBsdWdpbiBpbnRvIHZtXG4gICAgVnVlLnVzZSgoKSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdWUsIGtleSkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsIGtleSwge1xuICAgICAgICAgIGdldCAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcm9vdC4kb3B0aW9uc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvY2Vzcy5jbGllbnQpIHtcbiAgICAvLyBSZXBsYWNlIHN0b3JlIHN0YXRlIGJlZm9yZSBwbHVnaW5zIGV4ZWN1dGlvblxuICAgIGlmICh3aW5kb3cuX19OVVhUX18gJiYgd2luZG93Ll9fTlVYVF9fLnN0YXRlKSB7XG4gICAgICBzdG9yZS5yZXBsYWNlU3RhdGUod2luZG93Ll9fTlVYVF9fLnN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIC8vIFBsdWdpbiBleGVjdXRpb25cblxuICBpZiAodHlwZW9mIG51eHRfcGx1Z2luX3BsdWdpbl84NzNiOTJlNiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGF3YWl0IG51eHRfcGx1Z2luX3BsdWdpbl84NzNiOTJlNihhcHAuY29udGV4dCwgaW5qZWN0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBudXh0X3BsdWdpbl9heGlvc180MGEwZjk5NyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGF3YWl0IG51eHRfcGx1Z2luX2F4aW9zXzQwYTBmOTk3KGFwcC5jb250ZXh0LCBpbmplY3QpXG4gIH1cblxuICAvLyBJZiBzZXJ2ZXItc2lkZSwgd2FpdCBmb3IgYXN5bmMgY29tcG9uZW50IHRvIGJlIHJlc29sdmVkIGZpcnN0XG4gIGlmIChwcm9jZXNzLnNlcnZlciAmJiBzc3JDb250ZXh0ICYmIHNzckNvbnRleHQudXJsKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcm91dGVyLnB1c2goc3NyQ29udGV4dC51cmwsIHJlc29sdmUsICgpID0+IHtcbiAgICAgICAgLy8gbmF2aWdhdGVkIHRvIGEgZGlmZmVyZW50IHJvdXRlIGluIHJvdXRlciBndWFyZFxuICAgICAgICBjb25zdCB1bnJlZ2lzdGVyID0gcm91dGVyLmFmdGVyRWFjaChhc3luYyAodG8sIGZyb20sIG5leHQpID0+IHtcbiAgICAgICAgICBzc3JDb250ZXh0LnVybCA9IHRvLmZ1bGxQYXRoXG4gICAgICAgICAgYXBwLmNvbnRleHQucm91dGUgPSBhd2FpdCBnZXRSb3V0ZURhdGEodG8pXG4gICAgICAgICAgYXBwLmNvbnRleHQucGFyYW1zID0gdG8ucGFyYW1zIHx8IHt9XG4gICAgICAgICAgYXBwLmNvbnRleHQucXVlcnkgPSB0by5xdWVyeSB8fCB7fVxuICAgICAgICAgIHVucmVnaXN0ZXIoKVxuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdG9yZSxcbiAgICBhcHAsXG4gICAgcm91dGVyXG4gIH1cbn1cblxuZXhwb3J0IHsgY3JlYXRlQXBwLCBOdXh0RXJyb3IgfVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},74:function(module,exports,__webpack_require__){eval("// style-loader: Adds some css to the DOM by adding a
Loading...
- + diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScriptAssemblyTest.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScriptAssemblyTest.java index 035deea30..8f395dcdf 100644 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScriptAssemblyTest.java +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScriptAssemblyTest.java @@ -18,9 +18,8 @@ package io.nosqlbench.engine.cli; -import io.nosqlbench.engine.cli.EBCLIOptions; -import io.nosqlbench.engine.cli.EBCLIScriptAssembly; -import org.junit.Test; + +import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/engine-docs/src/main/resources/docs-for-nb/01_nosqlbench/04_support_options.md b/engine-docs/src/main/resources/docs-for-nb/01_nosqlbench/04_support_options.md index dabf105e0..8c0ef877e 100644 --- a/engine-docs/src/main/resources/docs-for-nb/01_nosqlbench/04_support_options.md +++ b/engine-docs/src/main/resources/docs-for-nb/01_nosqlbench/04_support_options.md @@ -5,22 +5,18 @@ weight: 10 # Support Options -These guidelines are mirrored at the [Submitting Feedback](https://github.com/datastax/nosqlbench-labs/wiki/Submitting-Feedback) wiki page at the nosqlbench project site, which is also where the `[Submit Feedback]` link will take you. - -## Community Support - -It is supported by a community of active users at [DataStax nosqlbench Community](https://community.datastax.com/spaces/51/index.html). +These guidelines are mirrored at the [Submitting Feedback](https://github.com/nosqlbench/nosqlbench/wiki/Submitting-Feedback) wiki page at the nosqlbench project site, which is also where the `[Submit Feedback]` link will take you. ## Bug Fixes -If you think you have found a bug, please [file a bug report](https://github.com/datastax/nosqlbench-labs/issues/new?labels=bug). nosqlbench is actively used within DataStax, and verified bugs will get attention as resources permit. Bugs reports which are more detailed, or bug reports which include steps to reproduce will get attention first. +If you think you have found a bug, please [file a bug report](https://github.com/nosqlbench/nosqlbench/issues/new?labels=bug). nosqlbench is actively used within DataStax, and verified bugs will get attention as resources permit. Bugs reports which are more detailed, or bug reports which include steps to reproduce will get attention first. ## Feature Requests If you would like to see something in nosqlbench that is not there yet, -please [submit a feature request](https://github.com/datastax/nosqlbench-labs/issues/new?labels=feature). +please [submit a feature request](https://github.com/nosqlbench/nosqlbench/issues/new?labels=feature). ## Documentation Requests -If you would like to see a specific nosqlbench or testing topic added to the guidebook, please [request docs content](https://github.com/datastax/nosqlbench-labs/issues/new?labels=docrequest). +If you would like to see a specific nosqlbench or testing topic added to the guidebook, please [request docs content](https://github.com/nosqlbench/nosqlbench/issues/new?labels=docs). diff --git a/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/VirtDataFunctions.java b/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/VirtDataFunctions.java index e78a9127f..fc2803e61 100644 --- a/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/VirtDataFunctions.java +++ b/virtdata-api/src/main/java/io/nosqlbench/virtdata/api/VirtDataFunctions.java @@ -9,6 +9,7 @@ import java.util.function.*; public class VirtDataFunctions { private enum FuncType { + LongToDoubleFunction(java.util.function.LongToDoubleFunction.class, double.class), LongFunction(LongFunction.class, long.class), LongUnaryOperator(java.util.function.LongUnaryOperator.class, long.class), IntFunction(java.util.function.IntFunction.class, int.class),