@openmrs/esm-app-shell 5.2.1-pre.1069 → 5.2.1-pre.1079
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +26 -27
- package/dist/6738bea79c65fe1d.js +1 -0
- package/dist/6738bea79c65fe1d.js.map +1 -0
- package/dist/74758f432e4bb251.js +1 -0
- package/dist/74758f432e4bb251.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/openmrs.949105eccc42df1d.js +2 -0
- package/dist/openmrs.949105eccc42df1d.js.map +1 -0
- package/dist/service-worker.js +1 -1
- package/dist/service-worker.js.map +1 -1
- package/lib/910837678b95bca5.js +582 -0
- package/lib/{87bd7ee12eef542b.js → a3f8c9535d9deb27.js} +2 -16
- package/lib/esm-devtools-app/main.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +2 -2
- package/lib/esm-devtools-app/routes.json +1 -1
- package/lib/esm-implementer-tools-app/220.js +1 -0
- package/lib/esm-implementer-tools-app/220.js.map +1 -0
- package/lib/esm-implementer-tools-app/246.js +1 -0
- package/lib/esm-implementer-tools-app/246.js.map +1 -0
- package/lib/esm-implementer-tools-app/263.js +1 -0
- package/lib/esm-implementer-tools-app/263.js.map +1 -0
- package/lib/esm-implementer-tools-app/319.js +1 -0
- package/lib/esm-implementer-tools-app/329.js +2 -0
- package/lib/esm-implementer-tools-app/329.js.LICENSE.txt +9 -0
- package/lib/esm-implementer-tools-app/329.js.map +1 -0
- package/lib/esm-implementer-tools-app/390.js +1 -0
- package/lib/esm-implementer-tools-app/390.js.map +1 -0
- package/lib/esm-implementer-tools-app/426.js +1 -0
- package/lib/esm-implementer-tools-app/426.js.map +1 -0
- package/lib/esm-implementer-tools-app/460.js +1 -0
- package/lib/esm-implementer-tools-app/466.js +1 -0
- package/lib/esm-implementer-tools-app/466.js.map +1 -0
- package/lib/esm-implementer-tools-app/499.js +1 -0
- package/lib/esm-implementer-tools-app/499.js.map +1 -0
- package/lib/esm-implementer-tools-app/500.js +1 -0
- package/lib/esm-implementer-tools-app/500.js.map +1 -0
- package/lib/esm-implementer-tools-app/519.js +1 -0
- package/lib/esm-implementer-tools-app/519.js.map +1 -0
- package/lib/esm-implementer-tools-app/56.js +1 -0
- package/lib/esm-implementer-tools-app/56.js.map +1 -0
- package/lib/esm-implementer-tools-app/574.js +1 -0
- package/lib/esm-implementer-tools-app/575.js +1 -0
- package/lib/esm-implementer-tools-app/575.js.map +1 -0
- package/lib/esm-implementer-tools-app/587.js +1 -0
- package/lib/esm-implementer-tools-app/587.js.map +1 -0
- package/lib/esm-implementer-tools-app/620.js +2 -0
- package/lib/esm-implementer-tools-app/620.js.LICENSE.txt +38 -0
- package/lib/esm-implementer-tools-app/620.js.map +1 -0
- package/lib/esm-implementer-tools-app/625.js +1 -0
- package/lib/esm-implementer-tools-app/657.js +1 -0
- package/lib/esm-implementer-tools-app/735.js +2 -0
- package/lib/esm-implementer-tools-app/735.js.LICENSE.txt +9 -0
- package/lib/esm-implementer-tools-app/735.js.map +1 -0
- package/lib/esm-implementer-tools-app/757.js +1 -0
- package/lib/esm-implementer-tools-app/788.js +2 -0
- package/lib/esm-implementer-tools-app/788.js.LICENSE.txt +19 -0
- package/lib/esm-implementer-tools-app/788.js.map +1 -0
- package/lib/esm-implementer-tools-app/807.js +1 -0
- package/lib/esm-implementer-tools-app/807.js.map +1 -0
- package/lib/esm-implementer-tools-app/833.js +1 -0
- package/lib/esm-implementer-tools-app/837.js +2 -0
- package/lib/esm-implementer-tools-app/837.js.LICENSE.txt +5 -0
- package/lib/esm-implementer-tools-app/837.js.map +1 -0
- package/lib/esm-implementer-tools-app/889.js +2 -0
- package/lib/esm-implementer-tools-app/889.js.LICENSE.txt +3 -0
- package/lib/esm-implementer-tools-app/889.js.map +1 -0
- package/lib/esm-implementer-tools-app/main.js +1 -0
- package/lib/esm-implementer-tools-app/main.js.map +1 -0
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -0
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +762 -0
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.map +1 -0
- package/lib/esm-implementer-tools-app/routes.json +1 -0
- package/lib/esm-login-app/111.js +1 -1
- package/lib/esm-login-app/126.js +1 -1
- package/lib/esm-login-app/173.js +1 -1
- package/lib/esm-login-app/337.js +1 -1
- package/lib/esm-login-app/342.js +1 -1
- package/lib/esm-login-app/main.js +1 -1
- package/lib/esm-login-app/main.js.map +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +28 -28
- package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
- package/lib/esm-login-app/routes.json +1 -1
- package/lib/esm-offline-tools-app/202.js +1 -1
- package/lib/esm-offline-tools-app/224.js +1 -1
- package/lib/esm-offline-tools-app/807.js +1 -1
- package/lib/esm-offline-tools-app/main.js +1 -1
- package/lib/esm-offline-tools-app/main.js.map +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +28 -28
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.map +1 -1
- package/lib/esm-offline-tools-app/routes.json +1 -1
- package/lib/esm-primary-navigation-app/main.js +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +2 -2
- package/lib/esm-primary-navigation-app/routes.json +1 -1
- package/lib/index.html +2 -2
- package/lib/openmrs.js +39 -28
- package/lib/service-worker.js +73 -18
- package/package.json +8 -8
- package/dist/e861b352d93d75e6.js +0 -1
- package/dist/e861b352d93d75e6.js.map +0 -1
- package/dist/f587be8fbac73856.js +0 -1
- package/dist/f587be8fbac73856.js.map +0 -1
- package/dist/openmrs.4112ceaba2c91dab.js +0 -2
- package/dist/openmrs.4112ceaba2c91dab.js.map +0 -1
- package/lib/c342c7c5bc2b4691.js +0 -505
- /package/dist/{openmrs.4112ceaba2c91dab.js.LICENSE.txt → openmrs.949105eccc42df1d.js.LICENSE.txt} +0 -0
package/lib/openmrs.js
CHANGED
|
@@ -4226,17 +4226,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
4226
4226
|
|
|
4227
4227
|
/***/ }),
|
|
4228
4228
|
|
|
4229
|
-
/***/ "../../../node_modules/i18next/dist/esm/i18next.js":
|
|
4230
|
-
/*!*********************************************************!*\
|
|
4231
|
-
!*** ../../../node_modules/i18next/dist/esm/i18next.js ***!
|
|
4232
|
-
\*********************************************************/
|
|
4233
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
4234
|
-
|
|
4235
|
-
"use strict";
|
|
4236
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ \"../../../node_modules/@babel/runtime/helpers/esm/objectSpread.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"../../../node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/possibleConstructorReturn */ \"../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/getPrototypeOf */ \"../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ \"../../../node_modules/@babel/runtime/helpers/esm/inherits.js\");\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\n\n\n\n\n\n\n\n\nvar consoleLogger = {\n type: \"logger\",\n log: function log(args) {\n this.output(\"log\", args);\n },\n warn: function warn(args) {\n this.output(\"warn\", args);\n },\n error: function error(args) {\n this.output(\"error\", args);\n },\n output: function output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nvar Logger = function() {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, Logger);\n this.init(concreteLogger, options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Logger, [\n {\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || \"i18next:\";\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n },\n {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n },\n {\n key: \"log\",\n value: function log() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return this.forward(args, \"log\", \"\", true);\n }\n },\n {\n key: \"warn\",\n value: function warn() {\n for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, \"warn\", \"\", true);\n }\n },\n {\n key: \"error\",\n value: function error() {\n for(var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++){\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, \"error\", \"\");\n }\n },\n {\n key: \"deprecate\",\n value: function deprecate() {\n for(var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++){\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, \"warn\", \"WARNING DEPRECATED: \", true);\n }\n },\n {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === \"string\") args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n },\n {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }, this.options));\n }\n }\n ]);\n return Logger;\n}();\nvar baseLogger = new Logger();\nvar EventEmitter = function() {\n function EventEmitter() {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, EventEmitter);\n this.observers = {};\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(EventEmitter, [\n {\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n events.split(\" \").forEach(function(event) {\n _this.observers[event] = _this.observers[event] || [];\n _this.observers[event].push(listener);\n });\n return this;\n }\n },\n {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event] = this.observers[event].filter(function(l) {\n return l !== listener;\n });\n }\n },\n {\n key: \"emit\",\n value: function emit(event) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function(observer) {\n observer.apply(void 0, args);\n });\n }\n if (this.observers[\"*\"]) {\n var _cloned = [].concat(this.observers[\"*\"]);\n _cloned.forEach(function(observer) {\n observer.apply(observer, [\n event\n ].concat(args));\n });\n }\n }\n }\n ]);\n return EventEmitter;\n}();\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function(resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return \"\";\n return \"\" + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function(m) {\n if (s[m]) t[m] = s[m];\n });\n}\nfunction getLastOfPath(object, path, Empty) {\n var cleanKey = function cleanKey(key) {\n return key && key.indexOf(\"###\") > -1 ? key.replace(/###/g, \".\") : key;\n };\n var canNotTraverseDeeper = function canNotTraverseDeeper() {\n return !object || typeof object === \"string\";\n };\n var stack = typeof path !== \"string\" ? [].concat(path) : path.split(\".\");\n while(stack.length > 1){\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object), obj = _getLastOfPath.obj, k = _getLastOfPath.k;\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object), obj = _getLastOfPath2.obj, k = _getLastOfPath2.k;\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path), obj = _getLastOfPath3.obj, k = _getLastOfPath3.k;\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for(var prop in source){\n if (prop !== \"__proto__\" && prop !== \"constructor\") {\n if (prop in target) {\n if (typeof target[prop] === \"string\" || _instanceof(target[prop], String) || typeof source[prop] === \"string\" || _instanceof(source[prop], String)) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\nvar _entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\"\n};\nfunction escape(data) {\n if (typeof data === \"string\") {\n return data.replace(/[&<>\"'\\/]/g, function(s) {\n return _entityMap[s];\n });\n }\n return data;\n}\nvar isIE10 = typeof window !== \"undefined\" && window.navigator && window.navigator.userAgent && window.navigator.userAgent.indexOf(\"MSIE\") > -1;\nvar ResourceStore = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(ResourceStore, _EventEmitter);\n function ResourceStore(data) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: [\n \"translation\"\n ],\n defaultNS: \"translation\"\n };\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, ResourceStore);\n _this = (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this, (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ResourceStore).call(this));\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_this));\n }\n _this.data = data || {};\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = \".\";\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(ResourceStore, [\n {\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n },\n {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n },\n {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var path = [\n lng,\n ns\n ];\n if (key && typeof key !== \"string\") path = path.concat(key);\n if (key && typeof key === \"string\") path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n }\n return getPath(this.data, path);\n }\n },\n {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = \".\";\n var path = [\n lng,\n ns\n ];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit(\"added\", lng, ns, key, value);\n }\n },\n {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for(var m in resources){\n if (typeof resources[m] === \"string\" || Object.prototype.toString.apply(resources[m]) === \"[object Array]\") this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit(\"added\", lng, ns, resources);\n }\n },\n {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [\n lng,\n ns\n ];\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, pack, resources);\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit(\"added\", lng, ns, resources);\n }\n },\n {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit(\"removed\", lng, ns);\n }\n },\n {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n },\n {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === \"v1\") return (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, {}, this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n },\n {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n },\n {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }\n ]);\n return ResourceStore;\n}(EventEmitter);\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n processors.forEach(function(processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\nvar checkedLoadedFor = {};\nvar Translator = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Translator, _EventEmitter);\n function Translator(services) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, Translator);\n _this = (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this, (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Translator).call(this));\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_this));\n }\n copy([\n \"resourceStore\",\n \"languageUtils\",\n \"pluralResolver\",\n \"interpolator\",\n \"backendConnector\",\n \"i18nFormat\",\n \"utils\"\n ], services, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_this));\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = \".\";\n }\n _this.logger = baseLogger.create(\"translator\");\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Translator, [\n {\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n },\n {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n },\n {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = \":\";\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS;\n if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n var m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key: key,\n namespaces: namespaces\n };\n }\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === \"string\") namespaces = [\n namespaces\n ];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n },\n {\n key: \"translate\",\n value: function translate(keys, options, lastKey) {\n var _this2 = this;\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options) !== \"object\" && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (!options) options = {};\n if (keys === undefined || keys === null) return \"\";\n if (!Array.isArray(keys)) keys = [\n String(keys)\n ];\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options), key = _this$extractFromKey.key, namespaces = _this$extractFromKey.namespaces;\n var namespace = namespaces[namespaces.length - 1];\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === \"cimode\") {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n return namespace + nsSeparator + key;\n }\n return key;\n }\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = [\n \"[object Number]\",\n \"[object Function]\",\n \"[object RegExp]\"\n ];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== \"string\" && typeof res !== \"boolean\" && typeof res !== \"number\";\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === \"string\" && resType === \"[object Array]\")) {\n if (!options.returnObjects && !this.options.returnObjects) {\n this.logger.warn(\"accessing an object - but returnObjects options is not enabled!\");\n return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n }\n if (keySeparator) {\n var resTypeIsArray = resType === \"[object Array]\";\n var copy = resTypeIsArray ? [] : {};\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for(var m in res){\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy[m] = this.translate(deepKey, (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, options, {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === \"string\" && resType === \"[object Array]\") {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n var usedDefault = false;\n var usedKey = false;\n var needsPluralHandling = options.count !== undefined && typeof options.count !== \"string\";\n var hasDefaultValue = Translator.hasDefaultValue(options);\n var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count) : \"\";\n var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? \"updateKey\" : \"missingKey\", lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n var fk = this.resolve(key, (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, options, {\n keySeparator: false\n }));\n if (fk && fk.res) this.logger.warn(\"Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.\");\n }\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === \"fallback\" && fallbackLngs && fallbackLngs[0]) {\n for(var i = 0; i < fallbackLngs.length; i++){\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === \"all\") {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n var send = function send(l, k, fallbackValue) {\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? fallbackValue : res, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? fallbackValue : res, updateMissing, options);\n }\n _this2.emit(\"missingKey\", l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function(language) {\n _this2.pluralResolver.getSuffixes(language).forEach(function(suffix) {\n send([\n language\n ], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n }\n return res;\n }\n },\n {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved, lastKey) {\n var _this3 = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init((0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, options, {\n interpolation: (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, this.options.interpolation, options.interpolation)\n }));\n var skipOnVariables = options.interpolation && options.interpolation.skipOnVariables || this.options.interpolation.skipOnVariables;\n var nestBef;\n if (skipOnVariables) {\n var nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n var data = options.replace && typeof options.replace !== \"string\" ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, this.options.interpolation.defaultVariables, data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n if (skipOnVariables) {\n var na = res.match(this.interpolator.nestingRegexp);\n var nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (options.nest !== false) res = this.interpolator.nest(res, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n return null;\n }\n return _this3.translate.apply(_this3, args.concat([\n key\n ]));\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === \"string\" ? [\n postProcess\n ] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n i18nResolved: resolved\n }, options) : options, this);\n }\n return res;\n }\n },\n {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey;\n var exactUsedKey;\n var usedLng;\n var usedNS;\n if (typeof keys === \"string\") keys = [\n keys\n ];\n keys.forEach(function(k) {\n if (_this4.isValidLookup(found)) return;\n var extracted = _this4.extractFromKey(k, options);\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== \"string\";\n var needsContextHandling = options.context !== undefined && typeof options.context === \"string\" && options.context !== \"\";\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function(ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n _this4.logger.warn('key \"'.concat(usedKey, '\" for languages \"').concat(codes.join(\", \"), '\" won\\'t get resolved as namespace \"').concat(usedNS, '\" was not yet loaded'), \"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");\n }\n codes.forEach(function(code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKey = key;\n var finalKeys = [\n finalKey\n ];\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count);\n if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);\n if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context));\n if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n }\n var possibleKey;\n while(possibleKey = finalKeys.pop()){\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n },\n {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === \"\");\n }\n },\n {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }\n ], [\n {\n key: \"hasDefaultValue\",\n value: function hasDefaultValue(options) {\n var prefix = \"defaultValue\";\n for(var option in options){\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n }\n ]);\n return Translator;\n}(EventEmitter);\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nvar LanguageUtil = function() {\n function LanguageUtil(options) {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, LanguageUtil);\n this.options = options;\n this.whitelist = this.options.supportedLngs || false;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create(\"languageUtils\");\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(LanguageUtil, [\n {\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf(\"-\") < 0) return null;\n var p = code.split(\"-\");\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === \"x\") return null;\n return this.formatLanguageCode(p.join(\"-\"));\n }\n },\n {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf(\"-\") < 0) return code;\n var p = code.split(\"-\");\n return this.formatLanguageCode(p[0]);\n }\n },\n {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n if (typeof code === \"string\" && code.indexOf(\"-\") > -1) {\n var specialCases = [\n \"hans\",\n \"hant\",\n \"latn\",\n \"cyrl\",\n \"cans\",\n \"mong\",\n \"arab\"\n ];\n var p = code.split(\"-\");\n if (this.options.lowerCaseLng) {\n p = p.map(function(part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== \"sgn\" && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join(\"-\");\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n },\n {\n key: \"isWhitelisted\",\n value: function isWhitelisted(code) {\n this.logger.deprecate(\"languageUtils.isWhitelisted\", 'function \"isWhitelisted\" will be renamed to \"isSupportedCode\" in the next major - please make sure to rename it\\'s usage asap.');\n return this.isSupportedCode(code);\n }\n },\n {\n key: \"isSupportedCode\",\n value: function isSupportedCode(code) {\n if (this.options.load === \"languageOnly\" || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n },\n {\n key: \"getBestMatchFromCodes\",\n value: function getBestMatchFromCodes(codes) {\n var _this = this;\n if (!codes) return null;\n var found;\n codes.forEach(function(code) {\n if (found) return;\n var cleanedLng = _this.formatLanguageCode(code);\n if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(function(code) {\n if (found) return;\n var lngOnly = _this.getLanguagePartFromCode(code);\n if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = _this.options.supportedLngs.find(function(supportedLng) {\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n },\n {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === \"function\") fallbacks = fallbacks(code);\n if (typeof fallbacks === \"string\") fallbacks = [\n fallbacks\n ];\n if (Object.prototype.toString.apply(fallbacks) === \"[object Array]\") return fallbacks;\n if (!code) return fallbacks[\"default\"] || [];\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n },\n {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this2 = this;\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n var addCode = function addCode(c) {\n if (!c) return;\n if (_this2.isSupportedCode(c)) {\n codes.push(c);\n } else {\n _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n }\n };\n if (typeof code === \"string\" && code.indexOf(\"-\") > -1) {\n if (this.options.load !== \"languageOnly\") addCode(this.formatLanguageCode(code));\n if (this.options.load !== \"languageOnly\" && this.options.load !== \"currentOnly\") addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== \"currentOnly\") addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === \"string\") {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(function(fc) {\n if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n });\n return codes;\n }\n }\n ]);\n return LanguageUtil;\n}();\nvar sets = [\n {\n lngs: [\n \"ach\",\n \"ak\",\n \"am\",\n \"arn\",\n \"br\",\n \"fil\",\n \"gun\",\n \"ln\",\n \"mfe\",\n \"mg\",\n \"mi\",\n \"oc\",\n \"pt\",\n \"pt-BR\",\n \"tg\",\n \"tl\",\n \"ti\",\n \"tr\",\n \"uz\",\n \"wa\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 1\n },\n {\n lngs: [\n \"af\",\n \"an\",\n \"ast\",\n \"az\",\n \"bg\",\n \"bn\",\n \"ca\",\n \"da\",\n \"de\",\n \"dev\",\n \"el\",\n \"en\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"fi\",\n \"fo\",\n \"fur\",\n \"fy\",\n \"gl\",\n \"gu\",\n \"ha\",\n \"hi\",\n \"hu\",\n \"hy\",\n \"ia\",\n \"it\",\n \"kn\",\n \"ku\",\n \"lb\",\n \"mai\",\n \"ml\",\n \"mn\",\n \"mr\",\n \"nah\",\n \"nap\",\n \"nb\",\n \"ne\",\n \"nl\",\n \"nn\",\n \"no\",\n \"nso\",\n \"pa\",\n \"pap\",\n \"pms\",\n \"ps\",\n \"pt-PT\",\n \"rm\",\n \"sco\",\n \"se\",\n \"si\",\n \"so\",\n \"son\",\n \"sq\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tk\",\n \"ur\",\n \"yo\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 2\n },\n {\n lngs: [\n \"ay\",\n \"bo\",\n \"cgg\",\n \"fa\",\n \"ht\",\n \"id\",\n \"ja\",\n \"jbo\",\n \"ka\",\n \"kk\",\n \"km\",\n \"ko\",\n \"ky\",\n \"lo\",\n \"ms\",\n \"sah\",\n \"su\",\n \"th\",\n \"tt\",\n \"ug\",\n \"vi\",\n \"wo\",\n \"zh\"\n ],\n nr: [\n 1\n ],\n fc: 3\n },\n {\n lngs: [\n \"be\",\n \"bs\",\n \"cnr\",\n \"dz\",\n \"hr\",\n \"ru\",\n \"sr\",\n \"uk\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 4\n },\n {\n lngs: [\n \"ar\"\n ],\n nr: [\n 0,\n 1,\n 2,\n 3,\n 11,\n 100\n ],\n fc: 5\n },\n {\n lngs: [\n \"cs\",\n \"sk\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 6\n },\n {\n lngs: [\n \"csb\",\n \"pl\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 7\n },\n {\n lngs: [\n \"cy\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 8\n ],\n fc: 8\n },\n {\n lngs: [\n \"fr\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 9\n },\n {\n lngs: [\n \"ga\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 7,\n 11\n ],\n fc: 10\n },\n {\n lngs: [\n \"gd\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 20\n ],\n fc: 11\n },\n {\n lngs: [\n \"is\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 12\n },\n {\n lngs: [\n \"jv\"\n ],\n nr: [\n 0,\n 1\n ],\n fc: 13\n },\n {\n lngs: [\n \"kw\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 4\n ],\n fc: 14\n },\n {\n lngs: [\n \"lt\"\n ],\n nr: [\n 1,\n 2,\n 10\n ],\n fc: 15\n },\n {\n lngs: [\n \"lv\"\n ],\n nr: [\n 1,\n 2,\n 0\n ],\n fc: 16\n },\n {\n lngs: [\n \"mk\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 17\n },\n {\n lngs: [\n \"mnk\"\n ],\n nr: [\n 0,\n 1,\n 2\n ],\n fc: 18\n },\n {\n lngs: [\n \"mt\"\n ],\n nr: [\n 1,\n 2,\n 11,\n 20\n ],\n fc: 19\n },\n {\n lngs: [\n \"or\"\n ],\n nr: [\n 2,\n 1\n ],\n fc: 2\n },\n {\n lngs: [\n \"ro\"\n ],\n nr: [\n 1,\n 2,\n 20\n ],\n fc: 20\n },\n {\n lngs: [\n \"sl\"\n ],\n nr: [\n 5,\n 1,\n 2,\n 3\n ],\n fc: 21\n },\n {\n lngs: [\n \"he\",\n \"iw\"\n ],\n nr: [\n 1,\n 2,\n 20,\n 21\n ],\n fc: 22\n }\n];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\nfunction createRules() {\n var rules = {};\n sets.forEach(function(set) {\n set.lngs.forEach(function(l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\nvar PluralResolver = function() {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, PluralResolver);\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create(\"pluralResolver\");\n this.rules = createRules();\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(PluralResolver, [\n {\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n },\n {\n key: \"getRule\",\n value: function getRule(code) {\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n },\n {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var rule = this.getRule(code);\n return rule && rule.numbers.length > 1;\n }\n },\n {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n return this.getSuffixes(code).map(function(suffix) {\n return key + suffix;\n });\n }\n },\n {\n key: \"getSuffixes\",\n value: function getSuffixes(code) {\n var _this = this;\n var rule = this.getRule(code);\n if (!rule) {\n return [];\n }\n return rule.numbers.map(function(number) {\n return _this.getSuffix(code, number);\n });\n }\n },\n {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var _this2 = this;\n var rule = this.getRule(code);\n if (rule) {\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = \"plural\";\n } else if (suffix === 1) {\n suffix = \"\";\n }\n }\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n if (this.options.compatibilityJSON === \"v1\") {\n if (suffix === 1) return \"\";\n if (typeof suffix === \"number\") return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (this.options.compatibilityJSON === \"v2\") {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return \"\";\n }\n }\n ]);\n return PluralResolver;\n}();\nvar Interpolator = function() {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, Interpolator);\n this.logger = baseLogger.create(\"interpolator\");\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || function(value) {\n return value;\n };\n this.init(options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Interpolator, [\n {\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || \"{{\";\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || \"}}\";\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || \",\";\n this.unescapePrefix = iOpts.unescapeSuffix ? \"\" : iOpts.unescapePrefix || \"-\";\n this.unescapeSuffix = this.unescapePrefix ? \"\" : iOpts.unescapeSuffix || \"\";\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape(\"$t(\");\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(\")\");\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || \",\";\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n },\n {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n },\n {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, \"g\");\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, \"g\");\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, \"g\");\n }\n },\n {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var regexSafe = function regexSafe(val) {\n return val.replace(/\\$/g, \"$$$$\");\n };\n var _this = this;\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n var path = getPathWithDefaults(data, defaultData, key);\n return _this.alwaysFormat ? _this.format(path, undefined, lng) : path;\n }\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, options);\n };\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables || this.options.interpolation.skipOnVariables;\n var todos = [\n {\n regex: this.regexpUnescape,\n safeValue: function safeValue(val) {\n return regexSafe(val);\n }\n },\n {\n regex: this.regexp,\n safeValue: function safeValue(val) {\n return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n }\n }\n ];\n todos.forEach(function(todo) {\n replaces = 0;\n while(match = todo.regex.exec(str)){\n value = handleFormat(match[1].trim());\n if (value === undefined) {\n if (typeof missingInterpolationHandler === \"function\") {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === \"string\" ? temp : \"\";\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n _this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n value = \"\";\n }\n } else if (typeof value !== \"string\" && !_this.useRawValueToEscape) {\n value = makeString(value);\n }\n str = str.replace(match[0], todo.safeValue(value));\n todo.regex.lastIndex = 0;\n replaces++;\n if (replaces >= _this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n },\n {\n key: \"nest\",\n value: function nest(str, fc) {\n var handleHasOptions = function handleHasOptions(key, inheritedOptions) {\n var sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n var optionsString = \"{\".concat(c[1]);\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n optionsString = optionsString.replace(/'/g, '\"');\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, inheritedOptions, clonedOptions);\n } catch (e) {\n this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n return \"\".concat(key).concat(sep).concat(optionsString);\n }\n delete clonedOptions.defaultValue;\n return key;\n };\n var _this2 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n var clonedOptions = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, options);\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n while(match = this.nestingRegexp.exec(str)){\n var formatters = [];\n var doReduce = false;\n if (match[0].includes(this.formatSeparator) && !/{.*}/.test(match[1])) {\n var r = match[1].split(this.formatSeparator).map(function(elem) {\n return elem.trim();\n });\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== \"string\") return value;\n if (typeof value !== \"string\") value = makeString(value);\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = \"\";\n }\n if (doReduce) {\n value = formatters.reduce(function(v, f) {\n return _this2.format(v, f, options.lng, options);\n }, value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n }\n ]);\n return Interpolator;\n}();\nfunction remove(arr, what) {\n var found = arr.indexOf(what);\n while(found !== -1){\n arr.splice(found, 1);\n found = arr.indexOf(what);\n }\n}\nvar Connector = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Connector, _EventEmitter);\n function Connector(backend, store, services) {\n var _this;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, Connector);\n _this = (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this, (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Connector).call(this));\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_this));\n }\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create(\"backendConnector\");\n _this.state = {};\n _this.queue = [];\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Connector, [\n {\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n var toLoad = [];\n var pending = [];\n var toLoadLanguages = [];\n var toLoadNamespaces = [];\n languages.forEach(function(lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function(ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2;\n } else if (_this2.state[name] < 0) ;\n else if (_this2.state[name] === 1) {\n if (pending.indexOf(name) < 0) pending.push(name);\n } else {\n _this2.state[name] = 1;\n hasAllNamespaces = false;\n if (pending.indexOf(name) < 0) pending.push(name);\n if (toLoad.indexOf(name) < 0) toLoad.push(name);\n if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n }\n });\n if (!hasAllNamespaces) toLoadLanguages.push(lng);\n });\n if (toLoad.length || pending.length) {\n this.queue.push({\n pending: pending,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n return {\n toLoad: toLoad,\n pending: pending,\n toLoadLanguages: toLoadLanguages,\n toLoadNamespaces: toLoadNamespaces\n };\n }\n },\n {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var s = name.split(\"|\");\n var lng = s[0];\n var ns = s[1];\n if (err) this.emit(\"failedLoading\", lng, ns, err);\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n this.state[name] = err ? -1 : 2;\n var loaded = {};\n this.queue.forEach(function(q) {\n pushPath(q.loaded, [\n lng\n ], ns);\n remove(q.pending, name);\n if (err) q.errors.push(err);\n if (q.pending.length === 0 && !q.done) {\n Object.keys(q.loaded).forEach(function(l) {\n if (!loaded[l]) loaded[l] = [];\n if (q.loaded[l].length) {\n q.loaded[l].forEach(function(ns) {\n if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit(\"loaded\", loaded);\n this.queue = this.queue.filter(function(q) {\n return !q.done;\n });\n }\n },\n {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 350;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n return this.backend[fcName](lng, ns, function(err, data) {\n if (err && data && tried < 5) {\n setTimeout(function() {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n });\n }\n },\n {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\");\n return callback && callback();\n }\n if (typeof languages === \"string\") languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === \"string\") namespaces = [\n namespaces\n ];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(function(name) {\n _this4.loadOne(name);\n });\n }\n },\n {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n },\n {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n },\n {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n var s = name.split(\"|\");\n var lng = s[0];\n var ns = s[1];\n this.read(lng, ns, \"read\", undefined, undefined, function(err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n _this5.loaded(name, err, data);\n });\n }\n },\n {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn('did not save key \"'.concat(key, '\" as the namespace \"').concat(namespace, '\" was not yet loaded'), \"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");\n return;\n }\n if (key === undefined || key === null || key === \"\") return;\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null, (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, options, {\n isUpdate: isUpdate\n }));\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }\n ]);\n return Connector;\n}(EventEmitter);\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: [\n \"translation\"\n ],\n defaultNS: [\n \"translation\"\n ],\n fallbackLng: [\n \"dev\"\n ],\n fallbackNS: false,\n whitelist: false,\n nonExplicitWhitelist: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: \"all\",\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: \".\",\n nsSeparator: \":\",\n pluralSeparator: \"_\",\n contextSeparator: \"_\",\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: \"fallback\",\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: true,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[1]) === \"object\") ret = args[1];\n if (typeof args[1] === \"string\") ret.defaultValue = args[1];\n if (typeof args[2] === \"string\") ret.tDescription = args[2];\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[2]) === \"object\" || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[3]) === \"object\") {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function(key) {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng, options) {\n return value;\n },\n prefix: \"{{\",\n suffix: \"}}\",\n formatSeparator: \",\",\n unescapePrefix: \"-\",\n nestingPrefix: \"$t(\",\n nestingSuffix: \")\",\n nestingOptionsSeparator: \",\",\n maxReplaces: 1000,\n skipOnVariables: false\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === \"string\") options.ns = [\n options.ns\n ];\n if (typeof options.fallbackLng === \"string\") options.fallbackLng = [\n options.fallbackLng\n ];\n if (typeof options.fallbackNS === \"string\") options.fallbackNS = [\n options.fallbackNS\n ];\n if (options.whitelist) {\n if (options.whitelist && options.whitelist.indexOf(\"cimode\") < 0) {\n options.whitelist = options.whitelist.concat([\n \"cimode\"\n ]);\n }\n options.supportedLngs = options.whitelist;\n }\n if (options.nonExplicitWhitelist) {\n options.nonExplicitSupportedLngs = options.nonExplicitWhitelist;\n }\n if (options.supportedLngs && options.supportedLngs.indexOf(\"cimode\") < 0) {\n options.supportedLngs = options.supportedLngs.concat([\n \"cimode\"\n ]);\n }\n return options;\n}\nfunction noop() {}\nvar I18n = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(I18n, _EventEmitter);\n function I18n() {\n var _this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, I18n);\n _this = (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this, (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(I18n).call(this));\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_this));\n }\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n if (callback && !_this.isInitialized && !options.isClone) {\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_this, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_this));\n }\n setTimeout(function() {\n _this.init(options, callback);\n }, 0);\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(I18n, [\n {\n key: \"init\",\n value: function init() {\n var createClassOnDemand = function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === \"function\") return new ClassOrObject();\n return ClassOrObject;\n };\n var _this2 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof options === \"function\") {\n callback = options;\n options = {};\n }\n if (options.whitelist && !options.supportedLngs) {\n this.logger.deprecate(\"whitelist\", 'option \"whitelist\" will be renamed to \"supportedLngs\" in the next major - please make sure to rename this option asap.');\n }\n if (options.nonExplicitWhitelist && !options.nonExplicitSupportedLngs) {\n this.logger.deprecate(\"whitelist\", 'options \"nonExplicitWhitelist\" will be renamed to \"nonExplicitSupportedLngs\" in the next major - please make sure to rename this option asap.');\n }\n this.options = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, get(), this.options, transformOptions(options));\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on(\"*\", function(event) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n _this2.emit.apply(_this2, [\n event\n ].concat(args));\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on(\"*\", function(event) {\n for(var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++){\n args[_key2 - 1] = arguments[_key2];\n }\n _this2.emit.apply(_this2, [\n event\n ].concat(args));\n });\n this.modules.external.forEach(function(m) {\n if (m.init) m.init(_this2);\n });\n }\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== \"dev\") this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn(\"init: no languageDetector is used and no lng is defined\");\n }\n var storeApi = [\n \"getResource\",\n \"hasResourceBundle\",\n \"getResourceBundle\",\n \"getDataByLanguage\"\n ];\n storeApi.forEach(function(fcName) {\n _this2[fcName] = function() {\n var _this2$store;\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var storeApiChained = [\n \"addResource\",\n \"addResources\",\n \"addResourceBundle\",\n \"removeResourceBundle\"\n ];\n storeApiChained.forEach(function(fcName) {\n _this2[fcName] = function() {\n var _this2$store2;\n (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n return _this2;\n };\n });\n var deferred = defer();\n var load = function load() {\n var finish = function finish(err, t) {\n if (_this2.isInitialized) _this2.logger.warn(\"init: i18next is already initialized. You should call init just once!\");\n _this2.isInitialized = true;\n if (!_this2.options.isClone) _this2.logger.log(\"initialized\", _this2.options);\n _this2.emit(\"initialized\", _this2.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (_this2.languages && _this2.options.compatibilityAPI !== \"v1\" && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n _this2.changeLanguage(_this2.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n },\n {\n key: \"loadResources\",\n value: function loadResources(language) {\n var _this3 = this;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var usedCallback = callback;\n var usedLng = typeof language === \"string\" ? language : this.language;\n if (typeof language === \"function\") usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === \"cimode\") return usedCallback();\n var toLoad = [];\n var append = function append(lng) {\n if (!lng) return;\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function(l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function(l) {\n return append(l);\n });\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(function(l) {\n return append(l);\n });\n }\n this.services.backendConnector.load(toLoad, this.options.ns, usedCallback);\n } else {\n usedCallback(null);\n }\n }\n },\n {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function(err) {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"use\",\n value: function use(module) {\n if (!module) throw new Error(\"You are passing an undefined module! Please check the object you are passing to i18next.use()\");\n if (!module.type) throw new Error(\"You are passing a wrong module! Please check the object you are passing to i18next.use()\");\n if (module.type === \"backend\") {\n this.modules.backend = module;\n }\n if (module.type === \"logger\" || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === \"languageDetector\") {\n this.modules.languageDetector = module;\n }\n if (module.type === \"i18nFormat\") {\n this.modules.i18nFormat = module;\n }\n if (module.type === \"postProcessor\") {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === \"3rdParty\") {\n this.modules.external.push(module);\n }\n return this;\n }\n },\n {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n this.isLanguageChangingTo = lng;\n var deferred = defer();\n this.emit(\"languageChanging\", lng);\n var done = function done(err, l) {\n if (l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n _this4.translator.changeLanguage(l);\n _this4.isLanguageChangingTo = undefined;\n _this4.emit(\"languageChanged\", l);\n _this4.logger.log(\"languageChanged\", l);\n } else {\n _this4.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function() {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function() {\n return _this4.t.apply(_this4, arguments);\n });\n };\n var setLng = function setLng(lngs) {\n var l = typeof lngs === \"string\" ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!_this4.language) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n }\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n _this4.loadResources(l, function(err) {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n return deferred;\n }\n },\n {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns) {\n var _this5 = this;\n var fixedT = function fixedT(key, opts) {\n var options;\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(opts) !== \"object\") {\n for(var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++){\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this5.options.overloadTranslationOptionHandler([\n key,\n opts\n ].concat(rest));\n } else {\n options = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, opts);\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n return _this5.t(key, options);\n };\n if (typeof lng === \"string\") {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n return fixedT;\n }\n },\n {\n key: \"t\",\n value: function t() {\n var _this$translator;\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n },\n {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n },\n {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n },\n {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn(\"hasLoadedNamespace: i18next was not initialized\", this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn(\"hasLoadedNamespace: i18n.languages were undefined or empty\", this.languages);\n return false;\n }\n var lng = this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === \"cimode\") return true;\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n if (options.precheck) {\n var preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n },\n {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n var deferred = defer();\n if (!this.options.ns) {\n callback && callback();\n return Promise.resolve();\n }\n if (typeof ns === \"string\") ns = [\n ns\n ];\n ns.forEach(function(n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function(err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === \"string\") lngs = [\n lngs\n ];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function(lng) {\n return preloaded.indexOf(lng) < 0;\n });\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function(err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n if (!lng) return \"rtl\";\n var rtlLngs = [\n \"ar\",\n \"shu\",\n \"sqr\",\n \"ssh\",\n \"xaa\",\n \"yhd\",\n \"yud\",\n \"aao\",\n \"abh\",\n \"abv\",\n \"acm\",\n \"acq\",\n \"acw\",\n \"acx\",\n \"acy\",\n \"adf\",\n \"ads\",\n \"aeb\",\n \"aec\",\n \"afb\",\n \"ajp\",\n \"apc\",\n \"apd\",\n \"arb\",\n \"arq\",\n \"ars\",\n \"ary\",\n \"arz\",\n \"auz\",\n \"avl\",\n \"ayh\",\n \"ayl\",\n \"ayn\",\n \"ayp\",\n \"bbz\",\n \"pga\",\n \"he\",\n \"iw\",\n \"ps\",\n \"pbt\",\n \"pbu\",\n \"pst\",\n \"prp\",\n \"prd\",\n \"ug\",\n \"ur\",\n \"ydd\",\n \"yds\",\n \"yih\",\n \"ji\",\n \"yi\",\n \"hbo\",\n \"men\",\n \"xmn\",\n \"fa\",\n \"jpr\",\n \"peo\",\n \"pes\",\n \"prs\",\n \"dv\",\n \"sam\"\n ];\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? \"rtl\" : \"ltr\";\n }\n },\n {\n key: \"createInstance\",\n value: function createInstance() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n },\n {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var mergedOptions = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, this.options, options, {\n isClone: true\n });\n var clone = new I18n(mergedOptions);\n var membersToCopy = [\n \"store\",\n \"services\",\n \"language\"\n ];\n membersToCopy.forEach(function(m) {\n clone[m] = _this8[m];\n });\n clone.services = (0,_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, this.services);\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on(\"*\", function(event) {\n for(var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++){\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit.apply(clone, [\n event\n ].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n }\n ]);\n return I18n;\n}(EventEmitter);\nvar i18next = new I18n();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (i18next);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2kxOG5leHQvZGlzdC9lc20vaTE4bmV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdEO0FBQ1k7QUFDSTtBQUNOO0FBQzRCO0FBQ3RCO0FBQ2M7QUFDMUI7QUFFNUQsSUFBSVEsZ0JBQWdCO0lBQ2xCQyxNQUFNO0lBQ05DLEtBQUssU0FBU0EsSUFBSUMsSUFBSSxFQUFFO1FBQ3RCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLE9BQU9EO0lBQ3JCO0lBQ0FFLE1BQU0sU0FBU0EsS0FBS0YsSUFBSSxFQUFFO1FBQ3hCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFFBQVFEO0lBQ3RCO0lBQ0FHLE9BQU8sU0FBU0EsTUFBTUgsSUFBSSxFQUFFO1FBQzFCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFNBQVNEO0lBQ3ZCO0lBQ0FDLFFBQVEsU0FBU0EsT0FBT0gsSUFBSSxFQUFFRSxJQUFJLEVBQUU7UUFDbEMsSUFBSUksV0FBV0EsT0FBTyxDQUFDTixLQUFLLEVBQUVNLE9BQU8sQ0FBQ04sS0FBSyxDQUFDTyxLQUFLLENBQUNELFNBQVNKO0lBQzdEO0FBQ0Y7QUFFQSxJQUFJTSxTQUFTLFdBQVk7SUFDdkIsU0FBU0EsT0FBT0MsY0FBYyxFQUFFO1FBQzlCLElBQUlDLFVBQVVDLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRmxCLHFGQUFlQSxDQUFDLElBQUksRUFBRWU7UUFFdEIsSUFBSSxDQUFDTSxJQUFJLENBQUNMLGdCQUFnQkM7SUFDNUI7SUFFQWhCLGtGQUFZQSxDQUFDYyxRQUFRO1FBQUM7WUFDcEJPLEtBQUs7WUFDTEMsT0FBTyxTQUFTRixLQUFLTCxjQUFjLEVBQUU7Z0JBQ25DLElBQUlDLFVBQVVDLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxDQUFDTSxNQUFNLEdBQUdQLFFBQVFPLE1BQU0sSUFBSTtnQkFDaEMsSUFBSSxDQUFDQyxNQUFNLEdBQUdULGtCQUFrQlY7Z0JBQ2hDLElBQUksQ0FBQ1csT0FBTyxHQUFHQTtnQkFDZixJQUFJLENBQUNTLEtBQUssR0FBR1QsUUFBUVMsS0FBSztZQUM1QjtRQUNGO1FBQUc7WUFDREosS0FBSztZQUNMQyxPQUFPLFNBQVNJLFNBQVNDLElBQUksRUFBRTtnQkFDN0IsSUFBSSxDQUFDRixLQUFLLEdBQUdFO1lBQ2Y7UUFDRjtRQUFHO1lBQ0ROLEtBQUs7WUFDTEMsT0FBTyxTQUFTZixNQUFNO2dCQUNwQixJQUFLLElBQUlxQixPQUFPWCxVQUFVQyxNQUFNLEVBQUVWLE9BQU8sSUFBSXFCLE1BQU1ELE9BQU9FLE9BQU8sR0FBR0EsT0FBT0YsTUFBTUUsT0FBUTtvQkFDdkZ0QixJQUFJLENBQUNzQixLQUFLLEdBQUdiLFNBQVMsQ0FBQ2EsS0FBSztnQkFDOUI7Z0JBRUEsT0FBTyxJQUFJLENBQUNDLE9BQU8sQ0FBQ3ZCLE1BQU0sT0FBTyxJQUFJLElBQUk7WUFDM0M7UUFDRjtRQUFHO1lBQ0RhLEtBQUs7WUFDTEMsT0FBTyxTQUFTWixPQUFPO2dCQUNyQixJQUFLLElBQUlzQixRQUFRZixVQUFVQyxNQUFNLEVBQUVWLE9BQU8sSUFBSXFCLE1BQU1HLFFBQVFDLFFBQVEsR0FBR0EsUUFBUUQsT0FBT0MsUUFBUztvQkFDN0Z6QixJQUFJLENBQUN5QixNQUFNLEdBQUdoQixTQUFTLENBQUNnQixNQUFNO2dCQUNoQztnQkFFQSxPQUFPLElBQUksQ0FBQ0YsT0FBTyxDQUFDdkIsTUFBTSxRQUFRLElBQUksSUFBSTtZQUM1QztRQUNGO1FBQUc7WUFDRGEsS0FBSztZQUNMQyxPQUFPLFNBQVNYLFFBQVE7Z0JBQ3RCLElBQUssSUFBSXVCLFFBQVFqQixVQUFVQyxNQUFNLEVBQUVWLE9BQU8sSUFBSXFCLE1BQU1LLFFBQVFDLFFBQVEsR0FBR0EsUUFBUUQsT0FBT0MsUUFBUztvQkFDN0YzQixJQUFJLENBQUMyQixNQUFNLEdBQUdsQixTQUFTLENBQUNrQixNQUFNO2dCQUNoQztnQkFFQSxPQUFPLElBQUksQ0FBQ0osT0FBTyxDQUFDdkIsTUFBTSxTQUFTO1lBQ3JDO1FBQ0Y7UUFBRztZQUNEYSxLQUFLO1lBQ0xDLE9BQU8sU0FBU2MsWUFBWTtnQkFDMUIsSUFBSyxJQUFJQyxRQUFRcEIsVUFBVUMsTUFBTSxFQUFFVixPQUFPLElBQUlxQixNQUFNUSxRQUFRQyxRQUFRLEdBQUdBLFFBQVFELE9BQU9DLFFBQVM7b0JBQzdGOUIsSUFBSSxDQUFDOEIsTUFBTSxHQUFHckIsU0FBUyxDQUFDcUIsTUFBTTtnQkFDaEM7Z0JBRUEsT0FBTyxJQUFJLENBQUNQLE9BQU8sQ0FBQ3ZCLE1BQU0sUUFBUSx3QkFBd0IsSUFBSTtZQUNoRTtRQUNGO1FBQUc7WUFDRGEsS0FBSztZQUNMQyxPQUFPLFNBQVNTLFFBQVF2QixJQUFJLEVBQUUrQixHQUFHLEVBQUVoQixNQUFNLEVBQUVpQixTQUFTLEVBQUU7Z0JBQ3BELElBQUlBLGFBQWEsQ0FBQyxJQUFJLENBQUNmLEtBQUssRUFBRSxPQUFPLElBQUk7Z0JBQ3pDLElBQUksT0FBT2pCLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVUEsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHaUMsTUFBTSxDQUFDbEIsUUFBUWtCLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixNQUFNLEVBQUUsS0FBS2tCLE1BQU0sQ0FBQ2pDLElBQUksQ0FBQyxFQUFFO2dCQUNwRyxPQUFPLElBQUksQ0FBQ2dCLE1BQU0sQ0FBQ2UsSUFBSSxDQUFDL0I7WUFDMUI7UUFDRjtRQUFHO1lBQ0RhLEtBQUs7WUFDTEMsT0FBTyxTQUFTb0IsT0FBT0MsVUFBVSxFQUFFO2dCQUNqQyxPQUFPLElBQUk3QixPQUFPLElBQUksQ0FBQ1UsTUFBTSxFQUFFMUIsbUZBQWFBLENBQUMsQ0FBQyxHQUFHO29CQUMvQ3lCLFFBQVEsR0FBR2tCLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixNQUFNLEVBQUUsS0FBS2tCLE1BQU0sQ0FBQ0UsWUFBWTtnQkFDekQsR0FBRyxJQUFJLENBQUMzQixPQUFPO1lBQ2pCO1FBQ0Y7S0FBRTtJQUVGLE9BQU9GO0FBQ1Q7QUFFQSxJQUFJOEIsYUFBYSxJQUFJOUI7QUFFckIsSUFBSStCLGVBQWUsV0FBWTtJQUM3QixTQUFTQSxlQUFlO1FBQ3RCOUMscUZBQWVBLENBQUMsSUFBSSxFQUFFOEM7UUFFdEIsSUFBSSxDQUFDQyxTQUFTLEdBQUcsQ0FBQztJQUNwQjtJQUVBOUMsa0ZBQVlBLENBQUM2QyxjQUFjO1FBQUM7WUFDMUJ4QixLQUFLO1lBQ0xDLE9BQU8sU0FBU3lCLEdBQUdDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO2dCQUNuQyxJQUFJQyxRQUFRLElBQUk7Z0JBRWhCRixPQUFPRyxLQUFLLENBQUMsS0FBS0MsT0FBTyxDQUFDLFNBQVVDLEtBQUssRUFBRTtvQkFDekNILE1BQU1KLFNBQVMsQ0FBQ08sTUFBTSxHQUFHSCxNQUFNSixTQUFTLENBQUNPLE1BQU0sSUFBSSxFQUFFO29CQUVyREgsTUFBTUosU0FBUyxDQUFDTyxNQUFNLENBQUNDLElBQUksQ0FBQ0w7Z0JBQzlCO2dCQUNBLE9BQU8sSUFBSTtZQUNiO1FBQ0Y7UUFBRztZQUNENUIsS0FBSztZQUNMQyxPQUFPLFNBQVNpQyxJQUFJRixLQUFLLEVBQUVKLFFBQVEsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQ0gsU0FBUyxDQUFDTyxNQUFNLEVBQUU7Z0JBRTVCLElBQUksQ0FBQ0osVUFBVTtvQkFDYixPQUFPLElBQUksQ0FBQ0gsU0FBUyxDQUFDTyxNQUFNO29CQUM1QjtnQkFDRixDQUFDO2dCQUVELElBQUksQ0FBQ1AsU0FBUyxDQUFDTyxNQUFNLEdBQUcsSUFBSSxDQUFDUCxTQUFTLENBQUNPLE1BQU0sQ0FBQ0csTUFBTSxDQUFDLFNBQVVDLENBQUMsRUFBRTtvQkFDaEUsT0FBT0EsTUFBTVI7Z0JBQ2Y7WUFDRjtRQUNGO1FBQUc7WUFDRDVCLEtBQUs7WUFDTEMsT0FBTyxTQUFTb0MsS0FBS0wsS0FBSyxFQUFFO2dCQUMxQixJQUFLLElBQUl6QixPQUFPWCxVQUFVQyxNQUFNLEVBQUVWLE9BQU8sSUFBSXFCLE1BQU1ELE9BQU8sSUFBSUEsT0FBTyxJQUFJLENBQUMsR0FBR0UsT0FBTyxHQUFHQSxPQUFPRixNQUFNRSxPQUFRO29CQUMxR3RCLElBQUksQ0FBQ3NCLE9BQU8sRUFBRSxHQUFHYixTQUFTLENBQUNhLEtBQUs7Z0JBQ2xDO2dCQUVBLElBQUksSUFBSSxDQUFDZ0IsU0FBUyxDQUFDTyxNQUFNLEVBQUU7b0JBQ3pCLElBQUlNLFNBQVMsRUFBRSxDQUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQ0ssU0FBUyxDQUFDTyxNQUFNO29CQUM1Q00sT0FBT1AsT0FBTyxDQUFDLFNBQVVRLFFBQVEsRUFBRTt3QkFDakNBLFNBQVMvQyxLQUFLLENBQUMsS0FBSyxHQUFHTDtvQkFDekI7Z0JBQ0YsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQ3NDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLElBQUllLFVBQVUsRUFBRSxDQUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQ0ssU0FBUyxDQUFDLElBQUk7b0JBRTNDZSxRQUFRVCxPQUFPLENBQUMsU0FBVVEsUUFBUSxFQUFFO3dCQUNsQ0EsU0FBUy9DLEtBQUssQ0FBQytDLFVBQVU7NEJBQUNQO3lCQUFNLENBQUNaLE1BQU0sQ0FBQ2pDO29CQUMxQztnQkFDRixDQUFDO1lBQ0g7UUFDRjtLQUFFO0lBRUYsT0FBT3FDO0FBQ1Q7QUFFQSxTQUFTaUIsUUFBUTtJQUNmLElBQUlDO0lBQ0osSUFBSUM7SUFDSixJQUFJQyxVQUFVLElBQUlDLFFBQVEsU0FBVUMsT0FBTyxFQUFFQyxNQUFNLEVBQUU7UUFDbkRMLE1BQU1JO1FBQ05ILE1BQU1JO0lBQ1I7SUFDQUgsUUFBUUUsT0FBTyxHQUFHSjtJQUNsQkUsUUFBUUcsTUFBTSxHQUFHSjtJQUNqQixPQUFPQztBQUNUO0FBQ0EsU0FBU0ksV0FBV0MsTUFBTSxFQUFFO0lBQzFCLElBQUlBLFVBQVUsSUFBSSxFQUFFLE9BQU87SUFDM0IsT0FBTyxLQUFLQTtBQUNkO0FBQ0EsU0FBU0MsS0FBS0MsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRTtJQUNyQkYsRUFBRXBCLE9BQU8sQ0FBQyxTQUFVdUIsQ0FBQyxFQUFFO1FBQ3JCLElBQUlGLENBQUMsQ0FBQ0UsRUFBRSxFQUFFRCxDQUFDLENBQUNDLEVBQUUsR0FBR0YsQ0FBQyxDQUFDRSxFQUFFO0lBQ3ZCO0FBQ0Y7QUFFQSxTQUFTQyxjQUFjTixNQUFNLEVBQUVPLElBQUksRUFBRUMsS0FBSyxFQUFFO1FBQ2pDQyxXQUFULFNBQVNBLFNBQVMxRCxHQUFHLEVBQUU7UUFDckIsT0FBT0EsT0FBT0EsSUFBSTJELE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSTNELElBQUk0RCxPQUFPLENBQUMsUUFBUSxPQUFPNUQsR0FBRztJQUN4RTtRQUVTNkQsdUJBQVQsU0FBU0EsdUJBQXVCO1FBQzlCLE9BQU8sQ0FBQ1osVUFBVSxPQUFPQSxXQUFXO0lBQ3RDO0lBRUEsSUFBSWEsUUFBUSxPQUFPTixTQUFTLFdBQVcsRUFBRSxDQUFDcEMsTUFBTSxDQUFDb0MsUUFBUUEsS0FBSzFCLEtBQUssQ0FBQyxJQUFJO0lBRXhFLE1BQU9nQyxNQUFNakUsTUFBTSxHQUFHLEVBQUc7UUFDdkIsSUFBSWdFLHdCQUF3QixPQUFPLENBQUM7UUFDcEMsSUFBSTdELE1BQU0wRCxTQUFTSSxNQUFNQyxLQUFLO1FBQzlCLElBQUksQ0FBQ2QsTUFBTSxDQUFDakQsSUFBSSxJQUFJeUQsT0FBT1IsTUFBTSxDQUFDakQsSUFBSSxHQUFHLElBQUl5RDtRQUU3QyxJQUFJTyxPQUFPQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDbEIsUUFBUWpELE1BQU07WUFDckRpRCxTQUFTQSxNQUFNLENBQUNqRCxJQUFJO1FBQ3RCLE9BQU87WUFDTGlELFNBQVMsQ0FBQztRQUNaLENBQUM7SUFDSDtJQUVBLElBQUlZLHdCQUF3QixPQUFPLENBQUM7SUFDcEMsT0FBTztRQUNMTyxLQUFLbkI7UUFDTG9CLEdBQUdYLFNBQVNJLE1BQU1DLEtBQUs7SUFDekI7QUFDRjtBQUVBLFNBQVNPLFFBQVFyQixNQUFNLEVBQUVPLElBQUksRUFBRWUsUUFBUSxFQUFFO0lBQ3ZDLElBQUlDLGlCQUFpQmpCLGNBQWNOLFFBQVFPLE1BQU1RLFNBQzdDSSxNQUFNSSxlQUFlSixHQUFHLEVBQ3hCQyxJQUFJRyxlQUFlSCxDQUFDO0lBRXhCRCxHQUFHLENBQUNDLEVBQUUsR0FBR0U7QUFDWDtBQUNBLFNBQVNFLFNBQVN4QixNQUFNLEVBQUVPLElBQUksRUFBRWUsUUFBUSxFQUFFbkQsTUFBTSxFQUFFO0lBQ2hELElBQUlzRCxrQkFBa0JuQixjQUFjTixRQUFRTyxNQUFNUSxTQUM5Q0ksTUFBTU0sZ0JBQWdCTixHQUFHLEVBQ3pCQyxJQUFJSyxnQkFBZ0JMLENBQUM7SUFFekJELEdBQUcsQ0FBQ0MsRUFBRSxHQUFHRCxHQUFHLENBQUNDLEVBQUUsSUFBSSxFQUFFO0lBQ3JCLElBQUlqRCxRQUFRZ0QsR0FBRyxDQUFDQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0MsRUFBRSxDQUFDakQsTUFBTSxDQUFDbUQ7SUFDbkMsSUFBSSxDQUFDbkQsUUFBUWdELEdBQUcsQ0FBQ0MsRUFBRSxDQUFDcEMsSUFBSSxDQUFDc0M7QUFDM0I7QUFDQSxTQUFTSSxRQUFRMUIsTUFBTSxFQUFFTyxJQUFJLEVBQUU7SUFDN0IsSUFBSW9CLGtCQUFrQnJCLGNBQWNOLFFBQVFPLE9BQ3hDWSxNQUFNUSxnQkFBZ0JSLEdBQUcsRUFDekJDLElBQUlPLGdCQUFnQlAsQ0FBQztJQUV6QixJQUFJLENBQUNELEtBQUssT0FBT3RFO0lBQ2pCLE9BQU9zRSxHQUFHLENBQUNDLEVBQUU7QUFDZjtBQUNBLFNBQVNRLG9CQUFvQkMsSUFBSSxFQUFFQyxXQUFXLEVBQUUvRSxHQUFHLEVBQUU7SUFDbkQsSUFBSUMsUUFBUTBFLFFBQVFHLE1BQU05RTtJQUUxQixJQUFJQyxVQUFVSCxXQUFXO1FBQ3ZCLE9BQU9HO0lBQ1QsQ0FBQztJQUVELE9BQU8wRSxRQUFRSSxhQUFhL0U7QUFDOUI7QUFDQSxTQUFTZ0YsV0FBV0MsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsRUFBRTtJQUM3QyxJQUFLLElBQUlDLFFBQVFGLE9BQVE7UUFDdkIsSUFBSUUsU0FBUyxlQUFlQSxTQUFTLGVBQWU7WUFDbEQsSUFBSUEsUUFBUUgsUUFBUTtnQkFDbEIsSUFBSSxPQUFPQSxNQUFNLENBQUNHLEtBQUssS0FBSyxZQUFZSCxZQUFBQSxNQUFNLENBQUNHLEtBQUssRUFBWUMsV0FBVSxPQUFPSCxNQUFNLENBQUNFLEtBQUssS0FBSyxZQUFZRixZQUFBQSxNQUFNLENBQUNFLEtBQUssRUFBWUMsU0FBUTtvQkFDNUksSUFBSUYsV0FBV0YsTUFBTSxDQUFDRyxLQUFLLEdBQUdGLE1BQU0sQ0FBQ0UsS0FBSztnQkFDNUMsT0FBTztvQkFDTEosV0FBV0MsTUFBTSxDQUFDRyxLQUFLLEVBQUVGLE1BQU0sQ0FBQ0UsS0FBSyxFQUFFRDtnQkFDekMsQ0FBQztZQUNILE9BQU87Z0JBQ0xGLE1BQU0sQ0FBQ0csS0FBSyxHQUFHRixNQUFNLENBQUNFLEtBQUs7WUFDN0IsQ0FBQztRQUNILENBQUM7SUFDSDtJQUVBLE9BQU9IO0FBQ1Q7QUFDQSxTQUFTSyxZQUFZQyxHQUFHLEVBQUU7SUFDeEIsT0FBT0EsSUFBSTNCLE9BQU8sQ0FBQyx1Q0FBdUM7QUFDNUQ7QUFDQSxJQUFJNEIsYUFBYTtJQUNmLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUNQO0FBQ0EsU0FBU0MsT0FBT1gsSUFBSSxFQUFFO0lBQ3BCLElBQUksT0FBT0EsU0FBUyxVQUFVO1FBQzVCLE9BQU9BLEtBQUtsQixPQUFPLENBQUMsY0FBYyxTQUFVUixDQUFDLEVBQUU7WUFDN0MsT0FBT29DLFVBQVUsQ0FBQ3BDLEVBQUU7UUFDdEI7SUFDRixDQUFDO0lBRUQsT0FBTzBCO0FBQ1Q7QUFDQSxJQUFJWSxTQUFTLE9BQU9DLFdBQVcsZUFBZUEsT0FBT0MsU0FBUyxJQUFJRCxPQUFPQyxTQUFTLENBQUNDLFNBQVMsSUFBSUYsT0FBT0MsU0FBUyxDQUFDQyxTQUFTLENBQUNsQyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBRTlJLElBQUltQyxnQkFBZ0IsU0FBVUMsYUFBYSxFQUFFO0lBQzNDaEgsK0VBQVNBLENBQUMrRyxlQUFlQztJQUV6QixTQUFTRCxjQUFjaEIsSUFBSSxFQUFFO1FBQzNCLElBQUlqRDtRQUVKLElBQUlsQyxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRztZQUNoRm9HLElBQUk7Z0JBQUM7YUFBYztZQUNuQkMsV0FBVztRQUNiLENBQUM7UUFFRHZILHFGQUFlQSxDQUFDLElBQUksRUFBRW9IO1FBRXRCakUsUUFBUWpELGdHQUEwQkEsQ0FBQyxJQUFJLEVBQUVDLHFGQUFlQSxDQUFDaUgsZUFBZTNCLElBQUksQ0FBQyxJQUFJO1FBRWpGLElBQUl1QixRQUFRO1lBQ1ZsRSxhQUFhMkMsSUFBSSxDQUFDckYsNEZBQXNCQSxDQUFDK0M7UUFDM0MsQ0FBQztRQUVEQSxNQUFNaUQsSUFBSSxHQUFHQSxRQUFRLENBQUM7UUFDdEJqRCxNQUFNbEMsT0FBTyxHQUFHQTtRQUVoQixJQUFJa0MsTUFBTWxDLE9BQU8sQ0FBQ3VHLFlBQVksS0FBS3BHLFdBQVc7WUFDNUMrQixNQUFNbEMsT0FBTyxDQUFDdUcsWUFBWSxHQUFHO1FBQy9CLENBQUM7UUFFRCxPQUFPckU7SUFDVDtJQUVBbEQsa0ZBQVlBLENBQUNtSCxlQUFlO1FBQUM7WUFDM0I5RixLQUFLO1lBQ0xDLE9BQU8sU0FBU2tHLGNBQWNILEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxJQUFJLENBQUNyRyxPQUFPLENBQUNxRyxFQUFFLENBQUNyQyxPQUFPLENBQUNxQyxNQUFNLEdBQUc7b0JBQ25DLElBQUksQ0FBQ3JHLE9BQU8sQ0FBQ3FHLEVBQUUsQ0FBQy9ELElBQUksQ0FBQytEO2dCQUN2QixDQUFDO1lBQ0g7UUFDRjtRQUFHO1lBQ0RoRyxLQUFLO1lBQ0xDLE9BQU8sU0FBU21HLGlCQUFpQkosRUFBRSxFQUFFO2dCQUNuQyxJQUFJSyxRQUFRLElBQUksQ0FBQzFHLE9BQU8sQ0FBQ3FHLEVBQUUsQ0FBQ3JDLE9BQU8sQ0FBQ3FDO2dCQUVwQyxJQUFJSyxRQUFRLENBQUMsR0FBRztvQkFDZCxJQUFJLENBQUMxRyxPQUFPLENBQUNxRyxFQUFFLENBQUNNLE1BQU0sQ0FBQ0QsT0FBTztnQkFDaEMsQ0FBQztZQUNIO1FBQ0Y7UUFBRztZQUNEckcsS0FBSztZQUNMQyxPQUFPLFNBQVNzRyxZQUFZQyxHQUFHLEVBQUVSLEVBQUUsRUFBRWhHLEdBQUcsRUFBRTtnQkFDeEMsSUFBSUwsVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJc0csZUFBZXZHLFFBQVF1RyxZQUFZLEtBQUtwRyxZQUFZSCxRQUFRdUcsWUFBWSxHQUFHLElBQUksQ0FBQ3ZHLE9BQU8sQ0FBQ3VHLFlBQVk7Z0JBQ3hHLElBQUkxQyxPQUFPO29CQUFDZ0Q7b0JBQUtSO2lCQUFHO2dCQUNwQixJQUFJaEcsT0FBTyxPQUFPQSxRQUFRLFVBQVV3RCxPQUFPQSxLQUFLcEMsTUFBTSxDQUFDcEI7Z0JBQ3ZELElBQUlBLE9BQU8sT0FBT0EsUUFBUSxVQUFVd0QsT0FBT0EsS0FBS3BDLE1BQU0sQ0FBQzhFLGVBQWVsRyxJQUFJOEIsS0FBSyxDQUFDb0UsZ0JBQWdCbEcsR0FBRztnQkFFbkcsSUFBSXdHLElBQUk3QyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUc7b0JBQ3pCSCxPQUFPZ0QsSUFBSTFFLEtBQUssQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxPQUFPNkMsUUFBUSxJQUFJLENBQUNHLElBQUksRUFBRXRCO1lBQzVCO1FBQ0Y7UUFBRztZQUNEeEQsS0FBSztZQUNMQyxPQUFPLFNBQVN3RyxZQUFZRCxHQUFHLEVBQUVSLEVBQUUsRUFBRWhHLEdBQUcsRUFBRUMsS0FBSyxFQUFFO2dCQUMvQyxJQUFJTixVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRztvQkFDaEY4RyxRQUFRLEtBQUs7Z0JBQ2YsQ0FBQztnQkFDRCxJQUFJUixlQUFlLElBQUksQ0FBQ3ZHLE9BQU8sQ0FBQ3VHLFlBQVk7Z0JBQzVDLElBQUlBLGlCQUFpQnBHLFdBQVdvRyxlQUFlO2dCQUMvQyxJQUFJMUMsT0FBTztvQkFBQ2dEO29CQUFLUjtpQkFBRztnQkFDcEIsSUFBSWhHLEtBQUt3RCxPQUFPQSxLQUFLcEMsTUFBTSxDQUFDOEUsZUFBZWxHLElBQUk4QixLQUFLLENBQUNvRSxnQkFBZ0JsRyxHQUFHO2dCQUV4RSxJQUFJd0csSUFBSTdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDekJILE9BQU9nRCxJQUFJMUUsS0FBSyxDQUFDO29CQUNqQjdCLFFBQVErRjtvQkFDUkEsS0FBS3hDLElBQUksQ0FBQyxFQUFFO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxDQUFDMkMsYUFBYSxDQUFDSDtnQkFDbkIxQixRQUFRLElBQUksQ0FBQ1EsSUFBSSxFQUFFdEIsTUFBTXZEO2dCQUN6QixJQUFJLENBQUNOLFFBQVErRyxNQUFNLEVBQUUsSUFBSSxDQUFDckUsSUFBSSxDQUFDLFNBQVNtRSxLQUFLUixJQUFJaEcsS0FBS0M7WUFDeEQ7UUFDRjtRQUFHO1lBQ0RELEtBQUs7WUFDTEMsT0FBTyxTQUFTMEcsYUFBYUgsR0FBRyxFQUFFUixFQUFFLEVBQUVZLFNBQVMsRUFBRTtnQkFDL0MsSUFBSWpILFVBQVVDLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHO29CQUNoRjhHLFFBQVEsS0FBSztnQkFDZixDQUFDO2dCQUVELElBQUssSUFBSXBELEtBQUtzRCxVQUFXO29CQUN2QixJQUFJLE9BQU9BLFNBQVMsQ0FBQ3RELEVBQUUsS0FBSyxZQUFZVSxPQUFPQyxTQUFTLENBQUM0QyxRQUFRLENBQUNySCxLQUFLLENBQUNvSCxTQUFTLENBQUN0RCxFQUFFLE1BQU0sa0JBQWtCLElBQUksQ0FBQ21ELFdBQVcsQ0FBQ0QsS0FBS1IsSUFBSTFDLEdBQUdzRCxTQUFTLENBQUN0RCxFQUFFLEVBQUU7d0JBQ3JKb0QsUUFBUSxJQUFJO29CQUNkO2dCQUNGO2dCQUVBLElBQUksQ0FBQy9HLFFBQVErRyxNQUFNLEVBQUUsSUFBSSxDQUFDckUsSUFBSSxDQUFDLFNBQVNtRSxLQUFLUixJQUFJWTtZQUNuRDtRQUNGO1FBQUc7WUFDRDVHLEtBQUs7WUFDTEMsT0FBTyxTQUFTNkcsa0JBQWtCTixHQUFHLEVBQUVSLEVBQUUsRUFBRVksU0FBUyxFQUFFRyxJQUFJLEVBQUU1QixTQUFTLEVBQUU7Z0JBQ3JFLElBQUl4RixVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRztvQkFDaEY4RyxRQUFRLEtBQUs7Z0JBQ2YsQ0FBQztnQkFDRCxJQUFJbEQsT0FBTztvQkFBQ2dEO29CQUFLUjtpQkFBRztnQkFFcEIsSUFBSVEsSUFBSTdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDekJILE9BQU9nRCxJQUFJMUUsS0FBSyxDQUFDO29CQUNqQmlGLE9BQU9IO29CQUNQQSxZQUFZWjtvQkFDWkEsS0FBS3hDLElBQUksQ0FBQyxFQUFFO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxDQUFDMkMsYUFBYSxDQUFDSDtnQkFDbkIsSUFBSWdCLE9BQU9yQyxRQUFRLElBQUksQ0FBQ0csSUFBSSxFQUFFdEIsU0FBUyxDQUFDO2dCQUV4QyxJQUFJdUQsTUFBTTtvQkFDUi9CLFdBQVdnQyxNQUFNSixXQUFXekI7Z0JBQzlCLE9BQU87b0JBQ0w2QixPQUFPdkksbUZBQWFBLENBQUMsQ0FBQyxHQUFHdUksTUFBTUo7Z0JBQ2pDLENBQUM7Z0JBRUR0QyxRQUFRLElBQUksQ0FBQ1EsSUFBSSxFQUFFdEIsTUFBTXdEO2dCQUN6QixJQUFJLENBQUNySCxRQUFRK0csTUFBTSxFQUFFLElBQUksQ0FBQ3JFLElBQUksQ0FBQyxTQUFTbUUsS0FBS1IsSUFBSVk7WUFDbkQ7UUFDRjtRQUFHO1lBQ0Q1RyxLQUFLO1lBQ0xDLE9BQU8sU0FBU2dILHFCQUFxQlQsR0FBRyxFQUFFUixFQUFFLEVBQUU7Z0JBQzVDLElBQUksSUFBSSxDQUFDa0IsaUJBQWlCLENBQUNWLEtBQUtSLEtBQUs7b0JBQ25DLE9BQU8sSUFBSSxDQUFDbEIsSUFBSSxDQUFDMEIsSUFBSSxDQUFDUixHQUFHO2dCQUMzQixDQUFDO2dCQUVELElBQUksQ0FBQ0ksZ0JBQWdCLENBQUNKO2dCQUN0QixJQUFJLENBQUMzRCxJQUFJLENBQUMsV0FBV21FLEtBQUtSO1lBQzVCO1FBQ0Y7UUFBRztZQUNEaEcsS0FBSztZQUNMQyxPQUFPLFNBQVNpSCxrQkFBa0JWLEdBQUcsRUFBRVIsRUFBRSxFQUFFO2dCQUN6QyxPQUFPLElBQUksQ0FBQ08sV0FBVyxDQUFDQyxLQUFLUixRQUFRbEc7WUFDdkM7UUFDRjtRQUFHO1lBQ0RFLEtBQUs7WUFDTEMsT0FBTyxTQUFTa0gsa0JBQWtCWCxHQUFHLEVBQUVSLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDQSxJQUFJQSxLQUFLLElBQUksQ0FBQ3JHLE9BQU8sQ0FBQ3NHLFNBQVM7Z0JBQ3BDLElBQUksSUFBSSxDQUFDdEcsT0FBTyxDQUFDeUgsZ0JBQWdCLEtBQUssTUFBTSxPQUFPM0ksbUZBQWFBLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM4SCxXQUFXLENBQUNDLEtBQUtSO2dCQUMvRixPQUFPLElBQUksQ0FBQ08sV0FBVyxDQUFDQyxLQUFLUjtZQUMvQjtRQUNGO1FBQUc7WUFDRGhHLEtBQUs7WUFDTEMsT0FBTyxTQUFTb0gsa0JBQWtCYixHQUFHLEVBQUU7Z0JBQ3JDLE9BQU8sSUFBSSxDQUFDMUIsSUFBSSxDQUFDMEIsSUFBSTtZQUN2QjtRQUNGO1FBQUc7WUFDRHhHLEtBQUs7WUFDTEMsT0FBTyxTQUFTcUgsU0FBUztnQkFDdkIsT0FBTyxJQUFJLENBQUN4QyxJQUFJO1lBQ2xCO1FBQ0Y7S0FBRTtJQUVGLE9BQU9nQjtBQUNULEVBQUV0RTtBQUVGLElBQUkrRixnQkFBZ0I7SUFDbEJDLFlBQVksQ0FBQztJQUNiQyxrQkFBa0IsU0FBU0EsaUJBQWlCQyxNQUFNLEVBQUU7UUFDbEQsSUFBSSxDQUFDRixVQUFVLENBQUNFLE9BQU9DLElBQUksQ0FBQyxHQUFHRDtJQUNqQztJQUNBRSxRQUFRLFNBQVNBLE9BQU9KLFVBQVUsRUFBRXZILEtBQUssRUFBRUQsR0FBRyxFQUFFTCxPQUFPLEVBQUVrSSxVQUFVLEVBQUU7UUFDbkUsSUFBSWhHLFFBQVEsSUFBSTtRQUVoQjJGLFdBQVd6RixPQUFPLENBQUMsU0FBVStGLFNBQVMsRUFBRTtZQUN0QyxJQUFJakcsTUFBTTJGLFVBQVUsQ0FBQ00sVUFBVSxFQUFFN0gsUUFBUTRCLE1BQU0yRixVQUFVLENBQUNNLFVBQVUsQ0FBQ0MsT0FBTyxDQUFDOUgsT0FBT0QsS0FBS0wsU0FBU2tJO1FBQ3BHO1FBQ0EsT0FBTzVIO0lBQ1Q7QUFDRjtBQUVBLElBQUkrSCxtQkFBbUIsQ0FBQztBQUV4QixJQUFJQyxhQUFhLFNBQVVsQyxhQUFhLEVBQUU7SUFDeENoSCwrRUFBU0EsQ0FBQ2tKLFlBQVlsQztJQUV0QixTQUFTa0MsV0FBV0MsUUFBUSxFQUFFO1FBQzVCLElBQUlyRztRQUVKLElBQUlsQyxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEZsQixxRkFBZUEsQ0FBQyxJQUFJLEVBQUV1SjtRQUV0QnBHLFFBQVFqRCxnR0FBMEJBLENBQUMsSUFBSSxFQUFFQyxxRkFBZUEsQ0FBQ29KLFlBQVk5RCxJQUFJLENBQUMsSUFBSTtRQUU5RSxJQUFJdUIsUUFBUTtZQUNWbEUsYUFBYTJDLElBQUksQ0FBQ3JGLDRGQUFzQkEsQ0FBQytDO1FBQzNDLENBQUM7UUFFRHFCLEtBQUs7WUFBQztZQUFpQjtZQUFpQjtZQUFrQjtZQUFnQjtZQUFvQjtZQUFjO1NBQVEsRUFBRWdGLFVBQVVwSiw0RkFBc0JBLENBQUMrQztRQUN2SkEsTUFBTWxDLE9BQU8sR0FBR0E7UUFFaEIsSUFBSWtDLE1BQU1sQyxPQUFPLENBQUN1RyxZQUFZLEtBQUtwRyxXQUFXO1lBQzVDK0IsTUFBTWxDLE9BQU8sQ0FBQ3VHLFlBQVksR0FBRztRQUMvQixDQUFDO1FBRURyRSxNQUFNMUIsTUFBTSxHQUFHb0IsV0FBV0YsTUFBTSxDQUFDO1FBQ2pDLE9BQU9RO0lBQ1Q7SUFFQWxELGtGQUFZQSxDQUFDc0osWUFBWTtRQUFDO1lBQ3hCakksS0FBSztZQUNMQyxPQUFPLFNBQVNrSSxlQUFlM0IsR0FBRyxFQUFFO2dCQUNsQyxJQUFJQSxLQUFLLElBQUksQ0FBQzRCLFFBQVEsR0FBRzVCO1lBQzNCO1FBQ0Y7UUFBRztZQUNEeEcsS0FBSztZQUNMQyxPQUFPLFNBQVNvSSxPQUFPckksR0FBRyxFQUFFO2dCQUMxQixJQUFJTCxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRztvQkFDaEYwSSxlQUFlLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQ0QsSUFBSUMsV0FBVyxJQUFJLENBQUN6RixPQUFPLENBQUM5QyxLQUFLTDtnQkFDakMsT0FBTzRJLFlBQVlBLFNBQVM3RixHQUFHLEtBQUs1QztZQUN0QztRQUNGO1FBQUc7WUFDREUsS0FBSztZQUNMQyxPQUFPLFNBQVN1SSxlQUFleEksR0FBRyxFQUFFTCxPQUFPLEVBQUU7Z0JBQzNDLElBQUk4SSxjQUFjOUksUUFBUThJLFdBQVcsS0FBSzNJLFlBQVlILFFBQVE4SSxXQUFXLEdBQUcsSUFBSSxDQUFDOUksT0FBTyxDQUFDOEksV0FBVztnQkFDcEcsSUFBSUEsZ0JBQWdCM0ksV0FBVzJJLGNBQWM7Z0JBQzdDLElBQUl2QyxlQUFldkcsUUFBUXVHLFlBQVksS0FBS3BHLFlBQVlILFFBQVF1RyxZQUFZLEdBQUcsSUFBSSxDQUFDdkcsT0FBTyxDQUFDdUcsWUFBWTtnQkFDeEcsSUFBSXdDLGFBQWEvSSxRQUFRcUcsRUFBRSxJQUFJLElBQUksQ0FBQ3JHLE9BQU8sQ0FBQ3NHLFNBQVM7Z0JBRXJELElBQUl3QyxlQUFlekksSUFBSTJELE9BQU8sQ0FBQzhFLGVBQWUsQ0FBQyxHQUFHO29CQUNoRCxJQUFJbkYsSUFBSXRELElBQUkySSxLQUFLLENBQUMsSUFBSSxDQUFDQyxZQUFZLENBQUNDLGFBQWE7b0JBRWpELElBQUl2RixLQUFLQSxFQUFFekQsTUFBTSxHQUFHLEdBQUc7d0JBQ3JCLE9BQU87NEJBQ0xHLEtBQUtBOzRCQUNMMEksWUFBWUE7d0JBQ2Q7b0JBQ0YsQ0FBQztvQkFFRCxJQUFJSSxRQUFROUksSUFBSThCLEtBQUssQ0FBQzJHO29CQUN0QixJQUFJQSxnQkFBZ0J2QyxnQkFBZ0J1QyxnQkFBZ0J2QyxnQkFBZ0IsSUFBSSxDQUFDdkcsT0FBTyxDQUFDcUcsRUFBRSxDQUFDckMsT0FBTyxDQUFDbUYsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUdKLGFBQWFJLE1BQU0vRSxLQUFLO29CQUNwSS9ELE1BQU04SSxNQUFNQyxJQUFJLENBQUM3QztnQkFDbkIsQ0FBQztnQkFFRCxJQUFJLE9BQU93QyxlQUFlLFVBQVVBLGFBQWE7b0JBQUNBO2lCQUFXO2dCQUM3RCxPQUFPO29CQUNMMUksS0FBS0E7b0JBQ0wwSSxZQUFZQTtnQkFDZDtZQUNGO1FBQ0Y7UUFBRztZQUNEMUksS0FBSztZQUNMQyxPQUFPLFNBQVMrSSxVQUFVQyxJQUFJLEVBQUV0SixPQUFPLEVBQUV1SixPQUFPLEVBQUU7Z0JBQ2hELElBQUlDLFNBQVMsSUFBSTtnQkFFakIsSUFBSTNLLDZFQUFPQSxDQUFDbUIsYUFBYSxZQUFZLElBQUksQ0FBQ0EsT0FBTyxDQUFDeUosZ0NBQWdDLEVBQUU7b0JBQ2xGekosVUFBVSxJQUFJLENBQUNBLE9BQU8sQ0FBQ3lKLGdDQUFnQyxDQUFDeEo7Z0JBQzFELENBQUM7Z0JBRUQsSUFBSSxDQUFDRCxTQUFTQSxVQUFVLENBQUM7Z0JBQ3pCLElBQUlzSixTQUFTbkosYUFBYW1KLFNBQVMsSUFBSSxFQUFFLE9BQU87Z0JBQ2hELElBQUksQ0FBQ3pJLE1BQU02SSxPQUFPLENBQUNKLE9BQU9BLE9BQU87b0JBQUM1RCxPQUFPNEQ7aUJBQU07Z0JBQy9DLElBQUkvQyxlQUFldkcsUUFBUXVHLFlBQVksS0FBS3BHLFlBQVlILFFBQVF1RyxZQUFZLEdBQUcsSUFBSSxDQUFDdkcsT0FBTyxDQUFDdUcsWUFBWTtnQkFFeEcsSUFBSW9ELHVCQUF1QixJQUFJLENBQUNkLGNBQWMsQ0FBQ1MsSUFBSSxDQUFDQSxLQUFLcEosTUFBTSxHQUFHLEVBQUUsRUFBRUYsVUFDbEVLLE1BQU1zSixxQkFBcUJ0SixHQUFHLEVBQzlCMEksYUFBYVkscUJBQXFCWixVQUFVO2dCQUVoRCxJQUFJYSxZQUFZYixVQUFVLENBQUNBLFdBQVc3SSxNQUFNLEdBQUcsRUFBRTtnQkFDakQsSUFBSTJHLE1BQU03RyxRQUFRNkcsR0FBRyxJQUFJLElBQUksQ0FBQzRCLFFBQVE7Z0JBQ3RDLElBQUlvQiwwQkFBMEI3SixRQUFRNkosdUJBQXVCLElBQUksSUFBSSxDQUFDN0osT0FBTyxDQUFDNkosdUJBQXVCO2dCQUVyRyxJQUFJaEQsT0FBT0EsSUFBSWlELFdBQVcsT0FBTyxVQUFVO29CQUN6QyxJQUFJRCx5QkFBeUI7d0JBQzNCLElBQUlmLGNBQWM5SSxRQUFROEksV0FBVyxJQUFJLElBQUksQ0FBQzlJLE9BQU8sQ0FBQzhJLFdBQVc7d0JBQ2pFLE9BQU9jLFlBQVlkLGNBQWN6STtvQkFDbkMsQ0FBQztvQkFFRCxPQUFPQTtnQkFDVCxDQUFDO2dCQUVELElBQUl1SSxXQUFXLElBQUksQ0FBQ3pGLE9BQU8sQ0FBQ21HLE1BQU10SjtnQkFDbEMsSUFBSStDLE1BQU02RixZQUFZQSxTQUFTN0YsR0FBRztnQkFDbEMsSUFBSWdILGFBQWFuQixZQUFZQSxTQUFTb0IsT0FBTyxJQUFJM0o7Z0JBQ2pELElBQUk0SixrQkFBa0JyQixZQUFZQSxTQUFTc0IsWUFBWSxJQUFJN0o7Z0JBQzNELElBQUk4SixVQUFVOUYsT0FBT0MsU0FBUyxDQUFDNEMsUUFBUSxDQUFDckgsS0FBSyxDQUFDa0Q7Z0JBQzlDLElBQUlxSCxXQUFXO29CQUFDO29CQUFtQjtvQkFBcUI7aUJBQWtCO2dCQUMxRSxJQUFJQyxhQUFhckssUUFBUXFLLFVBQVUsS0FBS2xLLFlBQVlILFFBQVFxSyxVQUFVLEdBQUcsSUFBSSxDQUFDckssT0FBTyxDQUFDcUssVUFBVTtnQkFDaEcsSUFBSUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDQyxVQUFVLElBQUksSUFBSSxDQUFDQSxVQUFVLENBQUNDLGNBQWM7Z0JBQ25GLElBQUlBLGlCQUFpQixPQUFPekgsUUFBUSxZQUFZLE9BQU9BLFFBQVEsYUFBYSxPQUFPQSxRQUFRO2dCQUUzRixJQUFJdUgsOEJBQThCdkgsT0FBT3lILGtCQUFrQkosU0FBU3BHLE9BQU8sQ0FBQ21HLFdBQVcsS0FBSyxDQUFFLFFBQU9FLGVBQWUsWUFBWUYsWUFBWSxnQkFBZSxHQUFJO29CQUM3SixJQUFJLENBQUNuSyxRQUFReUssYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDekssT0FBTyxDQUFDeUssYUFBYSxFQUFFO3dCQUN6RCxJQUFJLENBQUNqSyxNQUFNLENBQUNkLElBQUksQ0FBQzt3QkFDakIsT0FBTyxJQUFJLENBQUNNLE9BQU8sQ0FBQzBLLHFCQUFxQixHQUFHLElBQUksQ0FBQzFLLE9BQU8sQ0FBQzBLLHFCQUFxQixDQUFDWCxZQUFZaEgsS0FBSy9DLFdBQVcsUUFBUXlCLE1BQU0sQ0FBQ3BCLEtBQUssTUFBTW9CLE1BQU0sQ0FBQyxJQUFJLENBQUNnSCxRQUFRLEVBQUUsMkNBQTJDO29CQUN4TSxDQUFDO29CQUVELElBQUlsQyxjQUFjO3dCQUNoQixJQUFJb0UsaUJBQWlCUixZQUFZO3dCQUNqQyxJQUFJNUcsT0FBT29ILGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQyxJQUFJQyxjQUFjRCxpQkFBaUJWLGtCQUFrQkYsVUFBVTt3QkFFL0QsSUFBSyxJQUFJcEcsS0FBS1osSUFBSzs0QkFDakIsSUFBSXNCLE9BQU9DLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUN6QixLQUFLWSxJQUFJO2dDQUNoRCxJQUFJa0gsVUFBVSxHQUFHcEosTUFBTSxDQUFDbUosYUFBYW5KLE1BQU0sQ0FBQzhFLGNBQWM5RSxNQUFNLENBQUNrQztnQ0FDakVKLElBQUksQ0FBQ0ksRUFBRSxHQUFHLElBQUksQ0FBQzBGLFNBQVMsQ0FBQ3dCLFNBQVMvTCxtRkFBYUEsQ0FBQyxDQUFDLEdBQUdrQixTQUFTO29DQUMzRHFLLFlBQVksS0FBSztvQ0FDakJoRSxJQUFJMEM7Z0NBQ047Z0NBQ0EsSUFBSXhGLElBQUksQ0FBQ0ksRUFBRSxLQUFLa0gsU0FBU3RILElBQUksQ0FBQ0ksRUFBRSxHQUFHWixHQUFHLENBQUNZLEVBQUU7NEJBQzNDLENBQUM7d0JBQ0g7d0JBRUFaLE1BQU1RO29CQUNSLENBQUM7Z0JBQ0gsT0FBTyxJQUFJK0csOEJBQThCLE9BQU9ELGVBQWUsWUFBWUYsWUFBWSxrQkFBa0I7b0JBQ3ZHcEgsTUFBTUEsSUFBSXFHLElBQUksQ0FBQ2lCO29CQUNmLElBQUl0SCxLQUFLQSxNQUFNLElBQUksQ0FBQytILGlCQUFpQixDQUFDL0gsS0FBS3VHLE1BQU10SixTQUFTdUo7Z0JBQzVELE9BQU87b0JBQ0wsSUFBSXdCLGNBQWMsS0FBSztvQkFDdkIsSUFBSWYsVUFBVSxLQUFLO29CQUNuQixJQUFJZ0Isc0JBQXNCaEwsUUFBUWlMLEtBQUssS0FBSzlLLGFBQWEsT0FBT0gsUUFBUWlMLEtBQUssS0FBSztvQkFDbEYsSUFBSUMsa0JBQWtCNUMsV0FBVzRDLGVBQWUsQ0FBQ2xMO29CQUNqRCxJQUFJbUwscUJBQXFCSCxzQkFBc0IsSUFBSSxDQUFDSSxjQUFjLENBQUNDLFNBQVMsQ0FBQ3hFLEtBQUs3RyxRQUFRaUwsS0FBSyxJQUFJLEVBQUU7b0JBQ3JHLElBQUlLLGVBQWV0TCxPQUFPLENBQUMsZUFBZXlCLE1BQU0sQ0FBQzBKLG9CQUFvQixJQUFJbkwsUUFBUXNMLFlBQVk7b0JBRTdGLElBQUksQ0FBQyxJQUFJLENBQUNDLGFBQWEsQ0FBQ3hJLFFBQVFtSSxpQkFBaUI7d0JBQy9DSCxjQUFjLElBQUk7d0JBQ2xCaEksTUFBTXVJO29CQUNSLENBQUM7b0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDeEksTUFBTTt3QkFDNUJpSCxVQUFVLElBQUk7d0JBQ2RqSCxNQUFNMUM7b0JBQ1IsQ0FBQztvQkFFRCxJQUFJbUwsZ0JBQWdCTixtQkFBbUJJLGlCQUFpQnZJLE9BQU8sSUFBSSxDQUFDL0MsT0FBTyxDQUFDd0wsYUFBYTtvQkFFekYsSUFBSXhCLFdBQVdlLGVBQWVTLGVBQWU7d0JBQzNDLElBQUksQ0FBQ2hMLE1BQU0sQ0FBQ2pCLEdBQUcsQ0FBQ2lNLGdCQUFnQixjQUFjLFlBQVksRUFBRTNFLEtBQUsrQyxXQUFXdkosS0FBS21MLGdCQUFnQkYsZUFBZXZJLEdBQUc7d0JBRW5ILElBQUl3RCxjQUFjOzRCQUNoQixJQUFJa0YsS0FBSyxJQUFJLENBQUN0SSxPQUFPLENBQUM5QyxLQUFLdkIsbUZBQWFBLENBQUMsQ0FBQyxHQUFHa0IsU0FBUztnQ0FDcER1RyxjQUFjLEtBQUs7NEJBQ3JCOzRCQUNBLElBQUlrRixNQUFNQSxHQUFHMUksR0FBRyxFQUFFLElBQUksQ0FBQ3ZDLE1BQU0sQ0FBQ2QsSUFBSSxDQUFDO3dCQUNyQyxDQUFDO3dCQUVELElBQUlnTSxPQUFPLEVBQUU7d0JBQ2IsSUFBSUMsZUFBZSxJQUFJLENBQUNDLGFBQWEsQ0FBQ0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDN0wsT0FBTyxDQUFDOEwsV0FBVyxFQUFFOUwsUUFBUTZHLEdBQUcsSUFBSSxJQUFJLENBQUM0QixRQUFRO3dCQUU3RyxJQUFJLElBQUksQ0FBQ3pJLE9BQU8sQ0FBQytMLGFBQWEsS0FBSyxjQUFjSixnQkFBZ0JBLFlBQVksQ0FBQyxFQUFFLEVBQUU7NEJBQ2hGLElBQUssSUFBSUssSUFBSSxHQUFHQSxJQUFJTCxhQUFhekwsTUFBTSxFQUFFOEwsSUFBSztnQ0FDNUNOLEtBQUtwSixJQUFJLENBQUNxSixZQUFZLENBQUNLLEVBQUU7NEJBQzNCO3dCQUNGLE9BQU8sSUFBSSxJQUFJLENBQUNoTSxPQUFPLENBQUMrTCxhQUFhLEtBQUssT0FBTzs0QkFDL0NMLE9BQU8sSUFBSSxDQUFDRSxhQUFhLENBQUNLLGtCQUFrQixDQUFDak0sUUFBUTZHLEdBQUcsSUFBSSxJQUFJLENBQUM0QixRQUFRO3dCQUMzRSxPQUFPOzRCQUNMaUQsS0FBS3BKLElBQUksQ0FBQ3RDLFFBQVE2RyxHQUFHLElBQUksSUFBSSxDQUFDNEIsUUFBUTt3QkFDeEMsQ0FBQzt3QkFFRCxJQUFJeUQsT0FBTyxTQUFTQSxLQUFLekosQ0FBQyxFQUFFaUMsQ0FBQyxFQUFFeUgsYUFBYSxFQUFFOzRCQUM1QyxJQUFJM0MsT0FBT3hKLE9BQU8sQ0FBQ29NLGlCQUFpQixFQUFFO2dDQUNwQzVDLE9BQU94SixPQUFPLENBQUNvTSxpQkFBaUIsQ0FBQzNKLEdBQUdtSCxXQUFXbEYsR0FBRzhHLGdCQUFnQlcsZ0JBQWdCcEosR0FBRyxFQUFFeUksZUFBZXhMOzRCQUN4RyxPQUFPLElBQUl3SixPQUFPNkMsZ0JBQWdCLElBQUk3QyxPQUFPNkMsZ0JBQWdCLENBQUNDLFdBQVcsRUFBRTtnQ0FDekU5QyxPQUFPNkMsZ0JBQWdCLENBQUNDLFdBQVcsQ0FBQzdKLEdBQUdtSCxXQUFXbEYsR0FBRzhHLGdCQUFnQlcsZ0JBQWdCcEosR0FBRyxFQUFFeUksZUFBZXhMOzRCQUMzRyxDQUFDOzRCQUVEd0osT0FBTzlHLElBQUksQ0FBQyxjQUFjRCxHQUFHbUgsV0FBV2xGLEdBQUczQjt3QkFDN0M7d0JBRUEsSUFBSSxJQUFJLENBQUMvQyxPQUFPLENBQUNzTSxXQUFXLEVBQUU7NEJBQzVCLElBQUksSUFBSSxDQUFDdE0sT0FBTyxDQUFDdU0sa0JBQWtCLElBQUl2QixxQkFBcUI7Z0NBQzFEVSxLQUFLdEosT0FBTyxDQUFDLFNBQVVxRyxRQUFRLEVBQUU7b0NBQy9CZSxPQUFPNEIsY0FBYyxDQUFDb0IsV0FBVyxDQUFDL0QsVUFBVXJHLE9BQU8sQ0FBQyxTQUFVcUssTUFBTSxFQUFFO3dDQUNwRVAsS0FBSzs0Q0FBQ3pEO3lDQUFTLEVBQUVwSSxNQUFNb00sUUFBUXpNLE9BQU8sQ0FBQyxlQUFleUIsTUFBTSxDQUFDZ0wsUUFBUSxJQUFJbkI7b0NBQzNFO2dDQUNGOzRCQUNGLE9BQU87Z0NBQ0xZLEtBQUtSLE1BQU1yTCxLQUFLaUw7NEJBQ2xCLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUVEdkksTUFBTSxJQUFJLENBQUMrSCxpQkFBaUIsQ0FBQy9ILEtBQUt1RyxNQUFNdEosU0FBUzRJLFVBQVVXO29CQUMzRCxJQUFJUyxXQUFXakgsUUFBUTFDLE9BQU8sSUFBSSxDQUFDTCxPQUFPLENBQUMwTSwyQkFBMkIsRUFBRTNKLE1BQU0sR0FBR3RCLE1BQU0sQ0FBQ21JLFdBQVcsS0FBS25JLE1BQU0sQ0FBQ3BCO29CQUMvRyxJQUFJMkosV0FBVyxJQUFJLENBQUNoSyxPQUFPLENBQUMyTSxzQkFBc0IsRUFBRTVKLE1BQU0sSUFBSSxDQUFDL0MsT0FBTyxDQUFDMk0sc0JBQXNCLENBQUM1SjtnQkFDaEcsQ0FBQztnQkFFRCxPQUFPQTtZQUNUO1FBQ0Y7UUFBRztZQUNEMUMsS0FBSztZQUNMQyxPQUFPLFNBQVN3SyxrQkFBa0IvSCxHQUFHLEVBQUUxQyxHQUFHLEVBQUVMLE9BQU8sRUFBRTRJLFFBQVEsRUFBRVcsT0FBTyxFQUFFO2dCQUN0RSxJQUFJcUQsU0FBUyxJQUFJO2dCQUVqQixJQUFJLElBQUksQ0FBQ3JDLFVBQVUsSUFBSSxJQUFJLENBQUNBLFVBQVUsQ0FBQ3NDLEtBQUssRUFBRTtvQkFDNUM5SixNQUFNLElBQUksQ0FBQ3dILFVBQVUsQ0FBQ3NDLEtBQUssQ0FBQzlKLEtBQUsvQyxTQUFTNEksU0FBU2tFLE9BQU8sRUFBRWxFLFNBQVNtRSxNQUFNLEVBQUVuRSxTQUFTb0IsT0FBTyxFQUFFO3dCQUM3RnBCLFVBQVVBO29CQUNaO2dCQUNGLE9BQU8sSUFBSSxDQUFDNUksUUFBUWdOLGlCQUFpQixFQUFFO29CQUNyQyxJQUFJaE4sUUFBUTJJLGFBQWEsRUFBRSxJQUFJLENBQUNNLFlBQVksQ0FBQzdJLElBQUksQ0FBQ3RCLG1GQUFhQSxDQUFDLENBQUMsR0FBR2tCLFNBQVM7d0JBQzNFMkksZUFBZTdKLG1GQUFhQSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNrQixPQUFPLENBQUMySSxhQUFhLEVBQUUzSSxRQUFRMkksYUFBYTtvQkFDcEY7b0JBQ0EsSUFBSXNFLGtCQUFrQmpOLFFBQVEySSxhQUFhLElBQUkzSSxRQUFRMkksYUFBYSxDQUFDc0UsZUFBZSxJQUFJLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQzJJLGFBQWEsQ0FBQ3NFLGVBQWU7b0JBQ2xJLElBQUlDO29CQUVKLElBQUlELGlCQUFpQjt3QkFDbkIsSUFBSUUsS0FBS3BLLElBQUlpRyxLQUFLLENBQUMsSUFBSSxDQUFDQyxZQUFZLENBQUNDLGFBQWE7d0JBQ2xEZ0UsVUFBVUMsTUFBTUEsR0FBR2pOLE1BQU07b0JBQzNCLENBQUM7b0JBRUQsSUFBSWlGLE9BQU9uRixRQUFRaUUsT0FBTyxJQUFJLE9BQU9qRSxRQUFRaUUsT0FBTyxLQUFLLFdBQVdqRSxRQUFRaUUsT0FBTyxHQUFHakUsT0FBTztvQkFDN0YsSUFBSSxJQUFJLENBQUNBLE9BQU8sQ0FBQzJJLGFBQWEsQ0FBQ3lFLGdCQUFnQixFQUFFakksT0FBT3JHLG1GQUFhQSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNrQixPQUFPLENBQUMySSxhQUFhLENBQUN5RSxnQkFBZ0IsRUFBRWpJO29CQUN2SHBDLE1BQU0sSUFBSSxDQUFDa0csWUFBWSxDQUFDb0UsV0FBVyxDQUFDdEssS0FBS29DLE1BQU1uRixRQUFRNkcsR0FBRyxJQUFJLElBQUksQ0FBQzRCLFFBQVEsRUFBRXpJO29CQUU3RSxJQUFJaU4saUJBQWlCO3dCQUNuQixJQUFJSyxLQUFLdkssSUFBSWlHLEtBQUssQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsYUFBYTt3QkFDbEQsSUFBSXFFLFVBQVVELE1BQU1BLEdBQUdwTixNQUFNO3dCQUM3QixJQUFJZ04sVUFBVUssU0FBU3ZOLFFBQVF3TixJQUFJLEdBQUcsS0FBSztvQkFDN0MsQ0FBQztvQkFFRCxJQUFJeE4sUUFBUXdOLElBQUksS0FBSyxLQUFLLEVBQUV6SyxNQUFNLElBQUksQ0FBQ2tHLFlBQVksQ0FBQ3VFLElBQUksQ0FBQ3pLLEtBQUssV0FBWTt3QkFDeEUsSUFBSyxJQUFJbkMsT0FBT1gsVUFBVUMsTUFBTSxFQUFFVixPQUFPLElBQUlxQixNQUFNRCxPQUFPRSxPQUFPLEdBQUdBLE9BQU9GLE1BQU1FLE9BQVE7NEJBQ3ZGdEIsSUFBSSxDQUFDc0IsS0FBSyxHQUFHYixTQUFTLENBQUNhLEtBQUs7d0JBQzlCO3dCQUVBLElBQUl5SSxXQUFXQSxPQUFPLENBQUMsRUFBRSxLQUFLL0osSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDUSxRQUFReU4sT0FBTyxFQUFFOzRCQUN6RGIsT0FBT3BNLE1BQU0sQ0FBQ2QsSUFBSSxDQUFDLDZDQUE2QytCLE1BQU0sQ0FBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYWlDLE1BQU0sQ0FBQ3BCLEdBQUcsQ0FBQyxFQUFFOzRCQUUxRyxPQUFPLElBQUk7d0JBQ2IsQ0FBQzt3QkFFRCxPQUFPdU0sT0FBT3ZELFNBQVMsQ0FBQ3hKLEtBQUssQ0FBQytNLFFBQVFwTixLQUFLaUMsTUFBTSxDQUFDOzRCQUFDcEI7eUJBQUk7b0JBQ3pELEdBQUdMO29CQUNILElBQUlBLFFBQVEySSxhQUFhLEVBQUUsSUFBSSxDQUFDTSxZQUFZLENBQUN5RSxLQUFLO2dCQUNwRCxDQUFDO2dCQUVELElBQUlDLGNBQWMzTixRQUFRMk4sV0FBVyxJQUFJLElBQUksQ0FBQzNOLE9BQU8sQ0FBQzJOLFdBQVc7Z0JBQ2pFLElBQUlDLHFCQUFxQixPQUFPRCxnQkFBZ0IsV0FBVztvQkFBQ0E7aUJBQVksR0FBR0EsV0FBVztnQkFFdEYsSUFBSTVLLFFBQVE1QyxhQUFhNEMsUUFBUSxJQUFJLElBQUk2SyxzQkFBc0JBLG1CQUFtQjFOLE1BQU0sSUFBSUYsUUFBUTZOLGtCQUFrQixLQUFLLEtBQUssRUFBRTtvQkFDaEk5SyxNQUFNNkUsY0FBY0ssTUFBTSxDQUFDMkYsb0JBQW9CN0ssS0FBSzFDLEtBQUssSUFBSSxDQUFDTCxPQUFPLElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUM4Tix1QkFBdUIsR0FBR2hQLG1GQUFhQSxDQUFDO3dCQUM1SGlQLGNBQWNuRjtvQkFDaEIsR0FBRzVJLFdBQVdBLE9BQU8sRUFBRSxJQUFJO2dCQUM3QixDQUFDO2dCQUVELE9BQU8rQztZQUNUO1FBQ0Y7UUFBRztZQUNEMUMsS0FBSztZQUNMQyxPQUFPLFNBQVM2QyxRQUFRbUcsSUFBSSxFQUFFO2dCQUM1QixJQUFJMEUsU0FBUyxJQUFJO2dCQUVqQixJQUFJaE8sVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJZ087Z0JBQ0osSUFBSWpFO2dCQUNKLElBQUlFO2dCQUNKLElBQUk0QztnQkFDSixJQUFJQztnQkFDSixJQUFJLE9BQU96RCxTQUFTLFVBQVVBLE9BQU87b0JBQUNBO2lCQUFLO2dCQUMzQ0EsS0FBS2xILE9BQU8sQ0FBQyxTQUFVc0MsQ0FBQyxFQUFFO29CQUN4QixJQUFJc0osT0FBT3pDLGFBQWEsQ0FBQzBDLFFBQVE7b0JBRWpDLElBQUlDLFlBQVlGLE9BQU9uRixjQUFjLENBQUNuRSxHQUFHMUU7b0JBRXpDLElBQUlLLE1BQU02TixVQUFVN04sR0FBRztvQkFDdkIySixVQUFVM0o7b0JBQ1YsSUFBSTBJLGFBQWFtRixVQUFVbkYsVUFBVTtvQkFDckMsSUFBSWlGLE9BQU9oTyxPQUFPLENBQUNtTyxVQUFVLEVBQUVwRixhQUFhQSxXQUFXdEgsTUFBTSxDQUFDdU0sT0FBT2hPLE9BQU8sQ0FBQ21PLFVBQVU7b0JBQ3ZGLElBQUluRCxzQkFBc0JoTCxRQUFRaUwsS0FBSyxLQUFLOUssYUFBYSxPQUFPSCxRQUFRaUwsS0FBSyxLQUFLO29CQUNsRixJQUFJbUQsdUJBQXVCcE8sUUFBUXlOLE9BQU8sS0FBS3ROLGFBQWEsT0FBT0gsUUFBUXlOLE9BQU8sS0FBSyxZQUFZek4sUUFBUXlOLE9BQU8sS0FBSztvQkFDdkgsSUFBSVksUUFBUXJPLFFBQVEwTCxJQUFJLEdBQUcxTCxRQUFRMEwsSUFBSSxHQUFHc0MsT0FBT3BDLGFBQWEsQ0FBQ0ssa0JBQWtCLENBQUNqTSxRQUFRNkcsR0FBRyxJQUFJbUgsT0FBT3ZGLFFBQVEsRUFBRXpJLFFBQVE4TCxXQUFXLENBQUM7b0JBQ3RJL0MsV0FBVzNHLE9BQU8sQ0FBQyxTQUFVaUUsRUFBRSxFQUFFO3dCQUMvQixJQUFJMkgsT0FBT3pDLGFBQWEsQ0FBQzBDLFFBQVE7d0JBQ2pDbEIsU0FBUzFHO3dCQUVULElBQUksQ0FBQ2dDLGdCQUFnQixDQUFDLEdBQUc1RyxNQUFNLENBQUM0TSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUs1TSxNQUFNLENBQUM0RSxJQUFJLElBQUkySCxPQUFPTSxLQUFLLElBQUlOLE9BQU9NLEtBQUssQ0FBQ0Msa0JBQWtCLElBQUksQ0FBQ1AsT0FBT00sS0FBSyxDQUFDQyxrQkFBa0IsQ0FBQ3hCLFNBQVM7NEJBQ3pKMUUsZ0JBQWdCLENBQUMsR0FBRzVHLE1BQU0sQ0FBQzRNLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSzVNLE1BQU0sQ0FBQzRFLElBQUksR0FBRyxJQUFJOzRCQUU1RDJILE9BQU94TixNQUFNLENBQUNkLElBQUksQ0FBQyxRQUFTK0IsTUFBTSxDQUFDdUksU0FBUyxxQkFBdUJ2SSxNQUFNLENBQUM0TSxNQUFNakYsSUFBSSxDQUFDLE9BQU8sd0NBQXlDM0gsTUFBTSxDQUFDc0wsUUFBUSx5QkFBMEI7d0JBQ2hMLENBQUM7d0JBRURzQixNQUFNak0sT0FBTyxDQUFDLFNBQVVvTSxJQUFJLEVBQUU7NEJBQzVCLElBQUlSLE9BQU96QyxhQUFhLENBQUMwQyxRQUFROzRCQUNqQ25CLFVBQVUwQjs0QkFDVixJQUFJQyxXQUFXcE87NEJBQ2YsSUFBSXFPLFlBQVk7Z0NBQUNEOzZCQUFTOzRCQUUxQixJQUFJVCxPQUFPekQsVUFBVSxJQUFJeUQsT0FBT3pELFVBQVUsQ0FBQ29FLGFBQWEsRUFBRTtnQ0FDeERYLE9BQU96RCxVQUFVLENBQUNvRSxhQUFhLENBQUNELFdBQVdyTyxLQUFLbU8sTUFBTW5JLElBQUlyRzs0QkFDNUQsT0FBTztnQ0FDTCxJQUFJNE87Z0NBQ0osSUFBSTVELHFCQUFxQjRELGVBQWVaLE9BQU81QyxjQUFjLENBQUNDLFNBQVMsQ0FBQ21ELE1BQU14TyxRQUFRaUwsS0FBSztnQ0FDM0YsSUFBSUQsdUJBQXVCb0Qsc0JBQXNCTSxVQUFVcE0sSUFBSSxDQUFDbU0sV0FBV0c7Z0NBQzNFLElBQUlSLHNCQUFzQk0sVUFBVXBNLElBQUksQ0FBQ21NLFlBQVksR0FBR2hOLE1BQU0sQ0FBQ3VNLE9BQU9oTyxPQUFPLENBQUM2TyxnQkFBZ0IsRUFBRXBOLE1BQU0sQ0FBQ3pCLFFBQVF5TixPQUFPO2dDQUN0SCxJQUFJekMscUJBQXFCMEQsVUFBVXBNLElBQUksQ0FBQ21NLFlBQVlHOzRCQUN0RCxDQUFDOzRCQUVELElBQUlFOzRCQUVKLE1BQU9BLGNBQWNKLFVBQVVLLEdBQUcsR0FBSTtnQ0FDcEMsSUFBSSxDQUFDZixPQUFPekMsYUFBYSxDQUFDMEMsUUFBUTtvQ0FDaEMvRCxlQUFlNEU7b0NBQ2ZiLFFBQVFELE9BQU9wSCxXQUFXLENBQUM0SCxNQUFNbkksSUFBSXlJLGFBQWE5TztnQ0FDcEQsQ0FBQzs0QkFDSDt3QkFDRjtvQkFDRjtnQkFDRjtnQkFDQSxPQUFPO29CQUNMK0MsS0FBS2tMO29CQUNMakUsU0FBU0E7b0JBQ1RFLGNBQWNBO29CQUNkNEMsU0FBU0E7b0JBQ1RDLFFBQVFBO2dCQUNWO1lBQ0Y7UUFDRjtRQUFHO1lBQ0QxTSxLQUFLO1lBQ0xDLE9BQU8sU0FBU2lMLGNBQWN4SSxHQUFHLEVBQUU7Z0JBQ2pDLE9BQU9BLFFBQVE1QyxhQUFhLENBQUUsRUFBQyxJQUFJLENBQUNILE9BQU8sQ0FBQ2dQLFVBQVUsSUFBSWpNLFFBQVEsSUFBSSxLQUFLLENBQUUsRUFBQyxJQUFJLENBQUMvQyxPQUFPLENBQUNpUCxpQkFBaUIsSUFBSWxNLFFBQVEsRUFBQztZQUMzSDtRQUNGO1FBQUc7WUFDRDFDLEtBQUs7WUFDTEMsT0FBTyxTQUFTc0csWUFBWTRILElBQUksRUFBRW5JLEVBQUUsRUFBRWhHLEdBQUcsRUFBRTtnQkFDekMsSUFBSUwsVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLElBQUksQ0FBQ3NLLFVBQVUsSUFBSSxJQUFJLENBQUNBLFVBQVUsQ0FBQzNELFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQzJELFVBQVUsQ0FBQzNELFdBQVcsQ0FBQzRILE1BQU1uSSxJQUFJaEcsS0FBS0w7Z0JBQ3RHLE9BQU8sSUFBSSxDQUFDa1AsYUFBYSxDQUFDdEksV0FBVyxDQUFDNEgsTUFBTW5JLElBQUloRyxLQUFLTDtZQUN2RDtRQUNGO0tBQUUsRUFBRTtRQUFDO1lBQ0hLLEtBQUs7WUFDTEMsT0FBTyxTQUFTNEssZ0JBQWdCbEwsT0FBTyxFQUFFO2dCQUN2QyxJQUFJTyxTQUFTO2dCQUViLElBQUssSUFBSTRPLFVBQVVuUCxRQUFTO29CQUMxQixJQUFJcUUsT0FBT0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ3hFLFNBQVNtUCxXQUFXNU8sV0FBVzRPLE9BQU9DLFNBQVMsQ0FBQyxHQUFHN08sT0FBT0wsTUFBTSxLQUFLQyxjQUFjSCxPQUFPLENBQUNtUCxPQUFPLEVBQUU7d0JBQzNJLE9BQU8sSUFBSTtvQkFDYixDQUFDO2dCQUNIO2dCQUVBLE9BQU8sS0FBSztZQUNkO1FBQ0Y7S0FBRTtJQUVGLE9BQU83RztBQUNULEVBQUV6RztBQUVGLFNBQVN3TixXQUFXQyxNQUFNLEVBQUU7SUFDMUIsT0FBT0EsT0FBT0MsTUFBTSxDQUFDLEdBQUdDLFdBQVcsS0FBS0YsT0FBT0csS0FBSyxDQUFDO0FBQ3ZEO0FBRUEsSUFBSUMsZUFBZSxXQUFZO0lBQzdCLFNBQVNBLGFBQWExUCxPQUFPLEVBQUU7UUFDN0JqQixxRkFBZUEsQ0FBQyxJQUFJLEVBQUUyUTtRQUV0QixJQUFJLENBQUMxUCxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDMlAsU0FBUyxHQUFHLElBQUksQ0FBQzNQLE9BQU8sQ0FBQzRQLGFBQWEsSUFBSSxLQUFLO1FBQ3BELElBQUksQ0FBQ0EsYUFBYSxHQUFHLElBQUksQ0FBQzVQLE9BQU8sQ0FBQzRQLGFBQWEsSUFBSSxLQUFLO1FBQ3hELElBQUksQ0FBQ3BQLE1BQU0sR0FBR29CLFdBQVdGLE1BQU0sQ0FBQztJQUNsQztJQUVBMUMsa0ZBQVlBLENBQUMwUSxjQUFjO1FBQUM7WUFDMUJyUCxLQUFLO1lBQ0xDLE9BQU8sU0FBU3VQLHNCQUFzQnJCLElBQUksRUFBRTtnQkFDMUMsSUFBSSxDQUFDQSxRQUFRQSxLQUFLeEssT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUk7Z0JBQy9DLElBQUk4TCxJQUFJdEIsS0FBS3JNLEtBQUssQ0FBQztnQkFDbkIsSUFBSTJOLEVBQUU1UCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUk7Z0JBQy9CNFAsRUFBRWYsR0FBRztnQkFDTCxJQUFJZSxDQUFDLENBQUNBLEVBQUU1UCxNQUFNLEdBQUcsRUFBRSxDQUFDNEosV0FBVyxPQUFPLEtBQUssT0FBTyxJQUFJO2dCQUN0RCxPQUFPLElBQUksQ0FBQ2lHLGtCQUFrQixDQUFDRCxFQUFFMUcsSUFBSSxDQUFDO1lBQ3hDO1FBQ0Y7UUFBRztZQUNEL0ksS0FBSztZQUNMQyxPQUFPLFNBQVMwUCx3QkFBd0J4QixJQUFJLEVBQUU7Z0JBQzVDLElBQUksQ0FBQ0EsUUFBUUEsS0FBS3hLLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBT3dLO2dCQUMzQyxJQUFJc0IsSUFBSXRCLEtBQUtyTSxLQUFLLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDNE4sa0JBQWtCLENBQUNELENBQUMsQ0FBQyxFQUFFO1lBQ3JDO1FBQ0Y7UUFBRztZQUNEelAsS0FBSztZQUNMQyxPQUFPLFNBQVN5UCxtQkFBbUJ2QixJQUFJLEVBQUU7Z0JBQ3ZDLElBQUksT0FBT0EsU0FBUyxZQUFZQSxLQUFLeEssT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHO29CQUN0RCxJQUFJaU0sZUFBZTt3QkFBQzt3QkFBUTt3QkFBUTt3QkFBUTt3QkFBUTt3QkFBUTt3QkFBUTtxQkFBTztvQkFDM0UsSUFBSUgsSUFBSXRCLEtBQUtyTSxLQUFLLENBQUM7b0JBRW5CLElBQUksSUFBSSxDQUFDbkMsT0FBTyxDQUFDa1EsWUFBWSxFQUFFO3dCQUM3QkosSUFBSUEsRUFBRUssR0FBRyxDQUFDLFNBQVVDLElBQUksRUFBRTs0QkFDeEIsT0FBT0EsS0FBS3RHLFdBQVc7d0JBQ3pCO29CQUNGLE9BQU8sSUFBSWdHLEVBQUU1UCxNQUFNLEtBQUssR0FBRzt3QkFDekI0UCxDQUFDLENBQUMsRUFBRSxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDaEcsV0FBVzt3QkFDdkJnRyxDQUFDLENBQUMsRUFBRSxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDTixXQUFXO3dCQUN2QixJQUFJUyxhQUFhak0sT0FBTyxDQUFDOEwsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2hHLFdBQVcsTUFBTSxDQUFDLEdBQUdnRyxDQUFDLENBQUMsRUFBRSxHQUFHVCxXQUFXUyxDQUFDLENBQUMsRUFBRSxDQUFDaEcsV0FBVztvQkFDdkYsT0FBTyxJQUFJZ0csRUFBRTVQLE1BQU0sS0FBSyxHQUFHO3dCQUN6QjRQLENBQUMsQ0FBQyxFQUFFLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUNoRyxXQUFXO3dCQUN2QixJQUFJZ0csQ0FBQyxDQUFDLEVBQUUsQ0FBQzVQLE1BQU0sS0FBSyxHQUFHNFAsQ0FBQyxDQUFDLEVBQUUsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQ04sV0FBVzt3QkFDOUMsSUFBSU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTQSxDQUFDLENBQUMsRUFBRSxDQUFDNVAsTUFBTSxLQUFLLEdBQUc0UCxDQUFDLENBQUMsRUFBRSxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDTixXQUFXO3dCQUNoRSxJQUFJUyxhQUFhak0sT0FBTyxDQUFDOEwsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2hHLFdBQVcsTUFBTSxDQUFDLEdBQUdnRyxDQUFDLENBQUMsRUFBRSxHQUFHVCxXQUFXUyxDQUFDLENBQUMsRUFBRSxDQUFDaEcsV0FBVzt3QkFDckYsSUFBSW1HLGFBQWFqTSxPQUFPLENBQUM4TCxDQUFDLENBQUMsRUFBRSxDQUFDaEcsV0FBVyxNQUFNLENBQUMsR0FBR2dHLENBQUMsQ0FBQyxFQUFFLEdBQUdULFdBQVdTLENBQUMsQ0FBQyxFQUFFLENBQUNoRyxXQUFXO29CQUN2RixDQUFDO29CQUVELE9BQU9nRyxFQUFFMUcsSUFBSSxDQUFDO2dCQUNoQixDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUFDcEosT0FBTyxDQUFDcVEsU0FBUyxJQUFJLElBQUksQ0FBQ3JRLE9BQU8sQ0FBQ2tRLFlBQVksR0FBRzFCLEtBQUsxRSxXQUFXLEtBQUswRSxJQUFJO1lBQ3hGO1FBQ0Y7UUFBRztZQUNEbk8sS0FBSztZQUNMQyxPQUFPLFNBQVNnUSxjQUFjOUIsSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUNoTyxNQUFNLENBQUNZLFNBQVMsQ0FBQywrQkFBK0I7Z0JBQ3JELE9BQU8sSUFBSSxDQUFDbVAsZUFBZSxDQUFDL0I7WUFDOUI7UUFDRjtRQUFHO1lBQ0RuTyxLQUFLO1lBQ0xDLE9BQU8sU0FBU2lRLGdCQUFnQi9CLElBQUksRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUN4TyxPQUFPLENBQUN3USxJQUFJLEtBQUssa0JBQWtCLElBQUksQ0FBQ3hRLE9BQU8sQ0FBQ3lRLHdCQUF3QixFQUFFO29CQUNqRmpDLE9BQU8sSUFBSSxDQUFDd0IsdUJBQXVCLENBQUN4QjtnQkFDdEMsQ0FBQztnQkFFRCxPQUFPLENBQUMsSUFBSSxDQUFDb0IsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDQSxhQUFhLENBQUMxUCxNQUFNLElBQUksSUFBSSxDQUFDMFAsYUFBYSxDQUFDNUwsT0FBTyxDQUFDd0ssUUFBUSxDQUFDO1lBQ2xHO1FBQ0Y7UUFBRztZQUNEbk8sS0FBSztZQUNMQyxPQUFPLFNBQVNvUSxzQkFBc0JyQyxLQUFLLEVBQUU7Z0JBQzNDLElBQUluTSxRQUFRLElBQUk7Z0JBRWhCLElBQUksQ0FBQ21NLE9BQU8sT0FBTyxJQUFJO2dCQUN2QixJQUFJSjtnQkFDSkksTUFBTWpNLE9BQU8sQ0FBQyxTQUFVb00sSUFBSSxFQUFFO29CQUM1QixJQUFJUCxPQUFPO29CQUVYLElBQUkwQyxhQUFhek8sTUFBTTZOLGtCQUFrQixDQUFDdkI7b0JBRTFDLElBQUksQ0FBQ3RNLE1BQU1sQyxPQUFPLENBQUM0UCxhQUFhLElBQUkxTixNQUFNcU8sZUFBZSxDQUFDSSxhQUFhMUMsUUFBUTBDO2dCQUNqRjtnQkFFQSxJQUFJLENBQUMxQyxTQUFTLElBQUksQ0FBQ2pPLE9BQU8sQ0FBQzRQLGFBQWEsRUFBRTtvQkFDeEN2QixNQUFNak0sT0FBTyxDQUFDLFNBQVVvTSxJQUFJLEVBQUU7d0JBQzVCLElBQUlQLE9BQU87d0JBRVgsSUFBSTJDLFVBQVUxTyxNQUFNOE4sdUJBQXVCLENBQUN4Qjt3QkFFNUMsSUFBSXRNLE1BQU1xTyxlQUFlLENBQUNLLFVBQVUsT0FBTzNDLFFBQVEyQzt3QkFDbkQzQyxRQUFRL0wsTUFBTWxDLE9BQU8sQ0FBQzRQLGFBQWEsQ0FBQ2lCLElBQUksQ0FBQyxTQUFVQyxZQUFZLEVBQUU7NEJBQy9ELElBQUlBLGFBQWE5TSxPQUFPLENBQUM0TSxhQUFhLEdBQUcsT0FBT0U7d0JBQ2xEO29CQUNGO2dCQUNGLENBQUM7Z0JBRUQsSUFBSSxDQUFDN0MsT0FBT0EsUUFBUSxJQUFJLENBQUNwQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM3TCxPQUFPLENBQUM4TCxXQUFXLENBQUMsQ0FBQyxFQUFFO2dCQUN0RSxPQUFPbUM7WUFDVDtRQUNGO1FBQUc7WUFDRDVOLEtBQUs7WUFDTEMsT0FBTyxTQUFTdUwsaUJBQWlCa0YsU0FBUyxFQUFFdkMsSUFBSSxFQUFFO2dCQUNoRCxJQUFJLENBQUN1QyxXQUFXLE9BQU8sRUFBRTtnQkFDekIsSUFBSSxPQUFPQSxjQUFjLFlBQVlBLFlBQVlBLFVBQVV2QztnQkFDM0QsSUFBSSxPQUFPdUMsY0FBYyxVQUFVQSxZQUFZO29CQUFDQTtpQkFBVTtnQkFDMUQsSUFBSTFNLE9BQU9DLFNBQVMsQ0FBQzRDLFFBQVEsQ0FBQ3JILEtBQUssQ0FBQ2tSLGVBQWUsa0JBQWtCLE9BQU9BO2dCQUM1RSxJQUFJLENBQUN2QyxNQUFNLE9BQU91QyxTQUFTLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQzVDLElBQUk5QyxRQUFROEMsU0FBUyxDQUFDdkMsS0FBSztnQkFDM0IsSUFBSSxDQUFDUCxPQUFPQSxRQUFROEMsU0FBUyxDQUFDLElBQUksQ0FBQ2xCLHFCQUFxQixDQUFDckIsTUFBTTtnQkFDL0QsSUFBSSxDQUFDUCxPQUFPQSxRQUFROEMsU0FBUyxDQUFDLElBQUksQ0FBQ2hCLGtCQUFrQixDQUFDdkIsTUFBTTtnQkFDNUQsSUFBSSxDQUFDUCxPQUFPQSxRQUFROEMsU0FBUyxDQUFDLElBQUksQ0FBQ2YsdUJBQXVCLENBQUN4QixNQUFNO2dCQUNqRSxJQUFJLENBQUNQLE9BQU9BLFFBQVE4QyxTQUFTLENBQUMsVUFBVTtnQkFDeEMsT0FBTzlDLFNBQVMsRUFBRTtZQUNwQjtRQUNGO1FBQUc7WUFDRDVOLEtBQUs7WUFDTEMsT0FBTyxTQUFTMkwsbUJBQW1CdUMsSUFBSSxFQUFFd0MsWUFBWSxFQUFFO2dCQUNyRCxJQUFJeEgsU0FBUyxJQUFJO2dCQUVqQixJQUFJeUgsZ0JBQWdCLElBQUksQ0FBQ3BGLGdCQUFnQixDQUFDbUYsZ0JBQWdCLElBQUksQ0FBQ2hSLE9BQU8sQ0FBQzhMLFdBQVcsSUFBSSxFQUFFLEVBQUUwQztnQkFDMUYsSUFBSUgsUUFBUSxFQUFFO2dCQUVkLElBQUk2QyxVQUFVLFNBQVNBLFFBQVFDLENBQUMsRUFBRTtvQkFDaEMsSUFBSSxDQUFDQSxHQUFHO29CQUVSLElBQUkzSCxPQUFPK0csZUFBZSxDQUFDWSxJQUFJO3dCQUM3QjlDLE1BQU0vTCxJQUFJLENBQUM2TztvQkFDYixPQUFPO3dCQUNMM0gsT0FBT2hKLE1BQU0sQ0FBQ2QsSUFBSSxDQUFDLHVEQUF1RCtCLE1BQU0sQ0FBQzBQO29CQUNuRixDQUFDO2dCQUNIO2dCQUVBLElBQUksT0FBTzNDLFNBQVMsWUFBWUEsS0FBS3hLLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDdEQsSUFBSSxJQUFJLENBQUNoRSxPQUFPLENBQUN3USxJQUFJLEtBQUssZ0JBQWdCVSxRQUFRLElBQUksQ0FBQ25CLGtCQUFrQixDQUFDdkI7b0JBQzFFLElBQUksSUFBSSxDQUFDeE8sT0FBTyxDQUFDd1EsSUFBSSxLQUFLLGtCQUFrQixJQUFJLENBQUN4USxPQUFPLENBQUN3USxJQUFJLEtBQUssZUFBZVUsUUFBUSxJQUFJLENBQUNyQixxQkFBcUIsQ0FBQ3JCO29CQUNwSCxJQUFJLElBQUksQ0FBQ3hPLE9BQU8sQ0FBQ3dRLElBQUksS0FBSyxlQUFlVSxRQUFRLElBQUksQ0FBQ2xCLHVCQUF1QixDQUFDeEI7Z0JBQ2hGLE9BQU8sSUFBSSxPQUFPQSxTQUFTLFVBQVU7b0JBQ25DMEMsUUFBUSxJQUFJLENBQUNuQixrQkFBa0IsQ0FBQ3ZCO2dCQUNsQyxDQUFDO2dCQUVEeUMsY0FBYzdPLE9BQU8sQ0FBQyxTQUFVZ1AsRUFBRSxFQUFFO29CQUNsQyxJQUFJL0MsTUFBTXJLLE9BQU8sQ0FBQ29OLE1BQU0sR0FBR0YsUUFBUTFILE9BQU91RyxrQkFBa0IsQ0FBQ3FCO2dCQUMvRDtnQkFDQSxPQUFPL0M7WUFDVDtRQUNGO0tBQUU7SUFFRixPQUFPcUI7QUFDVDtBQUVBLElBQUkyQixPQUFPO0lBQUM7UUFDVjNGLE1BQU07WUFBQztZQUFPO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTztZQUFPO1lBQU07WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQVM7WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1NBQUs7UUFDdEk0RixJQUFJO1lBQUM7WUFBRztTQUFFO1FBQ1ZGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTztZQUFNO1lBQU87WUFBTztZQUFNO1lBQVM7WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtTQUFLO1FBQ3hZNEYsSUFBSTtZQUFDO1lBQUc7U0FBRTtRQUNWRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07U0FBSztRQUNuSjRGLElBQUk7WUFBQztTQUFFO1FBQ1BGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtTQUFLO1FBQ3ZENEYsSUFBSTtZQUFDO1lBQUc7WUFBRztTQUFFO1FBQ2JGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7U0FBSztRQUNaNEYsSUFBSTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7WUFBSTtTQUFJO1FBQ3pCRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1lBQU07U0FBSztRQUNsQjRGLElBQUk7WUFBQztZQUFHO1lBQUc7U0FBRTtRQUNiRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1lBQU87U0FBSztRQUNuQjRGLElBQUk7WUFBQztZQUFHO1lBQUc7U0FBRTtRQUNiRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQUs7UUFDWjRGLElBQUk7WUFBQztZQUFHO1lBQUc7WUFBRztTQUFFO1FBQ2hCRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQUs7UUFDWjRGLElBQUk7WUFBQztZQUFHO1NBQUU7UUFDVkYsSUFBSTtJQUNOO0lBQUc7UUFDRDFGLE1BQU07WUFBQztTQUFLO1FBQ1o0RixJQUFJO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFHO1FBQ3BCRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQUs7UUFDWjRGLElBQUk7WUFBQztZQUFHO1lBQUc7WUFBRztTQUFHO1FBQ2pCRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQUs7UUFDWjRGLElBQUk7WUFBQztZQUFHO1NBQUU7UUFDVkYsSUFBSTtJQUNOO0lBQUc7UUFDRDFGLE1BQU07WUFBQztTQUFLO1FBQ1o0RixJQUFJO1lBQUM7WUFBRztTQUFFO1FBQ1ZGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7U0FBSztRQUNaNEYsSUFBSTtZQUFDO1lBQUc7WUFBRztZQUFHO1NBQUU7UUFDaEJGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7U0FBSztRQUNaNEYsSUFBSTtZQUFDO1lBQUc7WUFBRztTQUFHO1FBQ2RGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7U0FBSztRQUNaNEYsSUFBSTtZQUFDO1lBQUc7WUFBRztTQUFFO1FBQ2JGLElBQUk7SUFDTjtJQUFHO1FBQ0QxRixNQUFNO1lBQUM7U0FBSztRQUNaNEYsSUFBSTtZQUFDO1lBQUc7U0FBRTtRQUNWRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQU07UUFDYjRGLElBQUk7WUFBQztZQUFHO1lBQUc7U0FBRTtRQUNiRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQUs7UUFDWjRGLElBQUk7WUFBQztZQUFHO1lBQUc7WUFBSTtTQUFHO1FBQ2xCRixJQUFJO0lBQ047SUFBRztRQUNEMUYsTUFBTTtZQUFDO1NBQUs7UUFDWjRGLElBQUk7WUFBQztZQUFHO1NBQUU7UUFDVkYsSUFBSTtJQUNOO0lBQUc7UUFDRDFGLE1BQU07WUFBQztTQUFLO1FBQ1o0RixJQUFJO1lBQUM7WUFBRztZQUFHO1NBQUc7UUFDZEYsSUFBSTtJQUNOO0lBQUc7UUFDRDFGLE1BQU07WUFBQztTQUFLO1FBQ1o0RixJQUFJO1lBQUM7WUFBRztZQUFHO1lBQUc7U0FBRTtRQUNoQkYsSUFBSTtJQUNOO0lBQUc7UUFDRDFGLE1BQU07WUFBQztZQUFNO1NBQUs7UUFDbEI0RixJQUFJO1lBQUM7WUFBRztZQUFHO1lBQUk7U0FBRztRQUNsQkYsSUFBSTtJQUNOO0NBQUU7QUFDRixJQUFJRyxxQkFBcUI7SUFDdkIsR0FBRyxTQUFTQyxFQUFFQyxDQUFDLEVBQUU7UUFDZixPQUFPQyxPQUFPRCxJQUFJO0lBQ3BCO0lBQ0EsR0FBRyxTQUFTRCxFQUFFQyxDQUFDLEVBQUU7UUFDZixPQUFPQyxPQUFPRCxLQUFLO0lBQ3JCO0lBQ0EsR0FBRyxTQUFTRCxFQUFFQyxDQUFDLEVBQUU7UUFDZixPQUFPO0lBQ1Q7SUFDQSxHQUFHLFNBQVNELEVBQUVDLENBQUMsRUFBRTtRQUNmLE9BQU9DLE9BQU9ELElBQUksTUFBTSxLQUFLQSxJQUFJLE9BQU8sS0FBSyxJQUFJQSxJQUFJLE1BQU0sS0FBS0EsSUFBSSxNQUFNLEtBQU1BLENBQUFBLElBQUksTUFBTSxNQUFNQSxJQUFJLE9BQU8sRUFBQyxJQUFLLElBQUksQ0FBQztJQUN4SDtJQUNBLEdBQUcsU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2YsT0FBT0MsT0FBT0QsS0FBSyxJQUFJLElBQUlBLEtBQUssSUFBSSxJQUFJQSxLQUFLLElBQUksSUFBSUEsSUFBSSxPQUFPLEtBQUtBLElBQUksT0FBTyxLQUFLLElBQUlBLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQztJQUNoSDtJQUNBLEdBQUcsU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2YsT0FBT0MsT0FBT0QsS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0EsS0FBSyxJQUFJLElBQUksQ0FBQztJQUNyRDtJQUNBLEdBQUcsU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2YsT0FBT0MsT0FBT0QsS0FBSyxJQUFJLElBQUlBLElBQUksTUFBTSxLQUFLQSxJQUFJLE1BQU0sS0FBTUEsQ0FBQUEsSUFBSSxNQUFNLE1BQU1BLElBQUksT0FBTyxFQUFDLElBQUssSUFBSSxDQUFDO0lBQ2xHO0lBQ0EsR0FBRyxTQUFTRCxFQUFFQyxDQUFDLEVBQUU7UUFDZixPQUFPQyxPQUFPRCxLQUFLLElBQUksSUFBSUEsS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0EsS0FBSyxLQUFLLElBQUksQ0FBQztJQUNuRTtJQUNBLEdBQUcsU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2YsT0FBT0MsT0FBT0QsS0FBSztJQUNyQjtJQUNBLElBQUksU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU9DLE9BQU9ELEtBQUssSUFBSSxJQUFJQSxLQUFLLElBQUksSUFBSUEsSUFBSSxJQUFJLElBQUlBLElBQUksS0FBSyxJQUFJLENBQUM7SUFDcEU7SUFDQSxJQUFJLFNBQVNELEVBQUVDLENBQUMsRUFBRTtRQUNoQixPQUFPQyxPQUFPRCxLQUFLLEtBQUtBLEtBQUssS0FBSyxJQUFJQSxLQUFLLEtBQUtBLEtBQUssS0FBSyxJQUFJQSxJQUFJLEtBQUtBLElBQUksS0FBSyxJQUFJLENBQUM7SUFDdkY7SUFDQSxJQUFJLFNBQVNELEVBQUVDLENBQUMsRUFBRTtRQUNoQixPQUFPQyxPQUFPRCxJQUFJLE1BQU0sS0FBS0EsSUFBSSxPQUFPO0lBQzFDO0lBQ0EsSUFBSSxTQUFTRCxFQUFFQyxDQUFDLEVBQUU7UUFDaEIsT0FBT0MsT0FBT0QsTUFBTTtJQUN0QjtJQUNBLElBQUksU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU9DLE9BQU9ELEtBQUssSUFBSSxJQUFJQSxLQUFLLElBQUksSUFBSUEsS0FBSyxJQUFJLElBQUksQ0FBQztJQUN4RDtJQUNBLElBQUksU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU9DLE9BQU9ELElBQUksTUFBTSxLQUFLQSxJQUFJLE9BQU8sS0FBSyxJQUFJQSxJQUFJLE1BQU0sS0FBTUEsQ0FBQUEsSUFBSSxNQUFNLE1BQU1BLElBQUksT0FBTyxFQUFDLElBQUssSUFBSSxDQUFDO0lBQ3pHO0lBQ0EsSUFBSSxTQUFTRCxFQUFFQyxDQUFDLEVBQUU7UUFDaEIsT0FBT0MsT0FBT0QsSUFBSSxNQUFNLEtBQUtBLElBQUksT0FBTyxLQUFLLElBQUlBLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDbEU7SUFDQSxJQUFJLFNBQVNELEVBQUVDLENBQUMsRUFBRTtRQUNoQixPQUFPQyxPQUFPRCxLQUFLLEtBQUtBLElBQUksTUFBTSxLQUFLQSxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUM7SUFDOUQ7SUFDQSxJQUFJLFNBQVNELEVBQUVDLENBQUMsRUFBRTtRQUNoQixPQUFPQyxPQUFPRCxLQUFLLElBQUksSUFBSUEsS0FBSyxJQUFJLElBQUksQ0FBQztJQUMzQztJQUNBLElBQUksU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU9DLE9BQU9ELEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUtBLElBQUksTUFBTSxLQUFLQSxJQUFJLE1BQU0sS0FBSyxJQUFJQSxJQUFJLE1BQU0sTUFBTUEsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDO0lBQzdHO0lBQ0EsSUFBSSxTQUFTRCxFQUFFQyxDQUFDLEVBQUU7UUFDaEIsT0FBT0MsT0FBT0QsS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0EsSUFBSSxNQUFNLEtBQUtBLElBQUksTUFBTSxLQUFLLElBQUksQ0FBQztJQUMxRTtJQUNBLElBQUksU0FBU0QsRUFBRUMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU9DLE9BQU9ELElBQUksT0FBTyxJQUFJLElBQUlBLElBQUksT0FBTyxJQUFJLElBQUlBLElBQUksT0FBTyxLQUFLQSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDMUY7SUFDQSxJQUFJLFNBQVNELEVBQUVDLENBQUMsRUFBRTtRQUNoQixPQUFPQyxPQUFPRCxLQUFLLElBQUksSUFBSUEsS0FBSyxJQUFJLElBQUksQ0FBQ0EsSUFBSSxLQUFLQSxJQUFJLEVBQUMsS0FBTUEsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQ2xGO0FBQ0Y7QUFFQSxTQUFTRSxjQUFjO0lBQ3JCLElBQUlDLFFBQVEsQ0FBQztJQUNiUCxLQUFLalAsT0FBTyxDQUFDLFNBQVV5UCxHQUFHLEVBQUU7UUFDMUJBLElBQUluRyxJQUFJLENBQUN0SixPQUFPLENBQUMsU0FBVUssQ0FBQyxFQUFFO1lBQzVCbVAsS0FBSyxDQUFDblAsRUFBRSxHQUFHO2dCQUNUcVAsU0FBU0QsSUFBSVAsRUFBRTtnQkFDZlMsU0FBU1Isa0JBQWtCLENBQUNNLElBQUlULEVBQUUsQ0FBQztZQUNyQztRQUNGO0lBQ0Y7SUFDQSxPQUFPUTtBQUNUO0FBRUEsSUFBSUksaUJBQWlCLFdBQVk7SUFDL0IsU0FBU0EsZUFBZXBHLGFBQWEsRUFBRTtRQUNyQyxJQUFJNUwsVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBGbEIscUZBQWVBLENBQUMsSUFBSSxFQUFFaVQ7UUFFdEIsSUFBSSxDQUFDcEcsYUFBYSxHQUFHQTtRQUNyQixJQUFJLENBQUM1TCxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDUSxNQUFNLEdBQUdvQixXQUFXRixNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDa1EsS0FBSyxHQUFHRDtJQUNmO0lBRUEzUyxrRkFBWUEsQ0FBQ2dULGdCQUFnQjtRQUFDO1lBQzVCM1IsS0FBSztZQUNMQyxPQUFPLFNBQVMyUixRQUFRcEwsR0FBRyxFQUFFcEMsR0FBRyxFQUFFO2dCQUNoQyxJQUFJLENBQUNtTixLQUFLLENBQUMvSyxJQUFJLEdBQUdwQztZQUNwQjtRQUNGO1FBQUc7WUFDRHBFLEtBQUs7WUFDTEMsT0FBTyxTQUFTNFIsUUFBUTFELElBQUksRUFBRTtnQkFDNUIsT0FBTyxJQUFJLENBQUNvRCxLQUFLLENBQUNwRCxLQUFLLElBQUksSUFBSSxDQUFDb0QsS0FBSyxDQUFDLElBQUksQ0FBQ2hHLGFBQWEsQ0FBQ29FLHVCQUF1QixDQUFDeEIsTUFBTTtZQUN6RjtRQUNGO1FBQUc7WUFDRG5PLEtBQUs7WUFDTEMsT0FBTyxTQUFTNlIsWUFBWTNELElBQUksRUFBRTtnQkFDaEMsSUFBSTRELE9BQU8sSUFBSSxDQUFDRixPQUFPLENBQUMxRDtnQkFDeEIsT0FBTzRELFFBQVFBLEtBQUtOLE9BQU8sQ0FBQzVSLE1BQU0sR0FBRztZQUN2QztRQUNGO1FBQUc7WUFDREcsS0FBSztZQUNMQyxPQUFPLFNBQVMrUixvQkFBb0I3RCxJQUFJLEVBQUVuTyxHQUFHLEVBQUU7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDbU0sV0FBVyxDQUFDZ0MsTUFBTTJCLEdBQUcsQ0FBQyxTQUFVMUQsTUFBTSxFQUFFO29CQUNsRCxPQUFPcE0sTUFBTW9NO2dCQUNmO1lBQ0Y7UUFDRjtRQUFHO1lBQ0RwTSxLQUFLO1lBQ0xDLE9BQU8sU0FBU2tNLFlBQVlnQyxJQUFJLEVBQUU7Z0JBQ2hDLElBQUl0TSxRQUFRLElBQUk7Z0JBRWhCLElBQUlrUSxPQUFPLElBQUksQ0FBQ0YsT0FBTyxDQUFDMUQ7Z0JBRXhCLElBQUksQ0FBQzRELE1BQU07b0JBQ1QsT0FBTyxFQUFFO2dCQUNYLENBQUM7Z0JBRUQsT0FBT0EsS0FBS04sT0FBTyxDQUFDM0IsR0FBRyxDQUFDLFNBQVVtQyxNQUFNLEVBQUU7b0JBQ3hDLE9BQU9wUSxNQUFNbUosU0FBUyxDQUFDbUQsTUFBTThEO2dCQUMvQjtZQUNGO1FBQ0Y7UUFBRztZQUNEalMsS0FBSztZQUNMQyxPQUFPLFNBQVMrSyxVQUFVbUQsSUFBSSxFQUFFdkQsS0FBSyxFQUFFO2dCQUNyQyxJQUFJekIsU0FBUyxJQUFJO2dCQUVqQixJQUFJNEksT0FBTyxJQUFJLENBQUNGLE9BQU8sQ0FBQzFEO2dCQUV4QixJQUFJNEQsTUFBTTtvQkFDUixJQUFJRyxNQUFNSCxLQUFLSSxLQUFLLEdBQUdKLEtBQUtMLE9BQU8sQ0FBQzlHLFNBQVNtSCxLQUFLTCxPQUFPLENBQUNVLEtBQUtDLEdBQUcsQ0FBQ3pILE9BQU87b0JBQzFFLElBQUl3QixTQUFTMkYsS0FBS04sT0FBTyxDQUFDUyxJQUFJO29CQUU5QixJQUFJLElBQUksQ0FBQ3ZTLE9BQU8sQ0FBQzJTLG9CQUFvQixJQUFJUCxLQUFLTixPQUFPLENBQUM1UixNQUFNLEtBQUssS0FBS2tTLEtBQUtOLE9BQU8sQ0FBQyxFQUFFLEtBQUssR0FBRzt3QkFDM0YsSUFBSXJGLFdBQVcsR0FBRzs0QkFDaEJBLFNBQVM7d0JBQ1gsT0FBTyxJQUFJQSxXQUFXLEdBQUc7NEJBQ3ZCQSxTQUFTO3dCQUNYLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJbUcsZUFBZSxTQUFTQSxlQUFlO3dCQUN6QyxPQUFPcEosT0FBT3hKLE9BQU8sQ0FBQzZTLE9BQU8sSUFBSXBHLE9BQU92RixRQUFRLEtBQUtzQyxPQUFPeEosT0FBTyxDQUFDNlMsT0FBTyxHQUFHcEcsT0FBT3ZGLFFBQVEsS0FBS3VGLE9BQU92RixRQUFRLEVBQUU7b0JBQ3JIO29CQUVBLElBQUksSUFBSSxDQUFDbEgsT0FBTyxDQUFDOFMsaUJBQWlCLEtBQUssTUFBTTt3QkFDM0MsSUFBSXJHLFdBQVcsR0FBRyxPQUFPO3dCQUN6QixJQUFJLE9BQU9BLFdBQVcsVUFBVSxPQUFPLFdBQVdoTCxNQUFNLENBQUNnTCxPQUFPdkYsUUFBUTt3QkFDeEUsT0FBTzBMO29CQUNULE9BQU8sSUFBSSxJQUFJLENBQUM1UyxPQUFPLENBQUM4UyxpQkFBaUIsS0FBSyxNQUFNO3dCQUNsRCxPQUFPRjtvQkFDVCxPQUFPLElBQUksSUFBSSxDQUFDNVMsT0FBTyxDQUFDMlMsb0JBQW9CLElBQUlQLEtBQUtOLE9BQU8sQ0FBQzVSLE1BQU0sS0FBSyxLQUFLa1MsS0FBS04sT0FBTyxDQUFDLEVBQUUsS0FBSyxHQUFHO3dCQUNsRyxPQUFPYztvQkFDVCxDQUFDO29CQUVELE9BQU8sSUFBSSxDQUFDNVMsT0FBTyxDQUFDNlMsT0FBTyxJQUFJTixJQUFJckwsUUFBUSxLQUFLLElBQUksQ0FBQ2xILE9BQU8sQ0FBQzZTLE9BQU8sR0FBR04sSUFBSXJMLFFBQVEsS0FBS3FMLElBQUlyTCxRQUFRLEVBQUU7Z0JBQ3hHLENBQUM7Z0JBRUQsSUFBSSxDQUFDMUcsTUFBTSxDQUFDZCxJQUFJLENBQUMsNkJBQTZCK0IsTUFBTSxDQUFDK007Z0JBQ3JELE9BQU87WUFDVDtRQUNGO0tBQUU7SUFFRixPQUFPd0Q7QUFDVDtBQUVBLElBQUllLGVBQWUsV0FBWTtJQUM3QixTQUFTQSxlQUFlO1FBQ3RCLElBQUkvUyxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEZsQixxRkFBZUEsQ0FBQyxJQUFJLEVBQUVnVTtRQUV0QixJQUFJLENBQUN2UyxNQUFNLEdBQUdvQixXQUFXRixNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDMUIsT0FBTyxHQUFHQTtRQUVmLElBQUksQ0FBQ2dULE1BQU0sR0FBR2hULFFBQVEySSxhQUFhLElBQUkzSSxRQUFRMkksYUFBYSxDQUFDcUssTUFBTSxJQUFJLFNBQVUxUyxLQUFLLEVBQUU7WUFDdEYsT0FBT0E7UUFDVDtRQUVBLElBQUksQ0FBQ0YsSUFBSSxDQUFDSjtJQUNaO0lBRUFoQixrRkFBWUEsQ0FBQytULGNBQWM7UUFBQztZQUMxQjFTLEtBQUs7WUFDTEMsT0FBTyxTQUFTRixPQUFPO2dCQUNyQixJQUFJSixVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQ0QsUUFBUTJJLGFBQWEsRUFBRTNJLFFBQVEySSxhQUFhLEdBQUc7b0JBQ2xEc0ssYUFBYSxJQUFJO2dCQUNuQjtnQkFDQSxJQUFJQyxRQUFRbFQsUUFBUTJJLGFBQWE7Z0JBQ2pDLElBQUksQ0FBQzdDLE1BQU0sR0FBR29OLE1BQU1wTixNQUFNLEtBQUszRixZQUFZK1MsTUFBTXBOLE1BQU0sR0FBR0EsTUFBTTtnQkFDaEUsSUFBSSxDQUFDbU4sV0FBVyxHQUFHQyxNQUFNRCxXQUFXLEtBQUs5UyxZQUFZK1MsTUFBTUQsV0FBVyxHQUFHLElBQUk7Z0JBQzdFLElBQUksQ0FBQ0UsbUJBQW1CLEdBQUdELE1BQU1DLG1CQUFtQixLQUFLaFQsWUFBWStTLE1BQU1DLG1CQUFtQixHQUFHLEtBQUs7Z0JBQ3RHLElBQUksQ0FBQzVTLE1BQU0sR0FBRzJTLE1BQU0zUyxNQUFNLEdBQUdvRixZQUFZdU4sTUFBTTNTLE1BQU0sSUFBSTJTLE1BQU1FLGFBQWEsSUFBSSxJQUFJO2dCQUNwRixJQUFJLENBQUMzRyxNQUFNLEdBQUd5RyxNQUFNekcsTUFBTSxHQUFHOUcsWUFBWXVOLE1BQU16RyxNQUFNLElBQUl5RyxNQUFNRyxhQUFhLElBQUksSUFBSTtnQkFDcEYsSUFBSSxDQUFDQyxlQUFlLEdBQUdKLE1BQU1JLGVBQWUsR0FBR0osTUFBTUksZUFBZSxHQUFHSixNQUFNSSxlQUFlLElBQUksR0FBRztnQkFDbkcsSUFBSSxDQUFDQyxjQUFjLEdBQUdMLE1BQU1NLGNBQWMsR0FBRyxLQUFLTixNQUFNSyxjQUFjLElBQUksR0FBRztnQkFDN0UsSUFBSSxDQUFDQyxjQUFjLEdBQUcsSUFBSSxDQUFDRCxjQUFjLEdBQUcsS0FBS0wsTUFBTU0sY0FBYyxJQUFJLEVBQUU7Z0JBQzNFLElBQUksQ0FBQ0MsYUFBYSxHQUFHUCxNQUFNTyxhQUFhLEdBQUc5TixZQUFZdU4sTUFBTU8sYUFBYSxJQUFJUCxNQUFNUSxvQkFBb0IsSUFBSS9OLFlBQVksTUFBTTtnQkFDOUgsSUFBSSxDQUFDZ08sYUFBYSxHQUFHVCxNQUFNUyxhQUFhLEdBQUdoTyxZQUFZdU4sTUFBTVMsYUFBYSxJQUFJVCxNQUFNVSxvQkFBb0IsSUFBSWpPLFlBQVksSUFBSTtnQkFDNUgsSUFBSSxDQUFDa08sdUJBQXVCLEdBQUdYLE1BQU1XLHVCQUF1QixHQUFHWCxNQUFNVyx1QkFBdUIsR0FBR1gsTUFBTVcsdUJBQXVCLElBQUksR0FBRztnQkFDbkksSUFBSSxDQUFDQyxXQUFXLEdBQUdaLE1BQU1ZLFdBQVcsR0FBR1osTUFBTVksV0FBVyxHQUFHLElBQUk7Z0JBQy9ELElBQUksQ0FBQ0MsWUFBWSxHQUFHYixNQUFNYSxZQUFZLEtBQUs1VCxZQUFZK1MsTUFBTWEsWUFBWSxHQUFHLEtBQUs7Z0JBQ2pGLElBQUksQ0FBQ0MsV0FBVztZQUNsQjtRQUNGO1FBQUc7WUFDRDNULEtBQUs7WUFDTEMsT0FBTyxTQUFTb04sUUFBUTtnQkFDdEIsSUFBSSxJQUFJLENBQUMxTixPQUFPLEVBQUUsSUFBSSxDQUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDSixPQUFPO1lBQzFDO1FBQ0Y7UUFBRztZQUNESyxLQUFLO1lBQ0xDLE9BQU8sU0FBUzBULGNBQWM7Z0JBQzVCLElBQUlDLFlBQVksR0FBR3hTLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixNQUFNLEVBQUUsU0FBU2tCLE1BQU0sQ0FBQyxJQUFJLENBQUNnTCxNQUFNO2dCQUNsRSxJQUFJLENBQUN5SCxNQUFNLEdBQUcsSUFBSUMsT0FBT0YsV0FBVztnQkFDcEMsSUFBSUcsb0JBQW9CLEdBQUczUyxNQUFNLENBQUMsSUFBSSxDQUFDbEIsTUFBTSxFQUFFa0IsTUFBTSxDQUFDLElBQUksQ0FBQzhSLGNBQWMsRUFBRSxTQUFTOVIsTUFBTSxDQUFDLElBQUksQ0FBQytSLGNBQWMsRUFBRS9SLE1BQU0sQ0FBQyxJQUFJLENBQUNnTCxNQUFNO2dCQUNsSSxJQUFJLENBQUM0SCxjQUFjLEdBQUcsSUFBSUYsT0FBT0MsbUJBQW1CO2dCQUNwRCxJQUFJRSxtQkFBbUIsR0FBRzdTLE1BQU0sQ0FBQyxJQUFJLENBQUNnUyxhQUFhLEVBQUUsU0FBU2hTLE1BQU0sQ0FBQyxJQUFJLENBQUNrUyxhQUFhO2dCQUN2RixJQUFJLENBQUN6SyxhQUFhLEdBQUcsSUFBSWlMLE9BQU9HLGtCQUFrQjtZQUNwRDtRQUNGO1FBQUc7WUFDRGpVLEtBQUs7WUFDTEMsT0FBTyxTQUFTK00sWUFBWXpILEdBQUcsRUFBRVQsSUFBSSxFQUFFMEIsR0FBRyxFQUFFN0csT0FBTyxFQUFFO29CQVExQ3VVLFlBQVQsU0FBU0EsVUFBVUMsR0FBRyxFQUFFO29CQUN0QixPQUFPQSxJQUFJdlEsT0FBTyxDQUFDLE9BQU87Z0JBQzVCO2dCQVRBLElBQUkvQixRQUFRLElBQUk7Z0JBRWhCLElBQUk4RztnQkFDSixJQUFJMUk7Z0JBQ0osSUFBSW1VO2dCQUNKLElBQUlyUCxjQUFjLElBQUksQ0FBQ3BGLE9BQU8sSUFBSSxJQUFJLENBQUNBLE9BQU8sQ0FBQzJJLGFBQWEsSUFBSSxJQUFJLENBQUMzSSxPQUFPLENBQUMySSxhQUFhLENBQUN5RSxnQkFBZ0IsSUFBSSxDQUFDO2dCQU1oSCxJQUFJc0gsZUFBZSxTQUFTQSxhQUFhclUsR0FBRyxFQUFFO29CQUM1QyxJQUFJQSxJQUFJMkQsT0FBTyxDQUFDOUIsTUFBTW9SLGVBQWUsSUFBSSxHQUFHO3dCQUMxQyxJQUFJelAsT0FBT3FCLG9CQUFvQkMsTUFBTUMsYUFBYS9FO3dCQUNsRCxPQUFPNkIsTUFBTTZSLFlBQVksR0FBRzdSLE1BQU04USxNQUFNLENBQUNuUCxNQUFNMUQsV0FBVzBHLE9BQU9oRCxJQUFJO29CQUN2RSxDQUFDO29CQUVELElBQUlpTSxJQUFJelAsSUFBSThCLEtBQUssQ0FBQ0QsTUFBTW9SLGVBQWU7b0JBQ3ZDLElBQUk1TyxJQUFJb0wsRUFBRTFMLEtBQUssR0FBR3VRLElBQUk7b0JBQ3RCLElBQUlDLElBQUk5RSxFQUFFMUcsSUFBSSxDQUFDbEgsTUFBTW9SLGVBQWUsRUFBRXFCLElBQUk7b0JBQzFDLE9BQU96UyxNQUFNOFEsTUFBTSxDQUFDOU4sb0JBQW9CQyxNQUFNQyxhQUFhVixJQUFJa1EsR0FBRy9OLEtBQUs3RztnQkFDekU7Z0JBRUEsSUFBSSxDQUFDZ1UsV0FBVztnQkFDaEIsSUFBSWEsOEJBQThCN1UsV0FBV0EsUUFBUTZVLDJCQUEyQixJQUFJLElBQUksQ0FBQzdVLE9BQU8sQ0FBQzZVLDJCQUEyQjtnQkFDNUgsSUFBSTVILGtCQUFrQmpOLFdBQVdBLFFBQVEySSxhQUFhLElBQUkzSSxRQUFRMkksYUFBYSxDQUFDc0UsZUFBZSxJQUFJLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQzJJLGFBQWEsQ0FBQ3NFLGVBQWU7Z0JBQzdJLElBQUk2SCxRQUFRO29CQUFDO3dCQUNYQyxPQUFPLElBQUksQ0FBQ1YsY0FBYzt3QkFDMUJXLFdBQVcsU0FBU0EsVUFBVVIsR0FBRyxFQUFFOzRCQUNqQyxPQUFPRCxVQUFVQzt3QkFDbkI7b0JBQ0Y7b0JBQUc7d0JBQ0RPLE9BQU8sSUFBSSxDQUFDYixNQUFNO3dCQUNsQmMsV0FBVyxTQUFTQSxVQUFVUixHQUFHLEVBQUU7NEJBQ2pDLE9BQU90UyxNQUFNK1EsV0FBVyxHQUFHc0IsVUFBVXJTLE1BQU00RCxNQUFNLENBQUMwTyxRQUFRRCxVQUFVQyxJQUFJO3dCQUMxRTtvQkFDRjtpQkFBRTtnQkFDRk0sTUFBTTFTLE9BQU8sQ0FBQyxTQUFVNlMsSUFBSSxFQUFFO29CQUM1QlIsV0FBVztvQkFFWCxNQUFPekwsUUFBUWlNLEtBQUtGLEtBQUssQ0FBQ0csSUFBSSxDQUFDdFAsS0FBTTt3QkFDbkN0RixRQUFRb1UsYUFBYTFMLEtBQUssQ0FBQyxFQUFFLENBQUMyTCxJQUFJO3dCQUVsQyxJQUFJclUsVUFBVUgsV0FBVzs0QkFDdkIsSUFBSSxPQUFPMFUsZ0NBQWdDLFlBQVk7Z0NBQ3JELElBQUlNLE9BQU9OLDRCQUE0QmpQLEtBQUtvRCxPQUFPaEo7Z0NBQ25ETSxRQUFRLE9BQU82VSxTQUFTLFdBQVdBLE9BQU8sRUFBRTs0QkFDOUMsT0FBTyxJQUFJbEksaUJBQWlCO2dDQUMxQjNNLFFBQVEwSSxLQUFLLENBQUMsRUFBRTtnQ0FDaEIsUUFBUzs0QkFDWCxPQUFPO2dDQUNMOUcsTUFBTTFCLE1BQU0sQ0FBQ2QsSUFBSSxDQUFDLDhCQUE4QitCLE1BQU0sQ0FBQ3VILEtBQUssQ0FBQyxFQUFFLEVBQUUsdUJBQXVCdkgsTUFBTSxDQUFDbUU7Z0NBRS9GdEYsUUFBUTs0QkFDVixDQUFDO3dCQUNILE9BQU8sSUFBSSxPQUFPQSxVQUFVLFlBQVksQ0FBQzRCLE1BQU1pUixtQkFBbUIsRUFBRTs0QkFDbEU3UyxRQUFRK0MsV0FBVy9DO3dCQUNyQixDQUFDO3dCQUVEc0YsTUFBTUEsSUFBSTNCLE9BQU8sQ0FBQytFLEtBQUssQ0FBQyxFQUFFLEVBQUVpTSxLQUFLRCxTQUFTLENBQUMxVTt3QkFDM0MyVSxLQUFLRixLQUFLLENBQUNLLFNBQVMsR0FBRzt3QkFDdkJYO3dCQUVBLElBQUlBLFlBQVl2UyxNQUFNNFIsV0FBVyxFQUFFOzRCQUNqQyxLQUFNO3dCQUNSLENBQUM7b0JBQ0g7Z0JBQ0Y7Z0JBQ0EsT0FBT2xPO1lBQ1Q7UUFDRjtRQUFHO1lBQ0R2RixLQUFLO1lBQ0xDLE9BQU8sU0FBU2tOLEtBQUs1SCxHQUFHLEVBQUV3TCxFQUFFLEVBQUU7b0JBWW5CaUUsbUJBQVQsU0FBU0EsaUJBQWlCaFYsR0FBRyxFQUFFaVYsZ0JBQWdCLEVBQUU7b0JBQy9DLElBQUlDLE1BQU0sSUFBSSxDQUFDMUIsdUJBQXVCO29CQUN0QyxJQUFJeFQsSUFBSTJELE9BQU8sQ0FBQ3VSLE9BQU8sR0FBRyxPQUFPbFY7b0JBQ2pDLElBQUk4USxJQUFJOVEsSUFBSThCLEtBQUssQ0FBQyxJQUFJZ1MsT0FBTyxHQUFHMVMsTUFBTSxDQUFDOFQsS0FBSztvQkFDNUMsSUFBSUMsZ0JBQWdCLElBQUkvVCxNQUFNLENBQUMwUCxDQUFDLENBQUMsRUFBRTtvQkFDbkM5USxNQUFNOFEsQ0FBQyxDQUFDLEVBQUU7b0JBQ1ZxRSxnQkFBZ0IsSUFBSSxDQUFDbkksV0FBVyxDQUFDbUksZUFBZUM7b0JBQ2hERCxnQkFBZ0JBLGNBQWN2UixPQUFPLENBQUMsTUFBTTtvQkFFNUMsSUFBSTt3QkFDRndSLGdCQUFnQkMsS0FBSzdJLEtBQUssQ0FBQzJJO3dCQUMzQixJQUFJRixrQkFBa0JHLGdCQUFnQjNXLG1GQUFhQSxDQUFDLENBQUMsR0FBR3dXLGtCQUFrQkc7b0JBQzVFLEVBQUUsT0FBT0UsR0FBRzt3QkFDVixJQUFJLENBQUNuVixNQUFNLENBQUNkLElBQUksQ0FBQyxvREFBb0QrQixNQUFNLENBQUNwQixNQUFNc1Y7d0JBQ2xGLE9BQU8sR0FBR2xVLE1BQU0sQ0FBQ3BCLEtBQUtvQixNQUFNLENBQUM4VCxLQUFLOVQsTUFBTSxDQUFDK1Q7b0JBQzNDO29CQUVBLE9BQU9DLGNBQWNuSyxZQUFZO29CQUNqQyxPQUFPakw7Z0JBQ1Q7Z0JBOUJBLElBQUltSixTQUFTLElBQUk7Z0JBRWpCLElBQUl4SixVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUkrSTtnQkFDSixJQUFJMUk7Z0JBRUosSUFBSW1WLGdCQUFnQjNXLG1GQUFhQSxDQUFDLENBQUMsR0FBR2tCO2dCQUV0Q3lWLGNBQWM1SCxrQkFBa0IsR0FBRyxLQUFLO2dCQUN4QyxPQUFPNEgsY0FBY25LLFlBQVk7Z0JBdUJqQyxNQUFPdEMsUUFBUSxJQUFJLENBQUNFLGFBQWEsQ0FBQ2dNLElBQUksQ0FBQ3RQLEtBQU07b0JBQzNDLElBQUlnUSxhQUFhLEVBQUU7b0JBQ25CLElBQUlDLFdBQVcsS0FBSztvQkFFcEIsSUFBSTdNLEtBQUssQ0FBQyxFQUFFLENBQUM4TSxRQUFRLENBQUMsSUFBSSxDQUFDeEMsZUFBZSxLQUFLLENBQUMsT0FBT3lDLElBQUksQ0FBQy9NLEtBQUssQ0FBQyxFQUFFLEdBQUc7d0JBQ3JFLElBQUlnTixJQUFJaE4sS0FBSyxDQUFDLEVBQUUsQ0FBQzdHLEtBQUssQ0FBQyxJQUFJLENBQUNtUixlQUFlLEVBQUVuRCxHQUFHLENBQUMsU0FBVThGLElBQUksRUFBRTs0QkFDL0QsT0FBT0EsS0FBS3RCLElBQUk7d0JBQ2xCO3dCQUNBM0wsS0FBSyxDQUFDLEVBQUUsR0FBR2dOLEVBQUU1UixLQUFLO3dCQUNsQndSLGFBQWFJO3dCQUNiSCxXQUFXLElBQUk7b0JBQ2pCLENBQUM7b0JBRUR2VixRQUFROFEsR0FBR2lFLGlCQUFpQjdRLElBQUksQ0FBQyxJQUFJLEVBQUV3RSxLQUFLLENBQUMsRUFBRSxDQUFDMkwsSUFBSSxJQUFJYyxnQkFBZ0JBO29CQUN4RSxJQUFJblYsU0FBUzBJLEtBQUssQ0FBQyxFQUFFLEtBQUtwRCxPQUFPLE9BQU90RixVQUFVLFVBQVUsT0FBT0E7b0JBQ25FLElBQUksT0FBT0EsVUFBVSxVQUFVQSxRQUFRK0MsV0FBVy9DO29CQUVsRCxJQUFJLENBQUNBLE9BQU87d0JBQ1YsSUFBSSxDQUFDRSxNQUFNLENBQUNkLElBQUksQ0FBQyxxQkFBcUIrQixNQUFNLENBQUN1SCxLQUFLLENBQUMsRUFBRSxFQUFFLGlCQUFpQnZILE1BQU0sQ0FBQ21FO3dCQUMvRXRGLFFBQVE7b0JBQ1YsQ0FBQztvQkFFRCxJQUFJdVYsVUFBVTt3QkFDWnZWLFFBQVFzVixXQUFXTSxNQUFNLENBQUMsU0FBVUMsQ0FBQyxFQUFFdkIsQ0FBQyxFQUFFOzRCQUN4QyxPQUFPcEwsT0FBT3dKLE1BQU0sQ0FBQ21ELEdBQUd2QixHQUFHNVUsUUFBUTZHLEdBQUcsRUFBRTdHO3dCQUMxQyxHQUFHTSxNQUFNcVUsSUFBSTtvQkFDZixDQUFDO29CQUVEL08sTUFBTUEsSUFBSTNCLE9BQU8sQ0FBQytFLEtBQUssQ0FBQyxFQUFFLEVBQUUxSTtvQkFDNUIsSUFBSSxDQUFDNFQsTUFBTSxDQUFDa0IsU0FBUyxHQUFHO2dCQUMxQjtnQkFFQSxPQUFPeFA7WUFDVDtRQUNGO0tBQUU7SUFFRixPQUFPbU47QUFDVDtBQUVBLFNBQVNxRCxPQUFPQyxHQUFHLEVBQUVDLElBQUksRUFBRTtJQUN6QixJQUFJckksUUFBUW9JLElBQUlyUyxPQUFPLENBQUNzUztJQUV4QixNQUFPckksVUFBVSxDQUFDLEVBQUc7UUFDbkJvSSxJQUFJMVAsTUFBTSxDQUFDc0gsT0FBTztRQUNsQkEsUUFBUW9JLElBQUlyUyxPQUFPLENBQUNzUztJQUN0QjtBQUNGO0FBRUEsSUFBSUMsWUFBWSxTQUFVblEsYUFBYSxFQUFFO0lBQ3ZDaEgsK0VBQVNBLENBQUNtWCxXQUFXblE7SUFFckIsU0FBU21RLFVBQVVDLE9BQU8sRUFBRUMsS0FBSyxFQUFFbE8sUUFBUSxFQUFFO1FBQzNDLElBQUlyRztRQUVKLElBQUlsQyxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEZsQixxRkFBZUEsQ0FBQyxJQUFJLEVBQUV3WDtRQUV0QnJVLFFBQVFqRCxnR0FBMEJBLENBQUMsSUFBSSxFQUFFQyxxRkFBZUEsQ0FBQ3FYLFdBQVcvUixJQUFJLENBQUMsSUFBSTtRQUU3RSxJQUFJdUIsUUFBUTtZQUNWbEUsYUFBYTJDLElBQUksQ0FBQ3JGLDRGQUFzQkEsQ0FBQytDO1FBQzNDLENBQUM7UUFFREEsTUFBTXNVLE9BQU8sR0FBR0E7UUFDaEJ0VSxNQUFNdVUsS0FBSyxHQUFHQTtRQUNkdlUsTUFBTXFHLFFBQVEsR0FBR0E7UUFDakJyRyxNQUFNMEosYUFBYSxHQUFHckQsU0FBU3FELGFBQWE7UUFDNUMxSixNQUFNbEMsT0FBTyxHQUFHQTtRQUNoQmtDLE1BQU0xQixNQUFNLEdBQUdvQixXQUFXRixNQUFNLENBQUM7UUFDakNRLE1BQU13VSxLQUFLLEdBQUcsQ0FBQztRQUNmeFUsTUFBTXlVLEtBQUssR0FBRyxFQUFFO1FBRWhCLElBQUl6VSxNQUFNc1UsT0FBTyxJQUFJdFUsTUFBTXNVLE9BQU8sQ0FBQ3BXLElBQUksRUFBRTtZQUN2QzhCLE1BQU1zVSxPQUFPLENBQUNwVyxJQUFJLENBQUNtSSxVQUFVdkksUUFBUXdXLE9BQU8sRUFBRXhXO1FBQ2hELENBQUM7UUFFRCxPQUFPa0M7SUFDVDtJQUVBbEQsa0ZBQVlBLENBQUN1WCxXQUFXO1FBQUM7WUFDdkJsVyxLQUFLO1lBQ0xDLE9BQU8sU0FBU3NXLFVBQVVDLFNBQVMsRUFBRTlOLFVBQVUsRUFBRS9JLE9BQU8sRUFBRThXLFFBQVEsRUFBRTtnQkFDbEUsSUFBSXROLFNBQVMsSUFBSTtnQkFFakIsSUFBSXVOLFNBQVMsRUFBRTtnQkFDZixJQUFJQyxVQUFVLEVBQUU7Z0JBQ2hCLElBQUlDLGtCQUFrQixFQUFFO2dCQUN4QixJQUFJQyxtQkFBbUIsRUFBRTtnQkFDekJMLFVBQVV6VSxPQUFPLENBQUMsU0FBVXlFLEdBQUcsRUFBRTtvQkFDL0IsSUFBSXNRLG1CQUFtQixJQUFJO29CQUMzQnBPLFdBQVczRyxPQUFPLENBQUMsU0FBVWlFLEVBQUUsRUFBRTt3QkFDL0IsSUFBSTJCLE9BQU8sR0FBR3ZHLE1BQU0sQ0FBQ29GLEtBQUssS0FBS3BGLE1BQU0sQ0FBQzRFO3dCQUV0QyxJQUFJLENBQUNyRyxRQUFRb1gsTUFBTSxJQUFJNU4sT0FBT2lOLEtBQUssQ0FBQ2xQLGlCQUFpQixDQUFDVixLQUFLUixLQUFLOzRCQUM5RG1ELE9BQU9rTixLQUFLLENBQUMxTyxLQUFLLEdBQUc7d0JBQ3ZCLE9BQU8sSUFBSXdCLE9BQU9rTixLQUFLLENBQUMxTyxLQUFLLEdBQUc7NkJBQVUsSUFBSXdCLE9BQU9rTixLQUFLLENBQUMxTyxLQUFLLEtBQUssR0FBRzs0QkFDdEUsSUFBSWdQLFFBQVFoVCxPQUFPLENBQUNnRSxRQUFRLEdBQUdnUCxRQUFRMVUsSUFBSSxDQUFDMEY7d0JBQzlDLE9BQU87NEJBQ0x3QixPQUFPa04sS0FBSyxDQUFDMU8sS0FBSyxHQUFHOzRCQUNyQm1QLG1CQUFtQixLQUFLOzRCQUN4QixJQUFJSCxRQUFRaFQsT0FBTyxDQUFDZ0UsUUFBUSxHQUFHZ1AsUUFBUTFVLElBQUksQ0FBQzBGOzRCQUM1QyxJQUFJK08sT0FBTy9TLE9BQU8sQ0FBQ2dFLFFBQVEsR0FBRytPLE9BQU96VSxJQUFJLENBQUMwRjs0QkFDMUMsSUFBSWtQLGlCQUFpQmxULE9BQU8sQ0FBQ3FDLE1BQU0sR0FBRzZRLGlCQUFpQjVVLElBQUksQ0FBQytEO3dCQUM5RCxDQUFDO29CQUNIO29CQUNBLElBQUksQ0FBQzhRLGtCQUFrQkYsZ0JBQWdCM1UsSUFBSSxDQUFDdUU7Z0JBQzlDO2dCQUVBLElBQUlrUSxPQUFPN1csTUFBTSxJQUFJOFcsUUFBUTlXLE1BQU0sRUFBRTtvQkFDbkMsSUFBSSxDQUFDeVcsS0FBSyxDQUFDclUsSUFBSSxDQUFDO3dCQUNkMFUsU0FBU0E7d0JBQ1RLLFFBQVEsQ0FBQzt3QkFDVEMsUUFBUSxFQUFFO3dCQUNWUixVQUFVQTtvQkFDWjtnQkFDRixDQUFDO2dCQUVELE9BQU87b0JBQ0xDLFFBQVFBO29CQUNSQyxTQUFTQTtvQkFDVEMsaUJBQWlCQTtvQkFDakJDLGtCQUFrQkE7Z0JBQ3BCO1lBQ0Y7UUFDRjtRQUFHO1lBQ0Q3VyxLQUFLO1lBQ0xDLE9BQU8sU0FBUytXLE9BQU9yUCxJQUFJLEVBQUV1UCxHQUFHLEVBQUVwUyxJQUFJLEVBQUU7Z0JBQ3RDLElBQUkxQixJQUFJdUUsS0FBSzdGLEtBQUssQ0FBQztnQkFDbkIsSUFBSTBFLE1BQU1wRCxDQUFDLENBQUMsRUFBRTtnQkFDZCxJQUFJNEMsS0FBSzVDLENBQUMsQ0FBQyxFQUFFO2dCQUNiLElBQUk4VCxLQUFLLElBQUksQ0FBQzdVLElBQUksQ0FBQyxpQkFBaUJtRSxLQUFLUixJQUFJa1I7Z0JBRTdDLElBQUlwUyxNQUFNO29CQUNSLElBQUksQ0FBQ3NSLEtBQUssQ0FBQ3RQLGlCQUFpQixDQUFDTixLQUFLUixJQUFJbEI7Z0JBQ3hDLENBQUM7Z0JBRUQsSUFBSSxDQUFDdVIsS0FBSyxDQUFDMU8sS0FBSyxHQUFHdVAsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDL0IsSUFBSUYsU0FBUyxDQUFDO2dCQUNkLElBQUksQ0FBQ1YsS0FBSyxDQUFDdlUsT0FBTyxDQUFDLFNBQVVvVixDQUFDLEVBQUU7b0JBQzlCMVMsU0FBUzBTLEVBQUVILE1BQU0sRUFBRTt3QkFBQ3hRO3FCQUFJLEVBQUVSO29CQUMxQitQLE9BQU9vQixFQUFFUixPQUFPLEVBQUVoUDtvQkFDbEIsSUFBSXVQLEtBQUtDLEVBQUVGLE1BQU0sQ0FBQ2hWLElBQUksQ0FBQ2lWO29CQUV2QixJQUFJQyxFQUFFUixPQUFPLENBQUM5VyxNQUFNLEtBQUssS0FBSyxDQUFDc1gsRUFBRUMsSUFBSSxFQUFFO3dCQUNyQ3BULE9BQU9pRixJQUFJLENBQUNrTyxFQUFFSCxNQUFNLEVBQUVqVixPQUFPLENBQUMsU0FBVUssQ0FBQyxFQUFFOzRCQUN6QyxJQUFJLENBQUM0VSxNQUFNLENBQUM1VSxFQUFFLEVBQUU0VSxNQUFNLENBQUM1VSxFQUFFLEdBQUcsRUFBRTs0QkFFOUIsSUFBSStVLEVBQUVILE1BQU0sQ0FBQzVVLEVBQUUsQ0FBQ3ZDLE1BQU0sRUFBRTtnQ0FDdEJzWCxFQUFFSCxNQUFNLENBQUM1VSxFQUFFLENBQUNMLE9BQU8sQ0FBQyxTQUFVaUUsRUFBRSxFQUFFO29DQUNoQyxJQUFJZ1IsTUFBTSxDQUFDNVUsRUFBRSxDQUFDdUIsT0FBTyxDQUFDcUMsTUFBTSxHQUFHZ1IsTUFBTSxDQUFDNVUsRUFBRSxDQUFDSCxJQUFJLENBQUMrRDtnQ0FDaEQ7NEJBQ0YsQ0FBQzt3QkFDSDt3QkFDQW1SLEVBQUVDLElBQUksR0FBRyxJQUFJO3dCQUViLElBQUlELEVBQUVGLE1BQU0sQ0FBQ3BYLE1BQU0sRUFBRTs0QkFDbkJzWCxFQUFFVixRQUFRLENBQUNVLEVBQUVGLE1BQU07d0JBQ3JCLE9BQU87NEJBQ0xFLEVBQUVWLFFBQVE7d0JBQ1osQ0FBQztvQkFDSCxDQUFDO2dCQUNIO2dCQUNBLElBQUksQ0FBQ3BVLElBQUksQ0FBQyxVQUFVMlU7Z0JBQ3BCLElBQUksQ0FBQ1YsS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxDQUFDblUsTUFBTSxDQUFDLFNBQVVnVixDQUFDLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQ0EsRUFBRUMsSUFBSTtnQkFDaEI7WUFDRjtRQUNGO1FBQUc7WUFDRHBYLEtBQUs7WUFDTEMsT0FBTyxTQUFTb1gsS0FBSzdRLEdBQUcsRUFBRVIsRUFBRSxFQUFFc1IsTUFBTSxFQUFFO2dCQUNwQyxJQUFJL0ssU0FBUyxJQUFJO2dCQUVqQixJQUFJZ0wsUUFBUTNYLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUM7Z0JBQ2pGLElBQUk0WCxPQUFPNVgsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRztnQkFDbEYsSUFBSTZXLFdBQVc3VyxVQUFVQyxNQUFNLEdBQUcsSUFBSUQsU0FBUyxDQUFDLEVBQUUsR0FBR0UsU0FBUztnQkFDOUQsSUFBSSxDQUFDMEcsSUFBSTNHLE1BQU0sRUFBRSxPQUFPNFcsU0FBUyxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxJQUFJLENBQUNOLE9BQU8sQ0FBQ21CLE9BQU8sQ0FBQzlRLEtBQUtSLElBQUksU0FBVWtSLEdBQUcsRUFBRXBTLElBQUksRUFBRTtvQkFDeEQsSUFBSW9TLE9BQU9wUyxRQUFReVMsUUFBUSxHQUFHO3dCQUM1QkUsV0FBVyxXQUFZOzRCQUNyQmxMLE9BQU84SyxJQUFJLENBQUNsVCxJQUFJLENBQUNvSSxRQUFRL0YsS0FBS1IsSUFBSXNSLFFBQVFDLFFBQVEsR0FBR0MsT0FBTyxHQUFHZjt3QkFDakUsR0FBR2U7d0JBQ0g7b0JBQ0YsQ0FBQztvQkFFRGYsU0FBU1MsS0FBS3BTO2dCQUNoQjtZQUNGO1FBQ0Y7UUFBRztZQUNEOUUsS0FBSztZQUNMQyxPQUFPLFNBQVN5WCxlQUFlbEIsU0FBUyxFQUFFOU4sVUFBVSxFQUFFO2dCQUNwRCxJQUFJaUYsU0FBUyxJQUFJO2dCQUVqQixJQUFJaE8sVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJNlcsV0FBVzdXLFVBQVVDLE1BQU0sR0FBRyxJQUFJRCxTQUFTLENBQUMsRUFBRSxHQUFHRSxTQUFTO2dCQUU5RCxJQUFJLENBQUMsSUFBSSxDQUFDcVcsT0FBTyxFQUFFO29CQUNqQixJQUFJLENBQUNoVyxNQUFNLENBQUNkLElBQUksQ0FBQztvQkFDakIsT0FBT29YLFlBQVlBO2dCQUNyQixDQUFDO2dCQUVELElBQUksT0FBT0QsY0FBYyxVQUFVQSxZQUFZLElBQUksQ0FBQ2pMLGFBQWEsQ0FBQ0ssa0JBQWtCLENBQUM0SztnQkFDckYsSUFBSSxPQUFPOU4sZUFBZSxVQUFVQSxhQUFhO29CQUFDQTtpQkFBVztnQkFDN0QsSUFBSWdPLFNBQVMsSUFBSSxDQUFDSCxTQUFTLENBQUNDLFdBQVc5TixZQUFZL0ksU0FBUzhXO2dCQUU1RCxJQUFJLENBQUNDLE9BQU9BLE1BQU0sQ0FBQzdXLE1BQU0sRUFBRTtvQkFDekIsSUFBSSxDQUFDNlcsT0FBT0MsT0FBTyxDQUFDOVcsTUFBTSxFQUFFNFc7b0JBQzVCLE9BQU8sSUFBSTtnQkFDYixDQUFDO2dCQUVEQyxPQUFPQSxNQUFNLENBQUMzVSxPQUFPLENBQUMsU0FBVTRGLElBQUksRUFBRTtvQkFDcENnRyxPQUFPZ0ssT0FBTyxDQUFDaFE7Z0JBQ2pCO1lBQ0Y7UUFDRjtRQUFHO1lBQ0QzSCxLQUFLO1lBQ0xDLE9BQU8sU0FBU2tRLEtBQUtxRyxTQUFTLEVBQUU5TixVQUFVLEVBQUUrTixRQUFRLEVBQUU7Z0JBQ3BELElBQUksQ0FBQ2lCLGNBQWMsQ0FBQ2xCLFdBQVc5TixZQUFZLENBQUMsR0FBRytOO1lBQ2pEO1FBQ0Y7UUFBRztZQUNEelcsS0FBSztZQUNMQyxPQUFPLFNBQVM4VyxPQUFPUCxTQUFTLEVBQUU5TixVQUFVLEVBQUUrTixRQUFRLEVBQUU7Z0JBQ3RELElBQUksQ0FBQ2lCLGNBQWMsQ0FBQ2xCLFdBQVc5TixZQUFZO29CQUN6Q3FPLFFBQVEsSUFBSTtnQkFDZCxHQUFHTjtZQUNMO1FBQ0Y7UUFBRztZQUNEelcsS0FBSztZQUNMQyxPQUFPLFNBQVMwWCxRQUFRaFEsSUFBSSxFQUFFO2dCQUM1QixJQUFJaVEsU0FBUyxJQUFJO2dCQUVqQixJQUFJMVgsU0FBU04sVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtnQkFDbkYsSUFBSXdELElBQUl1RSxLQUFLN0YsS0FBSyxDQUFDO2dCQUNuQixJQUFJMEUsTUFBTXBELENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUk0QyxLQUFLNUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDaVUsSUFBSSxDQUFDN1EsS0FBS1IsSUFBSSxRQUFRbEcsV0FBV0EsV0FBVyxTQUFVb1gsR0FBRyxFQUFFcFMsSUFBSSxFQUFFO29CQUNwRSxJQUFJb1MsS0FBS1UsT0FBT3pYLE1BQU0sQ0FBQ2QsSUFBSSxDQUFDLEdBQUcrQixNQUFNLENBQUNsQixRQUFRLHNCQUFzQmtCLE1BQU0sQ0FBQzRFLElBQUksa0JBQWtCNUUsTUFBTSxDQUFDb0YsS0FBSyxZQUFZMFE7b0JBQ3pILElBQUksQ0FBQ0EsT0FBT3BTLE1BQU04UyxPQUFPelgsTUFBTSxDQUFDakIsR0FBRyxDQUFDLEdBQUdrQyxNQUFNLENBQUNsQixRQUFRLHFCQUFxQmtCLE1BQU0sQ0FBQzRFLElBQUksa0JBQWtCNUUsTUFBTSxDQUFDb0YsTUFBTTFCO29CQUVySDhTLE9BQU9aLE1BQU0sQ0FBQ3JQLE1BQU11UCxLQUFLcFM7Z0JBQzNCO1lBQ0Y7UUFDRjtRQUFHO1lBQ0Q5RSxLQUFLO1lBQ0xDLE9BQU8sU0FBU2dNLFlBQVl1SyxTQUFTLEVBQUVqTixTQUFTLEVBQUV2SixHQUFHLEVBQUU4TCxhQUFhLEVBQUUrTCxRQUFRLEVBQUU7Z0JBQzlFLElBQUlsWSxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRXBGLElBQUksSUFBSSxDQUFDc0ksUUFBUSxDQUFDK0YsS0FBSyxJQUFJLElBQUksQ0FBQy9GLFFBQVEsQ0FBQytGLEtBQUssQ0FBQ0Msa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUNoRyxRQUFRLENBQUMrRixLQUFLLENBQUNDLGtCQUFrQixDQUFDM0UsWUFBWTtvQkFDdkgsSUFBSSxDQUFDcEosTUFBTSxDQUFDZCxJQUFJLENBQUMscUJBQXNCK0IsTUFBTSxDQUFDcEIsS0FBSyx3QkFBMEJvQixNQUFNLENBQUNtSSxXQUFXLHlCQUEwQjtvQkFDekg7Z0JBQ0YsQ0FBQztnQkFFRCxJQUFJdkosUUFBUUYsYUFBYUUsUUFBUSxJQUFJLElBQUlBLFFBQVEsSUFBSTtnQkFFckQsSUFBSSxJQUFJLENBQUNtVyxPQUFPLElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUM5VSxNQUFNLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQzhVLE9BQU8sQ0FBQzlVLE1BQU0sQ0FBQ21WLFdBQVdqTixXQUFXdkosS0FBSzhMLGVBQWUsSUFBSSxFQUFFck4sbUZBQWFBLENBQUMsQ0FBQyxHQUFHa0IsU0FBUzt3QkFDN0ZrWSxVQUFVQTtvQkFDWjtnQkFDRixDQUFDO2dCQUVELElBQUksQ0FBQ3JCLGFBQWEsQ0FBQ0EsU0FBUyxDQUFDLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDSixLQUFLLENBQUMzUCxXQUFXLENBQUMrUCxTQUFTLENBQUMsRUFBRSxFQUFFak4sV0FBV3ZKLEtBQUs4TDtZQUN2RDtRQUNGO0tBQUU7SUFFRixPQUFPb0s7QUFDVCxFQUFFMVU7QUFFRixTQUFTc1csTUFBTTtJQUNiLE9BQU87UUFDTDFYLE9BQU8sS0FBSztRQUNaMlgsZUFBZSxJQUFJO1FBQ25CL1IsSUFBSTtZQUFDO1NBQWM7UUFDbkJDLFdBQVc7WUFBQztTQUFjO1FBQzFCd0YsYUFBYTtZQUFDO1NBQU07UUFDcEJxQyxZQUFZLEtBQUs7UUFDakJ3QixXQUFXLEtBQUs7UUFDaEIwSSxzQkFBc0IsS0FBSztRQUMzQnpJLGVBQWUsS0FBSztRQUNwQmEsMEJBQTBCLEtBQUs7UUFDL0JELE1BQU07UUFDTjhILFNBQVMsS0FBSztRQUNkM0Ysc0JBQXNCLElBQUk7UUFDMUJwTSxjQUFjO1FBQ2R1QyxhQUFhO1FBQ2J5UCxpQkFBaUI7UUFDakIxSixrQkFBa0I7UUFDbEIySix5QkFBeUIsS0FBSztRQUM5QmxNLGFBQWEsS0FBSztRQUNsQmQsZUFBZSxLQUFLO1FBQ3BCTyxlQUFlO1FBQ2ZRLG9CQUFvQixJQUFJO1FBQ3hCSCxtQkFBbUIsS0FBSztRQUN4QnlJLDZCQUE2QixLQUFLO1FBQ2xDbEgsYUFBYSxLQUFLO1FBQ2xCRyx5QkFBeUIsS0FBSztRQUM5QmtCLFlBQVksSUFBSTtRQUNoQkMsbUJBQW1CLElBQUk7UUFDdkJ4RSxlQUFlLEtBQUs7UUFDcEJKLFlBQVksS0FBSztRQUNqQkssdUJBQXVCLEtBQUs7UUFDNUJpQyx3QkFBd0IsS0FBSztRQUM3QkQsNkJBQTZCLEtBQUs7UUFDbEM3Qyx5QkFBeUIsS0FBSztRQUM5Qkosa0NBQWtDLFNBQVN4QixPQUFPekksSUFBSSxFQUFFO1lBQ3RELElBQUlpWixNQUFNLENBQUM7WUFDWCxJQUFJNVosNkVBQU9BLENBQUNXLElBQUksQ0FBQyxFQUFFLE1BQU0sVUFBVWlaLE1BQU1qWixJQUFJLENBQUMsRUFBRTtZQUNoRCxJQUFJLE9BQU9BLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVWlaLElBQUluTixZQUFZLEdBQUc5TCxJQUFJLENBQUMsRUFBRTtZQUMzRCxJQUFJLE9BQU9BLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVWlaLElBQUlDLFlBQVksR0FBR2xaLElBQUksQ0FBQyxFQUFFO1lBRTNELElBQUlYLDZFQUFPQSxDQUFDVyxJQUFJLENBQUMsRUFBRSxNQUFNLFlBQVlYLDZFQUFPQSxDQUFDVyxJQUFJLENBQUMsRUFBRSxNQUFNLFVBQVU7Z0JBQ2xFLElBQUlRLFVBQVVSLElBQUksQ0FBQyxFQUFFLElBQUlBLElBQUksQ0FBQyxFQUFFO2dCQUNoQzZFLE9BQU9pRixJQUFJLENBQUN0SixTQUFTb0MsT0FBTyxDQUFDLFNBQVUvQixHQUFHLEVBQUU7b0JBQzFDb1ksR0FBRyxDQUFDcFksSUFBSSxHQUFHTCxPQUFPLENBQUNLLElBQUk7Z0JBQ3pCO1lBQ0YsQ0FBQztZQUVELE9BQU9vWTtRQUNUO1FBQ0E5UCxlQUFlO1lBQ2JzSyxhQUFhLElBQUk7WUFDakJELFFBQVEsU0FBU0EsT0FBTzFTLEtBQUssRUFBRXFZLE9BQU8sRUFBRTlSLEdBQUcsRUFBRTdHLE9BQU8sRUFBRTtnQkFDcEQsT0FBT007WUFDVDtZQUNBQyxRQUFRO1lBQ1JrTSxRQUFRO1lBQ1I2RyxpQkFBaUI7WUFDakJDLGdCQUFnQjtZQUNoQkUsZUFBZTtZQUNmRSxlQUFlO1lBQ2ZFLHlCQUF5QjtZQUN6QkMsYUFBYTtZQUNiN0csaUJBQWlCLEtBQUs7UUFDeEI7SUFDRjtBQUNGO0FBQ0EsU0FBUzJMLGlCQUFpQjVZLE9BQU8sRUFBRTtJQUNqQyxJQUFJLE9BQU9BLFFBQVFxRyxFQUFFLEtBQUssVUFBVXJHLFFBQVFxRyxFQUFFLEdBQUc7UUFBQ3JHLFFBQVFxRyxFQUFFO0tBQUM7SUFDN0QsSUFBSSxPQUFPckcsUUFBUThMLFdBQVcsS0FBSyxVQUFVOUwsUUFBUThMLFdBQVcsR0FBRztRQUFDOUwsUUFBUThMLFdBQVc7S0FBQztJQUN4RixJQUFJLE9BQU85TCxRQUFRbU8sVUFBVSxLQUFLLFVBQVVuTyxRQUFRbU8sVUFBVSxHQUFHO1FBQUNuTyxRQUFRbU8sVUFBVTtLQUFDO0lBRXJGLElBQUluTyxRQUFRMlAsU0FBUyxFQUFFO1FBQ3JCLElBQUkzUCxRQUFRMlAsU0FBUyxJQUFJM1AsUUFBUTJQLFNBQVMsQ0FBQzNMLE9BQU8sQ0FBQyxZQUFZLEdBQUc7WUFDaEVoRSxRQUFRMlAsU0FBUyxHQUFHM1AsUUFBUTJQLFNBQVMsQ0FBQ2xPLE1BQU0sQ0FBQztnQkFBQzthQUFTO1FBQ3pELENBQUM7UUFFRHpCLFFBQVE0UCxhQUFhLEdBQUc1UCxRQUFRMlAsU0FBUztJQUMzQyxDQUFDO0lBRUQsSUFBSTNQLFFBQVFxWSxvQkFBb0IsRUFBRTtRQUNoQ3JZLFFBQVF5USx3QkFBd0IsR0FBR3pRLFFBQVFxWSxvQkFBb0I7SUFDakUsQ0FBQztJQUVELElBQUlyWSxRQUFRNFAsYUFBYSxJQUFJNVAsUUFBUTRQLGFBQWEsQ0FBQzVMLE9BQU8sQ0FBQyxZQUFZLEdBQUc7UUFDeEVoRSxRQUFRNFAsYUFBYSxHQUFHNVAsUUFBUTRQLGFBQWEsQ0FBQ25PLE1BQU0sQ0FBQztZQUFDO1NBQVM7SUFDakUsQ0FBQztJQUVELE9BQU96QjtBQUNUO0FBRUEsU0FBUzZZLE9BQU8sQ0FBQztBQUVqQixJQUFJQyxPQUFPLFNBQVUxUyxhQUFhLEVBQUU7SUFDbENoSCwrRUFBU0EsQ0FBQzBaLE1BQU0xUztJQUVoQixTQUFTMFMsT0FBTztRQUNkLElBQUk1VztRQUVKLElBQUlsQyxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEYsSUFBSTZXLFdBQVc3VyxVQUFVQyxNQUFNLEdBQUcsSUFBSUQsU0FBUyxDQUFDLEVBQUUsR0FBR0UsU0FBUztRQUU5RHBCLHFGQUFlQSxDQUFDLElBQUksRUFBRStaO1FBRXRCNVcsUUFBUWpELGdHQUEwQkEsQ0FBQyxJQUFJLEVBQUVDLHFGQUFlQSxDQUFDNFosTUFBTXRVLElBQUksQ0FBQyxJQUFJO1FBRXhFLElBQUl1QixRQUFRO1lBQ1ZsRSxhQUFhMkMsSUFBSSxDQUFDckYsNEZBQXNCQSxDQUFDK0M7UUFDM0MsQ0FBQztRQUVEQSxNQUFNbEMsT0FBTyxHQUFHNFksaUJBQWlCNVk7UUFDakNrQyxNQUFNcUcsUUFBUSxHQUFHLENBQUM7UUFDbEJyRyxNQUFNMUIsTUFBTSxHQUFHb0I7UUFDZk0sTUFBTTZXLE9BQU8sR0FBRztZQUNkQyxVQUFVLEVBQUU7UUFDZDtRQUVBLElBQUlsQyxZQUFZLENBQUM1VSxNQUFNK1csYUFBYSxJQUFJLENBQUNqWixRQUFRa1osT0FBTyxFQUFFO1lBQ3hELElBQUksQ0FBQ2hYLE1BQU1sQyxPQUFPLENBQUNvWSxhQUFhLEVBQUU7Z0JBQ2hDbFcsTUFBTTlCLElBQUksQ0FBQ0osU0FBUzhXO2dCQUVwQixPQUFPN1gsZ0dBQTBCQSxDQUFDaUQsT0FBTy9DLDRGQUFzQkEsQ0FBQytDO1lBQ2xFLENBQUM7WUFFRDRWLFdBQVcsV0FBWTtnQkFDckI1VixNQUFNOUIsSUFBSSxDQUFDSixTQUFTOFc7WUFDdEIsR0FBRztRQUNMLENBQUM7UUFFRCxPQUFPNVU7SUFDVDtJQUVBbEQsa0ZBQVlBLENBQUM4WixNQUFNO1FBQUM7WUFDbEJ6WSxLQUFLO1lBQ0xDLE9BQU8sU0FBU0YsT0FBTztvQkF1QlorWSxzQkFBVCxTQUFTQSxvQkFBb0JDLGFBQWEsRUFBRTtvQkFDMUMsSUFBSSxDQUFDQSxlQUFlLE9BQU8sSUFBSTtvQkFDL0IsSUFBSSxPQUFPQSxrQkFBa0IsWUFBWSxPQUFPLElBQUlBO29CQUNwRCxPQUFPQTtnQkFDVDtnQkExQkEsSUFBSTVQLFNBQVMsSUFBSTtnQkFFakIsSUFBSXhKLFVBQVVDLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEYsSUFBSTZXLFdBQVc3VyxVQUFVQyxNQUFNLEdBQUcsSUFBSUQsU0FBUyxDQUFDLEVBQUUsR0FBR0UsU0FBUztnQkFFOUQsSUFBSSxPQUFPSCxZQUFZLFlBQVk7b0JBQ2pDOFcsV0FBVzlXO29CQUNYQSxVQUFVLENBQUM7Z0JBQ2IsQ0FBQztnQkFFRCxJQUFJQSxRQUFRMlAsU0FBUyxJQUFJLENBQUMzUCxRQUFRNFAsYUFBYSxFQUFFO29CQUMvQyxJQUFJLENBQUNwUCxNQUFNLENBQUNZLFNBQVMsQ0FBQyxhQUFhO2dCQUNyQyxDQUFDO2dCQUVELElBQUlwQixRQUFRcVksb0JBQW9CLElBQUksQ0FBQ3JZLFFBQVF5USx3QkFBd0IsRUFBRTtvQkFDckUsSUFBSSxDQUFDalEsTUFBTSxDQUFDWSxTQUFTLENBQUMsYUFBYTtnQkFDckMsQ0FBQztnQkFFRCxJQUFJLENBQUNwQixPQUFPLEdBQUdsQixtRkFBYUEsQ0FBQyxDQUFDLEdBQUdxWixPQUFPLElBQUksQ0FBQ25ZLE9BQU8sRUFBRTRZLGlCQUFpQjVZO2dCQUN2RSxJQUFJLENBQUNnVCxNQUFNLEdBQUcsSUFBSSxDQUFDaFQsT0FBTyxDQUFDMkksYUFBYSxDQUFDcUssTUFBTTtnQkFDL0MsSUFBSSxDQUFDOEQsVUFBVUEsV0FBVytCO2dCQVExQixJQUFJLENBQUMsSUFBSSxDQUFDN1ksT0FBTyxDQUFDa1osT0FBTyxFQUFFO29CQUN6QixJQUFJLElBQUksQ0FBQ0gsT0FBTyxDQUFDdlksTUFBTSxFQUFFO3dCQUN2Qm9CLFdBQVd4QixJQUFJLENBQUMrWSxvQkFBb0IsSUFBSSxDQUFDSixPQUFPLENBQUN2WSxNQUFNLEdBQUcsSUFBSSxDQUFDUixPQUFPO29CQUN4RSxPQUFPO3dCQUNMNEIsV0FBV3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDSixPQUFPO29CQUNwQyxDQUFDO29CQUVELElBQUlxWixLQUFLLElBQUkzSixhQUFhLElBQUksQ0FBQzFQLE9BQU87b0JBQ3RDLElBQUksQ0FBQ3lXLEtBQUssR0FBRyxJQUFJdFEsY0FBYyxJQUFJLENBQUNuRyxPQUFPLENBQUNpSCxTQUFTLEVBQUUsSUFBSSxDQUFDakgsT0FBTztvQkFDbkUsSUFBSXlELElBQUksSUFBSSxDQUFDOEUsUUFBUTtvQkFDckI5RSxFQUFFakQsTUFBTSxHQUFHb0I7b0JBQ1g2QixFQUFFeUwsYUFBYSxHQUFHLElBQUksQ0FBQ3VILEtBQUs7b0JBQzVCaFQsRUFBRW1JLGFBQWEsR0FBR3lOO29CQUNsQjVWLEVBQUUySCxjQUFjLEdBQUcsSUFBSTRHLGVBQWVxSCxJQUFJO3dCQUN4Q3hHLFNBQVMsSUFBSSxDQUFDN1MsT0FBTyxDQUFDdVksZUFBZTt3QkFDckN6RixtQkFBbUIsSUFBSSxDQUFDOVMsT0FBTyxDQUFDOFMsaUJBQWlCO3dCQUNqREgsc0JBQXNCLElBQUksQ0FBQzNTLE9BQU8sQ0FBQzJTLG9CQUFvQjtvQkFDekQ7b0JBQ0FsUCxFQUFFd0YsWUFBWSxHQUFHLElBQUk4SixhQUFhLElBQUksQ0FBQy9TLE9BQU87b0JBQzlDeUQsRUFBRTZLLEtBQUssR0FBRzt3QkFDUkMsb0JBQW9CLElBQUksQ0FBQ0Esa0JBQWtCLENBQUMrSyxJQUFJLENBQUMsSUFBSTtvQkFDdkQ7b0JBQ0E3VixFQUFFNEksZ0JBQWdCLEdBQUcsSUFBSWtLLFVBQVU0QyxvQkFBb0IsSUFBSSxDQUFDSixPQUFPLENBQUN2QyxPQUFPLEdBQUcvUyxFQUFFeUwsYUFBYSxFQUFFekwsR0FBRyxJQUFJLENBQUN6RCxPQUFPO29CQUM5R3lELEVBQUU0SSxnQkFBZ0IsQ0FBQ3RLLEVBQUUsQ0FBQyxLQUFLLFNBQVVNLEtBQUssRUFBRTt3QkFDMUMsSUFBSyxJQUFJekIsT0FBT1gsVUFBVUMsTUFBTSxFQUFFVixPQUFPLElBQUlxQixNQUFNRCxPQUFPLElBQUlBLE9BQU8sSUFBSSxDQUFDLEdBQUdFLE9BQU8sR0FBR0EsT0FBT0YsTUFBTUUsT0FBUTs0QkFDMUd0QixJQUFJLENBQUNzQixPQUFPLEVBQUUsR0FBR2IsU0FBUyxDQUFDYSxLQUFLO3dCQUNsQzt3QkFFQTBJLE9BQU85RyxJQUFJLENBQUM3QyxLQUFLLENBQUMySixRQUFROzRCQUFDbkg7eUJBQU0sQ0FBQ1osTUFBTSxDQUFDakM7b0JBQzNDO29CQUVBLElBQUksSUFBSSxDQUFDdVosT0FBTyxDQUFDUSxnQkFBZ0IsRUFBRTt3QkFDakM5VixFQUFFOFYsZ0JBQWdCLEdBQUdKLG9CQUFvQixJQUFJLENBQUNKLE9BQU8sQ0FBQ1EsZ0JBQWdCO3dCQUN0RTlWLEVBQUU4VixnQkFBZ0IsQ0FBQ25aLElBQUksQ0FBQ3FELEdBQUcsSUFBSSxDQUFDekQsT0FBTyxDQUFDd1osU0FBUyxFQUFFLElBQUksQ0FBQ3haLE9BQU87b0JBQ2pFLENBQUM7b0JBRUQsSUFBSSxJQUFJLENBQUMrWSxPQUFPLENBQUN4TyxVQUFVLEVBQUU7d0JBQzNCOUcsRUFBRThHLFVBQVUsR0FBRzRPLG9CQUFvQixJQUFJLENBQUNKLE9BQU8sQ0FBQ3hPLFVBQVU7d0JBQzFELElBQUk5RyxFQUFFOEcsVUFBVSxDQUFDbkssSUFBSSxFQUFFcUQsRUFBRThHLFVBQVUsQ0FBQ25LLElBQUksQ0FBQyxJQUFJO29CQUMvQyxDQUFDO29CQUVELElBQUksQ0FBQzhILFVBQVUsR0FBRyxJQUFJSSxXQUFXLElBQUksQ0FBQ0MsUUFBUSxFQUFFLElBQUksQ0FBQ3ZJLE9BQU87b0JBQzVELElBQUksQ0FBQ2tJLFVBQVUsQ0FBQ25HLEVBQUUsQ0FBQyxLQUFLLFNBQVVNLEtBQUssRUFBRTt3QkFDdkMsSUFBSyxJQUFJckIsUUFBUWYsVUFBVUMsTUFBTSxFQUFFVixPQUFPLElBQUlxQixNQUFNRyxRQUFRLElBQUlBLFFBQVEsSUFBSSxDQUFDLEdBQUdDLFFBQVEsR0FBR0EsUUFBUUQsT0FBT0MsUUFBUzs0QkFDakh6QixJQUFJLENBQUN5QixRQUFRLEVBQUUsR0FBR2hCLFNBQVMsQ0FBQ2dCLE1BQU07d0JBQ3BDO3dCQUVBdUksT0FBTzlHLElBQUksQ0FBQzdDLEtBQUssQ0FBQzJKLFFBQVE7NEJBQUNuSDt5QkFBTSxDQUFDWixNQUFNLENBQUNqQztvQkFDM0M7b0JBQ0EsSUFBSSxDQUFDdVosT0FBTyxDQUFDQyxRQUFRLENBQUM1VyxPQUFPLENBQUMsU0FBVXVCLENBQUMsRUFBRTt3QkFDekMsSUFBSUEsRUFBRXZELElBQUksRUFBRXVELEVBQUV2RCxJQUFJLENBQUNvSjtvQkFDckI7Z0JBQ0YsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQ3hKLE9BQU8sQ0FBQzhMLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQ3ZELFFBQVEsQ0FBQ2dSLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDdlosT0FBTyxDQUFDNkcsR0FBRyxFQUFFO29CQUNwRixJQUFJd0gsUUFBUSxJQUFJLENBQUM5RixRQUFRLENBQUNxRCxhQUFhLENBQUNDLGdCQUFnQixDQUFDLElBQUksQ0FBQzdMLE9BQU8sQ0FBQzhMLFdBQVc7b0JBQ2pGLElBQUl1QyxNQUFNbk8sTUFBTSxHQUFHLEtBQUttTyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDck8sT0FBTyxDQUFDNkcsR0FBRyxHQUFHd0gsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQzlGLFFBQVEsQ0FBQ2dSLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDdlosT0FBTyxDQUFDNkcsR0FBRyxFQUFFO29CQUN4RCxJQUFJLENBQUNyRyxNQUFNLENBQUNkLElBQUksQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxJQUFJK1osV0FBVztvQkFBQztvQkFBZTtvQkFBcUI7b0JBQXFCO2lCQUFvQjtnQkFDN0ZBLFNBQVNyWCxPQUFPLENBQUMsU0FBVXVWLE1BQU0sRUFBRTtvQkFDakNuTyxNQUFNLENBQUNtTyxPQUFPLEdBQUcsV0FBWTt3QkFDM0IsSUFBSStCO3dCQUVKLE9BQU8sQ0FBQ0EsZUFBZWxRLE9BQU9pTixLQUFLLENBQUMsQ0FBQ2tCLE9BQU8sQ0FBQzlYLEtBQUssQ0FBQzZaLGNBQWN6WjtvQkFDbkU7Z0JBQ0Y7Z0JBQ0EsSUFBSTBaLGtCQUFrQjtvQkFBQztvQkFBZTtvQkFBZ0I7b0JBQXFCO2lCQUF1QjtnQkFDbEdBLGdCQUFnQnZYLE9BQU8sQ0FBQyxTQUFVdVYsTUFBTSxFQUFFO29CQUN4Q25PLE1BQU0sQ0FBQ21PLE9BQU8sR0FBRyxXQUFZO3dCQUMzQixJQUFJaUM7d0JBRUhBLENBQUFBLGdCQUFnQnBRLE9BQU9pTixLQUFLLENBQUMsQ0FBQ2tCLE9BQU8sQ0FBQzlYLEtBQUssQ0FBQytaLGVBQWUzWjt3QkFFNUQsT0FBT3VKO29CQUNUO2dCQUNGO2dCQUNBLElBQUlxUSxXQUFXL1c7Z0JBRWYsSUFBSTBOLE9BQU8sU0FBU0EsT0FBTztvQkFDekIsSUFBSXNKLFNBQVMsU0FBU0EsT0FBT3ZDLEdBQUcsRUFBRTdULENBQUMsRUFBRTt3QkFDbkMsSUFBSThGLE9BQU95UCxhQUFhLEVBQUV6UCxPQUFPaEosTUFBTSxDQUFDZCxJQUFJLENBQUM7d0JBQzdDOEosT0FBT3lQLGFBQWEsR0FBRyxJQUFJO3dCQUMzQixJQUFJLENBQUN6UCxPQUFPeEosT0FBTyxDQUFDa1osT0FBTyxFQUFFMVAsT0FBT2hKLE1BQU0sQ0FBQ2pCLEdBQUcsQ0FBQyxlQUFlaUssT0FBT3hKLE9BQU87d0JBRTVFd0osT0FBTzlHLElBQUksQ0FBQyxlQUFlOEcsT0FBT3hKLE9BQU87d0JBRXpDNlosU0FBUzFXLE9BQU8sQ0FBQ087d0JBQ2pCb1QsU0FBU1MsS0FBSzdUO29CQUNoQjtvQkFFQSxJQUFJOEYsT0FBT3FOLFNBQVMsSUFBSXJOLE9BQU94SixPQUFPLENBQUN5SCxnQkFBZ0IsS0FBSyxRQUFRLENBQUMrQixPQUFPeVAsYUFBYSxFQUFFLE9BQU9hLE9BQU8sSUFBSSxFQUFFdFEsT0FBTzlGLENBQUMsQ0FBQzRWLElBQUksQ0FBQzlQO29CQUU3SEEsT0FBT2hCLGNBQWMsQ0FBQ2dCLE9BQU94SixPQUFPLENBQUM2RyxHQUFHLEVBQUVpVDtnQkFDNUM7Z0JBRUEsSUFBSSxJQUFJLENBQUM5WixPQUFPLENBQUNpSCxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUNqSCxPQUFPLENBQUNvWSxhQUFhLEVBQUU7b0JBQ3pENUg7Z0JBQ0YsT0FBTztvQkFDTHNILFdBQVd0SCxNQUFNO2dCQUNuQixDQUFDO2dCQUVELE9BQU9xSjtZQUNUO1FBQ0Y7UUFBRztZQUNEeFosS0FBSztZQUNMQyxPQUFPLFNBQVN5WixjQUFjdFIsUUFBUSxFQUFFO2dCQUN0QyxJQUFJbUUsU0FBUyxJQUFJO2dCQUVqQixJQUFJa0ssV0FBVzdXLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHNFksSUFBSTtnQkFDdkYsSUFBSW1CLGVBQWVsRDtnQkFDbkIsSUFBSWhLLFVBQVUsT0FBT3JFLGFBQWEsV0FBV0EsV0FBVyxJQUFJLENBQUNBLFFBQVE7Z0JBQ3JFLElBQUksT0FBT0EsYUFBYSxZQUFZdVIsZUFBZXZSO2dCQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDekksT0FBTyxDQUFDaUgsU0FBUyxJQUFJLElBQUksQ0FBQ2pILE9BQU8sQ0FBQ3dZLHVCQUF1QixFQUFFO29CQUNuRSxJQUFJMUwsV0FBV0EsUUFBUWhELFdBQVcsT0FBTyxVQUFVLE9BQU9rUTtvQkFDMUQsSUFBSWpELFNBQVMsRUFBRTtvQkFFZixJQUFJa0QsU0FBUyxTQUFTQSxPQUFPcFQsR0FBRyxFQUFFO3dCQUNoQyxJQUFJLENBQUNBLEtBQUs7d0JBRVYsSUFBSTZFLE9BQU9rQixPQUFPckUsUUFBUSxDQUFDcUQsYUFBYSxDQUFDSyxrQkFBa0IsQ0FBQ3BGO3dCQUU1RDZFLEtBQUt0SixPQUFPLENBQUMsU0FBVUssQ0FBQyxFQUFFOzRCQUN4QixJQUFJc1UsT0FBTy9TLE9BQU8sQ0FBQ3ZCLEtBQUssR0FBR3NVLE9BQU96VSxJQUFJLENBQUNHO3dCQUN6QztvQkFDRjtvQkFFQSxJQUFJLENBQUNxSyxTQUFTO3dCQUNaLElBQUlpRSxZQUFZLElBQUksQ0FBQ3hJLFFBQVEsQ0FBQ3FELGFBQWEsQ0FBQ0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDN0wsT0FBTyxDQUFDOEwsV0FBVzt3QkFDckZpRixVQUFVM08sT0FBTyxDQUFDLFNBQVVLLENBQUMsRUFBRTs0QkFDN0IsT0FBT3dYLE9BQU94WDt3QkFDaEI7b0JBQ0YsT0FBTzt3QkFDTHdYLE9BQU9uTjtvQkFDVCxDQUFDO29CQUVELElBQUksSUFBSSxDQUFDOU0sT0FBTyxDQUFDc1ksT0FBTyxFQUFFO3dCQUN4QixJQUFJLENBQUN0WSxPQUFPLENBQUNzWSxPQUFPLENBQUNsVyxPQUFPLENBQUMsU0FBVUssQ0FBQyxFQUFFOzRCQUN4QyxPQUFPd1gsT0FBT3hYO3dCQUNoQjtvQkFDRixDQUFDO29CQUVELElBQUksQ0FBQzhGLFFBQVEsQ0FBQzhELGdCQUFnQixDQUFDbUUsSUFBSSxDQUFDdUcsUUFBUSxJQUFJLENBQUMvVyxPQUFPLENBQUNxRyxFQUFFLEVBQUUyVDtnQkFDL0QsT0FBTztvQkFDTEEsYUFBYSxJQUFJO2dCQUNuQixDQUFDO1lBQ0g7UUFDRjtRQUFHO1lBQ0QzWixLQUFLO1lBQ0xDLE9BQU8sU0FBUzRaLGdCQUFnQnhPLElBQUksRUFBRXJGLEVBQUUsRUFBRXlRLFFBQVEsRUFBRTtnQkFDbEQsSUFBSStDLFdBQVcvVztnQkFDZixJQUFJLENBQUM0SSxNQUFNQSxPQUFPLElBQUksQ0FBQ21MLFNBQVM7Z0JBQ2hDLElBQUksQ0FBQ3hRLElBQUlBLEtBQUssSUFBSSxDQUFDckcsT0FBTyxDQUFDcUcsRUFBRTtnQkFDN0IsSUFBSSxDQUFDeVEsVUFBVUEsV0FBVytCO2dCQUMxQixJQUFJLENBQUN0USxRQUFRLENBQUM4RCxnQkFBZ0IsQ0FBQytLLE1BQU0sQ0FBQzFMLE1BQU1yRixJQUFJLFNBQVVrUixHQUFHLEVBQUU7b0JBQzdEc0MsU0FBUzFXLE9BQU87b0JBQ2hCMlQsU0FBU1M7Z0JBQ1g7Z0JBQ0EsT0FBT3NDO1lBQ1Q7UUFDRjtRQUFHO1lBQ0R4WixLQUFLO1lBQ0xDLE9BQU8sU0FBUzZaLElBQUlwUyxNQUFNLEVBQUU7Z0JBQzFCLElBQUksQ0FBQ0EsUUFBUSxNQUFNLElBQUlxUyxNQUFNLGlHQUFpRztnQkFDOUgsSUFBSSxDQUFDclMsT0FBT3pJLElBQUksRUFBRSxNQUFNLElBQUk4YSxNQUFNLDRGQUE0RjtnQkFFOUgsSUFBSXJTLE9BQU96SSxJQUFJLEtBQUssV0FBVztvQkFDN0IsSUFBSSxDQUFDeVosT0FBTyxDQUFDdkMsT0FBTyxHQUFHek87Z0JBQ3pCLENBQUM7Z0JBRUQsSUFBSUEsT0FBT3pJLElBQUksS0FBSyxZQUFZeUksT0FBT3hJLEdBQUcsSUFBSXdJLE9BQU9ySSxJQUFJLElBQUlxSSxPQUFPcEksS0FBSyxFQUFFO29CQUN6RSxJQUFJLENBQUNvWixPQUFPLENBQUN2WSxNQUFNLEdBQUd1SDtnQkFDeEIsQ0FBQztnQkFFRCxJQUFJQSxPQUFPekksSUFBSSxLQUFLLG9CQUFvQjtvQkFDdEMsSUFBSSxDQUFDeVosT0FBTyxDQUFDUSxnQkFBZ0IsR0FBR3hSO2dCQUNsQyxDQUFDO2dCQUVELElBQUlBLE9BQU96SSxJQUFJLEtBQUssY0FBYztvQkFDaEMsSUFBSSxDQUFDeVosT0FBTyxDQUFDeE8sVUFBVSxHQUFHeEM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSUEsT0FBT3pJLElBQUksS0FBSyxpQkFBaUI7b0JBQ25Dc0ksY0FBY0UsZ0JBQWdCLENBQUNDO2dCQUNqQyxDQUFDO2dCQUVELElBQUlBLE9BQU96SSxJQUFJLEtBQUssWUFBWTtvQkFDOUIsSUFBSSxDQUFDeVosT0FBTyxDQUFDQyxRQUFRLENBQUMxVyxJQUFJLENBQUN5RjtnQkFDN0IsQ0FBQztnQkFFRCxPQUFPLElBQUk7WUFDYjtRQUNGO1FBQUc7WUFDRDFILEtBQUs7WUFDTEMsT0FBTyxTQUFTa0ksZUFBZTNCLEdBQUcsRUFBRWlRLFFBQVEsRUFBRTtnQkFDNUMsSUFBSTlJLFNBQVMsSUFBSTtnQkFFakIsSUFBSSxDQUFDcU0sb0JBQW9CLEdBQUd4VDtnQkFDNUIsSUFBSWdULFdBQVcvVztnQkFDZixJQUFJLENBQUNKLElBQUksQ0FBQyxvQkFBb0JtRTtnQkFFOUIsSUFBSTRRLE9BQU8sU0FBU0EsS0FBS0YsR0FBRyxFQUFFOVUsQ0FBQyxFQUFFO29CQUMvQixJQUFJQSxHQUFHO3dCQUNMdUwsT0FBT3ZGLFFBQVEsR0FBR2hHO3dCQUNsQnVMLE9BQU82SSxTQUFTLEdBQUc3SSxPQUFPekYsUUFBUSxDQUFDcUQsYUFBYSxDQUFDSyxrQkFBa0IsQ0FBQ3hKO3dCQUVwRXVMLE9BQU85RixVQUFVLENBQUNNLGNBQWMsQ0FBQy9GO3dCQUVqQ3VMLE9BQU9xTSxvQkFBb0IsR0FBR2xhO3dCQUU5QjZOLE9BQU90TCxJQUFJLENBQUMsbUJBQW1CRDt3QkFFL0J1TCxPQUFPeE4sTUFBTSxDQUFDakIsR0FBRyxDQUFDLG1CQUFtQmtEO29CQUN2QyxPQUFPO3dCQUNMdUwsT0FBT3FNLG9CQUFvQixHQUFHbGE7b0JBQ2hDLENBQUM7b0JBRUQwWixTQUFTMVcsT0FBTyxDQUFDLFdBQVk7d0JBQzNCLE9BQU82SyxPQUFPdEssQ0FBQyxDQUFDN0QsS0FBSyxDQUFDbU8sUUFBUS9OO29CQUNoQztvQkFDQSxJQUFJNlcsVUFBVUEsU0FBU1MsS0FBSyxXQUFZO3dCQUN0QyxPQUFPdkosT0FBT3RLLENBQUMsQ0FBQzdELEtBQUssQ0FBQ21PLFFBQVEvTjtvQkFDaEM7Z0JBQ0Y7Z0JBRUEsSUFBSXFhLFNBQVMsU0FBU0EsT0FBTzVPLElBQUksRUFBRTtvQkFDakMsSUFBSWpKLElBQUksT0FBT2lKLFNBQVMsV0FBV0EsT0FBT3NDLE9BQU96RixRQUFRLENBQUNxRCxhQUFhLENBQUM4RSxxQkFBcUIsQ0FBQ2hGLEtBQUs7b0JBRW5HLElBQUlqSixHQUFHO3dCQUNMLElBQUksQ0FBQ3VMLE9BQU92RixRQUFRLEVBQUU7NEJBQ3BCdUYsT0FBT3ZGLFFBQVEsR0FBR2hHOzRCQUNsQnVMLE9BQU82SSxTQUFTLEdBQUc3SSxPQUFPekYsUUFBUSxDQUFDcUQsYUFBYSxDQUFDSyxrQkFBa0IsQ0FBQ3hKO3dCQUN0RSxDQUFDO3dCQUVELElBQUksQ0FBQ3VMLE9BQU85RixVQUFVLENBQUNPLFFBQVEsRUFBRXVGLE9BQU85RixVQUFVLENBQUNNLGNBQWMsQ0FBQy9GO3dCQUNsRSxJQUFJdUwsT0FBT3pGLFFBQVEsQ0FBQ2dSLGdCQUFnQixFQUFFdkwsT0FBT3pGLFFBQVEsQ0FBQ2dSLGdCQUFnQixDQUFDZ0IsaUJBQWlCLENBQUM5WDtvQkFDM0YsQ0FBQztvQkFFRHVMLE9BQU8rTCxhQUFhLENBQUN0WCxHQUFHLFNBQVU4VSxHQUFHLEVBQUU7d0JBQ3JDRSxLQUFLRixLQUFLOVU7b0JBQ1o7Z0JBQ0Y7Z0JBRUEsSUFBSSxDQUFDb0UsT0FBTyxJQUFJLENBQUMwQixRQUFRLENBQUNnUixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQ2hSLFFBQVEsQ0FBQ2dSLGdCQUFnQixDQUFDaUIsS0FBSyxFQUFFO29CQUNuRkYsT0FBTyxJQUFJLENBQUMvUixRQUFRLENBQUNnUixnQkFBZ0IsQ0FBQ2tCLE1BQU07Z0JBQzlDLE9BQU8sSUFBSSxDQUFDNVQsT0FBTyxJQUFJLENBQUMwQixRQUFRLENBQUNnUixnQkFBZ0IsSUFBSSxJQUFJLENBQUNoUixRQUFRLENBQUNnUixnQkFBZ0IsQ0FBQ2lCLEtBQUssRUFBRTtvQkFDekYsSUFBSSxDQUFDalMsUUFBUSxDQUFDZ1IsZ0JBQWdCLENBQUNrQixNQUFNLENBQUNIO2dCQUN4QyxPQUFPO29CQUNMQSxPQUFPelQ7Z0JBQ1QsQ0FBQztnQkFFRCxPQUFPZ1Q7WUFDVDtRQUNGO1FBQUc7WUFDRHhaLEtBQUs7WUFDTEMsT0FBTyxTQUFTb2EsVUFBVTdULEdBQUcsRUFBRVIsRUFBRSxFQUFFO2dCQUNqQyxJQUFJNFIsU0FBUyxJQUFJO2dCQUVqQixJQUFJMEMsU0FBUyxTQUFTQSxPQUFPdGEsR0FBRyxFQUFFdWEsSUFBSSxFQUFFO29CQUN0QyxJQUFJNWE7b0JBRUosSUFBSW5CLDZFQUFPQSxDQUFDK2IsVUFBVSxVQUFVO3dCQUM5QixJQUFLLElBQUkxWixRQUFRakIsVUFBVUMsTUFBTSxFQUFFMmEsT0FBTyxJQUFJaGEsTUFBTUssUUFBUSxJQUFJQSxRQUFRLElBQUksQ0FBQyxHQUFHQyxRQUFRLEdBQUdBLFFBQVFELE9BQU9DLFFBQVM7NEJBQ2pIMFosSUFBSSxDQUFDMVosUUFBUSxFQUFFLEdBQUdsQixTQUFTLENBQUNrQixNQUFNO3dCQUNwQzt3QkFFQW5CLFVBQVVpWSxPQUFPalksT0FBTyxDQUFDeUosZ0NBQWdDLENBQUM7NEJBQUNwSjs0QkFBS3VhO3lCQUFLLENBQUNuWixNQUFNLENBQUNvWjtvQkFDL0UsT0FBTzt3QkFDTDdhLFVBQVVsQixtRkFBYUEsQ0FBQyxDQUFDLEdBQUc4YjtvQkFDOUIsQ0FBQztvQkFFRDVhLFFBQVE2RyxHQUFHLEdBQUc3RyxRQUFRNkcsR0FBRyxJQUFJOFQsT0FBTzlULEdBQUc7b0JBQ3ZDN0csUUFBUTBMLElBQUksR0FBRzFMLFFBQVEwTCxJQUFJLElBQUlpUCxPQUFPalAsSUFBSTtvQkFDMUMxTCxRQUFRcUcsRUFBRSxHQUFHckcsUUFBUXFHLEVBQUUsSUFBSXNVLE9BQU90VSxFQUFFO29CQUNwQyxPQUFPNFIsT0FBT3ZVLENBQUMsQ0FBQ3JELEtBQUtMO2dCQUN2QjtnQkFFQSxJQUFJLE9BQU82RyxRQUFRLFVBQVU7b0JBQzNCOFQsT0FBTzlULEdBQUcsR0FBR0E7Z0JBQ2YsT0FBTztvQkFDTDhULE9BQU9qUCxJQUFJLEdBQUc3RTtnQkFDaEIsQ0FBQztnQkFFRDhULE9BQU90VSxFQUFFLEdBQUdBO2dCQUNaLE9BQU9zVTtZQUNUO1FBQ0Y7UUFBRztZQUNEdGEsS0FBSztZQUNMQyxPQUFPLFNBQVNvRCxJQUFJO2dCQUNsQixJQUFJb1g7Z0JBRUosT0FBTyxJQUFJLENBQUM1UyxVQUFVLElBQUksQ0FBQzRTLG1CQUFtQixJQUFJLENBQUM1UyxVQUFVLEVBQUVtQixTQUFTLENBQUN4SixLQUFLLENBQUNpYixrQkFBa0I3YTtZQUNuRztRQUNGO1FBQUc7WUFDREksS0FBSztZQUNMQyxPQUFPLFNBQVNvSSxTQUFTO2dCQUN2QixJQUFJcVM7Z0JBRUosT0FBTyxJQUFJLENBQUM3UyxVQUFVLElBQUksQ0FBQzZTLG9CQUFvQixJQUFJLENBQUM3UyxVQUFVLEVBQUVRLE1BQU0sQ0FBQzdJLEtBQUssQ0FBQ2tiLG1CQUFtQjlhO1lBQ2xHO1FBQ0Y7UUFBRztZQUNESSxLQUFLO1lBQ0xDLE9BQU8sU0FBUzBhLG9CQUFvQjNVLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDckcsT0FBTyxDQUFDc0csU0FBUyxHQUFHRDtZQUMzQjtRQUNGO1FBQUc7WUFDRGhHLEtBQUs7WUFDTEMsT0FBTyxTQUFTaU8sbUJBQW1CbEksRUFBRSxFQUFFO2dCQUNyQyxJQUFJNFUsU0FBUyxJQUFJO2dCQUVqQixJQUFJamIsVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUVwRixJQUFJLENBQUMsSUFBSSxDQUFDZ1osYUFBYSxFQUFFO29CQUN2QixJQUFJLENBQUN6WSxNQUFNLENBQUNkLElBQUksQ0FBQyxtREFBbUQsSUFBSSxDQUFDbVgsU0FBUztvQkFDbEYsT0FBTyxLQUFLO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQ0EsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUMzVyxNQUFNLEVBQUU7b0JBQzdDLElBQUksQ0FBQ00sTUFBTSxDQUFDZCxJQUFJLENBQUMsOERBQThELElBQUksQ0FBQ21YLFNBQVM7b0JBQzdGLE9BQU8sS0FBSztnQkFDZCxDQUFDO2dCQUVELElBQUloUSxNQUFNLElBQUksQ0FBQ2dRLFNBQVMsQ0FBQyxFQUFFO2dCQUMzQixJQUFJL0ssY0FBYyxJQUFJLENBQUM5TCxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUM4TCxXQUFXLEdBQUcsS0FBSztnQkFDakUsSUFBSW9QLFVBQVUsSUFBSSxDQUFDckUsU0FBUyxDQUFDLElBQUksQ0FBQ0EsU0FBUyxDQUFDM1csTUFBTSxHQUFHLEVBQUU7Z0JBQ3ZELElBQUkyRyxJQUFJaUQsV0FBVyxPQUFPLFVBQVUsT0FBTyxJQUFJO2dCQUUvQyxJQUFJcVIsaUJBQWlCLFNBQVNBLGVBQWUxWSxDQUFDLEVBQUVnUCxDQUFDLEVBQUU7b0JBQ2pELElBQUkySixZQUFZSCxPQUFPMVMsUUFBUSxDQUFDOEQsZ0JBQWdCLENBQUNxSyxLQUFLLENBQUMsR0FBR2pWLE1BQU0sQ0FBQ2dCLEdBQUcsS0FBS2hCLE1BQU0sQ0FBQ2dRLEdBQUc7b0JBRW5GLE9BQU8ySixjQUFjLENBQUMsS0FBS0EsY0FBYztnQkFDM0M7Z0JBRUEsSUFBSXBiLFFBQVFxYixRQUFRLEVBQUU7b0JBQ3BCLElBQUlDLFlBQVl0YixRQUFRcWIsUUFBUSxDQUFDLElBQUksRUFBRUY7b0JBQ3ZDLElBQUlHLGNBQWNuYixXQUFXLE9BQU9tYjtnQkFDdEMsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQy9ULGlCQUFpQixDQUFDVixLQUFLUixLQUFLLE9BQU8sSUFBSTtnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ2tDLFFBQVEsQ0FBQzhELGdCQUFnQixDQUFDbUssT0FBTyxFQUFFLE9BQU8sSUFBSTtnQkFDeEQsSUFBSTJFLGVBQWV0VSxLQUFLUixPQUFRLEVBQUN5RixlQUFlcVAsZUFBZUQsU0FBUzdVLEdBQUUsR0FBSSxPQUFPLElBQUk7Z0JBQ3pGLE9BQU8sS0FBSztZQUNkO1FBQ0Y7UUFBRztZQUNEaEcsS0FBSztZQUNMQyxPQUFPLFNBQVNpYixlQUFlbFYsRUFBRSxFQUFFeVEsUUFBUSxFQUFFO2dCQUMzQyxJQUFJMEUsU0FBUyxJQUFJO2dCQUVqQixJQUFJM0IsV0FBVy9XO2dCQUVmLElBQUksQ0FBQyxJQUFJLENBQUM5QyxPQUFPLENBQUNxRyxFQUFFLEVBQUU7b0JBQ3BCeVEsWUFBWUE7b0JBQ1osT0FBTzVULFFBQVFDLE9BQU87Z0JBQ3hCLENBQUM7Z0JBRUQsSUFBSSxPQUFPa0QsT0FBTyxVQUFVQSxLQUFLO29CQUFDQTtpQkFBRztnQkFDckNBLEdBQUdqRSxPQUFPLENBQUMsU0FBVXFQLENBQUMsRUFBRTtvQkFDdEIsSUFBSStKLE9BQU94YixPQUFPLENBQUNxRyxFQUFFLENBQUNyQyxPQUFPLENBQUN5TixLQUFLLEdBQUcrSixPQUFPeGIsT0FBTyxDQUFDcUcsRUFBRSxDQUFDL0QsSUFBSSxDQUFDbVA7Z0JBQy9EO2dCQUNBLElBQUksQ0FBQ3NJLGFBQWEsQ0FBQyxTQUFVeEMsR0FBRyxFQUFFO29CQUNoQ3NDLFNBQVMxVyxPQUFPO29CQUNoQixJQUFJMlQsVUFBVUEsU0FBU1M7Z0JBQ3pCO2dCQUNBLE9BQU9zQztZQUNUO1FBQ0Y7UUFBRztZQUNEeFosS0FBSztZQUNMQyxPQUFPLFNBQVNtYixjQUFjL1AsSUFBSSxFQUFFb0wsUUFBUSxFQUFFO2dCQUM1QyxJQUFJK0MsV0FBVy9XO2dCQUNmLElBQUksT0FBTzRJLFNBQVMsVUFBVUEsT0FBTztvQkFBQ0E7aUJBQUs7Z0JBQzNDLElBQUlnUSxZQUFZLElBQUksQ0FBQzFiLE9BQU8sQ0FBQ3NZLE9BQU8sSUFBSSxFQUFFO2dCQUMxQyxJQUFJcUQsVUFBVWpRLEtBQUtsSixNQUFNLENBQUMsU0FBVXFFLEdBQUcsRUFBRTtvQkFDdkMsT0FBTzZVLFVBQVUxWCxPQUFPLENBQUM2QyxPQUFPO2dCQUNsQztnQkFFQSxJQUFJLENBQUM4VSxRQUFRemIsTUFBTSxFQUFFO29CQUNuQixJQUFJNFcsVUFBVUE7b0JBQ2QsT0FBTzVULFFBQVFDLE9BQU87Z0JBQ3hCLENBQUM7Z0JBRUQsSUFBSSxDQUFDbkQsT0FBTyxDQUFDc1ksT0FBTyxHQUFHb0QsVUFBVWphLE1BQU0sQ0FBQ2thO2dCQUN4QyxJQUFJLENBQUM1QixhQUFhLENBQUMsU0FBVXhDLEdBQUcsRUFBRTtvQkFDaENzQyxTQUFTMVcsT0FBTztvQkFDaEIsSUFBSTJULFVBQVVBLFNBQVNTO2dCQUN6QjtnQkFDQSxPQUFPc0M7WUFDVDtRQUNGO1FBQUc7WUFDRHhaLEtBQUs7WUFDTEMsT0FBTyxTQUFTc2IsSUFBSS9VLEdBQUcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDQSxLQUFLQSxNQUFNLElBQUksQ0FBQ2dRLFNBQVMsSUFBSSxJQUFJLENBQUNBLFNBQVMsQ0FBQzNXLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQzJXLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDcE8sUUFBUTtnQkFDL0YsSUFBSSxDQUFDNUIsS0FBSyxPQUFPO2dCQUNqQixJQUFJZ1YsVUFBVTtvQkFBQztvQkFBTTtvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTTtvQkFBTTtvQkFBTTtvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTTtvQkFBTTtvQkFBTztvQkFBTztvQkFBTztvQkFBTTtvQkFBTTtvQkFBTztvQkFBTztvQkFBTztvQkFBTTtvQkFBTztvQkFBTztvQkFBTztvQkFBTztvQkFBTTtpQkFBTTtnQkFDL2EsT0FBT0EsUUFBUTdYLE9BQU8sQ0FBQyxJQUFJLENBQUN1RSxRQUFRLENBQUNxRCxhQUFhLENBQUNvRSx1QkFBdUIsQ0FBQ25KLFNBQVMsSUFBSSxRQUFRLEtBQUs7WUFDdkc7UUFDRjtRQUFHO1lBQ0R4RyxLQUFLO1lBQ0xDLE9BQU8sU0FBU3diLGlCQUFpQjtnQkFDL0IsSUFBSTliLFVBQVVDLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLRSxZQUFZRixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEYsSUFBSTZXLFdBQVc3VyxVQUFVQyxNQUFNLEdBQUcsSUFBSUQsU0FBUyxDQUFDLEVBQUUsR0FBR0UsU0FBUztnQkFDOUQsT0FBTyxJQUFJMlksS0FBSzlZLFNBQVM4VztZQUMzQjtRQUNGO1FBQUc7WUFDRHpXLEtBQUs7WUFDTEMsT0FBTyxTQUFTeWIsZ0JBQWdCO2dCQUM5QixJQUFJQyxTQUFTLElBQUk7Z0JBRWpCLElBQUloYyxVQUFVQyxVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS0UsWUFBWUYsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUk2VyxXQUFXN1csVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUc0WSxJQUFJO2dCQUV2RixJQUFJb0QsZ0JBQWdCbmQsbUZBQWFBLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ2tCLE9BQU8sRUFBRUEsU0FBUztvQkFDM0RrWixTQUFTLElBQUk7Z0JBQ2Y7Z0JBRUEsSUFBSWdELFFBQVEsSUFBSXBELEtBQUttRDtnQkFDckIsSUFBSUUsZ0JBQWdCO29CQUFDO29CQUFTO29CQUFZO2lCQUFXO2dCQUNyREEsY0FBYy9aLE9BQU8sQ0FBQyxTQUFVdUIsQ0FBQyxFQUFFO29CQUNqQ3VZLEtBQUssQ0FBQ3ZZLEVBQUUsR0FBR3FZLE1BQU0sQ0FBQ3JZLEVBQUU7Z0JBQ3RCO2dCQUNBdVksTUFBTTNULFFBQVEsR0FBR3pKLG1GQUFhQSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUN5SixRQUFRO2dCQUNoRDJULE1BQU0zVCxRQUFRLENBQUMrRixLQUFLLEdBQUc7b0JBQ3JCQyxvQkFBb0IyTixNQUFNM04sa0JBQWtCLENBQUMrSyxJQUFJLENBQUM0QztnQkFDcEQ7Z0JBQ0FBLE1BQU1oVSxVQUFVLEdBQUcsSUFBSUksV0FBVzRULE1BQU0zVCxRQUFRLEVBQUUyVCxNQUFNbGMsT0FBTztnQkFDL0RrYyxNQUFNaFUsVUFBVSxDQUFDbkcsRUFBRSxDQUFDLEtBQUssU0FBVU0sS0FBSyxFQUFFO29CQUN4QyxJQUFLLElBQUloQixRQUFRcEIsVUFBVUMsTUFBTSxFQUFFVixPQUFPLElBQUlxQixNQUFNUSxRQUFRLElBQUlBLFFBQVEsSUFBSSxDQUFDLEdBQUdDLFFBQVEsR0FBR0EsUUFBUUQsT0FBT0MsUUFBUzt3QkFDakg5QixJQUFJLENBQUM4QixRQUFRLEVBQUUsR0FBR3JCLFNBQVMsQ0FBQ3FCLE1BQU07b0JBQ3BDO29CQUVBNGEsTUFBTXhaLElBQUksQ0FBQzdDLEtBQUssQ0FBQ3FjLE9BQU87d0JBQUM3WjtxQkFBTSxDQUFDWixNQUFNLENBQUNqQztnQkFDekM7Z0JBQ0EwYyxNQUFNOWIsSUFBSSxDQUFDNmIsZUFBZW5GO2dCQUMxQm9GLE1BQU1oVSxVQUFVLENBQUNsSSxPQUFPLEdBQUdrYyxNQUFNbGMsT0FBTztnQkFDeENrYyxNQUFNaFUsVUFBVSxDQUFDbUUsZ0JBQWdCLENBQUM5RCxRQUFRLENBQUMrRixLQUFLLEdBQUc7b0JBQ2pEQyxvQkFBb0IyTixNQUFNM04sa0JBQWtCLENBQUMrSyxJQUFJLENBQUM0QztnQkFDcEQ7Z0JBQ0EsT0FBT0E7WUFDVDtRQUNGO0tBQUU7SUFFRixPQUFPcEQ7QUFDVCxFQUFFalg7QUFFRixJQUFJdWEsVUFBVSxJQUFJdEQ7QUFFbEIsaUVBQWVzRCxPQUFPQSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaTE4bmV4dC9kaXN0L2VzbS9pMThuZXh0LmpzP2U0NDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF90eXBlb2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mJztcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZCc7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZic7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cyc7XG5cbnZhciBjb25zb2xlTG9nZ2VyID0ge1xuICB0eXBlOiAnbG9nZ2VyJyxcbiAgbG9nOiBmdW5jdGlvbiBsb2coYXJncykge1xuICAgIHRoaXMub3V0cHV0KCdsb2cnLCBhcmdzKTtcbiAgfSxcbiAgd2FybjogZnVuY3Rpb24gd2FybihhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ3dhcm4nLCBhcmdzKTtcbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnZXJyb3InLCBhcmdzKTtcbiAgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbiBvdXRwdXQodHlwZSwgYXJncykge1xuICAgIGlmIChjb25zb2xlICYmIGNvbnNvbGVbdHlwZV0pIGNvbnNvbGVbdHlwZV0uYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn07XG5cbnZhciBMb2dnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExvZ2dlcihjb25jcmV0ZUxvZ2dlcikge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2dnZXIpO1xuXG4gICAgdGhpcy5pbml0KGNvbmNyZXRlTG9nZ2VyLCBvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMb2dnZXIsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChjb25jcmV0ZUxvZ2dlcikge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdGhpcy5wcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCAnaTE4bmV4dDonO1xuICAgICAgdGhpcy5sb2dnZXIgPSBjb25jcmV0ZUxvZ2dlciB8fCBjb25zb2xlTG9nZ2VyO1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMuZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXREZWJ1Z1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXREZWJ1Zyhib29sKSB7XG4gICAgICB0aGlzLmRlYnVnID0gYm9vbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvZygpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdsb2cnLCAnJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndhcm5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2FybigpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ3dhcm4nLCAnJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVycm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVycm9yKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnZXJyb3InLCAnJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlcHJlY2F0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXByZWNhdGUoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICd3YXJuJywgJ1dBUk5JTkcgREVQUkVDQVRFRDogJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcndhcmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yd2FyZChhcmdzLCBsdmwsIHByZWZpeCwgZGVidWdPbmx5KSB7XG4gICAgICBpZiAoZGVidWdPbmx5ICYmICF0aGlzLmRlYnVnKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIGFyZ3NbMF0gPSBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdCh0aGlzLnByZWZpeCwgXCIgXCIpLmNvbmNhdChhcmdzWzBdKTtcbiAgICAgIHJldHVybiB0aGlzLmxvZ2dlcltsdmxdKGFyZ3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKG1vZHVsZU5hbWUpIHtcbiAgICAgIHJldHVybiBuZXcgTG9nZ2VyKHRoaXMubG9nZ2VyLCBfb2JqZWN0U3ByZWFkKHt9LCB7XG4gICAgICAgIHByZWZpeDogXCJcIi5jb25jYXQodGhpcy5wcmVmaXgsIFwiOlwiKS5jb25jYXQobW9kdWxlTmFtZSwgXCI6XCIpXG4gICAgICB9LCB0aGlzLm9wdGlvbnMpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTG9nZ2VyO1xufSgpO1xuXG52YXIgYmFzZUxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxudmFyIEV2ZW50RW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuXG4gICAgdGhpcy5vYnNlcnZlcnMgPSB7fTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdmVudEVtaXR0ZXIsIFt7XG4gICAga2V5OiBcIm9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50cywgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLm9ic2VydmVyc1tldmVudF0gPSBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdIHx8IFtdO1xuXG4gICAgICAgIF90aGlzLm9ic2VydmVyc1tldmVudF0ucHVzaChsaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvZmZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb2ZmKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgaWYgKCF0aGlzLm9ic2VydmVyc1tldmVudF0pIHJldHVybjtcblxuICAgICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICBkZWxldGUgdGhpcy5vYnNlcnZlcnNbZXZlbnRdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSA9IHRoaXMub2JzZXJ2ZXJzW2V2ZW50XS5maWx0ZXIoZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgcmV0dXJuIGwgIT09IGxpc3RlbmVyO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSkge1xuICAgICAgICB2YXIgY2xvbmVkID0gW10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSk7XG4gICAgICAgIGNsb25lZC5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICAgIG9ic2VydmVyLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vYnNlcnZlcnNbJyonXSkge1xuICAgICAgICB2YXIgX2Nsb25lZCA9IFtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1snKiddKTtcblxuICAgICAgICBfY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuYXBwbHkob2JzZXJ2ZXIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV2ZW50RW1pdHRlcjtcbn0oKTtcblxuZnVuY3Rpb24gZGVmZXIoKSB7XG4gIHZhciByZXM7XG4gIHZhciByZWo7XG4gIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlcyA9IHJlc29sdmU7XG4gICAgcmVqID0gcmVqZWN0O1xuICB9KTtcbiAgcHJvbWlzZS5yZXNvbHZlID0gcmVzO1xuICBwcm9taXNlLnJlamVjdCA9IHJlajtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5mdW5jdGlvbiBtYWtlU3RyaW5nKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAnJztcbiAgcmV0dXJuICcnICsgb2JqZWN0O1xufVxuZnVuY3Rpb24gY29weShhLCBzLCB0KSB7XG4gIGEuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgIGlmIChzW21dKSB0W21dID0gc1ttXTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBFbXB0eSkge1xuICBmdW5jdGlvbiBjbGVhbktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5ICYmIGtleS5pbmRleE9mKCcjIyMnKSA+IC0xID8ga2V5LnJlcGxhY2UoLyMjIy9nLCAnLicpIDoga2V5O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuTm90VHJhdmVyc2VEZWVwZXIoKSB7XG4gICAgcmV0dXJuICFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICB2YXIgc3RhY2sgPSB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycgPyBbXS5jb25jYXQocGF0aCkgOiBwYXRoLnNwbGl0KCcuJyk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoY2FuTm90VHJhdmVyc2VEZWVwZXIoKSkgcmV0dXJuIHt9O1xuICAgIHZhciBrZXkgPSBjbGVhbktleShzdGFjay5zaGlmdCgpKTtcbiAgICBpZiAoIW9iamVjdFtrZXldICYmIEVtcHR5KSBvYmplY3Rba2V5XSA9IG5ldyBFbXB0eSgpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3QgPSB7fTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2FuTm90VHJhdmVyc2VEZWVwZXIoKSkgcmV0dXJuIHt9O1xuICByZXR1cm4ge1xuICAgIG9iajogb2JqZWN0LFxuICAgIGs6IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNldFBhdGgob2JqZWN0LCBwYXRoLCBuZXdWYWx1ZSkge1xuICB2YXIgX2dldExhc3RPZlBhdGggPSBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCwgT2JqZWN0KSxcbiAgICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aC5rO1xuXG4gIG9ialtrXSA9IG5ld1ZhbHVlO1xufVxuZnVuY3Rpb24gcHVzaFBhdGgob2JqZWN0LCBwYXRoLCBuZXdWYWx1ZSwgY29uY2F0KSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aDIgPSBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCwgT2JqZWN0KSxcbiAgICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoMi5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGgyLms7XG5cbiAgb2JqW2tdID0gb2JqW2tdIHx8IFtdO1xuICBpZiAoY29uY2F0KSBvYmpba10gPSBvYmpba10uY29uY2F0KG5ld1ZhbHVlKTtcbiAgaWYgKCFjb25jYXQpIG9ialtrXS5wdXNoKG5ld1ZhbHVlKTtcbn1cbmZ1bmN0aW9uIGdldFBhdGgob2JqZWN0LCBwYXRoKSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aDMgPSBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aDMub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoMy5rO1xuXG4gIGlmICghb2JqKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gb2JqW2tdO1xufVxuZnVuY3Rpb24gZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFBhdGgoZGF0YSwga2V5KTtcblxuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBnZXRQYXRoKGRlZmF1bHREYXRhLCBrZXkpO1xufVxuZnVuY3Rpb24gZGVlcEV4dGVuZCh0YXJnZXQsIHNvdXJjZSwgb3ZlcndyaXRlKSB7XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgaWYgKHByb3AgIT09ICdfX3Byb3RvX18nICYmIHByb3AgIT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIGlmIChwcm9wIGluIHRhcmdldCkge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtwcm9wXSA9PT0gJ3N0cmluZycgfHwgdGFyZ2V0W3Byb3BdIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBzb3VyY2VbcHJvcF0gPT09ICdzdHJpbmcnIHx8IHNvdXJjZVtwcm9wXSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWVwRXh0ZW5kKHRhcmdldFtwcm9wXSwgc291cmNlW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbmZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCAnXFxcXCQmJyk7XG59XG52YXIgX2VudGl0eU1hcCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7JyxcbiAgJy8nOiAnJiN4MkY7J1xufTtcbmZ1bmN0aW9uIGVzY2FwZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YS5yZXBsYWNlKC9bJjw+XCInXFwvXS9nLCBmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIF9lbnRpdHlNYXBbc107XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbnZhciBpc0lFMTAgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50ICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSA+IC0xO1xuXG52YXIgUmVzb3VyY2VTdG9yZSA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhSZXNvdXJjZVN0b3JlLCBfRXZlbnRFbWl0dGVyKTtcblxuICBmdW5jdGlvbiBSZXNvdXJjZVN0b3JlKGRhdGEpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJ1xuICAgIH07XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVzb3VyY2VTdG9yZSk7XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihSZXNvdXJjZVN0b3JlKS5jYWxsKHRoaXMpKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICB9XG5cbiAgICBfdGhpcy5kYXRhID0gZGF0YSB8fCB7fTtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9ICcuJztcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmVzb3VyY2VTdG9yZSwgW3tcbiAgICBrZXk6IFwiYWRkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGROYW1lc3BhY2VzKG5zKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpIDwgMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMucHVzaChucyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZU5hbWVzcGFjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlcyhucykge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UobG5nLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSAmJiB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGguY29uY2F0KGtleSk7XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkUmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmVzb3VyY2UobG5nLCBucywga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHtcbiAgICAgICAgc2lsZW50OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSB0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO1xuICAgICAgaWYgKGtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSBrZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgICB2YXIgcGF0aCA9IFtsbmcsIG5zXTtcbiAgICAgIGlmIChrZXkpIHBhdGggPSBwYXRoLmNvbmNhdChrZXlTZXBhcmF0b3IgPyBrZXkuc3BsaXQoa2V5U2VwYXJhdG9yKSA6IGtleSk7XG5cbiAgICAgIGlmIChsbmcuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgICB2YWx1ZSA9IG5zO1xuICAgICAgICBucyA9IHBhdGhbMV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkTmFtZXNwYWNlcyhucyk7XG4gICAgICBzZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmVzb3VyY2VzKGxuZywgbnMsIHJlc291cmNlcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHtcbiAgICAgICAgc2lsZW50OiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgbSBpbiByZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvdXJjZXNbbV0gPT09ICdzdHJpbmcnIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkocmVzb3VyY2VzW21dKSA9PT0gJ1tvYmplY3QgQXJyYXldJykgdGhpcy5hZGRSZXNvdXJjZShsbmcsIG5zLCBtLCByZXNvdXJjZXNbbV0sIHtcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCByZXNvdXJjZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZUJ1bmRsZShsbmcsIG5zLCByZXNvdXJjZXMsIGRlZXAsIG92ZXJ3cml0ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHtcbiAgICAgICAgc2lsZW50OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgICAgZGVlcCA9IHJlc291cmNlcztcbiAgICAgICAgcmVzb3VyY2VzID0gbnM7XG4gICAgICAgIG5zID0gcGF0aFsxXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGROYW1lc3BhY2VzKG5zKTtcbiAgICAgIHZhciBwYWNrID0gZ2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgpIHx8IHt9O1xuXG4gICAgICBpZiAoZGVlcCkge1xuICAgICAgICBkZWVwRXh0ZW5kKHBhY2ssIHJlc291cmNlcywgb3ZlcndyaXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhY2sgPSBfb2JqZWN0U3ByZWFkKHt9LCBwYWNrLCByZXNvdXJjZXMpO1xuICAgICAgfVxuXG4gICAgICBzZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCwgcGFjayk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlUmVzb3VyY2VCdW5kbGUobG5nLCBucykge1xuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtsbmddW25zXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVOYW1lc3BhY2VzKG5zKTtcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlZCcsIGxuZywgbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5kZWZhdWx0TlM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgPT09ICd2MScpIHJldHVybiBfb2JqZWN0U3ByZWFkKHt9LCB7fSwgdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhW2xuZ107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSZXNvdXJjZVN0b3JlO1xufShFdmVudEVtaXR0ZXIpO1xuXG52YXIgcG9zdFByb2Nlc3NvciA9IHtcbiAgcHJvY2Vzc29yczoge30sXG4gIGFkZFBvc3RQcm9jZXNzb3I6IGZ1bmN0aW9uIGFkZFBvc3RQcm9jZXNzb3IobW9kdWxlKSB7XG4gICAgdGhpcy5wcm9jZXNzb3JzW21vZHVsZS5uYW1lXSA9IG1vZHVsZTtcbiAgfSxcbiAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUocHJvY2Vzc29ycywgdmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBwcm9jZXNzb3JzLmZvckVhY2goZnVuY3Rpb24gKHByb2Nlc3Nvcikge1xuICAgICAgaWYgKF90aGlzLnByb2Nlc3NvcnNbcHJvY2Vzc29yXSkgdmFsdWUgPSBfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0ucHJvY2Vzcyh2YWx1ZSwga2V5LCBvcHRpb25zLCB0cmFuc2xhdG9yKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbnZhciBjaGVja2VkTG9hZGVkRm9yID0ge307XG5cbnZhciBUcmFuc2xhdG9yID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKFRyYW5zbGF0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zbGF0b3Ioc2VydmljZXMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNsYXRvcik7XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUcmFuc2xhdG9yKS5jYWxsKHRoaXMpKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICB9XG5cbiAgICBjb3B5KFsncmVzb3VyY2VTdG9yZScsICdsYW5ndWFnZVV0aWxzJywgJ3BsdXJhbFJlc29sdmVyJywgJ2ludGVycG9sYXRvcicsICdiYWNrZW5kQ29ubmVjdG9yJywgJ2kxOG5Gb3JtYXQnLCAndXRpbHMnXSwgc2VydmljZXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9ICcuJztcbiAgICB9XG5cbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgndHJhbnNsYXRvcicpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUcmFuc2xhdG9yLCBbe1xuICAgIGtleTogXCJjaGFuZ2VMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VMYW5ndWFnZShsbmcpIHtcbiAgICAgIGlmIChsbmcpIHRoaXMubGFuZ3VhZ2UgPSBsbmc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImV4aXN0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleGlzdHMoa2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgICBpbnRlcnBvbGF0aW9uOiB7fVxuICAgICAgfTtcbiAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZShrZXksIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkICYmIHJlc29sdmVkLnJlcyAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRyYWN0RnJvbUtleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleHRyYWN0RnJvbUtleShrZXksIG9wdGlvbnMpIHtcbiAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICBpZiAobnNTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgbnNTZXBhcmF0b3IgPSAnOic7XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBuYW1lc3BhY2VzID0gb3B0aW9ucy5ucyB8fCB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TO1xuXG4gICAgICBpZiAobnNTZXBhcmF0b3IgJiYga2V5LmluZGV4T2YobnNTZXBhcmF0b3IpID4gLTEpIHtcbiAgICAgICAgdmFyIG0gPSBrZXkubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG5cbiAgICAgICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQobnNTZXBhcmF0b3IpO1xuICAgICAgICBpZiAobnNTZXBhcmF0b3IgIT09IGtleVNlcGFyYXRvciB8fCBuc1NlcGFyYXRvciA9PT0ga2V5U2VwYXJhdG9yICYmIHRoaXMub3B0aW9ucy5ucy5pbmRleE9mKHBhcnRzWzBdKSA+IC0xKSBuYW1lc3BhY2VzID0gcGFydHMuc2hpZnQoKTtcbiAgICAgICAga2V5ID0gcGFydHMuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnKSBuYW1lc3BhY2VzID0gW25hbWVzcGFjZXNdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIG5hbWVzcGFjZXM6IG5hbWVzcGFjZXNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRyYW5zbGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0cmFuc2xhdGUoa2V5cywgb3B0aW9ucywgbGFzdEtleSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChfdHlwZW9mKG9wdGlvbnMpICE9PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICAgIGlmIChrZXlzID09PSB1bmRlZmluZWQgfHwga2V5cyA9PT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpKSBrZXlzID0gW1N0cmluZyhrZXlzKV07XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcblxuICAgICAgdmFyIF90aGlzJGV4dHJhY3RGcm9tS2V5ID0gdGhpcy5leHRyYWN0RnJvbUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0sIG9wdGlvbnMpLFxuICAgICAgICAgIGtleSA9IF90aGlzJGV4dHJhY3RGcm9tS2V5LmtleSxcbiAgICAgICAgICBuYW1lc3BhY2VzID0gX3RoaXMkZXh0cmFjdEZyb21LZXkubmFtZXNwYWNlcztcblxuICAgICAgdmFyIG5hbWVzcGFjZSA9IG5hbWVzcGFjZXNbbmFtZXNwYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBsbmcgPSBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlO1xuICAgICAgdmFyIGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlID0gb3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZSB8fCB0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7XG5cbiAgICAgIGlmIChsbmcgJiYgbG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSB7XG4gICAgICAgIGlmIChhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSkge1xuICAgICAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgfHwgdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgICAgIHJldHVybiBuYW1lc3BhY2UgKyBuc1NlcGFyYXRvciArIGtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZShrZXlzLCBvcHRpb25zKTtcbiAgICAgIHZhciByZXMgPSByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXM7XG4gICAgICB2YXIgcmVzVXNlZEtleSA9IHJlc29sdmVkICYmIHJlc29sdmVkLnVzZWRLZXkgfHwga2V5O1xuICAgICAgdmFyIHJlc0V4YWN0VXNlZEtleSA9IHJlc29sdmVkICYmIHJlc29sdmVkLmV4YWN0VXNlZEtleSB8fCBrZXk7XG4gICAgICB2YXIgcmVzVHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkocmVzKTtcbiAgICAgIHZhciBub09iamVjdCA9IFsnW29iamVjdCBOdW1iZXJdJywgJ1tvYmplY3QgRnVuY3Rpb25dJywgJ1tvYmplY3QgUmVnRXhwXSddO1xuICAgICAgdmFyIGpvaW5BcnJheXMgPSBvcHRpb25zLmpvaW5BcnJheXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuam9pbkFycmF5cyA6IHRoaXMub3B0aW9ucy5qb2luQXJyYXlzO1xuICAgICAgdmFyIGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ID0gIXRoaXMuaTE4bkZvcm1hdCB8fCB0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7XG4gICAgICB2YXIgaGFuZGxlQXNPYmplY3QgPSB0eXBlb2YgcmVzICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcmVzICE9PSAnYm9vbGVhbicgJiYgdHlwZW9mIHJlcyAhPT0gJ251bWJlcic7XG5cbiAgICAgIGlmIChoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCAmJiByZXMgJiYgaGFuZGxlQXNPYmplY3QgJiYgbm9PYmplY3QuaW5kZXhPZihyZXNUeXBlKSA8IDAgJiYgISh0eXBlb2Ygam9pbkFycmF5cyA9PT0gJ3N0cmluZycgJiYgcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnJldHVybk9iamVjdHMgJiYgIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhJyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIgPyB0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKHJlc1VzZWRLZXksIHJlcywgb3B0aW9ucykgOiBcImtleSAnXCIuY29uY2F0KGtleSwgXCIgKFwiKS5jb25jYXQodGhpcy5sYW5ndWFnZSwgXCIpJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgIHZhciByZXNUeXBlSXNBcnJheSA9IHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgICAgdmFyIGNvcHkgPSByZXNUeXBlSXNBcnJheSA/IFtdIDoge307XG4gICAgICAgICAgdmFyIG5ld0tleVRvVXNlID0gcmVzVHlwZUlzQXJyYXkgPyByZXNFeGFjdFVzZWRLZXkgOiByZXNVc2VkS2V5O1xuXG4gICAgICAgICAgZm9yICh2YXIgbSBpbiByZXMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCBtKSkge1xuICAgICAgICAgICAgICB2YXIgZGVlcEtleSA9IFwiXCIuY29uY2F0KG5ld0tleVRvVXNlKS5jb25jYXQoa2V5U2VwYXJhdG9yKS5jb25jYXQobSk7XG4gICAgICAgICAgICAgIGNvcHlbbV0gPSB0aGlzLnRyYW5zbGF0ZShkZWVwS2V5LCBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgam9pbkFycmF5czogZmFsc2UsXG4gICAgICAgICAgICAgICAgbnM6IG5hbWVzcGFjZXNcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAoY29weVttXSA9PT0gZGVlcEtleSkgY29weVttXSA9IHJlc1ttXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXMgPSBjb3B5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ICYmIHR5cGVvZiBqb2luQXJyYXlzID09PSAnc3RyaW5nJyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb2luKGpvaW5BcnJheXMpO1xuICAgICAgICBpZiAocmVzKSByZXMgPSB0aGlzLmV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5cywgb3B0aW9ucywgbGFzdEtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdXNlZERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgdmFyIHVzZWRLZXkgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuICAgICAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gVHJhbnNsYXRvci5oYXNEZWZhdWx0VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWVTdWZmaXggPSBuZWVkc1BsdXJhbEhhbmRsaW5nID8gdGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobG5nLCBvcHRpb25zLmNvdW50KSA6ICcnO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChkZWZhdWx0VmFsdWVTdWZmaXgpXSB8fCBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZExvb2t1cChyZXMpICYmIGhhc0RlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIHVzZWREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICByZXMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZExvb2t1cChyZXMpKSB7XG4gICAgICAgICAgdXNlZEtleSA9IHRydWU7XG4gICAgICAgICAgcmVzID0ga2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVwZGF0ZU1pc3NpbmcgPSBoYXNEZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlICE9PSByZXMgJiYgdGhpcy5vcHRpb25zLnVwZGF0ZU1pc3Npbmc7XG5cbiAgICAgICAgaWYgKHVzZWRLZXkgfHwgdXNlZERlZmF1bHQgfHwgdXBkYXRlTWlzc2luZykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyh1cGRhdGVNaXNzaW5nID8gJ3VwZGF0ZUtleScgOiAnbWlzc2luZ0tleScsIGxuZywgbmFtZXNwYWNlLCBrZXksIHVwZGF0ZU1pc3NpbmcgPyBkZWZhdWx0VmFsdWUgOiByZXMpO1xuXG4gICAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgICAgdmFyIGZrID0gdGhpcy5yZXNvbHZlKGtleSwgX29iamVjdFNwcmVhZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgICBrZXlTZXBhcmF0b3I6IGZhbHNlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAoZmsgJiYgZmsucmVzKSB0aGlzLmxvZ2dlci53YXJuKCdTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGxuZ3MgPSBbXTtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tMbmdzID0gdGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyA9PT0gJ2ZhbGxiYWNrJyAmJiBmYWxsYmFja0xuZ3MgJiYgZmFsbGJhY2tMbmdzWzBdKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGxiYWNrTG5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBsbmdzLnB1c2goZmFsbGJhY2tMbmdzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvID09PSAnYWxsJykge1xuICAgICAgICAgICAgbG5ncyA9IHRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxuZ3MucHVzaChvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uIHNlbmQobCwgaywgZmFsbGJhY2tWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKGwsIG5hbWVzcGFjZSwgaywgdXBkYXRlTWlzc2luZyA/IGZhbGxiYWNrVmFsdWUgOiByZXMsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfdGhpczIuYmFja2VuZENvbm5lY3RvciAmJiBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZykge1xuICAgICAgICAgICAgICBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyhsLCBuYW1lc3BhY2UsIGssIHVwZGF0ZU1pc3NpbmcgPyBmYWxsYmFja1ZhbHVlIDogcmVzLCB1cGRhdGVNaXNzaW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXMyLmVtaXQoJ21pc3NpbmdLZXknLCBsLCBuYW1lc3BhY2UsIGssIHJlcyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzICYmIG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgbG5ncy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXhlcyhsYW5ndWFnZSkuZm9yRWFjaChmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICBzZW5kKFtsYW5ndWFnZV0sIGtleSArIHN1ZmZpeCwgb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChzdWZmaXgpXSB8fCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbmQobG5ncywga2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyA9IHRoaXMuZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXlzLCBvcHRpb25zLCByZXNvbHZlZCwgbGFzdEtleSk7XG4gICAgICAgIGlmICh1c2VkS2V5ICYmIHJlcyA9PT0ga2V5ICYmIHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkpIHJlcyA9IFwiXCIuY29uY2F0KG5hbWVzcGFjZSwgXCI6XCIpLmNvbmNhdChrZXkpO1xuICAgICAgICBpZiAodXNlZEtleSAmJiB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcikgcmVzID0gdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIocmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0ZW5kVHJhbnNsYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXksIG9wdGlvbnMsIHJlc29sdmVkLCBsYXN0S2V5KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaTE4bkZvcm1hdCAmJiB0aGlzLmkxOG5Gb3JtYXQucGFyc2UpIHtcbiAgICAgICAgcmVzID0gdGhpcy5pMThuRm9ybWF0LnBhcnNlKHJlcywgb3B0aW9ucywgcmVzb2x2ZWQudXNlZExuZywgcmVzb2x2ZWQudXNlZE5TLCByZXNvbHZlZC51c2VkS2V5LCB7XG4gICAgICAgICAgcmVzb2x2ZWQ6IHJlc29sdmVkXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5za2lwSW50ZXJwb2xhdGlvbikge1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcnBvbGF0aW9uKSB0aGlzLmludGVycG9sYXRvci5pbml0KF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uKVxuICAgICAgICB9KSk7XG4gICAgICAgIHZhciBza2lwT25WYXJpYWJsZXMgPSBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyB8fCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7XG4gICAgICAgIHZhciBuZXN0QmVmO1xuXG4gICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXIgbmIgPSByZXMubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG4gICAgICAgICAgbmVzdEJlZiA9IG5iICYmIG5iLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5yZXBsYWNlICYmIHR5cGVvZiBvcHRpb25zLnJlcGxhY2UgIT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBsYWNlIDogb3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpIGRhdGEgPSBfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLCBkYXRhKTtcbiAgICAgICAgcmVzID0gdGhpcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUocmVzLCBkYXRhLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgdmFyIG5hID0gcmVzLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO1xuICAgICAgICAgIHZhciBuZXN0QWZ0ID0gbmEgJiYgbmEubGVuZ3RoO1xuICAgICAgICAgIGlmIChuZXN0QmVmIDwgbmVzdEFmdCkgb3B0aW9ucy5uZXN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5uZXN0ICE9PSBmYWxzZSkgcmVzID0gdGhpcy5pbnRlcnBvbGF0b3IubmVzdChyZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhc3RLZXkgJiYgbGFzdEtleVswXSA9PT0gYXJnc1swXSAmJiAhb3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgICAgICBfdGhpczMubG9nZ2VyLndhcm4oXCJJdCBzZWVtcyB5b3UgYXJlIG5lc3RpbmcgcmVjdXJzaXZlbHkga2V5OiBcIi5jb25jYXQoYXJnc1swXSwgXCIgaW4ga2V5OiBcIikuY29uY2F0KGtleVswXSkpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnRyYW5zbGF0ZS5hcHBseShfdGhpczMsIGFyZ3MuY29uY2F0KFtrZXldKSk7XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcnBvbGF0aW9uKSB0aGlzLmludGVycG9sYXRvci5yZXNldCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zdFByb2Nlc3MgPSBvcHRpb25zLnBvc3RQcm9jZXNzIHx8IHRoaXMub3B0aW9ucy5wb3N0UHJvY2VzcztcbiAgICAgIHZhciBwb3N0UHJvY2Vzc29yTmFtZXMgPSB0eXBlb2YgcG9zdFByb2Nlc3MgPT09ICdzdHJpbmcnID8gW3Bvc3RQcm9jZXNzXSA6IHBvc3RQcm9jZXNzO1xuXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQgJiYgcmVzICE9PSBudWxsICYmIHBvc3RQcm9jZXNzb3JOYW1lcyAmJiBwb3N0UHJvY2Vzc29yTmFtZXMubGVuZ3RoICYmIG9wdGlvbnMuYXBwbHlQb3N0UHJvY2Vzc29yICE9PSBmYWxzZSkge1xuICAgICAgICByZXMgPSBwb3N0UHJvY2Vzc29yLmhhbmRsZShwb3N0UHJvY2Vzc29yTmFtZXMsIHJlcywga2V5LCB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkID8gX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgaTE4blJlc29sdmVkOiByZXNvbHZlZFxuICAgICAgICB9LCBvcHRpb25zKSA6IG9wdGlvbnMsIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNvbHZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmUoa2V5cykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIHZhciB1c2VkS2V5O1xuICAgICAgdmFyIGV4YWN0VXNlZEtleTtcbiAgICAgIHZhciB1c2VkTG5nO1xuICAgICAgdmFyIHVzZWROUztcbiAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIGtleXMgPSBba2V5c107XG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBleHRyYWN0ZWQgPSBfdGhpczQuZXh0cmFjdEZyb21LZXkoaywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIGtleSA9IGV4dHJhY3RlZC5rZXk7XG4gICAgICAgIHVzZWRLZXkgPSBrZXk7XG4gICAgICAgIHZhciBuYW1lc3BhY2VzID0gZXh0cmFjdGVkLm5hbWVzcGFjZXM7XG4gICAgICAgIGlmIChfdGhpczQub3B0aW9ucy5mYWxsYmFja05TKSBuYW1lc3BhY2VzID0gbmFtZXNwYWNlcy5jb25jYXQoX3RoaXM0Lm9wdGlvbnMuZmFsbGJhY2tOUyk7XG4gICAgICAgIHZhciBuZWVkc1BsdXJhbEhhbmRsaW5nID0gb3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNvdW50ICE9PSAnc3RyaW5nJztcbiAgICAgICAgdmFyIG5lZWRzQ29udGV4dEhhbmRsaW5nID0gb3B0aW9ucy5jb250ZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5jb250ZXh0ICE9PSAnJztcbiAgICAgICAgdmFyIGNvZGVzID0gb3B0aW9ucy5sbmdzID8gb3B0aW9ucy5sbmdzIDogX3RoaXM0Lmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG9wdGlvbnMubG5nIHx8IF90aGlzNC5sYW5ndWFnZSwgb3B0aW9ucy5mYWxsYmFja0xuZyk7XG4gICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG4gICAgICAgICAgdXNlZE5TID0gbnM7XG5cbiAgICAgICAgICBpZiAoIWNoZWNrZWRMb2FkZWRGb3JbXCJcIi5jb25jYXQoY29kZXNbMF0sIFwiLVwiKS5jb25jYXQobnMpXSAmJiBfdGhpczQudXRpbHMgJiYgX3RoaXM0LnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSAmJiAhX3RoaXM0LnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh1c2VkTlMpKSB7XG4gICAgICAgICAgICBjaGVja2VkTG9hZGVkRm9yW1wiXCIuY29uY2F0KGNvZGVzWzBdLCBcIi1cIikuY29uY2F0KG5zKV0gPSB0cnVlO1xuXG4gICAgICAgICAgICBfdGhpczQubG9nZ2VyLndhcm4oXCJrZXkgXFxcIlwiLmNvbmNhdCh1c2VkS2V5LCBcIlxcXCIgZm9yIGxhbmd1YWdlcyBcXFwiXCIpLmNvbmNhdChjb2Rlcy5qb2luKCcsICcpLCBcIlxcXCIgd29uJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSBcXFwiXCIpLmNvbmNhdCh1c2VkTlMsIFwiXFxcIiB3YXMgbm90IHlldCBsb2FkZWRcIiksICdUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISEnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG4gICAgICAgICAgICB1c2VkTG5nID0gY29kZTtcbiAgICAgICAgICAgIHZhciBmaW5hbEtleSA9IGtleTtcbiAgICAgICAgICAgIHZhciBmaW5hbEtleXMgPSBbZmluYWxLZXldO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXM0LmkxOG5Gb3JtYXQgJiYgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cykge1xuICAgICAgICAgICAgICBfdGhpczQuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKGZpbmFsS2V5cywga2V5LCBjb2RlLCBucywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgcGx1cmFsU3VmZml4O1xuICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykgcGx1cmFsU3VmZml4ID0gX3RoaXM0LnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChjb2RlLCBvcHRpb25zLmNvdW50KTtcbiAgICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcgJiYgbmVlZHNDb250ZXh0SGFuZGxpbmcpIGZpbmFsS2V5cy5wdXNoKGZpbmFsS2V5ICsgcGx1cmFsU3VmZml4KTtcbiAgICAgICAgICAgICAgaWYgKG5lZWRzQ29udGV4dEhhbmRsaW5nKSBmaW5hbEtleXMucHVzaChmaW5hbEtleSArPSBcIlwiLmNvbmNhdChfdGhpczQub3B0aW9ucy5jb250ZXh0U2VwYXJhdG9yKS5jb25jYXQob3B0aW9ucy5jb250ZXh0KSk7XG4gICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSBmaW5hbEtleXMucHVzaChmaW5hbEtleSArPSBwbHVyYWxTdWZmaXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcG9zc2libGVLZXk7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb3NzaWJsZUtleSA9IGZpbmFsS2V5cy5wb3AoKSkge1xuICAgICAgICAgICAgICBpZiAoIV90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkge1xuICAgICAgICAgICAgICAgIGV4YWN0VXNlZEtleSA9IHBvc3NpYmxlS2V5O1xuICAgICAgICAgICAgICAgIGZvdW5kID0gX3RoaXM0LmdldFJlc291cmNlKGNvZGUsIG5zLCBwb3NzaWJsZUtleSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlczogZm91bmQsXG4gICAgICAgIHVzZWRLZXk6IHVzZWRLZXksXG4gICAgICAgIGV4YWN0VXNlZEtleTogZXhhY3RVc2VkS2V5LFxuICAgICAgICB1c2VkTG5nOiB1c2VkTG5nLFxuICAgICAgICB1c2VkTlM6IHVzZWROU1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNWYWxpZExvb2t1cFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkTG9va3VwKHJlcykge1xuICAgICAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsICYmIHJlcyA9PT0gbnVsbCkgJiYgISghdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nICYmIHJlcyA9PT0gJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZShjb2RlLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZSkgcmV0dXJuIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShjb2RlLCBucywga2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiaGFzRGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0RlZmF1bHRWYWx1ZShvcHRpb25zKSB7XG4gICAgICB2YXIgcHJlZml4ID0gJ2RlZmF1bHRWYWx1ZSc7XG5cbiAgICAgIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSAmJiBwcmVmaXggPT09IG9wdGlvbi5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgJiYgdW5kZWZpbmVkICE9PSBvcHRpb25zW29wdGlvbl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRyYW5zbGF0b3I7XG59KEV2ZW50RW1pdHRlcik7XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5cbnZhciBMYW5ndWFnZVV0aWwgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExhbmd1YWdlVXRpbChvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExhbmd1YWdlVXRpbCk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMud2hpdGVsaXN0ID0gdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgZmFsc2U7XG4gICAgdGhpcy5zdXBwb3J0ZWRMbmdzID0gdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgZmFsc2U7XG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnbGFuZ3VhZ2VVdGlscycpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExhbmd1YWdlVXRpbCwgW3tcbiAgICBrZXk6IFwiZ2V0U2NyaXB0UGFydEZyb21Db2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNjcmlwdFBhcnRGcm9tQ29kZShjb2RlKSB7XG4gICAgICBpZiAoIWNvZGUgfHwgY29kZS5pbmRleE9mKCctJykgPCAwKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBwID0gY29kZS5zcGxpdCgnLScpO1xuICAgICAgaWYgKHAubGVuZ3RoID09PSAyKSByZXR1cm4gbnVsbDtcbiAgICAgIHAucG9wKCk7XG4gICAgICBpZiAocFtwLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCkgPT09ICd4JykgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUocC5qb2luKCctJykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKSB7XG4gICAgICBpZiAoIWNvZGUgfHwgY29kZS5pbmRleE9mKCctJykgPCAwKSByZXR1cm4gY29kZTtcbiAgICAgIHZhciBwID0gY29kZS5zcGxpdCgnLScpO1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHBbMF0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JtYXRMYW5ndWFnZUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpIHtcbiAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycgJiYgY29kZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICB2YXIgc3BlY2lhbENhc2VzID0gWydoYW5zJywgJ2hhbnQnLCAnbGF0bicsICdjeXJsJywgJ2NhbnMnLCAnbW9uZycsICdhcmFiJ107XG4gICAgICAgIHZhciBwID0gY29kZS5zcGxpdCgnLScpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nKSB7XG4gICAgICAgICAgcCA9IHAubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHAubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgcFswXSA9IHBbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBwWzFdID0gcFsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzFdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMV0gPSBjYXBpdGFsaXplKHBbMV0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwWzBdID0gcFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChwWzFdLmxlbmd0aCA9PT0gMikgcFsxXSA9IHBbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAocFswXSAhPT0gJ3NnbicgJiYgcFsyXS5sZW5ndGggPT09IDIpIHBbMl0gPSBwWzJdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMV0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsxXSA9IGNhcGl0YWxpemUocFsxXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsyXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzJdID0gY2FwaXRhbGl6ZShwWzJdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHAuam9pbignLScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNsZWFuQ29kZSB8fCB0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nID8gY29kZS50b0xvd2VyQ2FzZSgpIDogY29kZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNXaGl0ZWxpc3RlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlbGlzdGVkKGNvZGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlcHJlY2F0ZSgnbGFuZ3VhZ2VVdGlscy5pc1doaXRlbGlzdGVkJywgJ2Z1bmN0aW9uIFwiaXNXaGl0ZWxpc3RlZFwiIHdpbGwgYmUgcmVuYW1lZCB0byBcImlzU3VwcG9ydGVkQ29kZVwiIGluIHRoZSBuZXh0IG1ham9yIC0gcGxlYXNlIG1ha2Ugc3VyZSB0byByZW5hbWUgaXRcXCdzIHVzYWdlIGFzYXAuJyk7XG4gICAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRlZENvZGUoY29kZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzU3VwcG9ydGVkQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZENvZGUoY29kZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkID09PSAnbGFuZ3VhZ2VPbmx5JyB8fCB0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIXRoaXMuc3VwcG9ydGVkTG5ncyB8fCAhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aCB8fCB0aGlzLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihjb2RlKSA+IC0xO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRCZXN0TWF0Y2hGcm9tQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKGNvZGVzKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIWNvZGVzKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm47XG5cbiAgICAgICAgdmFyIGNsZWFuZWRMbmcgPSBfdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSk7XG5cbiAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgX3RoaXMuaXNTdXBwb3J0ZWRDb2RlKGNsZWFuZWRMbmcpKSBmb3VuZCA9IGNsZWFuZWRMbmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFmb3VuZCAmJiB0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncykge1xuICAgICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgaWYgKGZvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICB2YXIgbG5nT25seSA9IF90aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLmlzU3VwcG9ydGVkQ29kZShsbmdPbmx5KSkgcmV0dXJuIGZvdW5kID0gbG5nT25seTtcbiAgICAgICAgICBmb3VuZCA9IF90aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKGZ1bmN0aW9uIChzdXBwb3J0ZWRMbmcpIHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRMbmcuaW5kZXhPZihsbmdPbmx5KSA9PT0gMCkgcmV0dXJuIHN1cHBvcnRlZExuZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF07XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZhbGxiYWNrQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmFsbGJhY2tDb2RlcyhmYWxsYmFja3MsIGNvZGUpIHtcbiAgICAgIGlmICghZmFsbGJhY2tzKSByZXR1cm4gW107XG4gICAgICBpZiAodHlwZW9mIGZhbGxiYWNrcyA9PT0gJ2Z1bmN0aW9uJykgZmFsbGJhY2tzID0gZmFsbGJhY2tzKGNvZGUpO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdzdHJpbmcnKSBmYWxsYmFja3MgPSBbZmFsbGJhY2tzXTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGZhbGxiYWNrcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHJldHVybiBmYWxsYmFja3M7XG4gICAgICBpZiAoIWNvZGUpIHJldHVybiBmYWxsYmFja3NbXCJkZWZhdWx0XCJdIHx8IFtdO1xuICAgICAgdmFyIGZvdW5kID0gZmFsbGJhY2tzW2NvZGVdO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IGZhbGxiYWNrc1tcImRlZmF1bHRcIl07XG4gICAgICByZXR1cm4gZm91bmQgfHwgW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvUmVzb2x2ZUhpZXJhcmNoeVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1Jlc29sdmVIaWVyYXJjaHkoY29kZSwgZmFsbGJhY2tDb2RlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGZhbGxiYWNrQ29kZXMgPSB0aGlzLmdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tDb2RlIHx8IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyB8fCBbXSwgY29kZSk7XG4gICAgICB2YXIgY29kZXMgPSBbXTtcblxuICAgICAgdmFyIGFkZENvZGUgPSBmdW5jdGlvbiBhZGRDb2RlKGMpIHtcbiAgICAgICAgaWYgKCFjKSByZXR1cm47XG5cbiAgICAgICAgaWYgKF90aGlzMi5pc1N1cHBvcnRlZENvZGUoYykpIHtcbiAgICAgICAgICBjb2Rlcy5wdXNoKGMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMi5sb2dnZXIud2FybihcInJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiBcIi5jb25jYXQoYykpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnbGFuZ3VhZ2VPbmx5JykgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScgJiYgdGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICBhZGRDb2RlKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpKTtcbiAgICAgIH1cblxuICAgICAgZmFsbGJhY2tDb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChmYykge1xuICAgICAgICBpZiAoY29kZXMuaW5kZXhPZihmYykgPCAwKSBhZGRDb2RlKF90aGlzMi5mb3JtYXRMYW5ndWFnZUNvZGUoZmMpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvZGVzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMYW5ndWFnZVV0aWw7XG59KCk7XG5cbnZhciBzZXRzID0gW3tcbiAgbG5nczogWydhY2gnLCAnYWsnLCAnYW0nLCAnYXJuJywgJ2JyJywgJ2ZpbCcsICdndW4nLCAnbG4nLCAnbWZlJywgJ21nJywgJ21pJywgJ29jJywgJ3B0JywgJ3B0LUJSJywgJ3RnJywgJ3RsJywgJ3RpJywgJ3RyJywgJ3V6JywgJ3dhJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxXG59LCB7XG4gIGxuZ3M6IFsnYWYnLCAnYW4nLCAnYXN0JywgJ2F6JywgJ2JnJywgJ2JuJywgJ2NhJywgJ2RhJywgJ2RlJywgJ2RldicsICdlbCcsICdlbicsICdlbycsICdlcycsICdldCcsICdldScsICdmaScsICdmbycsICdmdXInLCAnZnknLCAnZ2wnLCAnZ3UnLCAnaGEnLCAnaGknLCAnaHUnLCAnaHknLCAnaWEnLCAnaXQnLCAna24nLCAna3UnLCAnbGInLCAnbWFpJywgJ21sJywgJ21uJywgJ21yJywgJ25haCcsICduYXAnLCAnbmInLCAnbmUnLCAnbmwnLCAnbm4nLCAnbm8nLCAnbnNvJywgJ3BhJywgJ3BhcCcsICdwbXMnLCAncHMnLCAncHQtUFQnLCAncm0nLCAnc2NvJywgJ3NlJywgJ3NpJywgJ3NvJywgJ3NvbicsICdzcScsICdzdicsICdzdycsICd0YScsICd0ZScsICd0aycsICd1cicsICd5byddLFxuICBucjogWzEsIDJdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ2F5JywgJ2JvJywgJ2NnZycsICdmYScsICdodCcsICdpZCcsICdqYScsICdqYm8nLCAna2EnLCAna2snLCAna20nLCAna28nLCAna3knLCAnbG8nLCAnbXMnLCAnc2FoJywgJ3N1JywgJ3RoJywgJ3R0JywgJ3VnJywgJ3ZpJywgJ3dvJywgJ3poJ10sXG4gIG5yOiBbMV0sXG4gIGZjOiAzXG59LCB7XG4gIGxuZ3M6IFsnYmUnLCAnYnMnLCAnY25yJywgJ2R6JywgJ2hyJywgJ3J1JywgJ3NyJywgJ3VrJ10sXG4gIG5yOiBbMSwgMiwgNV0sXG4gIGZjOiA0XG59LCB7XG4gIGxuZ3M6IFsnYXInXSxcbiAgbnI6IFswLCAxLCAyLCAzLCAxMSwgMTAwXSxcbiAgZmM6IDVcbn0sIHtcbiAgbG5nczogWydjcycsICdzayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNlxufSwge1xuICBsbmdzOiBbJ2NzYicsICdwbCddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogN1xufSwge1xuICBsbmdzOiBbJ2N5J10sXG4gIG5yOiBbMSwgMiwgMywgOF0sXG4gIGZjOiA4XG59LCB7XG4gIGxuZ3M6IFsnZnInXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDlcbn0sIHtcbiAgbG5nczogWydnYSddLFxuICBucjogWzEsIDIsIDMsIDcsIDExXSxcbiAgZmM6IDEwXG59LCB7XG4gIGxuZ3M6IFsnZ2QnXSxcbiAgbnI6IFsxLCAyLCAzLCAyMF0sXG4gIGZjOiAxMVxufSwge1xuICBsbmdzOiBbJ2lzJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxMlxufSwge1xuICBsbmdzOiBbJ2p2J10sXG4gIG5yOiBbMCwgMV0sXG4gIGZjOiAxM1xufSwge1xuICBsbmdzOiBbJ2t3J10sXG4gIG5yOiBbMSwgMiwgMywgNF0sXG4gIGZjOiAxNFxufSwge1xuICBsbmdzOiBbJ2x0J10sXG4gIG5yOiBbMSwgMiwgMTBdLFxuICBmYzogMTVcbn0sIHtcbiAgbG5nczogWydsdiddLFxuICBucjogWzEsIDIsIDBdLFxuICBmYzogMTZcbn0sIHtcbiAgbG5nczogWydtayddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTdcbn0sIHtcbiAgbG5nczogWydtbmsnXSxcbiAgbnI6IFswLCAxLCAyXSxcbiAgZmM6IDE4XG59LCB7XG4gIGxuZ3M6IFsnbXQnXSxcbiAgbnI6IFsxLCAyLCAxMSwgMjBdLFxuICBmYzogMTlcbn0sIHtcbiAgbG5nczogWydvciddLFxuICBucjogWzIsIDFdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ3JvJ10sXG4gIG5yOiBbMSwgMiwgMjBdLFxuICBmYzogMjBcbn0sIHtcbiAgbG5nczogWydzbCddLFxuICBucjogWzUsIDEsIDIsIDNdLFxuICBmYzogMjFcbn0sIHtcbiAgbG5nczogWydoZScsICdpdyddLFxuICBucjogWzEsIDIsIDIwLCAyMV0sXG4gIGZjOiAyMlxufV07XG52YXIgX3J1bGVzUGx1cmFsc1R5cGVzID0ge1xuICAxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPiAxKTtcbiAgfSxcbiAgMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9IDEpO1xuICB9LFxuICAzOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgNDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDU6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiBuID09IDIgPyAyIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTAgPyAzIDogbiAlIDEwMCA+PSAxMSA/IDQgOiA1KTtcbiAgfSxcbiAgNjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA+PSAyICYmIG4gPD0gNCA/IDEgOiAyKTtcbiAgfSxcbiAgNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiAlIDEwID49IDIgJiYgbiAlIDEwIDw9IDQgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgODogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gIT0gOCAmJiBuICE9IDExID8gMiA6IDMpO1xuICB9LFxuICA5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPj0gMik7XG4gIH0sXG4gIDEwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA8IDcgPyAyIDogbiA8IDExID8gMyA6IDQpO1xuICB9LFxuICAxMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiA9PSAxMSA/IDAgOiBuID09IDIgfHwgbiA9PSAxMiA/IDEgOiBuID4gMiAmJiBuIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDEyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCAhPSAxIHx8IG4gJSAxMDAgPT0gMTEpO1xuICB9LFxuICAxMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9PSAwKTtcbiAgfSxcbiAgMTQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuID09IDMgPyAyIDogMyk7XG4gIH0sXG4gIDE1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAlIDEwID49IDIgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgMTY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICE9PSAwID8gMSA6IDIpO1xuICB9LFxuICAxNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiAxKTtcbiAgfSxcbiAgMTg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiAyKTtcbiAgfSxcbiAgMTk6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMSAmJiBuICUgMTAwIDwgMTEgPyAxIDogbiAlIDEwMCA+IDEwICYmIG4gJSAxMDAgPCAyMCA/IDIgOiAzKTtcbiAgfSxcbiAgMjA6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMCAmJiBuICUgMTAwIDwgMjAgPyAxIDogMik7XG4gIH0sXG4gIDIxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMDAgPT0gMSA/IDEgOiBuICUgMTAwID09IDIgPyAyIDogbiAlIDEwMCA9PSAzIHx8IG4gJSAxMDAgPT0gNCA/IDMgOiAwKTtcbiAgfSxcbiAgMjI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiAobiA8IDAgfHwgbiA+IDEwKSAmJiBuICUgMTAgPT0gMCA/IDIgOiAzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlUnVsZXMoKSB7XG4gIHZhciBydWxlcyA9IHt9O1xuICBzZXRzLmZvckVhY2goZnVuY3Rpb24gKHNldCkge1xuICAgIHNldC5sbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgIHJ1bGVzW2xdID0ge1xuICAgICAgICBudW1iZXJzOiBzZXQubnIsXG4gICAgICAgIHBsdXJhbHM6IF9ydWxlc1BsdXJhbHNUeXBlc1tzZXQuZmNdXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG52YXIgUGx1cmFsUmVzb2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBsdXJhbFJlc29sdmVyKGxhbmd1YWdlVXRpbHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGx1cmFsUmVzb2x2ZXIpO1xuXG4gICAgdGhpcy5sYW5ndWFnZVV0aWxzID0gbGFuZ3VhZ2VVdGlscztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3BsdXJhbFJlc29sdmVyJyk7XG4gICAgdGhpcy5ydWxlcyA9IGNyZWF0ZVJ1bGVzKCk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUGx1cmFsUmVzb2x2ZXIsIFt7XG4gICAga2V5OiBcImFkZFJ1bGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUnVsZShsbmcsIG9iaikge1xuICAgICAgdGhpcy5ydWxlc1tsbmddID0gb2JqO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSdWxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJ1bGUoY29kZSkge1xuICAgICAgcmV0dXJuIHRoaXMucnVsZXNbY29kZV0gfHwgdGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJuZWVkc1BsdXJhbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZWVkc1BsdXJhbChjb2RlKSB7XG4gICAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlKTtcbiAgICAgIHJldHVybiBydWxlICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPiAxO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRQbHVyYWxGb3Jtc09mS2V5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBsdXJhbEZvcm1zT2ZLZXkoY29kZSwga2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdWZmaXhlcyhjb2RlKS5tYXAoZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgICByZXR1cm4ga2V5ICsgc3VmZml4O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN1ZmZpeGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeGVzKGNvZGUpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUpO1xuXG4gICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcnVsZS5udW1iZXJzLm1hcChmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nZXRTdWZmaXgoY29kZSwgbnVtYmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VmZml4KGNvZGUsIGNvdW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSk7XG5cbiAgICAgIGlmIChydWxlKSB7XG4gICAgICAgIHZhciBpZHggPSBydWxlLm5vQWJzID8gcnVsZS5wbHVyYWxzKGNvdW50KSA6IHJ1bGUucGx1cmFscyhNYXRoLmFicyhjb3VudCkpO1xuICAgICAgICB2YXIgc3VmZml4ID0gcnVsZS5udW1iZXJzW2lkeF07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICAgIGlmIChzdWZmaXggPT09IDIpIHtcbiAgICAgICAgICAgIHN1ZmZpeCA9ICdwbHVyYWwnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VmZml4ID09PSAxKSB7XG4gICAgICAgICAgICBzdWZmaXggPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0dXJuU3VmZml4ID0gZnVuY3Rpb24gcmV0dXJuU3VmZml4KCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5wcmVwZW5kICYmIHN1ZmZpeC50b1N0cmluZygpID8gX3RoaXMyLm9wdGlvbnMucHJlcGVuZCArIHN1ZmZpeC50b1N0cmluZygpIDogc3VmZml4LnRvU3RyaW5nKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YxJykge1xuICAgICAgICAgIGlmIChzdWZmaXggPT09IDEpIHJldHVybiAnJztcbiAgICAgICAgICBpZiAodHlwZW9mIHN1ZmZpeCA9PT0gJ251bWJlcicpIHJldHVybiBcIl9wbHVyYWxfXCIuY29uY2F0KHN1ZmZpeC50b1N0cmluZygpKTtcbiAgICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID09PSAndjInKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHVyblN1ZmZpeCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiByZXR1cm5TdWZmaXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlcGVuZCAmJiBpZHgudG9TdHJpbmcoKSA/IHRoaXMub3B0aW9ucy5wcmVwZW5kICsgaWR4LnRvU3RyaW5nKCkgOiBpZHgudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXIud2FybihcIm5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogXCIuY29uY2F0KGNvZGUpKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUGx1cmFsUmVzb2x2ZXI7XG59KCk7XG5cbnZhciBJbnRlcnBvbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEludGVycG9sYXRvcigpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJwb2xhdG9yKTtcblxuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2ludGVycG9sYXRvcicpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLmZvcm1hdCA9IG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiBvcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSW50ZXJwb2xhdG9yLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICBpZiAoIW9wdGlvbnMuaW50ZXJwb2xhdGlvbikgb3B0aW9ucy5pbnRlcnBvbGF0aW9uID0ge1xuICAgICAgICBlc2NhcGVWYWx1ZTogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHZhciBpT3B0cyA9IG9wdGlvbnMuaW50ZXJwb2xhdGlvbjtcbiAgICAgIHRoaXMuZXNjYXBlID0gaU9wdHMuZXNjYXBlICE9PSB1bmRlZmluZWQgPyBpT3B0cy5lc2NhcGUgOiBlc2NhcGU7XG4gICAgICB0aGlzLmVzY2FwZVZhbHVlID0gaU9wdHMuZXNjYXBlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZVZhbHVlIDogdHJ1ZTtcbiAgICAgIHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZSA9IGlPcHRzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgOiBmYWxzZTtcbiAgICAgIHRoaXMucHJlZml4ID0gaU9wdHMucHJlZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMucHJlZml4KSA6IGlPcHRzLnByZWZpeEVzY2FwZWQgfHwgJ3t7JztcbiAgICAgIHRoaXMuc3VmZml4ID0gaU9wdHMuc3VmZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMuc3VmZml4KSA6IGlPcHRzLnN1ZmZpeEVzY2FwZWQgfHwgJ319JztcbiAgICAgIHRoaXMuZm9ybWF0U2VwYXJhdG9yID0gaU9wdHMuZm9ybWF0U2VwYXJhdG9yID8gaU9wdHMuZm9ybWF0U2VwYXJhdG9yIDogaU9wdHMuZm9ybWF0U2VwYXJhdG9yIHx8ICcsJztcbiAgICAgIHRoaXMudW5lc2NhcGVQcmVmaXggPSBpT3B0cy51bmVzY2FwZVN1ZmZpeCA/ICcnIDogaU9wdHMudW5lc2NhcGVQcmVmaXggfHwgJy0nO1xuICAgICAgdGhpcy51bmVzY2FwZVN1ZmZpeCA9IHRoaXMudW5lc2NhcGVQcmVmaXggPyAnJyA6IGlPcHRzLnVuZXNjYXBlU3VmZml4IHx8ICcnO1xuICAgICAgdGhpcy5uZXN0aW5nUHJlZml4ID0gaU9wdHMubmVzdGluZ1ByZWZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLm5lc3RpbmdQcmVmaXgpIDogaU9wdHMubmVzdGluZ1ByZWZpeEVzY2FwZWQgfHwgcmVnZXhFc2NhcGUoJyR0KCcpO1xuICAgICAgdGhpcy5uZXN0aW5nU3VmZml4ID0gaU9wdHMubmVzdGluZ1N1ZmZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLm5lc3RpbmdTdWZmaXgpIDogaU9wdHMubmVzdGluZ1N1ZmZpeEVzY2FwZWQgfHwgcmVnZXhFc2NhcGUoJyknKTtcbiAgICAgIHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgPSBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA/IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yIDogaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgfHwgJywnO1xuICAgICAgdGhpcy5tYXhSZXBsYWNlcyA9IGlPcHRzLm1heFJlcGxhY2VzID8gaU9wdHMubWF4UmVwbGFjZXMgOiAxMDAwO1xuICAgICAgdGhpcy5hbHdheXNGb3JtYXQgPSBpT3B0cy5hbHdheXNGb3JtYXQgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmFsd2F5c0Zvcm1hdCA6IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldFJlZ0V4cCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMpIHRoaXMuaW5pdCh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFJlZ0V4cFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldFJlZ0V4cCgpIHtcbiAgICAgIHZhciByZWdleHBTdHIgPSBcIlwiLmNvbmNhdCh0aGlzLnByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy5zdWZmaXgpO1xuICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFN0ciwgJ2cnKTtcbiAgICAgIHZhciByZWdleHBVbmVzY2FwZVN0ciA9IFwiXCIuY29uY2F0KHRoaXMucHJlZml4KS5jb25jYXQodGhpcy51bmVzY2FwZVByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy51bmVzY2FwZVN1ZmZpeCkuY29uY2F0KHRoaXMuc3VmZml4KTtcbiAgICAgIHRoaXMucmVnZXhwVW5lc2NhcGUgPSBuZXcgUmVnRXhwKHJlZ2V4cFVuZXNjYXBlU3RyLCAnZycpO1xuICAgICAgdmFyIG5lc3RpbmdSZWdleHBTdHIgPSBcIlwiLmNvbmNhdCh0aGlzLm5lc3RpbmdQcmVmaXgsIFwiKC4rPylcIikuY29uY2F0KHRoaXMubmVzdGluZ1N1ZmZpeCk7XG4gICAgICB0aGlzLm5lc3RpbmdSZWdleHAgPSBuZXcgUmVnRXhwKG5lc3RpbmdSZWdleHBTdHIsICdnJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludGVycG9sYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludGVycG9sYXRlKHN0ciwgZGF0YSwgbG5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB2YXIgcmVwbGFjZXM7XG4gICAgICB2YXIgZGVmYXVsdERhdGEgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24gJiYgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyB8fCB7fTtcblxuICAgICAgZnVuY3Rpb24gcmVnZXhTYWZlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFuZGxlRm9ybWF0ID0gZnVuY3Rpb24gaGFuZGxlRm9ybWF0KGtleSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoX3RoaXMuZm9ybWF0U2VwYXJhdG9yKSA8IDApIHtcbiAgICAgICAgICB2YXIgcGF0aCA9IGdldFBhdGhXaXRoRGVmYXVsdHMoZGF0YSwgZGVmYXVsdERhdGEsIGtleSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmFsd2F5c0Zvcm1hdCA/IF90aGlzLmZvcm1hdChwYXRoLCB1bmRlZmluZWQsIGxuZykgOiBwYXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHAgPSBrZXkuc3BsaXQoX3RoaXMuZm9ybWF0U2VwYXJhdG9yKTtcbiAgICAgICAgdmFyIGsgPSBwLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICB2YXIgZiA9IHAuam9pbihfdGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIF90aGlzLmZvcm1hdChnZXRQYXRoV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrKSwgZiwgbG5nLCBvcHRpb25zKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICAgIHZhciBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgPSBvcHRpb25zICYmIG9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIHx8IHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI7XG4gICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyB8fCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7XG4gICAgICB2YXIgdG9kb3MgPSBbe1xuICAgICAgICByZWdleDogdGhpcy5yZWdleHBVbmVzY2FwZSxcbiAgICAgICAgc2FmZVZhbHVlOiBmdW5jdGlvbiBzYWZlVmFsdWUodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZ2V4U2FmZSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHJlZ2V4OiB0aGlzLnJlZ2V4cCxcbiAgICAgICAgc2FmZVZhbHVlOiBmdW5jdGlvbiBzYWZlVmFsdWUodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmVzY2FwZVZhbHVlID8gcmVnZXhTYWZlKF90aGlzLmVzY2FwZSh2YWwpKSA6IHJlZ2V4U2FmZSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XTtcbiAgICAgIHRvZG9zLmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHtcbiAgICAgICAgcmVwbGFjZXMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaCA9IHRvZG8ucmVnZXguZXhlYyhzdHIpKSB7XG4gICAgICAgICAgdmFsdWUgPSBoYW5kbGVGb3JtYXQobWF0Y2hbMV0udHJpbSgpKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB2YXIgdGVtcCA9IG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcihzdHIsIG1hdGNoLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycgPyB0ZW1wIDogJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLmxvZ2dlci53YXJuKFwibWlzc2VkIHRvIHBhc3MgaW4gdmFyaWFibGUgXCIuY29uY2F0KG1hdGNoWzFdLCBcIiBmb3IgaW50ZXJwb2xhdGluZyBcIikuY29uY2F0KHN0cikpO1xuXG4gICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmICFfdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG1hdGNoWzBdLCB0b2RvLnNhZmVWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgIHRvZG8ucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICByZXBsYWNlcysrO1xuXG4gICAgICAgICAgaWYgKHJlcGxhY2VzID49IF90aGlzLm1heFJlcGxhY2VzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXN0KHN0ciwgZmMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgdmFsdWU7XG5cbiAgICAgIHZhciBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9ucyk7XG5cbiAgICAgIGNsb25lZE9wdGlvbnMuYXBwbHlQb3N0UHJvY2Vzc29yID0gZmFsc2U7XG4gICAgICBkZWxldGUgY2xvbmVkT3B0aW9ucy5kZWZhdWx0VmFsdWU7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZUhhc09wdGlvbnMoa2V5LCBpbmhlcml0ZWRPcHRpb25zKSB7XG4gICAgICAgIHZhciBzZXAgPSB0aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yO1xuICAgICAgICBpZiAoa2V5LmluZGV4T2Yoc2VwKSA8IDApIHJldHVybiBrZXk7XG4gICAgICAgIHZhciBjID0ga2V5LnNwbGl0KG5ldyBSZWdFeHAoXCJcIi5jb25jYXQoc2VwLCBcIlsgXSp7XCIpKSk7XG4gICAgICAgIHZhciBvcHRpb25zU3RyaW5nID0gXCJ7XCIuY29uY2F0KGNbMV0pO1xuICAgICAgICBrZXkgPSBjWzBdO1xuICAgICAgICBvcHRpb25zU3RyaW5nID0gdGhpcy5pbnRlcnBvbGF0ZShvcHRpb25zU3RyaW5nLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgb3B0aW9uc1N0cmluZyA9IG9wdGlvbnNTdHJpbmcucmVwbGFjZSgvJy9nLCAnXCInKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb25lZE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICAgIGlmIChpbmhlcml0ZWRPcHRpb25zKSBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgaW5oZXJpdGVkT3B0aW9ucywgY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiZmFpbGVkIHBhcnNpbmcgb3B0aW9ucyBzdHJpbmcgaW4gbmVzdGluZyBmb3Iga2V5IFwiLmNvbmNhdChrZXkpLCBlKTtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5KS5jb25jYXQoc2VwKS5jb25jYXQob3B0aW9uc1N0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgY2xvbmVkT3B0aW9ucy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChtYXRjaCA9IHRoaXMubmVzdGluZ1JlZ2V4cC5leGVjKHN0cikpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSBbXTtcbiAgICAgICAgdmFyIGRvUmVkdWNlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG1hdGNoWzBdLmluY2x1ZGVzKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSAmJiAhL3suKn0vLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgdmFyIHIgPSBtYXRjaFsxXS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikubWFwKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS50cmltKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbWF0Y2hbMV0gPSByLnNoaWZ0KCk7XG4gICAgICAgICAgZm9ybWF0dGVycyA9IHI7XG4gICAgICAgICAgZG9SZWR1Y2UgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBmYyhoYW5kbGVIYXNPcHRpb25zLmNhbGwodGhpcywgbWF0Y2hbMV0udHJpbSgpLCBjbG9uZWRPcHRpb25zKSwgY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiBtYXRjaFswXSA9PT0gc3RyICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHZhbHVlID0gbWFrZVN0cmluZyh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJtaXNzZWQgdG8gcmVzb2x2ZSBcIi5jb25jYXQobWF0Y2hbMV0sIFwiIGZvciBuZXN0aW5nIFwiKS5jb25jYXQoc3RyKSk7XG4gICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb1JlZHVjZSkge1xuICAgICAgICAgIHZhbHVlID0gZm9ybWF0dGVycy5yZWR1Y2UoZnVuY3Rpb24gKHYsIGYpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuZm9ybWF0KHYsIGYsIG9wdGlvbnMubG5nLCBvcHRpb25zKTtcbiAgICAgICAgICB9LCB2YWx1ZS50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWdleHAubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSW50ZXJwb2xhdG9yO1xufSgpO1xuXG5mdW5jdGlvbiByZW1vdmUoYXJyLCB3aGF0KSB7XG4gIHZhciBmb3VuZCA9IGFyci5pbmRleE9mKHdoYXQpO1xuXG4gIHdoaWxlIChmb3VuZCAhPT0gLTEpIHtcbiAgICBhcnIuc3BsaWNlKGZvdW5kLCAxKTtcbiAgICBmb3VuZCA9IGFyci5pbmRleE9mKHdoYXQpO1xuICB9XG59XG5cbnZhciBDb25uZWN0b3IgPSBmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHMoQ29ubmVjdG9yLCBfRXZlbnRFbWl0dGVyKTtcblxuICBmdW5jdGlvbiBDb25uZWN0b3IoYmFja2VuZCwgc3RvcmUsIHNlcnZpY2VzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3Rvcik7XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihDb25uZWN0b3IpLmNhbGwodGhpcykpO1xuXG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLmJhY2tlbmQgPSBiYWNrZW5kO1xuICAgIF90aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgX3RoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICBfdGhpcy5sYW5ndWFnZVV0aWxzID0gc2VydmljZXMubGFuZ3VhZ2VVdGlscztcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnYmFja2VuZENvbm5lY3RvcicpO1xuICAgIF90aGlzLnN0YXRlID0ge307XG4gICAgX3RoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChfdGhpcy5iYWNrZW5kICYmIF90aGlzLmJhY2tlbmQuaW5pdCkge1xuICAgICAgX3RoaXMuYmFja2VuZC5pbml0KHNlcnZpY2VzLCBvcHRpb25zLmJhY2tlbmQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb25uZWN0b3IsIFt7XG4gICAga2V5OiBcInF1ZXVlTG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBxdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB0b0xvYWQgPSBbXTtcbiAgICAgIHZhciBwZW5kaW5nID0gW107XG4gICAgICB2YXIgdG9Mb2FkTGFuZ3VhZ2VzID0gW107XG4gICAgICB2YXIgdG9Mb2FkTmFtZXNwYWNlcyA9IFtdO1xuICAgICAgbGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxuZykge1xuICAgICAgICB2YXIgaGFzQWxsTmFtZXNwYWNlcyA9IHRydWU7XG4gICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFwiXCIuY29uY2F0KGxuZywgXCJ8XCIpLmNvbmNhdChucyk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMucmVsb2FkICYmIF90aGlzMi5zdG9yZS5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5zdGF0ZVtuYW1lXSA8IDApIDsgZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocGVuZGluZy5pbmRleE9mKG5hbWUpIDwgMCkgcGVuZGluZy5wdXNoKG5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGVbbmFtZV0gPSAxO1xuICAgICAgICAgICAgaGFzQWxsTmFtZXNwYWNlcyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlbmRpbmcuaW5kZXhPZihuYW1lKSA8IDApIHBlbmRpbmcucHVzaChuYW1lKTtcbiAgICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihuYW1lKSA8IDApIHRvTG9hZC5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaWYgKHRvTG9hZE5hbWVzcGFjZXMuaW5kZXhPZihucykgPCAwKSB0b0xvYWROYW1lc3BhY2VzLnB1c2gobnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzQWxsTmFtZXNwYWNlcykgdG9Mb2FkTGFuZ3VhZ2VzLnB1c2gobG5nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodG9Mb2FkLmxlbmd0aCB8fCBwZW5kaW5nLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnF1ZXVlLnB1c2goe1xuICAgICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXG4gICAgICAgICAgbG9hZGVkOiB7fSxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Mb2FkOiB0b0xvYWQsXG4gICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXG4gICAgICAgIHRvTG9hZExhbmd1YWdlczogdG9Mb2FkTGFuZ3VhZ2VzLFxuICAgICAgICB0b0xvYWROYW1lc3BhY2VzOiB0b0xvYWROYW1lc3BhY2VzXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZGVkKG5hbWUsIGVyciwgZGF0YSkge1xuICAgICAgdmFyIHMgPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICB2YXIgbG5nID0gc1swXTtcbiAgICAgIHZhciBucyA9IHNbMV07XG4gICAgICBpZiAoZXJyKSB0aGlzLmVtaXQoJ2ZhaWxlZExvYWRpbmcnLCBsbmcsIG5zLCBlcnIpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlW25hbWVdID0gZXJyID8gLTEgOiAyO1xuICAgICAgdmFyIGxvYWRlZCA9IHt9O1xuICAgICAgdGhpcy5xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIHB1c2hQYXRoKHEubG9hZGVkLCBbbG5nXSwgbnMpO1xuICAgICAgICByZW1vdmUocS5wZW5kaW5nLCBuYW1lKTtcbiAgICAgICAgaWYgKGVycikgcS5lcnJvcnMucHVzaChlcnIpO1xuXG4gICAgICAgIGlmIChxLnBlbmRpbmcubGVuZ3RoID09PSAwICYmICFxLmRvbmUpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhxLmxvYWRlZCkuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgaWYgKCFsb2FkZWRbbF0pIGxvYWRlZFtsXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAocS5sb2FkZWRbbF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHEubG9hZGVkW2xdLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvYWRlZFtsXS5pbmRleE9mKG5zKSA8IDApIGxvYWRlZFtsXS5wdXNoKG5zKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChxLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHEuY2FsbGJhY2socS5lcnJvcnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxLmNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgbG9hZGVkKTtcbiAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcihmdW5jdGlvbiAocSkge1xuICAgICAgICByZXR1cm4gIXEuZG9uZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQobG5nLCBucywgZmNOYW1lKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyaWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAwO1xuICAgICAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDM1MDtcbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFsbmcubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2sobnVsbCwge30pO1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFtmY05hbWVdKGxuZywgbnMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKGVyciAmJiBkYXRhICYmIHRyaWVkIDwgNSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMzLnJlYWQuY2FsbChfdGhpczMsIGxuZywgbnMsIGZjTmFtZSwgdHJpZWQgKyAxLCB3YWl0ICogMiwgY2FsbGJhY2spO1xuICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHJlcGFyZUxvYWRpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghdGhpcy5iYWNrZW5kKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ05vIGJhY2tlbmQgd2FzIGFkZGVkIHZpYSBpMThuZXh0LnVzZS4gV2lsbCBub3QgbG9hZCByZXNvdXJjZXMuJyk7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxhbmd1YWdlcyA9PT0gJ3N0cmluZycpIGxhbmd1YWdlcyA9IHRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobGFuZ3VhZ2VzKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycpIG5hbWVzcGFjZXMgPSBbbmFtZXNwYWNlc107XG4gICAgICB2YXIgdG9Mb2FkID0gdGhpcy5xdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmICghdG9Mb2FkLnRvTG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCF0b0xvYWQucGVuZGluZy5sZW5ndGgpIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB0b0xvYWQudG9Mb2FkLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgX3RoaXM0LmxvYWRPbmUobmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMucHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCB7fSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWxvYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMucHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCB7XG4gICAgICAgIHJlbG9hZDogdHJ1ZVxuICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkT25lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRPbmUobmFtZSkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBwcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICAgICAgdmFyIHMgPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICB2YXIgbG5nID0gc1swXTtcbiAgICAgIHZhciBucyA9IHNbMV07XG4gICAgICB0aGlzLnJlYWQobG5nLCBucywgJ3JlYWQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgICBpZiAoZXJyKSBfdGhpczUubG9nZ2VyLndhcm4oXCJcIi5jb25jYXQocHJlZml4LCBcImxvYWRpbmcgbmFtZXNwYWNlIFwiKS5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZywgXCIgZmFpbGVkXCIpLCBlcnIpO1xuICAgICAgICBpZiAoIWVyciAmJiBkYXRhKSBfdGhpczUubG9nZ2VyLmxvZyhcIlwiLmNvbmNhdChwcmVmaXgsIFwibG9hZGVkIG5hbWVzcGFjZSBcIikuY29uY2F0KG5zLCBcIiBmb3IgbGFuZ3VhZ2UgXCIpLmNvbmNhdChsbmcpLCBkYXRhKTtcblxuICAgICAgICBfdGhpczUubG9hZGVkKG5hbWUsIGVyciwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2F2ZU1pc3NpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2F2ZU1pc3NpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgaXNVcGRhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcblxuICAgICAgaWYgKHRoaXMuc2VydmljZXMudXRpbHMgJiYgdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UgJiYgIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImRpZCBub3Qgc2F2ZSBrZXkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBhcyB0aGUgbmFtZXNwYWNlIFxcXCJcIikuY29uY2F0KG5hbWVzcGFjZSwgXCJcXFwiIHdhcyBub3QgeWV0IGxvYWRlZFwiKSwgJ1RoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgfHwga2V5ID09PSAnJykgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5iYWNrZW5kICYmIHRoaXMuYmFja2VuZC5jcmVhdGUpIHtcbiAgICAgICAgdGhpcy5iYWNrZW5kLmNyZWF0ZShsYW5ndWFnZXMsIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlLCBudWxsLCBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgaXNVcGRhdGU6IGlzVXBkYXRlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsYW5ndWFnZXMgfHwgIWxhbmd1YWdlc1swXSkgcmV0dXJuO1xuICAgICAgdGhpcy5zdG9yZS5hZGRSZXNvdXJjZShsYW5ndWFnZXNbMF0sIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29ubmVjdG9yO1xufShFdmVudEVtaXR0ZXIpO1xuXG5mdW5jdGlvbiBnZXQoKSB7XG4gIHJldHVybiB7XG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGluaXRJbW1lZGlhdGU6IHRydWUsXG4gICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBkZWZhdWx0TlM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBmYWxsYmFja0xuZzogWydkZXYnXSxcbiAgICBmYWxsYmFja05TOiBmYWxzZSxcbiAgICB3aGl0ZWxpc3Q6IGZhbHNlLFxuICAgIG5vbkV4cGxpY2l0V2hpdGVsaXN0OiBmYWxzZSxcbiAgICBzdXBwb3J0ZWRMbmdzOiBmYWxzZSxcbiAgICBub25FeHBsaWNpdFN1cHBvcnRlZExuZ3M6IGZhbHNlLFxuICAgIGxvYWQ6ICdhbGwnLFxuICAgIHByZWxvYWQ6IGZhbHNlLFxuICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0cnVlLFxuICAgIGtleVNlcGFyYXRvcjogJy4nLFxuICAgIG5zU2VwYXJhdG9yOiAnOicsXG4gICAgcGx1cmFsU2VwYXJhdG9yOiAnXycsXG4gICAgY29udGV4dFNlcGFyYXRvcjogJ18nLFxuICAgIHBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzOiBmYWxzZSxcbiAgICBzYXZlTWlzc2luZzogZmFsc2UsXG4gICAgdXBkYXRlTWlzc2luZzogZmFsc2UsXG4gICAgc2F2ZU1pc3NpbmdUbzogJ2ZhbGxiYWNrJyxcbiAgICBzYXZlTWlzc2luZ1BsdXJhbHM6IHRydWUsXG4gICAgbWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLFxuICAgIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcjogZmFsc2UsXG4gICAgcG9zdFByb2Nlc3M6IGZhbHNlLFxuICAgIHBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkOiBmYWxzZSxcbiAgICByZXR1cm5OdWxsOiB0cnVlLFxuICAgIHJldHVybkVtcHR5U3RyaW5nOiB0cnVlLFxuICAgIHJldHVybk9iamVjdHM6IGZhbHNlLFxuICAgIGpvaW5BcnJheXM6IGZhbHNlLFxuICAgIHJldHVybmVkT2JqZWN0SGFuZGxlcjogZmFsc2UsXG4gICAgcGFyc2VNaXNzaW5nS2V5SGFuZGxlcjogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiBmYWxzZSxcbiAgICBhcHBlbmROYW1lc3BhY2VUb0NJTW9kZTogZmFsc2UsXG4gICAgb3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZShhcmdzKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBpZiAoX3R5cGVvZihhcmdzWzFdKSA9PT0gJ29iamVjdCcpIHJldCA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSByZXQuZGVmYXVsdFZhbHVlID0gYXJnc1sxXTtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1syXSA9PT0gJ3N0cmluZycpIHJldC50RGVzY3JpcHRpb24gPSBhcmdzWzJdO1xuXG4gICAgICBpZiAoX3R5cGVvZihhcmdzWzJdKSA9PT0gJ29iamVjdCcgfHwgX3R5cGVvZihhcmdzWzNdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmdzWzNdIHx8IGFyZ3NbMl07XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldFtrZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGludGVycG9sYXRpb246IHtcbiAgICAgIGVzY2FwZVZhbHVlOiB0cnVlLFxuICAgICAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQodmFsdWUsIF9mb3JtYXQsIGxuZywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgcHJlZml4OiAne3snLFxuICAgICAgc3VmZml4OiAnfX0nLFxuICAgICAgZm9ybWF0U2VwYXJhdG9yOiAnLCcsXG4gICAgICB1bmVzY2FwZVByZWZpeDogJy0nLFxuICAgICAgbmVzdGluZ1ByZWZpeDogJyR0KCcsXG4gICAgICBuZXN0aW5nU3VmZml4OiAnKScsXG4gICAgICBuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjogJywnLFxuICAgICAgbWF4UmVwbGFjZXM6IDEwMDAsXG4gICAgICBza2lwT25WYXJpYWJsZXM6IGZhbHNlXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMubnMgPSBbb3B0aW9ucy5uc107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja0xuZyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tMbmcgPSBbb3B0aW9ucy5mYWxsYmFja0xuZ107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja05TID09PSAnc3RyaW5nJykgb3B0aW9ucy5mYWxsYmFja05TID0gW29wdGlvbnMuZmFsbGJhY2tOU107XG5cbiAgaWYgKG9wdGlvbnMud2hpdGVsaXN0KSB7XG4gICAgaWYgKG9wdGlvbnMud2hpdGVsaXN0ICYmIG9wdGlvbnMud2hpdGVsaXN0LmluZGV4T2YoJ2NpbW9kZScpIDwgMCkge1xuICAgICAgb3B0aW9ucy53aGl0ZWxpc3QgPSBvcHRpb25zLndoaXRlbGlzdC5jb25jYXQoWydjaW1vZGUnXSk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5zdXBwb3J0ZWRMbmdzID0gb3B0aW9ucy53aGl0ZWxpc3Q7XG4gIH1cblxuICBpZiAob3B0aW9ucy5ub25FeHBsaWNpdFdoaXRlbGlzdCkge1xuICAgIG9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzID0gb3B0aW9ucy5ub25FeHBsaWNpdFdoaXRlbGlzdDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnN1cHBvcnRlZExuZ3MgJiYgb3B0aW9ucy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoJ2NpbW9kZScpIDwgMCkge1xuICAgIG9wdGlvbnMuc3VwcG9ydGVkTG5ncyA9IG9wdGlvbnMuc3VwcG9ydGVkTG5ncy5jb25jYXQoWydjaW1vZGUnXSk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBJMThuID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKEkxOG4sIF9FdmVudEVtaXR0ZXIpO1xuXG4gIGZ1bmN0aW9uIEkxOG4oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEkxOG4pO1xuXG4gICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSTE4bikuY2FsbCh0aGlzKSk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgX3RoaXMub3B0aW9ucyA9IHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucyk7XG4gICAgX3RoaXMuc2VydmljZXMgPSB7fTtcbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyO1xuICAgIF90aGlzLm1vZHVsZXMgPSB7XG4gICAgICBleHRlcm5hbDogW11cbiAgICB9O1xuXG4gICAgaWYgKGNhbGxiYWNrICYmICFfdGhpcy5pc0luaXRpYWxpemVkICYmICFvcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgIGlmICghX3RoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuaW5pdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSTE4biwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndoaXRlbGlzdCAmJiAhb3B0aW9ucy5zdXBwb3J0ZWRMbmdzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlcHJlY2F0ZSgnd2hpdGVsaXN0JywgJ29wdGlvbiBcIndoaXRlbGlzdFwiIHdpbGwgYmUgcmVuYW1lZCB0byBcInN1cHBvcnRlZExuZ3NcIiBpbiB0aGUgbmV4dCBtYWpvciAtIHBsZWFzZSBtYWtlIHN1cmUgdG8gcmVuYW1lIHRoaXMgb3B0aW9uIGFzYXAuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm5vbkV4cGxpY2l0V2hpdGVsaXN0ICYmICFvcHRpb25zLm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZXByZWNhdGUoJ3doaXRlbGlzdCcsICdvcHRpb25zIFwibm9uRXhwbGljaXRXaGl0ZWxpc3RcIiB3aWxsIGJlIHJlbmFtZWQgdG8gXCJub25FeHBsaWNpdFN1cHBvcnRlZExuZ3NcIiBpbiB0aGUgbmV4dCBtYWpvciAtIHBsZWFzZSBtYWtlIHN1cmUgdG8gcmVuYW1lIHRoaXMgb3B0aW9uIGFzYXAuJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoe30sIGdldCgpLCB0aGlzLm9wdGlvbnMsIHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucykpO1xuICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQ7XG4gICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3A7XG5cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzT25EZW1hbmQoQ2xhc3NPck9iamVjdCkge1xuICAgICAgICBpZiAoIUNsYXNzT3JPYmplY3QpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIENsYXNzT3JPYmplY3QgPT09ICdmdW5jdGlvbicpIHJldHVybiBuZXcgQ2xhc3NPck9iamVjdCgpO1xuICAgICAgICByZXR1cm4gQ2xhc3NPck9iamVjdDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaXNDbG9uZSkge1xuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxvZ2dlcikge1xuICAgICAgICAgIGJhc2VMb2dnZXIuaW5pdChjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sb2dnZXIpLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VMb2dnZXIuaW5pdChudWxsLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGx1ID0gbmV3IExhbmd1YWdlVXRpbCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0b3JlID0gbmV3IFJlc291cmNlU3RvcmUodGhpcy5vcHRpb25zLnJlc291cmNlcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnNlcnZpY2VzO1xuICAgICAgICBzLmxvZ2dlciA9IGJhc2VMb2dnZXI7XG4gICAgICAgIHMucmVzb3VyY2VTdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHMubGFuZ3VhZ2VVdGlscyA9IGx1O1xuICAgICAgICBzLnBsdXJhbFJlc29sdmVyID0gbmV3IFBsdXJhbFJlc29sdmVyKGx1LCB7XG4gICAgICAgICAgcHJlcGVuZDogdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcixcbiAgICAgICAgICBjb21wYXRpYmlsaXR5SlNPTjogdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLFxuICAgICAgICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXhcbiAgICAgICAgfSk7XG4gICAgICAgIHMuaW50ZXJwb2xhdG9yID0gbmV3IEludGVycG9sYXRvcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBzLnV0aWxzID0ge1xuICAgICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogdGhpcy5oYXNMb2FkZWROYW1lc3BhY2UuYmluZCh0aGlzKVxuICAgICAgICB9O1xuICAgICAgICBzLmJhY2tlbmRDb25uZWN0b3IgPSBuZXcgQ29ubmVjdG9yKGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmJhY2tlbmQpLCBzLnJlc291cmNlU3RvcmUsIHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHMuYmFja2VuZENvbm5lY3Rvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpIHtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IgPSBjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKTtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChzLCB0aGlzLm9wdGlvbnMuZGV0ZWN0aW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSB7XG4gICAgICAgICAgcy5pMThuRm9ybWF0ID0gY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCk7XG4gICAgICAgICAgaWYgKHMuaTE4bkZvcm1hdC5pbml0KSBzLmkxOG5Gb3JtYXQuaW5pdCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yKHRoaXMuc2VydmljZXMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmV4dGVybmFsLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICBpZiAobS5pbml0KSBtLmluaXQoX3RoaXMyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgJiYgIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5vcHRpb25zLmxuZykge1xuICAgICAgICB2YXIgY29kZXMgPSB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICBpZiAoY29kZXMubGVuZ3RoID4gMCAmJiBjb2Rlc1swXSAhPT0gJ2RldicpIHRoaXMub3B0aW9ucy5sbmcgPSBjb2Rlc1swXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMub3B0aW9ucy5sbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RvcmVBcGkgPSBbJ2dldFJlc291cmNlJywgJ2hhc1Jlc291cmNlQnVuZGxlJywgJ2dldFJlc291cmNlQnVuZGxlJywgJ2dldERhdGFCeUxhbmd1YWdlJ107XG4gICAgICBzdG9yZUFwaS5mb3JFYWNoKGZ1bmN0aW9uIChmY05hbWUpIHtcbiAgICAgICAgX3RoaXMyW2ZjTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRzdG9yZTtcblxuICAgICAgICAgIHJldHVybiAoX3RoaXMyJHN0b3JlID0gX3RoaXMyLnN0b3JlKVtmY05hbWVdLmFwcGx5KF90aGlzMiRzdG9yZSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHN0b3JlQXBpQ2hhaW5lZCA9IFsnYWRkUmVzb3VyY2UnLCAnYWRkUmVzb3VyY2VzJywgJ2FkZFJlc291cmNlQnVuZGxlJywgJ3JlbW92ZVJlc291cmNlQnVuZGxlJ107XG4gICAgICBzdG9yZUFwaUNoYWluZWQuZm9yRWFjaChmdW5jdGlvbiAoZmNOYW1lKSB7XG4gICAgICAgIF90aGlzMltmY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpczIkc3RvcmUyO1xuXG4gICAgICAgICAgKF90aGlzMiRzdG9yZTIgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3RoaXMyJHN0b3JlMiwgYXJndW1lbnRzKTtcblxuICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG5cbiAgICAgIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgICAgdmFyIGZpbmlzaCA9IGZ1bmN0aW9uIGZpbmlzaChlcnIsIHQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLmlzSW5pdGlhbGl6ZWQpIF90aGlzMi5sb2dnZXIud2FybignaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhJyk7XG4gICAgICAgICAgX3RoaXMyLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMuaXNDbG9uZSkgX3RoaXMyLmxvZ2dlci5sb2coJ2luaXRpYWxpemVkJywgX3RoaXMyLm9wdGlvbnMpO1xuXG4gICAgICAgICAgX3RoaXMyLmVtaXQoJ2luaXRpYWxpemVkJywgX3RoaXMyLm9wdGlvbnMpO1xuXG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSh0KTtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChfdGhpczIubGFuZ3VhZ2VzICYmIF90aGlzMi5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScgJiYgIV90aGlzMi5pc0luaXRpYWxpemVkKSByZXR1cm4gZmluaXNoKG51bGwsIF90aGlzMi50LmJpbmQoX3RoaXMyKSk7XG5cbiAgICAgICAgX3RoaXMyLmNoYW5nZUxhbmd1YWdlKF90aGlzMi5vcHRpb25zLmxuZywgZmluaXNoKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8ICF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgICBsb2FkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGxvYWQsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZFJlc291cmNlcyhsYW5ndWFnZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbm9vcDtcbiAgICAgIHZhciB1c2VkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIHZhciB1c2VkTG5nID0gdHlwZW9mIGxhbmd1YWdlID09PSAnc3RyaW5nJyA/IGxhbmd1YWdlIDogdGhpcy5sYW5ndWFnZTtcbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2UgPT09ICdmdW5jdGlvbicpIHVzZWRDYWxsYmFjayA9IGxhbmd1YWdlO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXNvdXJjZXMgfHwgdGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSB7XG4gICAgICAgIGlmICh1c2VkTG5nICYmIHVzZWRMbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB1c2VkQ2FsbGJhY2soKTtcbiAgICAgICAgdmFyIHRvTG9hZCA9IFtdO1xuXG4gICAgICAgIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobG5nKSB7XG4gICAgICAgICAgaWYgKCFsbmcpIHJldHVybjtcblxuICAgICAgICAgIHZhciBsbmdzID0gX3RoaXMzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGxuZyk7XG5cbiAgICAgICAgICBsbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihsKSA8IDApIHRvTG9hZC5wdXNoKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdXNlZExuZykge1xuICAgICAgICAgIHZhciBmYWxsYmFja3MgPSB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICAgIGZhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwcGVuZCh1c2VkTG5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJlbG9hZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmVsb2FkLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmQobCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IubG9hZCh0b0xvYWQsIHRoaXMub3B0aW9ucy5ucywgdXNlZENhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVzZWRDYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVsb2FkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlcyhsbmdzLCBucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAoIWxuZ3MpIGxuZ3MgPSB0aGlzLmxhbmd1YWdlcztcbiAgICAgIGlmICghbnMpIG5zID0gdGhpcy5vcHRpb25zLm5zO1xuICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBub29wO1xuICAgICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChsbmdzLCBucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVzZShtb2R1bGUpIHtcbiAgICAgIGlmICghbW9kdWxlKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKScpO1xuICAgICAgaWYgKCFtb2R1bGUudHlwZSkgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpJyk7XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5iYWNrZW5kID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdsb2dnZXInIHx8IG1vZHVsZS5sb2cgJiYgbW9kdWxlLndhcm4gJiYgbW9kdWxlLmVycm9yKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5sb2dnZXIgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2xhbmd1YWdlRGV0ZWN0b3InKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdpMThuRm9ybWF0Jykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAncG9zdFByb2Nlc3NvcicpIHtcbiAgICAgICAgcG9zdFByb2Nlc3Nvci5hZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJzNyZFBhcnR5Jykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuZXh0ZXJuYWwucHVzaChtb2R1bGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG8gPSBsbmc7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgdGhpcy5lbWl0KCdsYW5ndWFnZUNoYW5naW5nJywgbG5nKTtcblxuICAgICAgdmFyIGRvbmUgPSBmdW5jdGlvbiBkb25lKGVyciwgbCkge1xuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIF90aGlzNC5sYW5ndWFnZSA9IGw7XG4gICAgICAgICAgX3RoaXM0Lmxhbmd1YWdlcyA9IF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsKTtcblxuICAgICAgICAgIF90aGlzNC50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKGwpO1xuXG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgX3RoaXM0LmVtaXQoJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuXG4gICAgICAgICAgX3RoaXM0LmxvZ2dlci5sb2coJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzNC5pc0xhbmd1YWdlQ2hhbmdpbmdUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdmFyIHNldExuZyA9IGZ1bmN0aW9uIHNldExuZyhsbmdzKSB7XG4gICAgICAgIHZhciBsID0gdHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnID8gbG5ncyA6IF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEJlc3RNYXRjaEZyb21Db2RlcyhsbmdzKTtcblxuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIGlmICghX3RoaXM0Lmxhbmd1YWdlKSB7XG4gICAgICAgICAgICBfdGhpczQubGFuZ3VhZ2UgPSBsO1xuICAgICAgICAgICAgX3RoaXM0Lmxhbmd1YWdlcyA9IF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIV90aGlzNC50cmFuc2xhdG9yLmxhbmd1YWdlKSBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcbiAgICAgICAgICBpZiAoX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IpIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlKGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM0LmxvYWRSZXNvdXJjZXMobCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGRvbmUoZXJyLCBsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYykge1xuICAgICAgICBzZXRMbmcodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jKSB7XG4gICAgICAgIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3Qoc2V0TG5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldExuZyhsbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZpeGVkVFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaXhlZFQobG5nLCBucykge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBmaXhlZFQgPSBmdW5jdGlvbiBmaXhlZFQoa2V5LCBvcHRzKSB7XG4gICAgICAgIHZhciBvcHRpb25zO1xuXG4gICAgICAgIGlmIChfdHlwZW9mKG9wdHMpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDIgPyBfbGVuMyAtIDIgOiAwKSwgX2tleTMgPSAyOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgICAgICByZXN0W19rZXkzIC0gMl0gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpczUub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihba2V5LCBvcHRzXS5jb25jYXQocmVzdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMubG5nID0gb3B0aW9ucy5sbmcgfHwgZml4ZWRULmxuZztcbiAgICAgICAgb3B0aW9ucy5sbmdzID0gb3B0aW9ucy5sbmdzIHx8IGZpeGVkVC5sbmdzO1xuICAgICAgICBvcHRpb25zLm5zID0gb3B0aW9ucy5ucyB8fCBmaXhlZFQubnM7XG4gICAgICAgIHJldHVybiBfdGhpczUudChrZXksIG9wdGlvbnMpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBsbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZpeGVkVC5sbmcgPSBsbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhlZFQubG5ncyA9IGxuZztcbiAgICAgIH1cblxuICAgICAgZml4ZWRULm5zID0gbnM7XG4gICAgICByZXR1cm4gZml4ZWRUO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHQoKSB7XG4gICAgICB2YXIgX3RoaXMkdHJhbnNsYXRvcjtcblxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRvciAmJiAoX3RoaXMkdHJhbnNsYXRvciA9IHRoaXMudHJhbnNsYXRvcikudHJhbnNsYXRlLmFwcGx5KF90aGlzJHRyYW5zbGF0b3IsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImV4aXN0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleGlzdHMoKSB7XG4gICAgICB2YXIgX3RoaXMkdHJhbnNsYXRvcjI7XG5cbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0b3IgJiYgKF90aGlzJHRyYW5zbGF0b3IyID0gdGhpcy50cmFuc2xhdG9yKS5leGlzdHMuYXBwbHkoX3RoaXMkdHJhbnNsYXRvcjIsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldERlZmF1bHROYW1lc3BhY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0RGVmYXVsdE5hbWVzcGFjZShucykge1xuICAgICAgdGhpcy5vcHRpb25zLmRlZmF1bHROUyA9IG5zO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNMb2FkZWROYW1lc3BhY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzTG9hZGVkTmFtZXNwYWNlKG5zKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG5leHQgd2FzIG5vdCBpbml0aWFsaXplZCcsIHRoaXMubGFuZ3VhZ2VzKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMubGFuZ3VhZ2VzIHx8ICF0aGlzLmxhbmd1YWdlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eScsIHRoaXMubGFuZ3VhZ2VzKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbG5nID0gdGhpcy5sYW5ndWFnZXNbMF07XG4gICAgICB2YXIgZmFsbGJhY2tMbmcgPSB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgOiBmYWxzZTtcbiAgICAgIHZhciBsYXN0TG5nID0gdGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAobG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgdmFyIGxvYWROb3RQZW5kaW5nID0gZnVuY3Rpb24gbG9hZE5vdFBlbmRpbmcobCwgbikge1xuICAgICAgICB2YXIgbG9hZFN0YXRlID0gX3RoaXM2LnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3Iuc3RhdGVbXCJcIi5jb25jYXQobCwgXCJ8XCIpLmNvbmNhdChuKV07XG5cbiAgICAgICAgcmV0dXJuIGxvYWRTdGF0ZSA9PT0gLTEgfHwgbG9hZFN0YXRlID09PSAyO1xuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMucHJlY2hlY2spIHtcbiAgICAgICAgdmFyIHByZVJlc3VsdCA9IG9wdGlvbnMucHJlY2hlY2sodGhpcywgbG9hZE5vdFBlbmRpbmcpO1xuICAgICAgICBpZiAocHJlUmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiBwcmVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGxvYWROb3RQZW5kaW5nKGxuZywgbnMpICYmICghZmFsbGJhY2tMbmcgfHwgbG9hZE5vdFBlbmRpbmcobGFzdExuZywgbnMpKSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWROYW1lc3BhY2VzKG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLm5zKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBucyA9PT0gJ3N0cmluZycpIG5zID0gW25zXTtcbiAgICAgIG5zLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgaWYgKF90aGlzNy5vcHRpb25zLm5zLmluZGV4T2YobikgPCAwKSBfdGhpczcub3B0aW9ucy5ucy5wdXNoKG4pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkTGFuZ3VhZ2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRMYW5ndWFnZXMobG5ncywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAodHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnKSBsbmdzID0gW2xuZ3NdO1xuICAgICAgdmFyIHByZWxvYWRlZCA9IHRoaXMub3B0aW9ucy5wcmVsb2FkIHx8IFtdO1xuICAgICAgdmFyIG5ld0xuZ3MgPSBsbmdzLmZpbHRlcihmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHJldHVybiBwcmVsb2FkZWQuaW5kZXhPZihsbmcpIDwgMDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5ld0xuZ3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZCA9IHByZWxvYWRlZC5jb25jYXQobmV3TG5ncyk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkaXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlyKGxuZykge1xuICAgICAgaWYgKCFsbmcpIGxuZyA9IHRoaXMubGFuZ3VhZ2VzICYmIHRoaXMubGFuZ3VhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLmxhbmd1YWdlc1swXSA6IHRoaXMubGFuZ3VhZ2U7XG4gICAgICBpZiAoIWxuZykgcmV0dXJuICdydGwnO1xuICAgICAgdmFyIHJ0bExuZ3MgPSBbJ2FyJywgJ3NodScsICdzcXInLCAnc3NoJywgJ3hhYScsICd5aGQnLCAneXVkJywgJ2FhbycsICdhYmgnLCAnYWJ2JywgJ2FjbScsICdhY3EnLCAnYWN3JywgJ2FjeCcsICdhY3knLCAnYWRmJywgJ2FkcycsICdhZWInLCAnYWVjJywgJ2FmYicsICdhanAnLCAnYXBjJywgJ2FwZCcsICdhcmInLCAnYXJxJywgJ2FycycsICdhcnknLCAnYXJ6JywgJ2F1eicsICdhdmwnLCAnYXloJywgJ2F5bCcsICdheW4nLCAnYXlwJywgJ2JieicsICdwZ2EnLCAnaGUnLCAnaXcnLCAncHMnLCAncGJ0JywgJ3BidScsICdwc3QnLCAncHJwJywgJ3ByZCcsICd1ZycsICd1cicsICd5ZGQnLCAneWRzJywgJ3lpaCcsICdqaScsICd5aScsICdoYm8nLCAnbWVuJywgJ3htbicsICdmYScsICdqcHInLCAncGVvJywgJ3BlcycsICdwcnMnLCAnZHYnLCAnc2FtJ107XG4gICAgICByZXR1cm4gcnRsTG5ncy5pbmRleE9mKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShsbmcpKSA+PSAwID8gJ3J0bCcgOiAnbHRyJztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlSW5zdGFuY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBuZXcgSTE4bihvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb25lSW5zdGFuY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmVJbnN0YW5jZSgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG5cbiAgICAgIHZhciBtZXJnZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5vcHRpb25zLCBvcHRpb25zLCB7XG4gICAgICAgIGlzQ2xvbmU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2xvbmUgPSBuZXcgSTE4bihtZXJnZWRPcHRpb25zKTtcbiAgICAgIHZhciBtZW1iZXJzVG9Db3B5ID0gWydzdG9yZScsICdzZXJ2aWNlcycsICdsYW5ndWFnZSddO1xuICAgICAgbWVtYmVyc1RvQ29weS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIGNsb25lW21dID0gX3RoaXM4W21dO1xuICAgICAgfSk7XG4gICAgICBjbG9uZS5zZXJ2aWNlcyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuc2VydmljZXMpO1xuICAgICAgY2xvbmUuc2VydmljZXMudXRpbHMgPSB7XG4gICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogY2xvbmUuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQoY2xvbmUpXG4gICAgICB9O1xuICAgICAgY2xvbmUudHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yKGNsb25lLnNlcnZpY2VzLCBjbG9uZS5vcHRpb25zKTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40ID4gMSA/IF9sZW40IC0gMSA6IDApLCBfa2V5NCA9IDE7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgICBhcmdzW19rZXk0IC0gMV0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvbmUuZW1pdC5hcHBseShjbG9uZSwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgfSk7XG4gICAgICBjbG9uZS5pbml0KG1lcmdlZE9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3Iub3B0aW9ucyA9IGNsb25lLm9wdGlvbnM7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLmJhY2tlbmRDb25uZWN0b3Iuc2VydmljZXMudXRpbHMgPSB7XG4gICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogY2xvbmUuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQoY2xvbmUpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJMThuO1xufShFdmVudEVtaXR0ZXIpO1xuXG52YXIgaTE4bmV4dCA9IG5ldyBJMThuKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG5leHQ7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIl9vYmplY3RTcHJlYWQiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY3JlYXRlQ2xhc3MiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9nZXRQcm90b3R5cGVPZiIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHMiLCJjb25zb2xlTG9nZ2VyIiwidHlwZSIsImxvZyIsImFyZ3MiLCJvdXRwdXQiLCJ3YXJuIiwiZXJyb3IiLCJjb25zb2xlIiwiYXBwbHkiLCJMb2dnZXIiLCJjb25jcmV0ZUxvZ2dlciIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJpbml0Iiwia2V5IiwidmFsdWUiLCJwcmVmaXgiLCJsb2dnZXIiLCJkZWJ1ZyIsInNldERlYnVnIiwiYm9vbCIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJmb3J3YXJkIiwiX2xlbjIiLCJfa2V5MiIsIl9sZW4zIiwiX2tleTMiLCJkZXByZWNhdGUiLCJfbGVuNCIsIl9rZXk0IiwibHZsIiwiZGVidWdPbmx5IiwiY29uY2F0IiwiY3JlYXRlIiwibW9kdWxlTmFtZSIsImJhc2VMb2dnZXIiLCJFdmVudEVtaXR0ZXIiLCJvYnNlcnZlcnMiLCJvbiIsImV2ZW50cyIsImxpc3RlbmVyIiwiX3RoaXMiLCJzcGxpdCIsImZvckVhY2giLCJldmVudCIsInB1c2giLCJvZmYiLCJmaWx0ZXIiLCJsIiwiZW1pdCIsImNsb25lZCIsIm9ic2VydmVyIiwiX2Nsb25lZCIsImRlZmVyIiwicmVzIiwicmVqIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibWFrZVN0cmluZyIsIm9iamVjdCIsImNvcHkiLCJhIiwicyIsInQiLCJtIiwiZ2V0TGFzdE9mUGF0aCIsInBhdGgiLCJFbXB0eSIsImNsZWFuS2V5IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJjYW5Ob3RUcmF2ZXJzZURlZXBlciIsInN0YWNrIiwic2hpZnQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvYmoiLCJrIiwic2V0UGF0aCIsIm5ld1ZhbHVlIiwiX2dldExhc3RPZlBhdGgiLCJwdXNoUGF0aCIsIl9nZXRMYXN0T2ZQYXRoMiIsImdldFBhdGgiLCJfZ2V0TGFzdE9mUGF0aDMiLCJnZXRQYXRoV2l0aERlZmF1bHRzIiwiZGF0YSIsImRlZmF1bHREYXRhIiwiZGVlcEV4dGVuZCIsInRhcmdldCIsInNvdXJjZSIsIm92ZXJ3cml0ZSIsInByb3AiLCJTdHJpbmciLCJyZWdleEVzY2FwZSIsInN0ciIsIl9lbnRpdHlNYXAiLCJlc2NhcGUiLCJpc0lFMTAiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJSZXNvdXJjZVN0b3JlIiwiX0V2ZW50RW1pdHRlciIsIm5zIiwiZGVmYXVsdE5TIiwia2V5U2VwYXJhdG9yIiwiYWRkTmFtZXNwYWNlcyIsInJlbW92ZU5hbWVzcGFjZXMiLCJpbmRleCIsInNwbGljZSIsImdldFJlc291cmNlIiwibG5nIiwiYWRkUmVzb3VyY2UiLCJzaWxlbnQiLCJhZGRSZXNvdXJjZXMiLCJyZXNvdXJjZXMiLCJ0b1N0cmluZyIsImFkZFJlc291cmNlQnVuZGxlIiwiZGVlcCIsInBhY2siLCJyZW1vdmVSZXNvdXJjZUJ1bmRsZSIsImhhc1Jlc291cmNlQnVuZGxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJjb21wYXRpYmlsaXR5QVBJIiwiZ2V0RGF0YUJ5TGFuZ3VhZ2UiLCJ0b0pTT04iLCJwb3N0UHJvY2Vzc29yIiwicHJvY2Vzc29ycyIsImFkZFBvc3RQcm9jZXNzb3IiLCJtb2R1bGUiLCJuYW1lIiwiaGFuZGxlIiwidHJhbnNsYXRvciIsInByb2Nlc3NvciIsInByb2Nlc3MiLCJjaGVja2VkTG9hZGVkRm9yIiwiVHJhbnNsYXRvciIsInNlcnZpY2VzIiwiY2hhbmdlTGFuZ3VhZ2UiLCJsYW5ndWFnZSIsImV4aXN0cyIsImludGVycG9sYXRpb24iLCJyZXNvbHZlZCIsImV4dHJhY3RGcm9tS2V5IiwibnNTZXBhcmF0b3IiLCJuYW1lc3BhY2VzIiwibWF0Y2giLCJpbnRlcnBvbGF0b3IiLCJuZXN0aW5nUmVnZXhwIiwicGFydHMiLCJqb2luIiwidHJhbnNsYXRlIiwia2V5cyIsImxhc3RLZXkiLCJfdGhpczIiLCJvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlciIsImlzQXJyYXkiLCJfdGhpcyRleHRyYWN0RnJvbUtleSIsIm5hbWVzcGFjZSIsImFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlIiwidG9Mb3dlckNhc2UiLCJyZXNVc2VkS2V5IiwidXNlZEtleSIsInJlc0V4YWN0VXNlZEtleSIsImV4YWN0VXNlZEtleSIsInJlc1R5cGUiLCJub09iamVjdCIsImpvaW5BcnJheXMiLCJoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCIsImkxOG5Gb3JtYXQiLCJoYW5kbGVBc09iamVjdCIsInJldHVybk9iamVjdHMiLCJyZXR1cm5lZE9iamVjdEhhbmRsZXIiLCJyZXNUeXBlSXNBcnJheSIsIm5ld0tleVRvVXNlIiwiZGVlcEtleSIsImV4dGVuZFRyYW5zbGF0aW9uIiwidXNlZERlZmF1bHQiLCJuZWVkc1BsdXJhbEhhbmRsaW5nIiwiY291bnQiLCJoYXNEZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWVTdWZmaXgiLCJwbHVyYWxSZXNvbHZlciIsImdldFN1ZmZpeCIsImRlZmF1bHRWYWx1ZSIsImlzVmFsaWRMb29rdXAiLCJ1cGRhdGVNaXNzaW5nIiwiZmsiLCJsbmdzIiwiZmFsbGJhY2tMbmdzIiwibGFuZ3VhZ2VVdGlscyIsImdldEZhbGxiYWNrQ29kZXMiLCJmYWxsYmFja0xuZyIsInNhdmVNaXNzaW5nVG8iLCJpIiwidG9SZXNvbHZlSGllcmFyY2h5Iiwic2VuZCIsImZhbGxiYWNrVmFsdWUiLCJtaXNzaW5nS2V5SGFuZGxlciIsImJhY2tlbmRDb25uZWN0b3IiLCJzYXZlTWlzc2luZyIsInNhdmVNaXNzaW5nUGx1cmFscyIsImdldFN1ZmZpeGVzIiwic3VmZml4IiwiYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5IiwicGFyc2VNaXNzaW5nS2V5SGFuZGxlciIsIl90aGlzMyIsInBhcnNlIiwidXNlZExuZyIsInVzZWROUyIsInNraXBJbnRlcnBvbGF0aW9uIiwic2tpcE9uVmFyaWFibGVzIiwibmVzdEJlZiIsIm5iIiwiZGVmYXVsdFZhcmlhYmxlcyIsImludGVycG9sYXRlIiwibmEiLCJuZXN0QWZ0IiwibmVzdCIsImNvbnRleHQiLCJyZXNldCIsInBvc3RQcm9jZXNzIiwicG9zdFByb2Nlc3Nvck5hbWVzIiwiYXBwbHlQb3N0UHJvY2Vzc29yIiwicG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQiLCJpMThuUmVzb2x2ZWQiLCJfdGhpczQiLCJmb3VuZCIsImV4dHJhY3RlZCIsImZhbGxiYWNrTlMiLCJuZWVkc0NvbnRleHRIYW5kbGluZyIsImNvZGVzIiwidXRpbHMiLCJoYXNMb2FkZWROYW1lc3BhY2UiLCJjb2RlIiwiZmluYWxLZXkiLCJmaW5hbEtleXMiLCJhZGRMb29rdXBLZXlzIiwicGx1cmFsU3VmZml4IiwiY29udGV4dFNlcGFyYXRvciIsInBvc3NpYmxlS2V5IiwicG9wIiwicmV0dXJuTnVsbCIsInJldHVybkVtcHR5U3RyaW5nIiwicmVzb3VyY2VTdG9yZSIsIm9wdGlvbiIsInN1YnN0cmluZyIsImNhcGl0YWxpemUiLCJzdHJpbmciLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiTGFuZ3VhZ2VVdGlsIiwid2hpdGVsaXN0Iiwic3VwcG9ydGVkTG5ncyIsImdldFNjcmlwdFBhcnRGcm9tQ29kZSIsInAiLCJmb3JtYXRMYW5ndWFnZUNvZGUiLCJnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZSIsInNwZWNpYWxDYXNlcyIsImxvd2VyQ2FzZUxuZyIsIm1hcCIsInBhcnQiLCJjbGVhbkNvZGUiLCJpc1doaXRlbGlzdGVkIiwiaXNTdXBwb3J0ZWRDb2RlIiwibG9hZCIsIm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncyIsImdldEJlc3RNYXRjaEZyb21Db2RlcyIsImNsZWFuZWRMbmciLCJsbmdPbmx5IiwiZmluZCIsInN1cHBvcnRlZExuZyIsImZhbGxiYWNrcyIsImZhbGxiYWNrQ29kZSIsImZhbGxiYWNrQ29kZXMiLCJhZGRDb2RlIiwiYyIsImZjIiwic2V0cyIsIm5yIiwiX3J1bGVzUGx1cmFsc1R5cGVzIiwiXyIsIm4iLCJOdW1iZXIiLCJjcmVhdGVSdWxlcyIsInJ1bGVzIiwic2V0IiwibnVtYmVycyIsInBsdXJhbHMiLCJQbHVyYWxSZXNvbHZlciIsImFkZFJ1bGUiLCJnZXRSdWxlIiwibmVlZHNQbHVyYWwiLCJydWxlIiwiZ2V0UGx1cmFsRm9ybXNPZktleSIsIm51bWJlciIsImlkeCIsIm5vQWJzIiwiTWF0aCIsImFicyIsInNpbXBsaWZ5UGx1cmFsU3VmZml4IiwicmV0dXJuU3VmZml4IiwicHJlcGVuZCIsImNvbXBhdGliaWxpdHlKU09OIiwiSW50ZXJwb2xhdG9yIiwiZm9ybWF0IiwiZXNjYXBlVmFsdWUiLCJpT3B0cyIsInVzZVJhd1ZhbHVlVG9Fc2NhcGUiLCJwcmVmaXhFc2NhcGVkIiwic3VmZml4RXNjYXBlZCIsImZvcm1hdFNlcGFyYXRvciIsInVuZXNjYXBlUHJlZml4IiwidW5lc2NhcGVTdWZmaXgiLCJuZXN0aW5nUHJlZml4IiwibmVzdGluZ1ByZWZpeEVzY2FwZWQiLCJuZXN0aW5nU3VmZml4IiwibmVzdGluZ1N1ZmZpeEVzY2FwZWQiLCJuZXN0aW5nT3B0aW9uc1NlcGFyYXRvciIsIm1heFJlcGxhY2VzIiwiYWx3YXlzRm9ybWF0IiwicmVzZXRSZWdFeHAiLCJyZWdleHBTdHIiLCJyZWdleHAiLCJSZWdFeHAiLCJyZWdleHBVbmVzY2FwZVN0ciIsInJlZ2V4cFVuZXNjYXBlIiwibmVzdGluZ1JlZ2V4cFN0ciIsInJlZ2V4U2FmZSIsInZhbCIsInJlcGxhY2VzIiwiaGFuZGxlRm9ybWF0IiwidHJpbSIsImYiLCJtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIiLCJ0b2RvcyIsInJlZ2V4Iiwic2FmZVZhbHVlIiwidG9kbyIsImV4ZWMiLCJ0ZW1wIiwibGFzdEluZGV4IiwiaGFuZGxlSGFzT3B0aW9ucyIsImluaGVyaXRlZE9wdGlvbnMiLCJzZXAiLCJvcHRpb25zU3RyaW5nIiwiY2xvbmVkT3B0aW9ucyIsIkpTT04iLCJlIiwiZm9ybWF0dGVycyIsImRvUmVkdWNlIiwiaW5jbHVkZXMiLCJ0ZXN0IiwiciIsImVsZW0iLCJyZWR1Y2UiLCJ2IiwicmVtb3ZlIiwiYXJyIiwid2hhdCIsIkNvbm5lY3RvciIsImJhY2tlbmQiLCJzdG9yZSIsInN0YXRlIiwicXVldWUiLCJxdWV1ZUxvYWQiLCJsYW5ndWFnZXMiLCJjYWxsYmFjayIsInRvTG9hZCIsInBlbmRpbmciLCJ0b0xvYWRMYW5ndWFnZXMiLCJ0b0xvYWROYW1lc3BhY2VzIiwiaGFzQWxsTmFtZXNwYWNlcyIsInJlbG9hZCIsImxvYWRlZCIsImVycm9ycyIsImVyciIsInEiLCJkb25lIiwicmVhZCIsImZjTmFtZSIsInRyaWVkIiwid2FpdCIsInNldFRpbWVvdXQiLCJwcmVwYXJlTG9hZGluZyIsImxvYWRPbmUiLCJfdGhpczUiLCJpc1VwZGF0ZSIsImdldCIsImluaXRJbW1lZGlhdGUiLCJub25FeHBsaWNpdFdoaXRlbGlzdCIsInByZWxvYWQiLCJwbHVyYWxTZXBhcmF0b3IiLCJwYXJ0aWFsQnVuZGxlZExhbmd1YWdlcyIsInJldCIsInREZXNjcmlwdGlvbiIsIl9mb3JtYXQiLCJ0cmFuc2Zvcm1PcHRpb25zIiwibm9vcCIsIkkxOG4iLCJtb2R1bGVzIiwiZXh0ZXJuYWwiLCJpc0luaXRpYWxpemVkIiwiaXNDbG9uZSIsImNyZWF0ZUNsYXNzT25EZW1hbmQiLCJDbGFzc09yT2JqZWN0IiwibHUiLCJiaW5kIiwibGFuZ3VhZ2VEZXRlY3RvciIsImRldGVjdGlvbiIsInN0b3JlQXBpIiwiX3RoaXMyJHN0b3JlIiwic3RvcmVBcGlDaGFpbmVkIiwiX3RoaXMyJHN0b3JlMiIsImRlZmVycmVkIiwiZmluaXNoIiwibG9hZFJlc291cmNlcyIsInVzZWRDYWxsYmFjayIsImFwcGVuZCIsInJlbG9hZFJlc291cmNlcyIsInVzZSIsIkVycm9yIiwiaXNMYW5ndWFnZUNoYW5naW5nVG8iLCJzZXRMbmciLCJjYWNoZVVzZXJMYW5ndWFnZSIsImFzeW5jIiwiZGV0ZWN0IiwiZ2V0Rml4ZWRUIiwiZml4ZWRUIiwib3B0cyIsInJlc3QiLCJfdGhpcyR0cmFuc2xhdG9yIiwiX3RoaXMkdHJhbnNsYXRvcjIiLCJzZXREZWZhdWx0TmFtZXNwYWNlIiwiX3RoaXM2IiwibGFzdExuZyIsImxvYWROb3RQZW5kaW5nIiwibG9hZFN0YXRlIiwicHJlY2hlY2siLCJwcmVSZXN1bHQiLCJsb2FkTmFtZXNwYWNlcyIsIl90aGlzNyIsImxvYWRMYW5ndWFnZXMiLCJwcmVsb2FkZWQiLCJuZXdMbmdzIiwiZGlyIiwicnRsTG5ncyIsImNyZWF0ZUluc3RhbmNlIiwiY2xvbmVJbnN0YW5jZSIsIl90aGlzOCIsIm1lcmdlZE9wdGlvbnMiLCJjbG9uZSIsIm1lbWJlcnNUb0NvcHkiLCJpMThuZXh0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/i18next/dist/esm/i18next.js\n");
|
|
4237
|
-
|
|
4238
|
-
/***/ }),
|
|
4239
|
-
|
|
4240
4229
|
/***/ "../../../node_modules/invariant/invariant.js":
|
|
4241
4230
|
/*!****************************************************!*\
|
|
4242
4231
|
!*** ../../../node_modules/invariant/invariant.js ***!
|
|
@@ -8108,7 +8097,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
8108
8097
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8109
8098
|
|
|
8110
8099
|
"use strict";
|
|
8111
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupPaths: () => (/* binding */ setupPaths),\n/* harmony export */ setupUtils: () => (/* binding */ setupUtils)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_styleguide_dist_openmrs_esm_styleguide_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-styleguide/dist/openmrs-esm-styleguide.css */ \"../../framework/esm-styleguide/dist/openmrs-esm-styleguide.css\");\n/* harmony import */ var import_map_overrides__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! import-map-overrides */ \"../../../node_modules/import-map-overrides/dist/import-map-overrides.js\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nfunction setupPaths(config) {\n var error = false;\n if (!config.apiUrl) {\n console.error(\"initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.\");\n error = true;\n }\n if (!config.spaPath) {\n console.error(\"initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.\");\n error = true;\n }\n if (error) {\n throw new Error(\"One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.\");\n }\n window.openmrsBase = config.apiUrl;\n window.spaBase = config.spaPath;\n window.spaEnv = config.env || \"production\";\n window.spaVersion = \"5.2.1-pre.1069-20231012\";\n var spaBaseWithSlash = window.spaBase.endsWith(\"/\") ? window.spaBase : window.spaBase + \"/\";\n window.getOpenmrsSpaBase = function() {\n return spaBaseWithSlash;\n };\n}\nfunction setupUtils() {\n window.copyText = function(source) {\n var sel = window.getSelection();\n if (sel) {\n var r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n }\n };\n}\nfunction wireSpaPaths() {\n var baseElement = document.createElement(\"base\");\n var baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n return Promise.resolve(__webpack_require__.I(\"default\")).then(/*#__PURE__*/ _async_to_generator(function() {\n var _config_configUrls, configUrls, _config_offline, offline, run;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _config_configUrls = config.configUrls, configUrls = _config_configUrls === void 0 ? [] : _config_configUrls, _config_offline = config.offline, offline = _config_offline === void 0 ? true : _config_offline;\n return [\n 4,\n Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-215283\"), __webpack_require__.e(\"src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./run */ \"./src/run.ts\"))\n ];\n case 1:\n run = _state.sent().run;\n return [\n 2,\n run(configUrls, offline)\n ];\n }\n });\n }));\n}\nwindow.initializeSpa = initializeSpa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRTtBQUNuQztBQUNFO0FBR3pCLFNBQVNBLFdBQVdDLE1BQWlCLEVBQUU7SUFDNUMsSUFBSUMsUUFBUSxLQUFLO0lBQ2pCLElBQUksQ0FBQ0QsT0FBT0UsTUFBTSxFQUFFO1FBQ2xCQyxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ0QsT0FBT0ksT0FBTyxFQUFFO1FBQ25CRCxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUlBLE9BQU87UUFDVCxNQUFNLElBQUlJLE1BQ1IsaUxBQ0E7SUFDSixDQUFDO0lBRURDLE9BQU9DLFdBQVcsR0FBR1AsT0FBT0UsTUFBTTtJQUNsQ0ksT0FBT0UsT0FBTyxHQUFHUixPQUFPSSxPQUFPO0lBQy9CRSxPQUFPRyxNQUFNLEdBQUdULE9BQU9VLEdBQUcsSUFBSTtJQUM5QkosT0FBT0ssVUFBVSxHQUFHQyx5QkFBeUI7SUFDN0MsSUFBTUUsbUJBQW1CUixPQUFPRSxPQUFPLENBQUNPLFFBQVEsQ0FBQyxPQUM3Q1QsT0FBT0UsT0FBTyxHQUNkRixPQUFPRSxPQUFPLEdBQUcsR0FBRztJQUN4QkYsT0FBT1UsaUJBQWlCLEdBQUc7ZUFBTUY7O0FBQ25DLENBQUM7QUFFTSxTQUFTRyxhQUFhO0lBQzNCWCxPQUFPWSxRQUFRLEdBQUcsU0FBQ0MsUUFBd0I7UUFDekMsSUFBTUMsTUFBTWQsT0FBT2UsWUFBWTtRQUUvQixJQUFJRCxLQUFLO1lBQ1AsSUFBTUUsSUFBSUMsU0FBU0MsV0FBVztZQUM5QkYsRUFBRUcsVUFBVSxDQUFDTjtZQUNiQyxJQUFJTSxlQUFlO1lBQ25CTixJQUFJTyxRQUFRLENBQUNMO1lBQ2JDLFNBQVNLLFdBQVcsQ0FBQztZQUNyQlIsSUFBSU0sZUFBZTtRQUNyQixDQUFDO0lBQ0g7QUFDRixDQUFDO0FBRUQsU0FBU0csZUFBZTtJQUN0QixJQUFNQyxjQUFjUCxTQUFTUSxhQUFhLENBQUM7SUFDM0MsSUFBTUMsV0FBVzFCLE9BQU9VLGlCQUFpQjtJQUN6Q2MsWUFBWUcsSUFBSSxHQUFHRDtJQUNuQlQsU0FBU1csSUFBSSxDQUFDQyxXQUFXLENBQUNMO0lBQzFCTSxxQkFBdUJBLEdBQUdKO0FBQzVCO0FBRUE7OztDQUdDLEdBQ0QsU0FBU0ssY0FBY3JDLE1BQWlCLEVBQUU7SUFDeENpQjtJQUNBbEIsV0FBV0M7SUFDWDZCO0lBQ0EsT0FBT1MsUUFBUUMsT0FBTyxDQUFDQyxxQkFBd0JBLENBQUMsWUFBWUMsSUFBSSxlQUFDLCtCQUFZO2dDQUNuRUMsNkJBQWlCQyxTQUNqQkM7Ozs7eUNBRG9DNUMsT0FBcEMwQyxZQUFBQSx3RkFBb0MxQyxPQUFuQjJDLFNBQUFBLHVDQUFVLElBQUk7b0JBQ3ZCOzt3QkFBTSxpUkFBZTs7O29CQUE3QkMsTUFBUSxjQUFSQTtvQkFDUjs7d0JBQU9BLElBQUlGLFlBQVlDOzs7O0lBQ3pCO0FBQ0Y7QUFFQXJDLE9BQU8rQixhQUFhLEdBQUdBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9pbmRleC50cz9hZGEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBvcGVubXJzL2VzbS1zdHlsZWd1aWRlL2Rpc3Qvb3Blbm1ycy1lc20tc3R5bGVndWlkZS5jc3NcIjtcbmltcG9ydCBcImltcG9ydC1tYXAtb3ZlcnJpZGVzXCI7XG5pbXBvcnQgXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrXCI7XG5pbXBvcnQgdHlwZSB7IFNwYUNvbmZpZyB9IGZyb20gXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYW4gYXBpVXJsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBiYWNrZW5kLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoIWNvbmZpZy5zcGFQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYSBzcGFQYXRoLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBwcm9wZXJseSBnZW5lcmF0ZSB1cmxzLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk9uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuXCJcbiAgICApO1xuICB9XG5cbiAgd2luZG93Lm9wZW5tcnNCYXNlID0gY29uZmlnLmFwaVVybDtcbiAgd2luZG93LnNwYUJhc2UgPSBjb25maWcuc3BhUGF0aDtcbiAgd2luZG93LnNwYUVudiA9IGNvbmZpZy5lbnYgfHwgXCJwcm9kdWN0aW9uXCI7XG4gIHdpbmRvdy5zcGFWZXJzaW9uID0gcHJvY2Vzcy5lbnYuQlVJTERfVkVSU0lPTjtcbiAgY29uc3Qgc3BhQmFzZVdpdGhTbGFzaCA9IHdpbmRvdy5zcGFCYXNlLmVuZHNXaXRoKFwiL1wiKVxuICAgID8gd2luZG93LnNwYUJhc2VcbiAgICA6IHdpbmRvdy5zcGFCYXNlICsgXCIvXCI7XG4gIHdpbmRvdy5nZXRPcGVubXJzU3BhQmFzZSA9ICgpID0+IHNwYUJhc2VXaXRoU2xhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFV0aWxzKCkge1xuICB3aW5kb3cuY29weVRleHQgPSAoc291cmNlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChzZWwpIHtcbiAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgci5zZWxlY3ROb2RlKHNvdXJjZSk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWwuYWRkUmFuZ2Uocik7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXJlU3BhUGF0aHMoKSB7XG4gIGNvbnN0IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJhc2VcIik7XG4gIGNvbnN0IGJhc2VIcmVmID0gd2luZG93LmdldE9wZW5tcnNTcGFCYXNlKCk7XG4gIGJhc2VFbGVtZW50LmhyZWYgPSBiYXNlSHJlZjtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChiYXNlRWxlbWVudCk7XG4gIF9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gYmFzZUhyZWY7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIE9wZW5NUlMgRnJvbnRlbmQgQXBwIFNoZWxsLlxuICogQHBhcmFtIGNvbmZpZyBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTcGEoY29uZmlnOiBTcGFDb25maWcpIHtcbiAgc2V0dXBVdGlscygpO1xuICBzZXR1cFBhdGhzKGNvbmZpZyk7XG4gIHdpcmVTcGFQYXRocygpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fd2VicGFja19pbml0X3NoYXJpbmdfXyhcImRlZmF1bHRcIikpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29uZmlnVXJscyA9IFtdLCBvZmZsaW5lID0gdHJ1ZSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IHsgcnVuIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3J1blwiKTtcbiAgICByZXR1cm4gcnVuKGNvbmZpZ1VybHMsIG9mZmxpbmUpO1xuICB9KTtcbn1cblxud2luZG93LmluaXRpYWxpemVTcGEgPSBpbml0aWFsaXplU3BhO1xuIl0sIm5hbWVzIjpbInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImFwaVVybCIsImNvbnNvbGUiLCJzcGFQYXRoIiwiRXJyb3IiLCJ3aW5kb3ciLCJvcGVubXJzQmFzZSIsInNwYUJhc2UiLCJzcGFFbnYiLCJlbnYiLCJzcGFWZXJzaW9uIiwicHJvY2VzcyIsIkJVSUxEX1ZFUlNJT04iLCJzcGFCYXNlV2l0aFNsYXNoIiwiZW5kc1dpdGgiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwVXRpbHMiLCJjb3B5VGV4dCIsInNvdXJjZSIsInNlbCIsImdldFNlbGVjdGlvbiIsInIiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJ3aXJlU3BhUGF0aHMiLCJiYXNlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYXNlSHJlZiIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRpYWxpemVTcGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9fd2VicGFja19pbml0X3NoYXJpbmdfXyIsInRoZW4iLCJjb25maWdVcmxzIiwib2ZmbGluZSIsInJ1biJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.ts\n");
|
|
8100
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupPaths: () => (/* binding */ setupPaths),\n/* harmony export */ setupUtils: () => (/* binding */ setupUtils)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_styleguide_dist_openmrs_esm_styleguide_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-styleguide/dist/openmrs-esm-styleguide.css */ \"../../framework/esm-styleguide/dist/openmrs-esm-styleguide.css\");\n/* harmony import */ var import_map_overrides__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! import-map-overrides */ \"../../../node_modules/import-map-overrides/dist/import-map-overrides.js\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nfunction setupPaths(config) {\n var error = false;\n if (!config.apiUrl) {\n console.error(\"initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.\");\n error = true;\n }\n if (!config.spaPath) {\n console.error(\"initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.\");\n error = true;\n }\n if (error) {\n throw new Error(\"One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.\");\n }\n window.openmrsBase = config.apiUrl;\n window.spaBase = config.spaPath;\n window.spaEnv = config.env || \"production\";\n window.spaVersion = \"5.2.1-pre.1079-20231017\";\n var spaBaseWithSlash = window.spaBase.endsWith(\"/\") ? window.spaBase : window.spaBase + \"/\";\n window.getOpenmrsSpaBase = function() {\n return spaBaseWithSlash;\n };\n}\nfunction setupUtils() {\n window.copyText = function(source) {\n var sel = window.getSelection();\n if (sel) {\n var r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n }\n };\n}\nfunction wireSpaPaths() {\n var baseElement = document.createElement(\"base\");\n var baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n return Promise.resolve(__webpack_require__.I(\"default\")).then(/*#__PURE__*/ _async_to_generator(function() {\n var _config_configUrls, configUrls, _config_offline, offline, run;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _config_configUrls = config.configUrls, configUrls = _config_configUrls === void 0 ? [] : _config_configUrls, _config_offline = config.offline, offline = _config_offline === void 0 ? true : _config_offline;\n return [\n 4,\n Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-2ad13f\"), __webpack_require__.e(\"src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./run */ \"./src/run.ts\"))\n ];\n case 1:\n run = _state.sent().run;\n return [\n 2,\n run(configUrls, offline)\n ];\n }\n });\n }));\n}\nwindow.initializeSpa = initializeSpa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRTtBQUNuQztBQUNFO0FBR3pCLFNBQVNBLFdBQVdDLE1BQWlCLEVBQUU7SUFDNUMsSUFBSUMsUUFBUSxLQUFLO0lBQ2pCLElBQUksQ0FBQ0QsT0FBT0UsTUFBTSxFQUFFO1FBQ2xCQyxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ0QsT0FBT0ksT0FBTyxFQUFFO1FBQ25CRCxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUlBLE9BQU87UUFDVCxNQUFNLElBQUlJLE1BQ1IsaUxBQ0E7SUFDSixDQUFDO0lBRURDLE9BQU9DLFdBQVcsR0FBR1AsT0FBT0UsTUFBTTtJQUNsQ0ksT0FBT0UsT0FBTyxHQUFHUixPQUFPSSxPQUFPO0lBQy9CRSxPQUFPRyxNQUFNLEdBQUdULE9BQU9VLEdBQUcsSUFBSTtJQUM5QkosT0FBT0ssVUFBVSxHQUFHQyx5QkFBeUI7SUFDN0MsSUFBTUUsbUJBQW1CUixPQUFPRSxPQUFPLENBQUNPLFFBQVEsQ0FBQyxPQUM3Q1QsT0FBT0UsT0FBTyxHQUNkRixPQUFPRSxPQUFPLEdBQUcsR0FBRztJQUN4QkYsT0FBT1UsaUJBQWlCLEdBQUc7ZUFBTUY7O0FBQ25DLENBQUM7QUFFTSxTQUFTRyxhQUFhO0lBQzNCWCxPQUFPWSxRQUFRLEdBQUcsU0FBQ0MsUUFBd0I7UUFDekMsSUFBTUMsTUFBTWQsT0FBT2UsWUFBWTtRQUUvQixJQUFJRCxLQUFLO1lBQ1AsSUFBTUUsSUFBSUMsU0FBU0MsV0FBVztZQUM5QkYsRUFBRUcsVUFBVSxDQUFDTjtZQUNiQyxJQUFJTSxlQUFlO1lBQ25CTixJQUFJTyxRQUFRLENBQUNMO1lBQ2JDLFNBQVNLLFdBQVcsQ0FBQztZQUNyQlIsSUFBSU0sZUFBZTtRQUNyQixDQUFDO0lBQ0g7QUFDRixDQUFDO0FBRUQsU0FBU0csZUFBZTtJQUN0QixJQUFNQyxjQUFjUCxTQUFTUSxhQUFhLENBQUM7SUFDM0MsSUFBTUMsV0FBVzFCLE9BQU9VLGlCQUFpQjtJQUN6Q2MsWUFBWUcsSUFBSSxHQUFHRDtJQUNuQlQsU0FBU1csSUFBSSxDQUFDQyxXQUFXLENBQUNMO0lBQzFCTSxxQkFBdUJBLEdBQUdKO0FBQzVCO0FBRUE7OztDQUdDLEdBQ0QsU0FBU0ssY0FBY3JDLE1BQWlCLEVBQUU7SUFDeENpQjtJQUNBbEIsV0FBV0M7SUFDWDZCO0lBQ0EsT0FBT1MsUUFBUUMsT0FBTyxDQUFDQyxxQkFBd0JBLENBQUMsWUFBWUMsSUFBSSxlQUFDLCtCQUFZO2dDQUNuRUMsNkJBQWlCQyxTQUNqQkM7Ozs7eUNBRG9DNUMsT0FBcEMwQyxZQUFBQSx3RkFBb0MxQyxPQUFuQjJDLFNBQUFBLHVDQUFVLElBQUk7b0JBQ3ZCOzt3QkFBTSxpUkFBZTs7O29CQUE3QkMsTUFBUSxjQUFSQTtvQkFDUjs7d0JBQU9BLElBQUlGLFlBQVlDOzs7O0lBQ3pCO0FBQ0Y7QUFFQXJDLE9BQU8rQixhQUFhLEdBQUdBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9pbmRleC50cz9hZGEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBvcGVubXJzL2VzbS1zdHlsZWd1aWRlL2Rpc3Qvb3Blbm1ycy1lc20tc3R5bGVndWlkZS5jc3NcIjtcbmltcG9ydCBcImltcG9ydC1tYXAtb3ZlcnJpZGVzXCI7XG5pbXBvcnQgXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrXCI7XG5pbXBvcnQgdHlwZSB7IFNwYUNvbmZpZyB9IGZyb20gXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYW4gYXBpVXJsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBiYWNrZW5kLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoIWNvbmZpZy5zcGFQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYSBzcGFQYXRoLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBwcm9wZXJseSBnZW5lcmF0ZSB1cmxzLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk9uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuXCJcbiAgICApO1xuICB9XG5cbiAgd2luZG93Lm9wZW5tcnNCYXNlID0gY29uZmlnLmFwaVVybDtcbiAgd2luZG93LnNwYUJhc2UgPSBjb25maWcuc3BhUGF0aDtcbiAgd2luZG93LnNwYUVudiA9IGNvbmZpZy5lbnYgfHwgXCJwcm9kdWN0aW9uXCI7XG4gIHdpbmRvdy5zcGFWZXJzaW9uID0gcHJvY2Vzcy5lbnYuQlVJTERfVkVSU0lPTjtcbiAgY29uc3Qgc3BhQmFzZVdpdGhTbGFzaCA9IHdpbmRvdy5zcGFCYXNlLmVuZHNXaXRoKFwiL1wiKVxuICAgID8gd2luZG93LnNwYUJhc2VcbiAgICA6IHdpbmRvdy5zcGFCYXNlICsgXCIvXCI7XG4gIHdpbmRvdy5nZXRPcGVubXJzU3BhQmFzZSA9ICgpID0+IHNwYUJhc2VXaXRoU2xhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFV0aWxzKCkge1xuICB3aW5kb3cuY29weVRleHQgPSAoc291cmNlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChzZWwpIHtcbiAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgci5zZWxlY3ROb2RlKHNvdXJjZSk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWwuYWRkUmFuZ2Uocik7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXJlU3BhUGF0aHMoKSB7XG4gIGNvbnN0IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJhc2VcIik7XG4gIGNvbnN0IGJhc2VIcmVmID0gd2luZG93LmdldE9wZW5tcnNTcGFCYXNlKCk7XG4gIGJhc2VFbGVtZW50LmhyZWYgPSBiYXNlSHJlZjtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChiYXNlRWxlbWVudCk7XG4gIF9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gYmFzZUhyZWY7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIE9wZW5NUlMgRnJvbnRlbmQgQXBwIFNoZWxsLlxuICogQHBhcmFtIGNvbmZpZyBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTcGEoY29uZmlnOiBTcGFDb25maWcpIHtcbiAgc2V0dXBVdGlscygpO1xuICBzZXR1cFBhdGhzKGNvbmZpZyk7XG4gIHdpcmVTcGFQYXRocygpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fd2VicGFja19pbml0X3NoYXJpbmdfXyhcImRlZmF1bHRcIikpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29uZmlnVXJscyA9IFtdLCBvZmZsaW5lID0gdHJ1ZSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IHsgcnVuIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3J1blwiKTtcbiAgICByZXR1cm4gcnVuKGNvbmZpZ1VybHMsIG9mZmxpbmUpO1xuICB9KTtcbn1cblxud2luZG93LmluaXRpYWxpemVTcGEgPSBpbml0aWFsaXplU3BhO1xuIl0sIm5hbWVzIjpbInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImFwaVVybCIsImNvbnNvbGUiLCJzcGFQYXRoIiwiRXJyb3IiLCJ3aW5kb3ciLCJvcGVubXJzQmFzZSIsInNwYUJhc2UiLCJzcGFFbnYiLCJlbnYiLCJzcGFWZXJzaW9uIiwicHJvY2VzcyIsIkJVSUxEX1ZFUlNJT04iLCJzcGFCYXNlV2l0aFNsYXNoIiwiZW5kc1dpdGgiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwVXRpbHMiLCJjb3B5VGV4dCIsInNvdXJjZSIsInNlbCIsImdldFNlbGVjdGlvbiIsInIiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJ3aXJlU3BhUGF0aHMiLCJiYXNlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYXNlSHJlZiIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRpYWxpemVTcGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9fd2VicGFja19pbml0X3NoYXJpbmdfXyIsInRoZW4iLCJjb25maWdVcmxzIiwib2ZmbGluZSIsInJ1biJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.ts\n");
|
|
8112
8101
|
|
|
8113
8102
|
/***/ }),
|
|
8114
8103
|
|
|
@@ -11071,6 +11060,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
11071
11060
|
|
|
11072
11061
|
/***/ }),
|
|
11073
11062
|
|
|
11063
|
+
/***/ "../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
|
|
11064
|
+
/*!***************************************************************************!*\
|
|
11065
|
+
!*** ../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
|
|
11066
|
+
\***************************************************************************/
|
|
11067
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
11068
|
+
|
|
11069
|
+
"use strict";
|
|
11070
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _iterableToArray)\n/* harmony export */ });\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsaUJBQWlCQyxJQUFJLEVBQUU7SUFDN0MsSUFBSSxPQUFPQyxXQUFXLGVBQWVELElBQUksQ0FBQ0MsT0FBT0MsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJRixJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxPQUFPRyxNQUFNQyxJQUFJLENBQUNKO0FBQ3RILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanM/ZjlmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59Il0sIm5hbWVzIjpbIl9pdGVyYWJsZVRvQXJyYXkiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js\n");
|
|
11071
|
+
|
|
11072
|
+
/***/ }),
|
|
11073
|
+
|
|
11074
11074
|
/***/ "../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
|
|
11075
11075
|
/*!********************************************************************************!*\
|
|
11076
11076
|
!*** ../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
|
|
@@ -11093,17 +11093,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
11093
11093
|
|
|
11094
11094
|
/***/ }),
|
|
11095
11095
|
|
|
11096
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread.js":
|
|
11097
|
-
/*!************************************************************************!*\
|
|
11098
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/objectSpread.js ***!
|
|
11099
|
-
\************************************************************************/
|
|
11100
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
11101
|
-
|
|
11102
|
-
"use strict";
|
|
11103
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _objectSpread)\n/* harmony export */ });\n/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defineProperty.js */ \"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? Object(arguments[i]) : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(target, key, source[key]);\n });\n }\n return target;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpRDtBQUNsQyxTQUFTQyxjQUFjQyxNQUFNLEVBQUU7SUFDNUMsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlDLFVBQVVDLE1BQU0sRUFBRUYsSUFBSztRQUN6QyxJQUFJRyxTQUFTRixTQUFTLENBQUNELEVBQUUsSUFBSSxJQUFJLEdBQUdJLE9BQU9ILFNBQVMsQ0FBQ0QsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJSyxVQUFVRCxPQUFPRSxJQUFJLENBQUNIO1FBQzFCLElBQUksT0FBT0MsT0FBT0cscUJBQXFCLEtBQUssWUFBWTtZQUN0REYsUUFBUUcsSUFBSSxDQUFDQyxLQUFLLENBQUNKLFNBQVNELE9BQU9HLHFCQUFxQixDQUFDSixRQUFRTyxNQUFNLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUNyRixPQUFPUCxPQUFPUSx3QkFBd0IsQ0FBQ1QsUUFBUVEsS0FBS0UsVUFBVTtZQUNoRTtRQUNGLENBQUM7UUFDRFIsUUFBUVMsT0FBTyxDQUFDLFNBQVVDLEdBQUcsRUFBRTtZQUM3QmxCLDhEQUFjQSxDQUFDRSxRQUFRZ0IsS0FBS1osTUFBTSxDQUFDWSxJQUFJO1FBQ3pDO0lBQ0Y7SUFDQSxPQUFPaEI7QUFDVCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkLmpzPzBhNzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IE9iamVjdChhcmd1bWVudHNbaV0pIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cy5wdXNoLmFwcGx5KG93bktleXMsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iXSwibmFtZXMiOlsiZGVmaW5lUHJvcGVydHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsIk9iamVjdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHVzaCIsImFwcGx5IiwiZmlsdGVyIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImZvckVhY2giLCJrZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/objectSpread.js\n");
|
|
11104
|
-
|
|
11105
|
-
/***/ }),
|
|
11106
|
-
|
|
11107
11096
|
/***/ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js":
|
|
11108
11097
|
/*!***********************************************************************************!*\
|
|
11109
11098
|
!*** ../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js ***!
|
|
@@ -11159,6 +11148,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
11159
11148
|
|
|
11160
11149
|
/***/ }),
|
|
11161
11150
|
|
|
11151
|
+
/***/ "../../../node_modules/@babel/runtime/helpers/esm/toArray.js":
|
|
11152
|
+
/*!*******************************************************************!*\
|
|
11153
|
+
!*** ../../../node_modules/@babel/runtime/helpers/esm/toArray.js ***!
|
|
11154
|
+
\*******************************************************************/
|
|
11155
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
11156
|
+
|
|
11157
|
+
"use strict";
|
|
11158
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toArray)\n/* harmony export */ });\n/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ \"../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ \"../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js\");\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ \"../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _toArray(arr) {\n return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || (0,_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQXJyYXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBaUQ7QUFDRTtBQUNzQjtBQUN0QjtBQUNwQyxTQUFTSSxTQUFTQyxHQUFHLEVBQUU7SUFDcEMsT0FBT0wsOERBQWNBLENBQUNLLFFBQVFKLCtEQUFlQSxDQUFDSSxRQUFRSCwwRUFBMEJBLENBQUNHLFFBQVFGLCtEQUFlQTtBQUMxRyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9BcnJheS5qcz8wZjhhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0FycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSJdLCJuYW1lcyI6WyJhcnJheVdpdGhIb2xlcyIsIml0ZXJhYmxlVG9BcnJheSIsInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5Iiwibm9uSXRlcmFibGVSZXN0IiwiX3RvQXJyYXkiLCJhcnIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/toArray.js\n");
|
|
11159
|
+
|
|
11160
|
+
/***/ }),
|
|
11161
|
+
|
|
11162
11162
|
/***/ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js":
|
|
11163
11163
|
/*!******************************************************************!*\
|
|
11164
11164
|
!*** ../../../node_modules/@babel/runtime/helpers/esm/typeof.js ***!
|
|
@@ -11324,6 +11324,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
11324
11324
|
|
|
11325
11325
|
/***/ }),
|
|
11326
11326
|
|
|
11327
|
+
/***/ "../../../node_modules/i18next/dist/esm/i18next.js":
|
|
11328
|
+
/*!*********************************************************!*\
|
|
11329
|
+
!*** ../../../node_modules/i18next/dist/esm/i18next.js ***!
|
|
11330
|
+
\*********************************************************/
|
|
11331
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
11332
|
+
|
|
11333
|
+
"use strict";
|
|
11334
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ changeLanguage: () => (/* binding */ changeLanguage),\n/* harmony export */ createInstance: () => (/* binding */ createInstance),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ exists: () => (/* binding */ exists),\n/* harmony export */ getFixedT: () => (/* binding */ getFixedT),\n/* harmony export */ hasLoadedNamespace: () => (/* binding */ hasLoadedNamespace),\n/* harmony export */ init: () => (/* binding */ init),\n/* harmony export */ loadLanguages: () => (/* binding */ loadLanguages),\n/* harmony export */ loadNamespaces: () => (/* binding */ loadNamespaces),\n/* harmony export */ loadResources: () => (/* binding */ loadResources),\n/* harmony export */ reloadResources: () => (/* binding */ reloadResources),\n/* harmony export */ setDefaultNamespace: () => (/* binding */ setDefaultNamespace),\n/* harmony export */ t: () => (/* binding */ t),\n/* harmony export */ use: () => (/* binding */ use)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"../../../node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ \"../../../node_modules/@babel/runtime/helpers/esm/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/possibleConstructorReturn */ \"../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/getPrototypeOf */ \"../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toArray */ \"../../../node_modules/@babel/runtime/helpers/esm/toArray.js\");\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nvar consoleLogger = {\n type: \"logger\",\n log: function log(args) {\n this.output(\"log\", args);\n },\n warn: function warn(args) {\n this.output(\"warn\", args);\n },\n error: function error(args) {\n this.output(\"error\", args);\n },\n output: function output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nvar Logger = function() {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Logger);\n this.init(concreteLogger, options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Logger, [\n {\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || \"i18next:\";\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n },\n {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n },\n {\n key: \"log\",\n value: function log() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return this.forward(args, \"log\", \"\", true);\n }\n },\n {\n key: \"warn\",\n value: function warn() {\n for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, \"warn\", \"\", true);\n }\n },\n {\n key: \"error\",\n value: function error() {\n for(var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++){\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, \"error\", \"\");\n }\n },\n {\n key: \"deprecate\",\n value: function deprecate() {\n for(var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++){\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, \"warn\", \"WARNING DEPRECATED: \", true);\n }\n },\n {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === \"string\") args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n },\n {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, _objectSpread(_objectSpread({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }), this.options));\n }\n },\n {\n key: \"clone\",\n value: function clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n }\n ]);\n return Logger;\n}();\nvar baseLogger = new Logger();\nvar EventEmitter = function() {\n function EventEmitter() {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, EventEmitter);\n this.observers = {};\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(EventEmitter, [\n {\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n events.split(\" \").forEach(function(event) {\n _this.observers[event] = _this.observers[event] || [];\n _this.observers[event].push(listener);\n });\n return this;\n }\n },\n {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event] = this.observers[event].filter(function(l) {\n return l !== listener;\n });\n }\n },\n {\n key: \"emit\",\n value: function emit(event) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function(observer) {\n observer.apply(void 0, args);\n });\n }\n if (this.observers[\"*\"]) {\n var _cloned = [].concat(this.observers[\"*\"]);\n _cloned.forEach(function(observer) {\n observer.apply(observer, [\n event\n ].concat(args));\n });\n }\n }\n }\n ]);\n return EventEmitter;\n}();\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function(resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return \"\";\n return \"\" + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function(m) {\n if (s[m]) t[m] = s[m];\n });\n}\nfunction getLastOfPath(object, path, Empty) {\n var cleanKey = function cleanKey(key) {\n return key && key.indexOf(\"###\") > -1 ? key.replace(/###/g, \".\") : key;\n };\n var canNotTraverseDeeper = function canNotTraverseDeeper() {\n return !object || typeof object === \"string\";\n };\n var stack = typeof path !== \"string\" ? [].concat(path) : path.split(\".\");\n while(stack.length > 1){\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object), obj = _getLastOfPath.obj, k = _getLastOfPath.k;\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object), obj = _getLastOfPath2.obj, k = _getLastOfPath2.k;\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path), obj = _getLastOfPath3.obj, k = _getLastOfPath3.k;\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for(var prop in source){\n if (prop !== \"__proto__\" && prop !== \"constructor\") {\n if (prop in target) {\n if (typeof target[prop] === \"string\" || _instanceof(target[prop], String) || typeof source[prop] === \"string\" || _instanceof(source[prop], String)) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\nvar _entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\"\n};\nfunction escape(data) {\n if (typeof data === \"string\") {\n return data.replace(/[&<>\"'\\/]/g, function(s) {\n return _entityMap[s];\n });\n }\n return data;\n}\nvar isIE10 = typeof window !== \"undefined\" && window.navigator && typeof window.navigator.userAgentData === \"undefined\" && window.navigator.userAgent && window.navigator.userAgent.indexOf(\"MSIE\") > -1;\nvar chars = [\n \" \",\n \",\",\n \"?\",\n \"!\",\n \";\"\n];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n nsSeparator = nsSeparator || \"\";\n keySeparator = keySeparator || \"\";\n var possibleChars = chars.filter(function(c) {\n return nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0;\n });\n if (possibleChars.length === 0) return true;\n var r = new RegExp(\"(\".concat(possibleChars.map(function(c) {\n return c === \"?\" ? \"\\\\?\" : c;\n }).join(\"|\"), \")\"));\n var matched = !r.test(key);\n if (!matched) {\n var ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n}\nfunction ownKeys$1(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$1(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$1(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$1(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction deepFind(obj, path) {\n var keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \".\";\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n var paths = path.split(keySeparator);\n var current = obj;\n for(var i = 0; i < paths.length; ++i){\n if (!current) return undefined;\n if (typeof current[paths[i]] === \"string\" && i + 1 < paths.length) {\n return undefined;\n }\n if (current[paths[i]] === undefined) {\n var j = 2;\n var p = paths.slice(i, i + j).join(keySeparator);\n var mix = current[p];\n while(mix === undefined && paths.length > i + j){\n j++;\n p = paths.slice(i, i + j).join(keySeparator);\n mix = current[p];\n }\n if (mix === undefined) return undefined;\n if (mix === null) return null;\n if (path.endsWith(p)) {\n if (typeof mix === \"string\") return mix;\n if (p && typeof mix[p] === \"string\") return mix[p];\n }\n var joinedPath = paths.slice(i + j).join(keySeparator);\n if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n return undefined;\n }\n current = current[paths[i]];\n }\n return current;\n}\nvar ResourceStore = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ResourceStore, _EventEmitter);\n var _super = _createSuper(ResourceStore);\n function ResourceStore(data) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: [\n \"translation\"\n ],\n defaultNS: \"translation\"\n };\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, ResourceStore);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n _this.data = data || {};\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = \".\";\n }\n if (_this.options.ignoreJSONStructure === undefined) {\n _this.options.ignoreJSONStructure = true;\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ResourceStore, [\n {\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n },\n {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n },\n {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n var path = [\n lng,\n ns\n ];\n if (key && typeof key !== \"string\") path = path.concat(key);\n if (key && typeof key === \"string\") path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n }\n var result = getPath(this.data, path);\n if (result || !ignoreJSONStructure || typeof key !== \"string\") return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n },\n {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = \".\";\n var path = [\n lng,\n ns\n ];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit(\"added\", lng, ns, key, value);\n }\n },\n {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for(var m in resources){\n if (typeof resources[m] === \"string\" || Object.prototype.toString.apply(resources[m]) === \"[object Array]\") this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit(\"added\", lng, ns, resources);\n }\n },\n {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [\n lng,\n ns\n ];\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = _objectSpread$1(_objectSpread$1({}, pack), resources);\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit(\"added\", lng, ns, resources);\n }\n },\n {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit(\"removed\", lng, ns);\n }\n },\n {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n },\n {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === \"v1\") return _objectSpread$1(_objectSpread$1({}, {}), this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n },\n {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n },\n {\n key: \"hasLanguageSomeTranslations\",\n value: function hasLanguageSomeTranslations(lng) {\n var data = this.getDataByLanguage(lng);\n var n = data && Object.keys(data) || [];\n return !!n.find(function(v) {\n return data[v] && Object.keys(data[v]).length > 0;\n });\n }\n },\n {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }\n ]);\n return ResourceStore;\n}(EventEmitter);\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n processors.forEach(function(processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\nfunction ownKeys$2(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$2(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$2(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$2(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper$1(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct$1();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct$1() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nvar checkedLoadedFor = {};\nvar Translator = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Translator, _EventEmitter);\n var _super = _createSuper$1(Translator);\n function Translator(services) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Translator);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n copy([\n \"resourceStore\",\n \"languageUtils\",\n \"pluralResolver\",\n \"interpolator\",\n \"backendConnector\",\n \"i18nFormat\",\n \"utils\"\n ], services, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = \".\";\n }\n _this.logger = baseLogger.create(\"translator\");\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Translator, [\n {\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n },\n {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n },\n {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = \":\";\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS || [];\n var wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n var seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n var m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key: key,\n namespaces: namespaces\n };\n }\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === \"string\") namespaces = [\n namespaces\n ];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n },\n {\n key: \"translate\",\n value: function translate(keys, options, lastKey) {\n var _this2 = this;\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options) !== \"object\" && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (!options) options = {};\n if (keys === undefined || keys === null) return \"\";\n if (!Array.isArray(keys)) keys = [\n String(keys)\n ];\n var returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options), key = _this$extractFromKey.key, namespaces = _this$extractFromKey.namespaces;\n var namespace = namespaces[namespaces.length - 1];\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === \"cimode\") {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n resolved.res = \"\".concat(namespace).concat(nsSeparator).concat(key);\n return resolved;\n }\n return \"\".concat(namespace).concat(nsSeparator).concat(key);\n }\n if (returnDetails) {\n resolved.res = key;\n return resolved;\n }\n return key;\n }\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = [\n \"[object Number]\",\n \"[object Function]\",\n \"[object RegExp]\"\n ];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== \"string\" && typeof res !== \"boolean\" && typeof res !== \"number\";\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === \"string\" && resType === \"[object Array]\")) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn(\"accessing an object - but returnObjects options is not enabled!\");\n }\n var r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, _objectSpread$2(_objectSpread$2({}, options), {}, {\n ns: namespaces\n })) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n if (returnDetails) {\n resolved.res = r;\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n var resTypeIsArray = resType === \"[object Array]\";\n var copy = resTypeIsArray ? [] : {};\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for(var m in res){\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy[m] = this.translate(deepKey, _objectSpread$2(_objectSpread$2({}, options), {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === \"string\" && resType === \"[object Array]\") {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n var usedDefault = false;\n var usedKey = false;\n var needsPluralHandling = options.count !== undefined && typeof options.count !== \"string\";\n var hasDefaultValue = Translator.hasDefaultValue(options);\n var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : \"\";\n var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n var missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n var resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? \"updateKey\" : \"missingKey\", lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n var fk = this.resolve(key, _objectSpread$2(_objectSpread$2({}, options), {}, {\n keySeparator: false\n }));\n if (fk && fk.res) this.logger.warn(\"Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.\");\n }\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === \"fallback\" && fallbackLngs && fallbackLngs[0]) {\n for(var i = 0; i < fallbackLngs.length; i++){\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === \"all\") {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n var send = function send(l, k, specificDefaultValue) {\n var defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n _this2.emit(\"missingKey\", l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function(language) {\n _this2.pluralResolver.getSuffixes(language, options).forEach(function(suffix) {\n send([\n language\n ], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== \"v1\") {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? \"\".concat(namespace, \":\").concat(key) : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n return resolved;\n }\n return res;\n }\n },\n {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved, lastKey) {\n var _this3 = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, _objectSpread$2(_objectSpread$2({}, this.options.interpolation.defaultVariables), options), resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init(_objectSpread$2(_objectSpread$2({}, options), {\n interpolation: _objectSpread$2(_objectSpread$2({}, this.options.interpolation), options.interpolation)\n }));\n var skipOnVariables = typeof res === \"string\" && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n var nestBef;\n if (skipOnVariables) {\n var nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n var data = options.replace && typeof options.replace !== \"string\" ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _objectSpread$2(_objectSpread$2({}, this.options.interpolation.defaultVariables), data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n if (skipOnVariables) {\n var na = res.match(this.interpolator.nestingRegexp);\n var nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (options.nest !== false) res = this.interpolator.nest(res, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n return null;\n }\n return _this3.translate.apply(_this3, args.concat([\n key\n ]));\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === \"string\" ? [\n postProcess\n ] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread$2({\n i18nResolved: resolved\n }, options) : options, this);\n }\n return res;\n }\n },\n {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey;\n var exactUsedKey;\n var usedLng;\n var usedNS;\n if (typeof keys === \"string\") keys = [\n keys\n ];\n keys.forEach(function(k) {\n if (_this4.isValidLookup(found)) return;\n var extracted = _this4.extractFromKey(k, options);\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== \"string\";\n var needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && _this4.pluralResolver.shouldUseIntlApi();\n var needsContextHandling = options.context !== undefined && (typeof options.context === \"string\" || typeof options.context === \"number\") && options.context !== \"\";\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function(ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n _this4.logger.warn('key \"'.concat(usedKey, '\" for languages \"').concat(codes.join(\", \"), '\" won\\'t get resolved as namespace \"').concat(usedNS, '\" was not yet loaded'), \"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");\n }\n codes.forEach(function(code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKeys = [\n key\n ];\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count, options);\n var zeroSuffix = \"\".concat(_this4.options.pluralSeparator, \"zero\");\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n var contextKey = \"\".concat(key).concat(_this4.options.contextSeparator).concat(options.context);\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n var possibleKey;\n while(possibleKey = finalKeys.pop()){\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n },\n {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === \"\");\n }\n },\n {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }\n ], [\n {\n key: \"hasDefaultValue\",\n value: function hasDefaultValue(options) {\n var prefix = \"defaultValue\";\n for(var option in options){\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n }\n ]);\n return Translator;\n}(EventEmitter);\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nvar LanguageUtil = function() {\n function LanguageUtil(options) {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, LanguageUtil);\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create(\"languageUtils\");\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(LanguageUtil, [\n {\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf(\"-\") < 0) return null;\n var p = code.split(\"-\");\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === \"x\") return null;\n return this.formatLanguageCode(p.join(\"-\"));\n }\n },\n {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf(\"-\") < 0) return code;\n var p = code.split(\"-\");\n return this.formatLanguageCode(p[0]);\n }\n },\n {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n if (typeof code === \"string\" && code.indexOf(\"-\") > -1) {\n var specialCases = [\n \"hans\",\n \"hant\",\n \"latn\",\n \"cyrl\",\n \"cans\",\n \"mong\",\n \"arab\"\n ];\n var p = code.split(\"-\");\n if (this.options.lowerCaseLng) {\n p = p.map(function(part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== \"sgn\" && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join(\"-\");\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n },\n {\n key: \"isSupportedCode\",\n value: function isSupportedCode(code) {\n if (this.options.load === \"languageOnly\" || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n },\n {\n key: \"getBestMatchFromCodes\",\n value: function getBestMatchFromCodes(codes) {\n var _this = this;\n if (!codes) return null;\n var found;\n codes.forEach(function(code) {\n if (found) return;\n var cleanedLng = _this.formatLanguageCode(code);\n if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(function(code) {\n if (found) return;\n var lngOnly = _this.getLanguagePartFromCode(code);\n if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = _this.options.supportedLngs.find(function(supportedLng) {\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n },\n {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === \"function\") fallbacks = fallbacks(code);\n if (typeof fallbacks === \"string\") fallbacks = [\n fallbacks\n ];\n if (Object.prototype.toString.apply(fallbacks) === \"[object Array]\") return fallbacks;\n if (!code) return fallbacks[\"default\"] || [];\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n },\n {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this2 = this;\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n var addCode = function addCode(c) {\n if (!c) return;\n if (_this2.isSupportedCode(c)) {\n codes.push(c);\n } else {\n _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n }\n };\n if (typeof code === \"string\" && code.indexOf(\"-\") > -1) {\n if (this.options.load !== \"languageOnly\") addCode(this.formatLanguageCode(code));\n if (this.options.load !== \"languageOnly\" && this.options.load !== \"currentOnly\") addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== \"currentOnly\") addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === \"string\") {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(function(fc) {\n if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n });\n return codes;\n }\n }\n ]);\n return LanguageUtil;\n}();\nvar sets = [\n {\n lngs: [\n \"ach\",\n \"ak\",\n \"am\",\n \"arn\",\n \"br\",\n \"fil\",\n \"gun\",\n \"ln\",\n \"mfe\",\n \"mg\",\n \"mi\",\n \"oc\",\n \"pt\",\n \"pt-BR\",\n \"tg\",\n \"tl\",\n \"ti\",\n \"tr\",\n \"uz\",\n \"wa\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 1\n },\n {\n lngs: [\n \"af\",\n \"an\",\n \"ast\",\n \"az\",\n \"bg\",\n \"bn\",\n \"ca\",\n \"da\",\n \"de\",\n \"dev\",\n \"el\",\n \"en\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"fi\",\n \"fo\",\n \"fur\",\n \"fy\",\n \"gl\",\n \"gu\",\n \"ha\",\n \"hi\",\n \"hu\",\n \"hy\",\n \"ia\",\n \"it\",\n \"kk\",\n \"kn\",\n \"ku\",\n \"lb\",\n \"mai\",\n \"ml\",\n \"mn\",\n \"mr\",\n \"nah\",\n \"nap\",\n \"nb\",\n \"ne\",\n \"nl\",\n \"nn\",\n \"no\",\n \"nso\",\n \"pa\",\n \"pap\",\n \"pms\",\n \"ps\",\n \"pt-PT\",\n \"rm\",\n \"sco\",\n \"se\",\n \"si\",\n \"so\",\n \"son\",\n \"sq\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tk\",\n \"ur\",\n \"yo\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 2\n },\n {\n lngs: [\n \"ay\",\n \"bo\",\n \"cgg\",\n \"fa\",\n \"ht\",\n \"id\",\n \"ja\",\n \"jbo\",\n \"ka\",\n \"km\",\n \"ko\",\n \"ky\",\n \"lo\",\n \"ms\",\n \"sah\",\n \"su\",\n \"th\",\n \"tt\",\n \"ug\",\n \"vi\",\n \"wo\",\n \"zh\"\n ],\n nr: [\n 1\n ],\n fc: 3\n },\n {\n lngs: [\n \"be\",\n \"bs\",\n \"cnr\",\n \"dz\",\n \"hr\",\n \"ru\",\n \"sr\",\n \"uk\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 4\n },\n {\n lngs: [\n \"ar\"\n ],\n nr: [\n 0,\n 1,\n 2,\n 3,\n 11,\n 100\n ],\n fc: 5\n },\n {\n lngs: [\n \"cs\",\n \"sk\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 6\n },\n {\n lngs: [\n \"csb\",\n \"pl\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 7\n },\n {\n lngs: [\n \"cy\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 8\n ],\n fc: 8\n },\n {\n lngs: [\n \"fr\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 9\n },\n {\n lngs: [\n \"ga\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 7,\n 11\n ],\n fc: 10\n },\n {\n lngs: [\n \"gd\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 20\n ],\n fc: 11\n },\n {\n lngs: [\n \"is\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 12\n },\n {\n lngs: [\n \"jv\"\n ],\n nr: [\n 0,\n 1\n ],\n fc: 13\n },\n {\n lngs: [\n \"kw\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 4\n ],\n fc: 14\n },\n {\n lngs: [\n \"lt\"\n ],\n nr: [\n 1,\n 2,\n 10\n ],\n fc: 15\n },\n {\n lngs: [\n \"lv\"\n ],\n nr: [\n 1,\n 2,\n 0\n ],\n fc: 16\n },\n {\n lngs: [\n \"mk\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 17\n },\n {\n lngs: [\n \"mnk\"\n ],\n nr: [\n 0,\n 1,\n 2\n ],\n fc: 18\n },\n {\n lngs: [\n \"mt\"\n ],\n nr: [\n 1,\n 2,\n 11,\n 20\n ],\n fc: 19\n },\n {\n lngs: [\n \"or\"\n ],\n nr: [\n 2,\n 1\n ],\n fc: 2\n },\n {\n lngs: [\n \"ro\"\n ],\n nr: [\n 1,\n 2,\n 20\n ],\n fc: 20\n },\n {\n lngs: [\n \"sl\"\n ],\n nr: [\n 5,\n 1,\n 2,\n 3\n ],\n fc: 21\n },\n {\n lngs: [\n \"he\",\n \"iw\"\n ],\n nr: [\n 1,\n 2,\n 20,\n 21\n ],\n fc: 22\n }\n];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\nvar deprecatedJsonVersions = [\n \"v1\",\n \"v2\",\n \"v3\"\n];\nvar suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nfunction createRules() {\n var rules = {};\n sets.forEach(function(set) {\n set.lngs.forEach(function(l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\nvar PluralResolver = function() {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, PluralResolver);\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create(\"pluralResolver\");\n if ((!this.options.compatibilityJSON || this.options.compatibilityJSON === \"v4\") && (typeof Intl === \"undefined\" || !Intl.PluralRules)) {\n this.options.compatibilityJSON = \"v3\";\n this.logger.error(\"Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.\");\n }\n this.rules = createRules();\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(PluralResolver, [\n {\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n },\n {\n key: \"getRule\",\n value: function getRule(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n try {\n return new Intl.PluralRules(code, {\n type: options.ordinal ? \"ordinal\" : \"cardinal\"\n });\n } catch (_unused) {\n return;\n }\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n },\n {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n },\n {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(function(suffix) {\n return \"\".concat(key).concat(suffix);\n });\n }\n },\n {\n key: \"getSuffixes\",\n value: function getSuffixes(code) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort(function(pluralCategory1, pluralCategory2) {\n return suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2];\n }).map(function(pluralCategory) {\n return \"\".concat(_this.options.prepend).concat(pluralCategory);\n });\n }\n return rule.numbers.map(function(number) {\n return _this.getSuffix(code, number, options);\n });\n }\n },\n {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return \"\".concat(this.options.prepend).concat(rule.select(count));\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return \"\";\n }\n },\n {\n key: \"getSuffixRetroCompatible\",\n value: function getSuffixRetroCompatible(rule, count) {\n var _this2 = this;\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = \"plural\";\n } else if (suffix === 1) {\n suffix = \"\";\n }\n }\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n if (this.options.compatibilityJSON === \"v1\") {\n if (suffix === 1) return \"\";\n if (typeof suffix === \"number\") return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (this.options.compatibilityJSON === \"v2\") {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n },\n {\n key: \"shouldUseIntlApi\",\n value: function shouldUseIntlApi() {\n return !deprecatedJsonVersions.includes(this.options.compatibilityJSON);\n }\n }\n ]);\n return PluralResolver;\n}();\nfunction ownKeys$3(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$3(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$3(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$3(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nvar Interpolator = function() {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Interpolator);\n this.logger = baseLogger.create(\"interpolator\");\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || function(value) {\n return value;\n };\n this.init(options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Interpolator, [\n {\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || \"{{\";\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || \"}}\";\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || \",\";\n this.unescapePrefix = iOpts.unescapeSuffix ? \"\" : iOpts.unescapePrefix || \"-\";\n this.unescapeSuffix = this.unescapePrefix ? \"\" : iOpts.unescapeSuffix || \"\";\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape(\"$t(\");\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(\")\");\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || \",\";\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n },\n {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n },\n {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, \"g\");\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, \"g\");\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, \"g\");\n }\n },\n {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var regexSafe = function regexSafe(val) {\n return val.replace(/\\$/g, \"$$$$\");\n };\n var _this = this;\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n var path = getPathWithDefaults(data, defaultData, key);\n return _this.alwaysFormat ? _this.format(path, undefined, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: key\n })) : path;\n }\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: k\n }));\n };\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n var todos = [\n {\n regex: this.regexpUnescape,\n safeValue: function safeValue(val) {\n return regexSafe(val);\n }\n },\n {\n regex: this.regexp,\n safeValue: function safeValue(val) {\n return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n }\n }\n ];\n todos.forEach(function(todo) {\n replaces = 0;\n while(match = todo.regex.exec(str)){\n var matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === \"function\") {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === \"string\" ? temp : \"\";\n } else if (options && options.hasOwnProperty(matchedVar)) {\n value = \"\";\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n _this.logger.warn(\"missed to pass in variable \".concat(matchedVar, \" for interpolating \").concat(str));\n value = \"\";\n }\n } else if (typeof value !== \"string\" && !_this.useRawValueToEscape) {\n value = makeString(value);\n }\n var safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= _this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n },\n {\n key: \"nest\",\n value: function nest(str, fc) {\n var handleHasOptions = function handleHasOptions(key, inheritedOptions) {\n var sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n var optionsString = \"{\".concat(c[1]);\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n var matchedSingleQuotes = optionsString.match(/'/g);\n var matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = _objectSpread$3(_objectSpread$3({}, inheritedOptions), clonedOptions);\n } catch (e) {\n this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n return \"\".concat(key).concat(sep).concat(optionsString);\n }\n delete clonedOptions.defaultValue;\n return key;\n };\n var _this2 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n var clonedOptions = _objectSpread$3({}, options);\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n while(match = this.nestingRegexp.exec(str)){\n var formatters = [];\n var doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n var r = match[1].split(this.formatSeparator).map(function(elem) {\n return elem.trim();\n });\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== \"string\") return value;\n if (typeof value !== \"string\") value = makeString(value);\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = \"\";\n }\n if (doReduce) {\n value = formatters.reduce(function(v, f) {\n return _this2.format(v, f, options.lng, _objectSpread$3(_objectSpread$3({}, options), {}, {\n interpolationkey: match[1].trim()\n }));\n }, value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n }\n ]);\n return Interpolator;\n}();\nfunction ownKeys$4(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$4(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$4(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$4(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction parseFormatStr(formatStr) {\n var formatName = formatStr.toLowerCase().trim();\n var formatOptions = {};\n if (formatStr.indexOf(\"(\") > -1) {\n var p = formatStr.split(\"(\");\n formatName = p[0].toLowerCase().trim();\n var optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === \"currency\" && optStr.indexOf(\":\") < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === \"relativetime\" && optStr.indexOf(\":\") < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n var opts = optStr.split(\";\");\n opts.forEach(function(opt) {\n if (!opt) return;\n var _opt$split = opt.split(\":\"), _opt$split2 = (0,_babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_opt$split), key = _opt$split2[0], rest = _opt$split2.slice(1);\n var val = rest.join(\":\").trim().replace(/^'+|'+$/g, \"\");\n if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n if (val === \"false\") formatOptions[key.trim()] = false;\n if (val === \"true\") formatOptions[key.trim()] = true;\n if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n });\n }\n }\n return {\n formatName: formatName,\n formatOptions: formatOptions\n };\n}\nfunction createCachedFormatter(fn) {\n var cache = {};\n return function invokeFormatter(val, lng, options) {\n var key = lng + JSON.stringify(options);\n var formatter = cache[key];\n if (!formatter) {\n formatter = fn(lng, options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n}\nvar Formatter = function() {\n function Formatter() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Formatter);\n this.logger = baseLogger.create(\"formatter\");\n this.options = options;\n this.formats = {\n number: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.NumberFormat(lng, options);\n return function(val) {\n return formatter.format(val);\n };\n }),\n currency: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.NumberFormat(lng, _objectSpread$4(_objectSpread$4({}, options), {}, {\n style: \"currency\"\n }));\n return function(val) {\n return formatter.format(val);\n };\n }),\n datetime: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.DateTimeFormat(lng, _objectSpread$4({}, options));\n return function(val) {\n return formatter.format(val);\n };\n }),\n relativetime: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.RelativeTimeFormat(lng, _objectSpread$4({}, options));\n return function(val) {\n return formatter.format(val, options.range || \"day\");\n };\n }),\n list: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.ListFormat(lng, _objectSpread$4({}, options));\n return function(val) {\n return formatter.format(val);\n };\n })\n };\n this.init(options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Formatter, [\n {\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var iOpts = options.interpolation;\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || \",\";\n }\n },\n {\n key: \"add\",\n value: function add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n },\n {\n key: \"addCached\",\n value: function addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n },\n {\n key: \"format\",\n value: function format(value, _format, lng, options) {\n var _this = this;\n var formats = _format.split(this.formatSeparator);\n var result = formats.reduce(function(mem, f) {\n var _parseFormatStr = parseFormatStr(f), formatName = _parseFormatStr.formatName, formatOptions = _parseFormatStr.formatOptions;\n if (_this.formats[formatName]) {\n var formatted = mem;\n try {\n var valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n var l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = _this.formats[formatName](mem, l, _objectSpread$4(_objectSpread$4(_objectSpread$4({}, formatOptions), options), valOptions));\n } catch (error) {\n _this.logger.warn(error);\n }\n return formatted;\n } else {\n _this.logger.warn(\"there was no format function for \".concat(formatName));\n }\n return mem;\n }, value);\n return result;\n }\n }\n ]);\n return Formatter;\n}();\nfunction ownKeys$5(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$5(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$5(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$5(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper$2(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct$2();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct$2() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction removePending(q, name) {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n}\nvar Connector = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Connector, _EventEmitter);\n var _super = _createSuper$2(Connector);\n function Connector(backend, store, services) {\n var _this;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Connector);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create(\"backendConnector\");\n _this.waitingReads = [];\n _this.maxParallelReads = options.maxParallelReads || 10;\n _this.readingCalls = 0;\n _this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n _this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n _this.state = {};\n _this.queue = [];\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Connector, [\n {\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n var toLoad = {};\n var pending = {};\n var toLoadLanguages = {};\n var toLoadNamespaces = {};\n languages.forEach(function(lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function(ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2;\n } else if (_this2.state[name] < 0) ;\n else if (_this2.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n _this2.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending: pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n },\n {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var s = name.split(\"|\");\n var lng = s[0];\n var ns = s[1];\n if (err) this.emit(\"failedLoading\", lng, ns, err);\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n this.state[name] = err ? -1 : 2;\n var loaded = {};\n this.queue.forEach(function(q) {\n pushPath(q.loaded, [\n lng\n ], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(function(l) {\n if (!loaded[l]) loaded[l] = {};\n var loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(function(ns) {\n if (loaded[l][ns] === undefined) loaded[l][ns] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit(\"loaded\", loaded);\n this.queue = this.queue.filter(function(q) {\n return !q.done;\n });\n }\n },\n {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng: lng,\n ns: ns,\n fcName: fcName,\n tried: tried,\n wait: wait,\n callback: callback\n });\n return;\n }\n this.readingCalls++;\n return this.backend[fcName](lng, ns, function(err, data) {\n _this3.readingCalls--;\n if (_this3.waitingReads.length > 0) {\n var next = _this3.waitingReads.shift();\n _this3.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < _this3.maxRetries) {\n setTimeout(function() {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n });\n }\n },\n {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\");\n return callback && callback();\n }\n if (typeof languages === \"string\") languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === \"string\") namespaces = [\n namespaces\n ];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(function(name) {\n _this4.loadOne(name);\n });\n }\n },\n {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n },\n {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n },\n {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n var s = name.split(\"|\");\n var lng = s[0];\n var ns = s[1];\n this.read(lng, ns, \"read\", undefined, undefined, function(err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n _this5.loaded(name, err, data);\n });\n }\n },\n {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn('did not save key \"'.concat(key, '\" as the namespace \"').concat(namespace, '\" was not yet loaded'), \"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");\n return;\n }\n if (key === undefined || key === null || key === \"\") return;\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null, _objectSpread$5(_objectSpread$5({}, options), {}, {\n isUpdate: isUpdate\n }));\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }\n ]);\n return Connector;\n}(EventEmitter);\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: [\n \"translation\"\n ],\n defaultNS: [\n \"translation\"\n ],\n fallbackLng: [\n \"dev\"\n ],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: \"all\",\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: \".\",\n nsSeparator: \":\",\n pluralSeparator: \"_\",\n contextSeparator: \"_\",\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: \"fallback\",\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: true,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[1]) === \"object\") ret = args[1];\n if (typeof args[1] === \"string\") ret.defaultValue = args[1];\n if (typeof args[2] === \"string\") ret.tDescription = args[2];\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[2]) === \"object\" || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[3]) === \"object\") {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function(key) {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng, options) {\n return value;\n },\n prefix: \"{{\",\n suffix: \"}}\",\n formatSeparator: \",\",\n unescapePrefix: \"-\",\n nestingPrefix: \"$t(\",\n nestingSuffix: \")\",\n nestingOptionsSeparator: \",\",\n maxReplaces: 1000,\n skipOnVariables: true\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === \"string\") options.ns = [\n options.ns\n ];\n if (typeof options.fallbackLng === \"string\") options.fallbackLng = [\n options.fallbackLng\n ];\n if (typeof options.fallbackNS === \"string\") options.fallbackNS = [\n options.fallbackNS\n ];\n if (options.supportedLngs && options.supportedLngs.indexOf(\"cimode\") < 0) {\n options.supportedLngs = options.supportedLngs.concat([\n \"cimode\"\n ]);\n }\n return options;\n}\nfunction ownKeys$6(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$6(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$6(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$6(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper$3(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct$3();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct$3() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n var mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(function(mem) {\n if (typeof inst[mem] === \"function\") {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n}\nvar I18n = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(I18n, _EventEmitter);\n var _super = _createSuper$3(I18n);\n function I18n() {\n var _this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, I18n);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n bindMemberFunctions((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n if (callback && !_this.isInitialized && !options.isClone) {\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(_this, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n setTimeout(function() {\n _this.init(options, callback);\n }, 0);\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(I18n, [\n {\n key: \"init\",\n value: function init() {\n var createClassOnDemand = function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === \"function\") return new ClassOrObject();\n return ClassOrObject;\n };\n var _this2 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof options === \"function\") {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (typeof options.ns === \"string\") {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf(\"translation\") < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n var defOpts = get();\n this.options = _objectSpread$6(_objectSpread$6(_objectSpread$6({}, defOpts), this.options), transformOptions(options));\n if (this.options.compatibilityAPI !== \"v1\") {\n this.options.interpolation = _objectSpread$6(_objectSpread$6({}, defOpts.interpolation), this.options.interpolation);\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n var formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== \"undefined\") {\n formatter = Formatter;\n }\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on(\"*\", function(event) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n _this2.emit.apply(_this2, [\n event\n ].concat(args));\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on(\"*\", function(event) {\n for(var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++){\n args[_key2 - 1] = arguments[_key2];\n }\n _this2.emit.apply(_this2, [\n event\n ].concat(args));\n });\n this.modules.external.forEach(function(m) {\n if (m.init) m.init(_this2);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== \"dev\") this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn(\"init: no languageDetector is used and no lng is defined\");\n }\n var storeApi = [\n \"getResource\",\n \"hasResourceBundle\",\n \"getResourceBundle\",\n \"getDataByLanguage\"\n ];\n storeApi.forEach(function(fcName) {\n _this2[fcName] = function() {\n var _this2$store;\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var storeApiChained = [\n \"addResource\",\n \"addResources\",\n \"addResourceBundle\",\n \"removeResourceBundle\"\n ];\n storeApiChained.forEach(function(fcName) {\n _this2[fcName] = function() {\n var _this2$store2;\n (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n return _this2;\n };\n });\n var deferred = defer();\n var load = function load() {\n var finish = function finish(err, t) {\n if (_this2.isInitialized && !_this2.initializedStoreOnce) _this2.logger.warn(\"init: i18next is already initialized. You should call init just once!\");\n _this2.isInitialized = true;\n if (!_this2.options.isClone) _this2.logger.log(\"initialized\", _this2.options);\n _this2.emit(\"initialized\", _this2.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (_this2.languages && _this2.options.compatibilityAPI !== \"v1\" && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n _this2.changeLanguage(_this2.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n },\n {\n key: \"loadResources\",\n value: function loadResources(language) {\n var _this3 = this;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var usedCallback = callback;\n var usedLng = typeof language === \"string\" ? language : this.language;\n if (typeof language === \"function\") usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === \"cimode\") return usedCallback();\n var toLoad = [];\n var append = function append(lng) {\n if (!lng) return;\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function(l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function(l) {\n return append(l);\n });\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(function(l) {\n return append(l);\n });\n }\n this.services.backendConnector.load(toLoad, this.options.ns, function(e) {\n if (!e && !_this3.resolvedLanguage && _this3.language) _this3.setResolvedLanguage(_this3.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n },\n {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function(err) {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"use\",\n value: function use(module) {\n if (!module) throw new Error(\"You are passing an undefined module! Please check the object you are passing to i18next.use()\");\n if (!module.type) throw new Error(\"You are passing a wrong module! Please check the object you are passing to i18next.use()\");\n if (module.type === \"backend\") {\n this.modules.backend = module;\n }\n if (module.type === \"logger\" || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === \"languageDetector\") {\n this.modules.languageDetector = module;\n }\n if (module.type === \"i18nFormat\") {\n this.modules.i18nFormat = module;\n }\n if (module.type === \"postProcessor\") {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === \"formatter\") {\n this.modules.formatter = module;\n }\n if (module.type === \"3rdParty\") {\n this.modules.external.push(module);\n }\n return this;\n }\n },\n {\n key: \"setResolvedLanguage\",\n value: function setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if ([\n \"cimode\",\n \"dev\"\n ].indexOf(l) > -1) return;\n for(var li = 0; li < this.languages.length; li++){\n var lngInLngs = this.languages[li];\n if ([\n \"cimode\",\n \"dev\"\n ].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n },\n {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n this.isLanguageChangingTo = lng;\n var deferred = defer();\n this.emit(\"languageChanging\", lng);\n var setLngProps = function setLngProps(l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n _this4.resolvedLanguage = undefined;\n _this4.setResolvedLanguage(l);\n };\n var done = function done(err, l) {\n if (l) {\n setLngProps(l);\n _this4.translator.changeLanguage(l);\n _this4.isLanguageChangingTo = undefined;\n _this4.emit(\"languageChanged\", l);\n _this4.logger.log(\"languageChanged\", l);\n } else {\n _this4.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function() {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function() {\n return _this4.t.apply(_this4, arguments);\n });\n };\n var setLng = function setLng(lngs) {\n if (!lng && !lngs && _this4.services.languageDetector) lngs = [];\n var l = typeof lngs === \"string\" ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!_this4.language) {\n setLngProps(l);\n }\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n _this4.loadResources(l, function(err) {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n return deferred;\n }\n },\n {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns, keyPrefix) {\n var _this5 = this;\n var fixedT = function fixedT(key, opts) {\n var options;\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(opts) !== \"object\") {\n for(var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++){\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this5.options.overloadTranslationOptionHandler([\n key,\n opts\n ].concat(rest));\n } else {\n options = _objectSpread$6({}, opts);\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n var keySeparator = _this5.options.keySeparator || \".\";\n var resultKey = options.keyPrefix ? \"\".concat(options.keyPrefix).concat(keySeparator).concat(key) : key;\n return _this5.t(resultKey, options);\n };\n if (typeof lng === \"string\") {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n },\n {\n key: \"t\",\n value: function t() {\n var _this$translator;\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n },\n {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n },\n {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n },\n {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn(\"hasLoadedNamespace: i18next was not initialized\", this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn(\"hasLoadedNamespace: i18n.languages were undefined or empty\", this.languages);\n return false;\n }\n var lng = this.resolvedLanguage || this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === \"cimode\") return true;\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n if (options.precheck) {\n var preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n },\n {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n var deferred = defer();\n if (!this.options.ns) {\n callback && callback();\n return Promise.resolve();\n }\n if (typeof ns === \"string\") ns = [\n ns\n ];\n ns.forEach(function(n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function(err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === \"string\") lngs = [\n lngs\n ];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function(lng) {\n return preloaded.indexOf(lng) < 0;\n });\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function(err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return \"rtl\";\n var rtlLngs = [\n \"ar\",\n \"shu\",\n \"sqr\",\n \"ssh\",\n \"xaa\",\n \"yhd\",\n \"yud\",\n \"aao\",\n \"abh\",\n \"abv\",\n \"acm\",\n \"acq\",\n \"acw\",\n \"acx\",\n \"acy\",\n \"adf\",\n \"ads\",\n \"aeb\",\n \"aec\",\n \"afb\",\n \"ajp\",\n \"apc\",\n \"apd\",\n \"arb\",\n \"arq\",\n \"ars\",\n \"ary\",\n \"arz\",\n \"auz\",\n \"avl\",\n \"ayh\",\n \"ayl\",\n \"ayn\",\n \"ayp\",\n \"bbz\",\n \"pga\",\n \"he\",\n \"iw\",\n \"ps\",\n \"pbt\",\n \"pbu\",\n \"pst\",\n \"prp\",\n \"prd\",\n \"ug\",\n \"ur\",\n \"ydd\",\n \"yds\",\n \"yih\",\n \"ji\",\n \"yi\",\n \"hbo\",\n \"men\",\n \"xmn\",\n \"fa\",\n \"jpr\",\n \"peo\",\n \"pes\",\n \"prs\",\n \"dv\",\n \"sam\",\n \"ckb\"\n ];\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf(\"-arab\") > 1 ? \"rtl\" : \"ltr\";\n }\n },\n {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var mergedOptions = _objectSpread$6(_objectSpread$6(_objectSpread$6({}, this.options), options), {\n isClone: true\n });\n var clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n var membersToCopy = [\n \"store\",\n \"services\",\n \"language\"\n ];\n membersToCopy.forEach(function(m) {\n clone[m] = _this8[m];\n });\n clone.services = _objectSpread$6({}, this.services);\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on(\"*\", function(event) {\n for(var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++){\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit.apply(clone, [\n event\n ].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n },\n {\n key: \"toJSON\",\n value: function toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n }\n ]);\n return I18n;\n}(EventEmitter);\n(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(I18n, \"createInstance\", function() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n});\nvar instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\nvar createInstance = instance.createInstance;\nvar init = instance.init;\nvar loadResources = instance.loadResources;\nvar reloadResources = instance.reloadResources;\nvar use = instance.use;\nvar changeLanguage = instance.changeLanguage;\nvar getFixedT = instance.getFixedT;\nvar t = instance.t;\nvar exists = instance.exists;\nvar setDefaultNamespace = instance.setDefaultNamespace;\nvar hasLoadedNamespace = instance.hasLoadedNamespace;\nvar loadNamespaces = instance.loadNamespaces;\nvar loadLanguages = instance.loadLanguages;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (instance);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2kxOG5leHQvZGlzdC9lc20vaTE4bmV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0Q7QUFDZ0I7QUFDTjtBQUNvQjtBQUMxQjtBQUNrQztBQUN0QjtBQUNBO0FBQ2Q7QUFFMUQsU0FBU1MsUUFBUUMsTUFBTSxFQUFFQyxjQUFjLEVBQUU7SUFBRSxJQUFJQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNGO0lBQVMsSUFBSUcsT0FBT0MscUJBQXFCLEVBQUU7UUFBRSxJQUFJQyxVQUFVRixPQUFPQyxxQkFBcUIsQ0FBQ0o7UUFBUyxJQUFJQyxnQkFBZ0I7WUFBRUksVUFBVUEsUUFBUUMsTUFBTSxDQUFDLFNBQVVDLEdBQUcsRUFBRTtnQkFBRSxPQUFPSixPQUFPSyx3QkFBd0IsQ0FBQ1IsUUFBUU8sS0FBS0UsVUFBVTtZQUFFO1FBQUksQ0FBQztRQUFDUCxLQUFLUSxJQUFJLENBQUNDLEtBQUssQ0FBQ1QsTUFBTUc7SUFBVSxDQUFDO0lBQUMsT0FBT0g7QUFBTTtBQUV4VixTQUFTVSxjQUFjQyxNQUFNLEVBQUU7SUFBRSxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUMsVUFBVUMsTUFBTSxFQUFFRixJQUFLO1FBQUUsSUFBSUcsU0FBU0YsU0FBUyxDQUFDRCxFQUFFLElBQUksSUFBSSxHQUFHQyxTQUFTLENBQUNELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFBRSxJQUFJQSxJQUFJLEdBQUc7WUFBRWYsUUFBUUksT0FBT2MsU0FBUyxJQUFJLEVBQUVDLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUV0QixxRkFBZUEsQ0FBQ2dCLFFBQVFNLEtBQUtGLE1BQU0sQ0FBQ0UsSUFBSTtZQUFHO1FBQUksT0FBTyxJQUFJaEIsT0FBT2lCLHlCQUF5QixFQUFFO1lBQUVqQixPQUFPa0IsZ0JBQWdCLENBQUNSLFFBQVFWLE9BQU9pQix5QkFBeUIsQ0FBQ0g7UUFBVSxPQUFPO1lBQUVsQixRQUFRSSxPQUFPYyxTQUFTQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFaEIsT0FBT21CLGNBQWMsQ0FBQ1QsUUFBUU0sS0FBS2hCLE9BQU9LLHdCQUF3QixDQUFDUyxRQUFRRTtZQUFPO1FBQUksQ0FBQztJQUFDO0lBQUUsT0FBT047QUFBUTtBQUVyaEIsSUFBSVUsZ0JBQWdCO0lBQ2xCQyxNQUFNO0lBQ05DLEtBQUssU0FBU0EsSUFBSUMsSUFBSSxFQUFFO1FBQ3RCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLE9BQU9EO0lBQ3JCO0lBQ0FFLE1BQU0sU0FBU0EsS0FBS0YsSUFBSSxFQUFFO1FBQ3hCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFFBQVFEO0lBQ3RCO0lBQ0FHLE9BQU8sU0FBU0EsTUFBTUgsSUFBSSxFQUFFO1FBQzFCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFNBQVNEO0lBQ3ZCO0lBQ0FDLFFBQVEsU0FBU0EsT0FBT0gsSUFBSSxFQUFFRSxJQUFJLEVBQUU7UUFDbEMsSUFBSUksV0FBV0EsT0FBTyxDQUFDTixLQUFLLEVBQUVNLE9BQU8sQ0FBQ04sS0FBSyxDQUFDYixLQUFLLENBQUNtQixTQUFTSjtJQUM3RDtBQUNGO0FBRUEsSUFBSUssU0FBUyxXQUFZO0lBQ3ZCLFNBQVNBLE9BQU9DLGNBQWMsRUFBRTtRQUM5QixJQUFJQyxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEZ4QixxRkFBZUEsQ0FBQyxJQUFJLEVBQUV3QztRQUV0QixJQUFJLENBQUNJLElBQUksQ0FBQ0gsZ0JBQWdCQztJQUM1QjtJQUVBekMsa0ZBQVlBLENBQUN1QyxRQUFRO1FBQUM7WUFDcEJaLEtBQUs7WUFDTGlCLE9BQU8sU0FBU0QsS0FBS0gsY0FBYyxFQUFFO2dCQUNuQyxJQUFJQyxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQ3NCLE1BQU0sR0FBR0osUUFBUUksTUFBTSxJQUFJO2dCQUNoQyxJQUFJLENBQUNDLE1BQU0sR0FBR04sa0JBQWtCVDtnQkFDaEMsSUFBSSxDQUFDVSxPQUFPLEdBQUdBO2dCQUNmLElBQUksQ0FBQ00sS0FBSyxHQUFHTixRQUFRTSxLQUFLO1lBQzVCO1FBQ0Y7UUFBRztZQUNEcEIsS0FBSztZQUNMaUIsT0FBTyxTQUFTSSxTQUFTQyxJQUFJLEVBQUU7Z0JBQzdCLElBQUksQ0FBQ0YsS0FBSyxHQUFHRTtZQUNmO1FBQ0Y7UUFBRztZQUNEdEIsS0FBSztZQUNMaUIsT0FBTyxTQUFTWCxNQUFNO2dCQUNwQixJQUFLLElBQUlpQixPQUFPM0IsVUFBVUMsTUFBTSxFQUFFVSxPQUFPLElBQUlpQixNQUFNRCxPQUFPRSxPQUFPLEdBQUdBLE9BQU9GLE1BQU1FLE9BQVE7b0JBQ3ZGbEIsSUFBSSxDQUFDa0IsS0FBSyxHQUFHN0IsU0FBUyxDQUFDNkIsS0FBSztnQkFDOUI7Z0JBRUEsT0FBTyxJQUFJLENBQUNDLE9BQU8sQ0FBQ25CLE1BQU0sT0FBTyxJQUFJLElBQUk7WUFDM0M7UUFDRjtRQUFHO1lBQ0RQLEtBQUs7WUFDTGlCLE9BQU8sU0FBU1IsT0FBTztnQkFDckIsSUFBSyxJQUFJa0IsUUFBUS9CLFVBQVVDLE1BQU0sRUFBRVUsT0FBTyxJQUFJaUIsTUFBTUcsUUFBUUMsUUFBUSxHQUFHQSxRQUFRRCxPQUFPQyxRQUFTO29CQUM3RnJCLElBQUksQ0FBQ3FCLE1BQU0sR0FBR2hDLFNBQVMsQ0FBQ2dDLE1BQU07Z0JBQ2hDO2dCQUVBLE9BQU8sSUFBSSxDQUFDRixPQUFPLENBQUNuQixNQUFNLFFBQVEsSUFBSSxJQUFJO1lBQzVDO1FBQ0Y7UUFBRztZQUNEUCxLQUFLO1lBQ0xpQixPQUFPLFNBQVNQLFFBQVE7Z0JBQ3RCLElBQUssSUFBSW1CLFFBQVFqQyxVQUFVQyxNQUFNLEVBQUVVLE9BQU8sSUFBSWlCLE1BQU1LLFFBQVFDLFFBQVEsR0FBR0EsUUFBUUQsT0FBT0MsUUFBUztvQkFDN0Z2QixJQUFJLENBQUN1QixNQUFNLEdBQUdsQyxTQUFTLENBQUNrQyxNQUFNO2dCQUNoQztnQkFFQSxPQUFPLElBQUksQ0FBQ0osT0FBTyxDQUFDbkIsTUFBTSxTQUFTO1lBQ3JDO1FBQ0Y7UUFBRztZQUNEUCxLQUFLO1lBQ0xpQixPQUFPLFNBQVNjLFlBQVk7Z0JBQzFCLElBQUssSUFBSUMsUUFBUXBDLFVBQVVDLE1BQU0sRUFBRVUsT0FBTyxJQUFJaUIsTUFBTVEsUUFBUUMsUUFBUSxHQUFHQSxRQUFRRCxPQUFPQyxRQUFTO29CQUM3RjFCLElBQUksQ0FBQzBCLE1BQU0sR0FBR3JDLFNBQVMsQ0FBQ3FDLE1BQU07Z0JBQ2hDO2dCQUVBLE9BQU8sSUFBSSxDQUFDUCxPQUFPLENBQUNuQixNQUFNLFFBQVEsd0JBQXdCLElBQUk7WUFDaEU7UUFDRjtRQUFHO1lBQ0RQLEtBQUs7WUFDTGlCLE9BQU8sU0FBU1MsUUFBUW5CLElBQUksRUFBRTJCLEdBQUcsRUFBRWhCLE1BQU0sRUFBRWlCLFNBQVMsRUFBRTtnQkFDcEQsSUFBSUEsYUFBYSxDQUFDLElBQUksQ0FBQ2YsS0FBSyxFQUFFLE9BQU8sSUFBSTtnQkFDekMsSUFBSSxPQUFPYixJQUFJLENBQUMsRUFBRSxLQUFLLFVBQVVBLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRzZCLE1BQU0sQ0FBQ2xCLFFBQVFrQixNQUFNLENBQUMsSUFBSSxDQUFDbEIsTUFBTSxFQUFFLEtBQUtrQixNQUFNLENBQUM3QixJQUFJLENBQUMsRUFBRTtnQkFDcEcsT0FBTyxJQUFJLENBQUNZLE1BQU0sQ0FBQ2UsSUFBSSxDQUFDM0I7WUFDMUI7UUFDRjtRQUFHO1lBQ0RQLEtBQUs7WUFDTGlCLE9BQU8sU0FBU29CLE9BQU9DLFVBQVUsRUFBRTtnQkFDakMsT0FBTyxJQUFJMUIsT0FBTyxJQUFJLENBQUNPLE1BQU0sRUFBRTFCLGNBQWNBLGNBQWMsQ0FBQyxHQUFHO29CQUM3RHlCLFFBQVEsR0FBR2tCLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixNQUFNLEVBQUUsS0FBS2tCLE1BQU0sQ0FBQ0UsWUFBWTtnQkFDekQsSUFBSSxJQUFJLENBQUN4QixPQUFPO1lBQ2xCO1FBQ0Y7UUFBRztZQUNEZCxLQUFLO1lBQ0xpQixPQUFPLFNBQVNzQixNQUFNekIsT0FBTyxFQUFFO2dCQUM3QkEsVUFBVUEsV0FBVyxJQUFJLENBQUNBLE9BQU87Z0JBQ2pDQSxRQUFRSSxNQUFNLEdBQUdKLFFBQVFJLE1BQU0sSUFBSSxJQUFJLENBQUNBLE1BQU07Z0JBQzlDLE9BQU8sSUFBSU4sT0FBTyxJQUFJLENBQUNPLE1BQU0sRUFBRUw7WUFDakM7UUFDRjtLQUFFO0lBRUYsT0FBT0Y7QUFDVDtBQUVBLElBQUk0QixhQUFhLElBQUk1QjtBQUVyQixJQUFJNkIsZUFBZSxXQUFZO0lBQzdCLFNBQVNBLGVBQWU7UUFDdEJyRSxxRkFBZUEsQ0FBQyxJQUFJLEVBQUVxRTtRQUV0QixJQUFJLENBQUNDLFNBQVMsR0FBRyxDQUFDO0lBQ3BCO0lBRUFyRSxrRkFBWUEsQ0FBQ29FLGNBQWM7UUFBQztZQUMxQnpDLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzBCLEdBQUdDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO2dCQUNuQyxJQUFJQyxRQUFRLElBQUk7Z0JBRWhCRixPQUFPRyxLQUFLLENBQUMsS0FBS2hELE9BQU8sQ0FBQyxTQUFVaUQsS0FBSyxFQUFFO29CQUN6Q0YsTUFBTUosU0FBUyxDQUFDTSxNQUFNLEdBQUdGLE1BQU1KLFNBQVMsQ0FBQ00sTUFBTSxJQUFJLEVBQUU7b0JBRXJERixNQUFNSixTQUFTLENBQUNNLE1BQU0sQ0FBQ3pELElBQUksQ0FBQ3NEO2dCQUM5QjtnQkFDQSxPQUFPLElBQUk7WUFDYjtRQUNGO1FBQUc7WUFDRDdDLEtBQUs7WUFDTGlCLE9BQU8sU0FBU2dDLElBQUlELEtBQUssRUFBRUgsUUFBUSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDSCxTQUFTLENBQUNNLE1BQU0sRUFBRTtnQkFFNUIsSUFBSSxDQUFDSCxVQUFVO29CQUNiLE9BQU8sSUFBSSxDQUFDSCxTQUFTLENBQUNNLE1BQU07b0JBQzVCO2dCQUNGLENBQUM7Z0JBRUQsSUFBSSxDQUFDTixTQUFTLENBQUNNLE1BQU0sR0FBRyxJQUFJLENBQUNOLFNBQVMsQ0FBQ00sTUFBTSxDQUFDN0QsTUFBTSxDQUFDLFNBQVUrRCxDQUFDLEVBQUU7b0JBQ2hFLE9BQU9BLE1BQU1MO2dCQUNmO1lBQ0Y7UUFDRjtRQUFHO1lBQ0Q3QyxLQUFLO1lBQ0xpQixPQUFPLFNBQVNrQyxLQUFLSCxLQUFLLEVBQUU7Z0JBQzFCLElBQUssSUFBSXpCLE9BQU8zQixVQUFVQyxNQUFNLEVBQUVVLE9BQU8sSUFBSWlCLE1BQU1ELE9BQU8sSUFBSUEsT0FBTyxJQUFJLENBQUMsR0FBR0UsT0FBTyxHQUFHQSxPQUFPRixNQUFNRSxPQUFRO29CQUMxR2xCLElBQUksQ0FBQ2tCLE9BQU8sRUFBRSxHQUFHN0IsU0FBUyxDQUFDNkIsS0FBSztnQkFDbEM7Z0JBRUEsSUFBSSxJQUFJLENBQUNpQixTQUFTLENBQUNNLE1BQU0sRUFBRTtvQkFDekIsSUFBSUksU0FBUyxFQUFFLENBQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDTSxTQUFTLENBQUNNLE1BQU07b0JBQzVDSSxPQUFPckQsT0FBTyxDQUFDLFNBQVVzRCxRQUFRLEVBQUU7d0JBQ2pDQSxTQUFTN0QsS0FBSyxDQUFDLEtBQUssR0FBR2U7b0JBQ3pCO2dCQUNGLENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUNtQyxTQUFTLENBQUMsSUFBSSxFQUFFO29CQUN2QixJQUFJWSxVQUFVLEVBQUUsQ0FBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUNNLFNBQVMsQ0FBQyxJQUFJO29CQUUzQ1ksUUFBUXZELE9BQU8sQ0FBQyxTQUFVc0QsUUFBUSxFQUFFO3dCQUNsQ0EsU0FBUzdELEtBQUssQ0FBQzZELFVBQVU7NEJBQUNMO3lCQUFNLENBQUNaLE1BQU0sQ0FBQzdCO29CQUMxQztnQkFDRixDQUFDO1lBQ0g7UUFDRjtLQUFFO0lBRUYsT0FBT2tDO0FBQ1Q7QUFFQSxTQUFTYyxRQUFRO0lBQ2YsSUFBSUM7SUFDSixJQUFJQztJQUNKLElBQUlDLFVBQVUsSUFBSUMsUUFBUSxTQUFVQyxPQUFPLEVBQUVDLE1BQU0sRUFBRTtRQUNuREwsTUFBTUk7UUFDTkgsTUFBTUk7SUFDUjtJQUNBSCxRQUFRRSxPQUFPLEdBQUdKO0lBQ2xCRSxRQUFRRyxNQUFNLEdBQUdKO0lBQ2pCLE9BQU9DO0FBQ1Q7QUFDQSxTQUFTSSxXQUFXakYsTUFBTSxFQUFFO0lBQzFCLElBQUlBLFVBQVUsSUFBSSxFQUFFLE9BQU87SUFDM0IsT0FBTyxLQUFLQTtBQUNkO0FBQ0EsU0FBU2tGLEtBQUtDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7SUFDckJGLEVBQUVqRSxPQUFPLENBQUMsU0FBVW9FLENBQUMsRUFBRTtRQUNyQixJQUFJRixDQUFDLENBQUNFLEVBQUUsRUFBRUQsQ0FBQyxDQUFDQyxFQUFFLEdBQUdGLENBQUMsQ0FBQ0UsRUFBRTtJQUN2QjtBQUNGO0FBRUEsU0FBU0MsY0FBY3ZGLE1BQU0sRUFBRXdGLElBQUksRUFBRUMsS0FBSyxFQUFFO1FBQ2pDQyxXQUFULFNBQVNBLFNBQVN2RSxHQUFHLEVBQUU7UUFDckIsT0FBT0EsT0FBT0EsSUFBSXdFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSXhFLElBQUl5RSxPQUFPLENBQUMsUUFBUSxPQUFPekUsR0FBRztJQUN4RTtRQUVTMEUsdUJBQVQsU0FBU0EsdUJBQXVCO1FBQzlCLE9BQU8sQ0FBQzdGLFVBQVUsT0FBT0EsV0FBVztJQUN0QztJQUVBLElBQUk4RixRQUFRLE9BQU9OLFNBQVMsV0FBVyxFQUFFLENBQUNqQyxNQUFNLENBQUNpQyxRQUFRQSxLQUFLdEIsS0FBSyxDQUFDLElBQUk7SUFFeEUsTUFBTzRCLE1BQU05RSxNQUFNLEdBQUcsRUFBRztRQUN2QixJQUFJNkUsd0JBQXdCLE9BQU8sQ0FBQztRQUNwQyxJQUFJMUUsTUFBTXVFLFNBQVNJLE1BQU1DLEtBQUs7UUFDOUIsSUFBSSxDQUFDL0YsTUFBTSxDQUFDbUIsSUFBSSxJQUFJc0UsT0FBT3pGLE1BQU0sQ0FBQ21CLElBQUksR0FBRyxJQUFJc0U7UUFFN0MsSUFBSXRGLE9BQU82RixTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDbEcsUUFBUW1CLE1BQU07WUFDckRuQixTQUFTQSxNQUFNLENBQUNtQixJQUFJO1FBQ3RCLE9BQU87WUFDTG5CLFNBQVMsQ0FBQztRQUNaLENBQUM7SUFDSDtJQUVBLElBQUk2Rix3QkFBd0IsT0FBTyxDQUFDO0lBQ3BDLE9BQU87UUFDTE0sS0FBS25HO1FBQ0xvRyxHQUFHVixTQUFTSSxNQUFNQyxLQUFLO0lBQ3pCO0FBQ0Y7QUFFQSxTQUFTTSxRQUFRckcsTUFBTSxFQUFFd0YsSUFBSSxFQUFFYyxRQUFRLEVBQUU7SUFDdkMsSUFBSUMsaUJBQWlCaEIsY0FBY3ZGLFFBQVF3RixNQUFNckYsU0FDN0NnRyxNQUFNSSxlQUFlSixHQUFHLEVBQ3hCQyxJQUFJRyxlQUFlSCxDQUFDO0lBRXhCRCxHQUFHLENBQUNDLEVBQUUsR0FBR0U7QUFDWDtBQUNBLFNBQVNFLFNBQVN4RyxNQUFNLEVBQUV3RixJQUFJLEVBQUVjLFFBQVEsRUFBRS9DLE1BQU0sRUFBRTtJQUNoRCxJQUFJa0Qsa0JBQWtCbEIsY0FBY3ZGLFFBQVF3RixNQUFNckYsU0FDOUNnRyxNQUFNTSxnQkFBZ0JOLEdBQUcsRUFDekJDLElBQUlLLGdCQUFnQkwsQ0FBQztJQUV6QkQsR0FBRyxDQUFDQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0MsRUFBRSxJQUFJLEVBQUU7SUFDckIsSUFBSTdDLFFBQVE0QyxHQUFHLENBQUNDLEVBQUUsR0FBR0QsR0FBRyxDQUFDQyxFQUFFLENBQUM3QyxNQUFNLENBQUMrQztJQUNuQyxJQUFJLENBQUMvQyxRQUFRNEMsR0FBRyxDQUFDQyxFQUFFLENBQUMxRixJQUFJLENBQUM0RjtBQUMzQjtBQUNBLFNBQVNJLFFBQVExRyxNQUFNLEVBQUV3RixJQUFJLEVBQUU7SUFDN0IsSUFBSW1CLGtCQUFrQnBCLGNBQWN2RixRQUFRd0YsT0FDeENXLE1BQU1RLGdCQUFnQlIsR0FBRyxFQUN6QkMsSUFBSU8sZ0JBQWdCUCxDQUFDO0lBRXpCLElBQUksQ0FBQ0QsS0FBSyxPQUFPakU7SUFDakIsT0FBT2lFLEdBQUcsQ0FBQ0MsRUFBRTtBQUNmO0FBQ0EsU0FBU1Esb0JBQW9CQyxJQUFJLEVBQUVDLFdBQVcsRUFBRTNGLEdBQUcsRUFBRTtJQUNuRCxJQUFJaUIsUUFBUXNFLFFBQVFHLE1BQU0xRjtJQUUxQixJQUFJaUIsVUFBVUYsV0FBVztRQUN2QixPQUFPRTtJQUNULENBQUM7SUFFRCxPQUFPc0UsUUFBUUksYUFBYTNGO0FBQzlCO0FBQ0EsU0FBUzRGLFdBQVdsRyxNQUFNLEVBQUVJLE1BQU0sRUFBRStGLFNBQVMsRUFBRTtJQUM3QyxJQUFLLElBQUlDLFFBQVFoRyxPQUFRO1FBQ3ZCLElBQUlnRyxTQUFTLGVBQWVBLFNBQVMsZUFBZTtZQUNsRCxJQUFJQSxRQUFRcEcsUUFBUTtnQkFDbEIsSUFBSSxPQUFPQSxNQUFNLENBQUNvRyxLQUFLLEtBQUssWUFBWXBHLFlBQUFBLE1BQU0sQ0FBQ29HLEtBQUssRUFBWUMsV0FBVSxPQUFPakcsTUFBTSxDQUFDZ0csS0FBSyxLQUFLLFlBQVloRyxZQUFBQSxNQUFNLENBQUNnRyxLQUFLLEVBQVlDLFNBQVE7b0JBQzVJLElBQUlGLFdBQVduRyxNQUFNLENBQUNvRyxLQUFLLEdBQUdoRyxNQUFNLENBQUNnRyxLQUFLO2dCQUM1QyxPQUFPO29CQUNMRixXQUFXbEcsTUFBTSxDQUFDb0csS0FBSyxFQUFFaEcsTUFBTSxDQUFDZ0csS0FBSyxFQUFFRDtnQkFDekMsQ0FBQztZQUNILE9BQU87Z0JBQ0xuRyxNQUFNLENBQUNvRyxLQUFLLEdBQUdoRyxNQUFNLENBQUNnRyxLQUFLO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0g7SUFFQSxPQUFPcEc7QUFDVDtBQUNBLFNBQVNzRyxZQUFZQyxHQUFHLEVBQUU7SUFDeEIsT0FBT0EsSUFBSXhCLE9BQU8sQ0FBQyx1Q0FBdUM7QUFDNUQ7QUFDQSxJQUFJeUIsYUFBYTtJQUNmLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUNQO0FBQ0EsU0FBU0MsT0FBT1QsSUFBSSxFQUFFO0lBQ3BCLElBQUksT0FBT0EsU0FBUyxVQUFVO1FBQzVCLE9BQU9BLEtBQUtqQixPQUFPLENBQUMsY0FBYyxTQUFVUixDQUFDLEVBQUU7WUFDN0MsT0FBT2lDLFVBQVUsQ0FBQ2pDLEVBQUU7UUFDdEI7SUFDRixDQUFDO0lBRUQsT0FBT3lCO0FBQ1Q7QUFDQSxJQUFJVSxTQUFTLE9BQU9DLFdBQVcsZUFBZUEsT0FBT0MsU0FBUyxJQUFJLE9BQU9ELE9BQU9DLFNBQVMsQ0FBQ0MsYUFBYSxLQUFLLGVBQWVGLE9BQU9DLFNBQVMsQ0FBQ0UsU0FBUyxJQUFJSCxPQUFPQyxTQUFTLENBQUNFLFNBQVMsQ0FBQ2hDLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdk0sSUFBSWlDLFFBQVE7SUFBQztJQUFLO0lBQUs7SUFBSztJQUFLO0NBQUk7QUFDckMsU0FBU0Msb0JBQW9CMUcsR0FBRyxFQUFFMkcsV0FBVyxFQUFFQyxZQUFZLEVBQUU7SUFDM0RELGNBQWNBLGVBQWU7SUFDN0JDLGVBQWVBLGdCQUFnQjtJQUMvQixJQUFJQyxnQkFBZ0JKLE1BQU10SCxNQUFNLENBQUMsU0FBVTJILENBQUMsRUFBRTtRQUM1QyxPQUFPSCxZQUFZbkMsT0FBTyxDQUFDc0MsS0FBSyxLQUFLRixhQUFhcEMsT0FBTyxDQUFDc0MsS0FBSztJQUNqRTtJQUNBLElBQUlELGNBQWNoSCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUk7SUFDM0MsSUFBSWtILElBQUksSUFBSUMsT0FBTyxJQUFJNUUsTUFBTSxDQUFDeUUsY0FBY0ksR0FBRyxDQUFDLFNBQVVILENBQUMsRUFBRTtRQUMzRCxPQUFPQSxNQUFNLE1BQU0sUUFBUUEsQ0FBQztJQUM5QixHQUFHSSxJQUFJLENBQUMsTUFBTTtJQUNkLElBQUlDLFVBQVUsQ0FBQ0osRUFBRUssSUFBSSxDQUFDcEg7SUFFdEIsSUFBSSxDQUFDbUgsU0FBUztRQUNaLElBQUlFLEtBQUtySCxJQUFJd0UsT0FBTyxDQUFDb0M7UUFFckIsSUFBSVMsS0FBSyxLQUFLLENBQUNOLEVBQUVLLElBQUksQ0FBQ3BILElBQUlzSCxTQUFTLENBQUMsR0FBR0QsTUFBTTtZQUMzQ0YsVUFBVSxJQUFJO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBT0E7QUFDVDtBQUVBLFNBQVNJLFVBQVUxSSxNQUFNLEVBQUVDLGNBQWMsRUFBRTtJQUFFLElBQUlDLE9BQU9DLE9BQU9ELElBQUksQ0FBQ0Y7SUFBUyxJQUFJRyxPQUFPQyxxQkFBcUIsRUFBRTtRQUFFLElBQUlDLFVBQVVGLE9BQU9DLHFCQUFxQixDQUFDSjtRQUFTLElBQUlDLGdCQUFnQjtZQUFFSSxVQUFVQSxRQUFRQyxNQUFNLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFLE9BQU9KLE9BQU9LLHdCQUF3QixDQUFDUixRQUFRTyxLQUFLRSxVQUFVO1lBQUU7UUFBSSxDQUFDO1FBQUNQLEtBQUtRLElBQUksQ0FBQ0MsS0FBSyxDQUFDVCxNQUFNRztJQUFVLENBQUM7SUFBQyxPQUFPSDtBQUFNO0FBRTFWLFNBQVN5SSxnQkFBZ0I5SCxNQUFNLEVBQUU7SUFBRSxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUMsVUFBVUMsTUFBTSxFQUFFRixJQUFLO1FBQUUsSUFBSUcsU0FBU0YsU0FBUyxDQUFDRCxFQUFFLElBQUksSUFBSSxHQUFHQyxTQUFTLENBQUNELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFBRSxJQUFJQSxJQUFJLEdBQUc7WUFBRTRILFVBQVV2SSxPQUFPYyxTQUFTLElBQUksRUFBRUMsT0FBTyxDQUFDLFNBQVVDLEdBQUcsRUFBRTtnQkFBRXRCLHFGQUFlQSxDQUFDZ0IsUUFBUU0sS0FBS0YsTUFBTSxDQUFDRSxJQUFJO1lBQUc7UUFBSSxPQUFPLElBQUloQixPQUFPaUIseUJBQXlCLEVBQUU7WUFBRWpCLE9BQU9rQixnQkFBZ0IsQ0FBQ1IsUUFBUVYsT0FBT2lCLHlCQUF5QixDQUFDSDtRQUFVLE9BQU87WUFBRXlILFVBQVV2SSxPQUFPYyxTQUFTQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFaEIsT0FBT21CLGNBQWMsQ0FBQ1QsUUFBUU0sS0FBS2hCLE9BQU9LLHdCQUF3QixDQUFDUyxRQUFRRTtZQUFPO1FBQUksQ0FBQztJQUFDO0lBQUUsT0FBT047QUFBUTtBQUUzaEIsU0FBUytILGFBQWFDLE9BQU8sRUFBRTtJQUFFLElBQUlDLDRCQUE0QkM7SUFBNkIsT0FBTyxTQUFTQyx1QkFBdUI7UUFBRSxJQUFJQyxRQUFRckoscUZBQWVBLENBQUNpSixVQUFVSztRQUFRLElBQUlKLDJCQUEyQjtZQUFFLElBQUlLLFlBQVl2SixxRkFBZUEsQ0FBQyxJQUFJLEVBQUV3SixXQUFXO1lBQUVGLFNBQVNHLFFBQVFDLFNBQVMsQ0FBQ0wsT0FBT2xJLFdBQVdvSTtRQUFZLE9BQU87WUFBRUQsU0FBU0QsTUFBTXRJLEtBQUssQ0FBQyxJQUFJLEVBQUVJO1FBQVksQ0FBQztRQUFDLE9BQU9wQixnR0FBMEJBLENBQUMsSUFBSSxFQUFFdUo7SUFBUztBQUFHO0FBRXhhLFNBQVNILDRCQUE0QjtJQUFFLElBQUksT0FBT00sWUFBWSxlQUFlLENBQUNBLFFBQVFDLFNBQVMsRUFBRSxPQUFPLEtBQUs7SUFBRSxJQUFJRCxRQUFRQyxTQUFTLENBQUNDLElBQUksRUFBRSxPQUFPLEtBQUs7SUFBRSxJQUFJLE9BQU9DLFVBQVUsWUFBWSxPQUFPLElBQUk7SUFBRSxJQUFJO1FBQUVDLFFBQVF6RCxTQUFTLENBQUMwRCxPQUFPLENBQUN4RCxJQUFJLENBQUNtRCxRQUFRQyxTQUFTLENBQUNHLFNBQVMsRUFBRSxFQUFFLFdBQVksQ0FBQztRQUFLLE9BQU8sSUFBSTtJQUFFLEVBQUUsT0FBT0UsR0FBRztRQUFFLE9BQU8sS0FBSztJQUFFO0FBQUU7QUFFeFUsU0FBU0MsU0FBU3pELEdBQUcsRUFBRVgsSUFBSSxFQUFFO0lBQzNCLElBQUl1QyxlQUFlaEgsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUFHO0lBQzFGLElBQUksQ0FBQ29GLEtBQUssT0FBT2pFO0lBQ2pCLElBQUlpRSxHQUFHLENBQUNYLEtBQUssRUFBRSxPQUFPVyxHQUFHLENBQUNYLEtBQUs7SUFDL0IsSUFBSXFFLFFBQVFyRSxLQUFLdEIsS0FBSyxDQUFDNkQ7SUFDdkIsSUFBSStCLFVBQVUzRDtJQUVkLElBQUssSUFBSXJGLElBQUksR0FBR0EsSUFBSStJLE1BQU03SSxNQUFNLEVBQUUsRUFBRUYsRUFBRztRQUNyQyxJQUFJLENBQUNnSixTQUFTLE9BQU81SDtRQUVyQixJQUFJLE9BQU80SCxPQUFPLENBQUNELEtBQUssQ0FBQy9JLEVBQUUsQ0FBQyxLQUFLLFlBQVlBLElBQUksSUFBSStJLE1BQU03SSxNQUFNLEVBQUU7WUFDakUsT0FBT2tCO1FBQ1QsQ0FBQztRQUVELElBQUk0SCxPQUFPLENBQUNELEtBQUssQ0FBQy9JLEVBQUUsQ0FBQyxLQUFLb0IsV0FBVztZQUNuQyxJQUFJNkgsSUFBSTtZQUNSLElBQUlDLElBQUlILE1BQU1JLEtBQUssQ0FBQ25KLEdBQUdBLElBQUlpSixHQUFHMUIsSUFBSSxDQUFDTjtZQUNuQyxJQUFJbUMsTUFBTUosT0FBTyxDQUFDRSxFQUFFO1lBRXBCLE1BQU9FLFFBQVFoSSxhQUFhMkgsTUFBTTdJLE1BQU0sR0FBR0YsSUFBSWlKLEVBQUc7Z0JBQ2hEQTtnQkFDQUMsSUFBSUgsTUFBTUksS0FBSyxDQUFDbkosR0FBR0EsSUFBSWlKLEdBQUcxQixJQUFJLENBQUNOO2dCQUMvQm1DLE1BQU1KLE9BQU8sQ0FBQ0UsRUFBRTtZQUNsQjtZQUVBLElBQUlFLFFBQVFoSSxXQUFXLE9BQU9BO1lBQzlCLElBQUlnSSxRQUFRLElBQUksRUFBRSxPQUFPLElBQUk7WUFFN0IsSUFBSTFFLEtBQUsyRSxRQUFRLENBQUNILElBQUk7Z0JBQ3BCLElBQUksT0FBT0UsUUFBUSxVQUFVLE9BQU9BO2dCQUNwQyxJQUFJRixLQUFLLE9BQU9FLEdBQUcsQ0FBQ0YsRUFBRSxLQUFLLFVBQVUsT0FBT0UsR0FBRyxDQUFDRixFQUFFO1lBQ3BELENBQUM7WUFFRCxJQUFJSSxhQUFhUCxNQUFNSSxLQUFLLENBQUNuSixJQUFJaUosR0FBRzFCLElBQUksQ0FBQ047WUFDekMsSUFBSXFDLFlBQVksT0FBT1IsU0FBU00sS0FBS0UsWUFBWXJDO1lBQ2pELE9BQU83RjtRQUNULENBQUM7UUFFRDRILFVBQVVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDL0ksRUFBRSxDQUFDO0lBQzdCO0lBRUEsT0FBT2dKO0FBQ1Q7QUFFQSxJQUFJTyxnQkFBZ0IsU0FBVUMsYUFBYSxFQUFFO0lBQzNDNUssK0VBQVNBLENBQUMySyxlQUFlQztJQUV6QixJQUFJQyxTQUFTM0IsYUFBYXlCO0lBRTFCLFNBQVNBLGNBQWN4RCxJQUFJLEVBQUU7UUFDM0IsSUFBSTVDO1FBRUosSUFBSWhDLFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHO1lBQ2hGeUosSUFBSTtnQkFBQzthQUFjO1lBQ25CQyxXQUFXO1FBQ2IsQ0FBQztRQUVEbEwscUZBQWVBLENBQUMsSUFBSSxFQUFFOEs7UUFFdEJwRyxRQUFRc0csT0FBT3JFLElBQUksQ0FBQyxJQUFJO1FBRXhCLElBQUlxQixRQUFRO1lBQ1YzRCxhQUFhc0MsSUFBSSxDQUFDekcsNEZBQXNCQSxDQUFDd0U7UUFDM0MsQ0FBQztRQUVEQSxNQUFNNEMsSUFBSSxHQUFHQSxRQUFRLENBQUM7UUFDdEI1QyxNQUFNaEMsT0FBTyxHQUFHQTtRQUVoQixJQUFJZ0MsTUFBTWhDLE9BQU8sQ0FBQzhGLFlBQVksS0FBSzdGLFdBQVc7WUFDNUMrQixNQUFNaEMsT0FBTyxDQUFDOEYsWUFBWSxHQUFHO1FBQy9CLENBQUM7UUFFRCxJQUFJOUQsTUFBTWhDLE9BQU8sQ0FBQ3lJLG1CQUFtQixLQUFLeEksV0FBVztZQUNuRCtCLE1BQU1oQyxPQUFPLENBQUN5SSxtQkFBbUIsR0FBRyxJQUFJO1FBQzFDLENBQUM7UUFFRCxPQUFPekc7SUFDVDtJQUVBekUsa0ZBQVlBLENBQUM2SyxlQUFlO1FBQUM7WUFDM0JsSixLQUFLO1lBQ0xpQixPQUFPLFNBQVN1SSxjQUFjSCxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxDQUFDdkksT0FBTyxDQUFDdUksRUFBRSxDQUFDN0UsT0FBTyxDQUFDNkUsTUFBTSxHQUFHO29CQUNuQyxJQUFJLENBQUN2SSxPQUFPLENBQUN1SSxFQUFFLENBQUM5SixJQUFJLENBQUM4SjtnQkFDdkIsQ0FBQztZQUNIO1FBQ0Y7UUFBRztZQUNEckosS0FBSztZQUNMaUIsT0FBTyxTQUFTd0ksaUJBQWlCSixFQUFFLEVBQUU7Z0JBQ25DLElBQUlLLFFBQVEsSUFBSSxDQUFDNUksT0FBTyxDQUFDdUksRUFBRSxDQUFDN0UsT0FBTyxDQUFDNkU7Z0JBRXBDLElBQUlLLFFBQVEsQ0FBQyxHQUFHO29CQUNkLElBQUksQ0FBQzVJLE9BQU8sQ0FBQ3VJLEVBQUUsQ0FBQ00sTUFBTSxDQUFDRCxPQUFPO2dCQUNoQyxDQUFDO1lBQ0g7UUFDRjtRQUFHO1lBQ0QxSixLQUFLO1lBQ0xpQixPQUFPLFNBQVMySSxZQUFZQyxHQUFHLEVBQUVSLEVBQUUsRUFBRXJKLEdBQUcsRUFBRTtnQkFDeEMsSUFBSWMsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJZ0gsZUFBZTlGLFFBQVE4RixZQUFZLEtBQUs3RixZQUFZRCxRQUFROEYsWUFBWSxHQUFHLElBQUksQ0FBQzlGLE9BQU8sQ0FBQzhGLFlBQVk7Z0JBQ3hHLElBQUkyQyxzQkFBc0J6SSxRQUFReUksbUJBQW1CLEtBQUt4SSxZQUFZRCxRQUFReUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDekksT0FBTyxDQUFDeUksbUJBQW1CO2dCQUNwSSxJQUFJbEYsT0FBTztvQkFBQ3dGO29CQUFLUjtpQkFBRztnQkFDcEIsSUFBSXJKLE9BQU8sT0FBT0EsUUFBUSxVQUFVcUUsT0FBT0EsS0FBS2pDLE1BQU0sQ0FBQ3BDO2dCQUN2RCxJQUFJQSxPQUFPLE9BQU9BLFFBQVEsVUFBVXFFLE9BQU9BLEtBQUtqQyxNQUFNLENBQUN3RSxlQUFlNUcsSUFBSStDLEtBQUssQ0FBQzZELGdCQUFnQjVHLEdBQUc7Z0JBRW5HLElBQUk2SixJQUFJckYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHO29CQUN6QkgsT0FBT3dGLElBQUk5RyxLQUFLLENBQUM7Z0JBQ25CLENBQUM7Z0JBRUQsSUFBSWdGLFNBQVN4QyxRQUFRLElBQUksQ0FBQ0csSUFBSSxFQUFFckI7Z0JBQ2hDLElBQUkwRCxVQUFVLENBQUN3Qix1QkFBdUIsT0FBT3ZKLFFBQVEsVUFBVSxPQUFPK0g7Z0JBQ3RFLE9BQU9VLFNBQVMsSUFBSSxDQUFDL0MsSUFBSSxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDbUUsSUFBSSxJQUFJLElBQUksQ0FBQ25FLElBQUksQ0FBQ21FLElBQUksQ0FBQ1IsR0FBRyxFQUFFckosS0FBSzRHO1lBQzFFO1FBQ0Y7UUFBRztZQUNENUcsS0FBSztZQUNMaUIsT0FBTyxTQUFTNkksWUFBWUQsR0FBRyxFQUFFUixFQUFFLEVBQUVySixHQUFHLEVBQUVpQixLQUFLLEVBQUU7Z0JBQy9DLElBQUlILFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHO29CQUNoRm1LLFFBQVEsS0FBSztnQkFDZixDQUFDO2dCQUNELElBQUluRCxlQUFlLElBQUksQ0FBQzlGLE9BQU8sQ0FBQzhGLFlBQVk7Z0JBQzVDLElBQUlBLGlCQUFpQjdGLFdBQVc2RixlQUFlO2dCQUMvQyxJQUFJdkMsT0FBTztvQkFBQ3dGO29CQUFLUjtpQkFBRztnQkFDcEIsSUFBSXJKLEtBQUtxRSxPQUFPQSxLQUFLakMsTUFBTSxDQUFDd0UsZUFBZTVHLElBQUkrQyxLQUFLLENBQUM2RCxnQkFBZ0I1RyxHQUFHO2dCQUV4RSxJQUFJNkosSUFBSXJGLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDekJILE9BQU93RixJQUFJOUcsS0FBSyxDQUFDO29CQUNqQjlCLFFBQVFvSTtvQkFDUkEsS0FBS2hGLElBQUksQ0FBQyxFQUFFO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxDQUFDbUYsYUFBYSxDQUFDSDtnQkFDbkJuRSxRQUFRLElBQUksQ0FBQ1EsSUFBSSxFQUFFckIsTUFBTXBEO2dCQUN6QixJQUFJLENBQUNILFFBQVFpSixNQUFNLEVBQUUsSUFBSSxDQUFDNUcsSUFBSSxDQUFDLFNBQVMwRyxLQUFLUixJQUFJckosS0FBS2lCO1lBQ3hEO1FBQ0Y7UUFBRztZQUNEakIsS0FBSztZQUNMaUIsT0FBTyxTQUFTK0ksYUFBYUgsR0FBRyxFQUFFUixFQUFFLEVBQUVZLFNBQVMsRUFBRTtnQkFDL0MsSUFBSW5KLFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHO29CQUNoRm1LLFFBQVEsS0FBSztnQkFDZixDQUFDO2dCQUVELElBQUssSUFBSTVGLEtBQUs4RixVQUFXO29CQUN2QixJQUFJLE9BQU9BLFNBQVMsQ0FBQzlGLEVBQUUsS0FBSyxZQUFZbkYsT0FBTzZGLFNBQVMsQ0FBQ3FGLFFBQVEsQ0FBQzFLLEtBQUssQ0FBQ3lLLFNBQVMsQ0FBQzlGLEVBQUUsTUFBTSxrQkFBa0IsSUFBSSxDQUFDMkYsV0FBVyxDQUFDRCxLQUFLUixJQUFJbEYsR0FBRzhGLFNBQVMsQ0FBQzlGLEVBQUUsRUFBRTt3QkFDcko0RixRQUFRLElBQUk7b0JBQ2Q7Z0JBQ0Y7Z0JBRUEsSUFBSSxDQUFDakosUUFBUWlKLE1BQU0sRUFBRSxJQUFJLENBQUM1RyxJQUFJLENBQUMsU0FBUzBHLEtBQUtSLElBQUlZO1lBQ25EO1FBQ0Y7UUFBRztZQUNEakssS0FBSztZQUNMaUIsT0FBTyxTQUFTa0osa0JBQWtCTixHQUFHLEVBQUVSLEVBQUUsRUFBRVksU0FBUyxFQUFFRyxJQUFJLEVBQUV2RSxTQUFTLEVBQUU7Z0JBQ3JFLElBQUkvRSxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRztvQkFDaEZtSyxRQUFRLEtBQUs7Z0JBQ2YsQ0FBQztnQkFDRCxJQUFJMUYsT0FBTztvQkFBQ3dGO29CQUFLUjtpQkFBRztnQkFFcEIsSUFBSVEsSUFBSXJGLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDekJILE9BQU93RixJQUFJOUcsS0FBSyxDQUFDO29CQUNqQnFILE9BQU9IO29CQUNQQSxZQUFZWjtvQkFDWkEsS0FBS2hGLElBQUksQ0FBQyxFQUFFO2dCQUNkLENBQUM7Z0JBRUQsSUFBSSxDQUFDbUYsYUFBYSxDQUFDSDtnQkFDbkIsSUFBSWdCLE9BQU85RSxRQUFRLElBQUksQ0FBQ0csSUFBSSxFQUFFckIsU0FBUyxDQUFDO2dCQUV4QyxJQUFJK0YsTUFBTTtvQkFDUnhFLFdBQVd5RSxNQUFNSixXQUFXcEU7Z0JBQzlCLE9BQU87b0JBQ0x3RSxPQUFPN0MsZ0JBQWdCQSxnQkFBZ0IsQ0FBQyxHQUFHNkMsT0FBT0o7Z0JBQ3BELENBQUM7Z0JBRUQvRSxRQUFRLElBQUksQ0FBQ1EsSUFBSSxFQUFFckIsTUFBTWdHO2dCQUN6QixJQUFJLENBQUN2SixRQUFRaUosTUFBTSxFQUFFLElBQUksQ0FBQzVHLElBQUksQ0FBQyxTQUFTMEcsS0FBS1IsSUFBSVk7WUFDbkQ7UUFDRjtRQUFHO1lBQ0RqSyxLQUFLO1lBQ0xpQixPQUFPLFNBQVNxSixxQkFBcUJULEdBQUcsRUFBRVIsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLElBQUksQ0FBQ2tCLGlCQUFpQixDQUFDVixLQUFLUixLQUFLO29CQUNuQyxPQUFPLElBQUksQ0FBQzNELElBQUksQ0FBQ21FLElBQUksQ0FBQ1IsR0FBRztnQkFDM0IsQ0FBQztnQkFFRCxJQUFJLENBQUNJLGdCQUFnQixDQUFDSjtnQkFDdEIsSUFBSSxDQUFDbEcsSUFBSSxDQUFDLFdBQVcwRyxLQUFLUjtZQUM1QjtRQUNGO1FBQUc7WUFDRHJKLEtBQUs7WUFDTGlCLE9BQU8sU0FBU3NKLGtCQUFrQlYsR0FBRyxFQUFFUixFQUFFLEVBQUU7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDTyxXQUFXLENBQUNDLEtBQUtSLFFBQVF0STtZQUN2QztRQUNGO1FBQUc7WUFDRGYsS0FBSztZQUNMaUIsT0FBTyxTQUFTdUosa0JBQWtCWCxHQUFHLEVBQUVSLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDQSxJQUFJQSxLQUFLLElBQUksQ0FBQ3ZJLE9BQU8sQ0FBQ3dJLFNBQVM7Z0JBQ3BDLElBQUksSUFBSSxDQUFDeEksT0FBTyxDQUFDMkosZ0JBQWdCLEtBQUssTUFBTSxPQUFPakQsZ0JBQWdCQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUNvQyxXQUFXLENBQUNDLEtBQUtSO2dCQUNsSCxPQUFPLElBQUksQ0FBQ08sV0FBVyxDQUFDQyxLQUFLUjtZQUMvQjtRQUNGO1FBQUc7WUFDRHJKLEtBQUs7WUFDTGlCLE9BQU8sU0FBU3lKLGtCQUFrQmIsR0FBRyxFQUFFO2dCQUNyQyxPQUFPLElBQUksQ0FBQ25FLElBQUksQ0FBQ21FLElBQUk7WUFDdkI7UUFDRjtRQUFHO1lBQ0Q3SixLQUFLO1lBQ0xpQixPQUFPLFNBQVMwSiw0QkFBNEJkLEdBQUcsRUFBRTtnQkFDL0MsSUFBSW5FLE9BQU8sSUFBSSxDQUFDZ0YsaUJBQWlCLENBQUNiO2dCQUNsQyxJQUFJZSxJQUFJbEYsUUFBUTFHLE9BQU9ELElBQUksQ0FBQzJHLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxDQUFDLENBQUNrRixFQUFFQyxJQUFJLENBQUMsU0FBVUMsQ0FBQyxFQUFFO29CQUMzQixPQUFPcEYsSUFBSSxDQUFDb0YsRUFBRSxJQUFJOUwsT0FBT0QsSUFBSSxDQUFDMkcsSUFBSSxDQUFDb0YsRUFBRSxFQUFFakwsTUFBTSxHQUFHO2dCQUNsRDtZQUNGO1FBQ0Y7UUFBRztZQUNERyxLQUFLO1lBQ0xpQixPQUFPLFNBQVM4SixTQUFTO2dCQUN2QixPQUFPLElBQUksQ0FBQ3JGLElBQUk7WUFDbEI7UUFDRjtLQUFFO0lBRUYsT0FBT3dEO0FBQ1QsRUFBRXpHO0FBRUYsSUFBSXVJLGdCQUFnQjtJQUNsQkMsWUFBWSxDQUFDO0lBQ2JDLGtCQUFrQixTQUFTQSxpQkFBaUJDLE1BQU0sRUFBRTtRQUNsRCxJQUFJLENBQUNGLFVBQVUsQ0FBQ0UsT0FBT0MsSUFBSSxDQUFDLEdBQUdEO0lBQ2pDO0lBQ0FFLFFBQVEsU0FBU0EsT0FBT0osVUFBVSxFQUFFaEssS0FBSyxFQUFFakIsR0FBRyxFQUFFYyxPQUFPLEVBQUV3SyxVQUFVLEVBQUU7UUFDbkUsSUFBSXhJLFFBQVEsSUFBSTtRQUVoQm1JLFdBQVdsTCxPQUFPLENBQUMsU0FBVXdMLFNBQVMsRUFBRTtZQUN0QyxJQUFJekksTUFBTW1JLFVBQVUsQ0FBQ00sVUFBVSxFQUFFdEssUUFBUTZCLE1BQU1tSSxVQUFVLENBQUNNLFVBQVUsQ0FBQ0MsT0FBTyxDQUFDdkssT0FBT2pCLEtBQUtjLFNBQVN3SztRQUNwRztRQUNBLE9BQU9ySztJQUNUO0FBQ0Y7QUFFQSxTQUFTd0ssVUFBVTVNLE1BQU0sRUFBRUMsY0FBYyxFQUFFO0lBQUUsSUFBSUMsT0FBT0MsT0FBT0QsSUFBSSxDQUFDRjtJQUFTLElBQUlHLE9BQU9DLHFCQUFxQixFQUFFO1FBQUUsSUFBSUMsVUFBVUYsT0FBT0MscUJBQXFCLENBQUNKO1FBQVMsSUFBSUMsZ0JBQWdCO1lBQUVJLFVBQVVBLFFBQVFDLE1BQU0sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUUsT0FBT0osT0FBT0ssd0JBQXdCLENBQUNSLFFBQVFPLEtBQUtFLFVBQVU7WUFBRTtRQUFJLENBQUM7UUFBQ1AsS0FBS1EsSUFBSSxDQUFDQyxLQUFLLENBQUNULE1BQU1HO0lBQVUsQ0FBQztJQUFDLE9BQU9IO0FBQU07QUFFMVYsU0FBUzJNLGdCQUFnQmhNLE1BQU0sRUFBRTtJQUFFLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJQyxVQUFVQyxNQUFNLEVBQUVGLElBQUs7UUFBRSxJQUFJRyxTQUFTRixTQUFTLENBQUNELEVBQUUsSUFBSSxJQUFJLEdBQUdDLFNBQVMsQ0FBQ0QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUFFLElBQUlBLElBQUksR0FBRztZQUFFOEwsVUFBVXpNLE9BQU9jLFNBQVMsSUFBSSxFQUFFQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFdEIscUZBQWVBLENBQUNnQixRQUFRTSxLQUFLRixNQUFNLENBQUNFLElBQUk7WUFBRztRQUFJLE9BQU8sSUFBSWhCLE9BQU9pQix5QkFBeUIsRUFBRTtZQUFFakIsT0FBT2tCLGdCQUFnQixDQUFDUixRQUFRVixPQUFPaUIseUJBQXlCLENBQUNIO1FBQVUsT0FBTztZQUFFMkwsVUFBVXpNLE9BQU9jLFNBQVNDLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUVoQixPQUFPbUIsY0FBYyxDQUFDVCxRQUFRTSxLQUFLaEIsT0FBT0ssd0JBQXdCLENBQUNTLFFBQVFFO1lBQU87UUFBSSxDQUFDO0lBQUM7SUFBRSxPQUFPTjtBQUFRO0FBRTNoQixTQUFTaU0sZUFBZWpFLE9BQU8sRUFBRTtJQUFFLElBQUlDLDRCQUE0QmlFO0lBQStCLE9BQU8sU0FBUy9ELHVCQUF1QjtRQUFFLElBQUlDLFFBQVFySixxRkFBZUEsQ0FBQ2lKLFVBQVVLO1FBQVEsSUFBSUosMkJBQTJCO1lBQUUsSUFBSUssWUFBWXZKLHFGQUFlQSxDQUFDLElBQUksRUFBRXdKLFdBQVc7WUFBRUYsU0FBU0csUUFBUUMsU0FBUyxDQUFDTCxPQUFPbEksV0FBV29JO1FBQVksT0FBTztZQUFFRCxTQUFTRCxNQUFNdEksS0FBSyxDQUFDLElBQUksRUFBRUk7UUFBWSxDQUFDO1FBQUMsT0FBT3BCLGdHQUEwQkEsQ0FBQyxJQUFJLEVBQUV1SjtJQUFTO0FBQUc7QUFFNWEsU0FBUzZELDhCQUE4QjtJQUFFLElBQUksT0FBTzFELFlBQVksZUFBZSxDQUFDQSxRQUFRQyxTQUFTLEVBQUUsT0FBTyxLQUFLO0lBQUUsSUFBSUQsUUFBUUMsU0FBUyxDQUFDQyxJQUFJLEVBQUUsT0FBTyxLQUFLO0lBQUUsSUFBSSxPQUFPQyxVQUFVLFlBQVksT0FBTyxJQUFJO0lBQUUsSUFBSTtRQUFFQyxRQUFRekQsU0FBUyxDQUFDMEQsT0FBTyxDQUFDeEQsSUFBSSxDQUFDbUQsUUFBUUMsU0FBUyxDQUFDRyxTQUFTLEVBQUUsRUFBRSxXQUFZLENBQUM7UUFBSyxPQUFPLElBQUk7SUFBRSxFQUFFLE9BQU9FLEdBQUc7UUFBRSxPQUFPLEtBQUs7SUFBRTtBQUFFO0FBQzFVLElBQUlxRCxtQkFBbUIsQ0FBQztBQUV4QixJQUFJQyxhQUFhLFNBQVUzQyxhQUFhLEVBQUU7SUFDeEM1SywrRUFBU0EsQ0FBQ3VOLFlBQVkzQztJQUV0QixJQUFJQyxTQUFTdUMsZUFBZUc7SUFFNUIsU0FBU0EsV0FBV0MsUUFBUSxFQUFFO1FBQzVCLElBQUlqSjtRQUVKLElBQUloQyxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEZ4QixxRkFBZUEsQ0FBQyxJQUFJLEVBQUUwTjtRQUV0QmhKLFFBQVFzRyxPQUFPckUsSUFBSSxDQUFDLElBQUk7UUFFeEIsSUFBSXFCLFFBQVE7WUFDVjNELGFBQWFzQyxJQUFJLENBQUN6Ryw0RkFBc0JBLENBQUN3RTtRQUMzQyxDQUFDO1FBRURpQixLQUFLO1lBQUM7WUFBaUI7WUFBaUI7WUFBa0I7WUFBZ0I7WUFBb0I7WUFBYztTQUFRLEVBQUVnSSxVQUFVek4sNEZBQXNCQSxDQUFDd0U7UUFDdkpBLE1BQU1oQyxPQUFPLEdBQUdBO1FBRWhCLElBQUlnQyxNQUFNaEMsT0FBTyxDQUFDOEYsWUFBWSxLQUFLN0YsV0FBVztZQUM1QytCLE1BQU1oQyxPQUFPLENBQUM4RixZQUFZLEdBQUc7UUFDL0IsQ0FBQztRQUVEOUQsTUFBTTNCLE1BQU0sR0FBR3FCLFdBQVdILE1BQU0sQ0FBQztRQUNqQyxPQUFPUztJQUNUO0lBRUF6RSxrRkFBWUEsQ0FBQ3lOLFlBQVk7UUFBQztZQUN4QjlMLEtBQUs7WUFDTGlCLE9BQU8sU0FBUytLLGVBQWVuQyxHQUFHLEVBQUU7Z0JBQ2xDLElBQUlBLEtBQUssSUFBSSxDQUFDb0MsUUFBUSxHQUFHcEM7WUFDM0I7UUFDRjtRQUFHO1lBQ0Q3SixLQUFLO1lBQ0xpQixPQUFPLFNBQVNpTCxPQUFPbE0sR0FBRyxFQUFFO2dCQUMxQixJQUFJYyxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRztvQkFDaEZ1TSxlQUFlLENBQUM7Z0JBQ2xCLENBQUM7Z0JBRUQsSUFBSW5NLFFBQVFlLGFBQWFmLFFBQVEsSUFBSSxFQUFFO29CQUNyQyxPQUFPLEtBQUs7Z0JBQ2QsQ0FBQztnQkFFRCxJQUFJb00sV0FBVyxJQUFJLENBQUN4SSxPQUFPLENBQUM1RCxLQUFLYztnQkFDakMsT0FBT3NMLFlBQVlBLFNBQVM1SSxHQUFHLEtBQUt6QztZQUN0QztRQUNGO1FBQUc7WUFDRGYsS0FBSztZQUNMaUIsT0FBTyxTQUFTb0wsZUFBZXJNLEdBQUcsRUFBRWMsT0FBTyxFQUFFO2dCQUMzQyxJQUFJNkYsY0FBYzdGLFFBQVE2RixXQUFXLEtBQUs1RixZQUFZRCxRQUFRNkYsV0FBVyxHQUFHLElBQUksQ0FBQzdGLE9BQU8sQ0FBQzZGLFdBQVc7Z0JBQ3BHLElBQUlBLGdCQUFnQjVGLFdBQVc0RixjQUFjO2dCQUM3QyxJQUFJQyxlQUFlOUYsUUFBUThGLFlBQVksS0FBSzdGLFlBQVlELFFBQVE4RixZQUFZLEdBQUcsSUFBSSxDQUFDOUYsT0FBTyxDQUFDOEYsWUFBWTtnQkFDeEcsSUFBSTBGLGFBQWF4TCxRQUFRdUksRUFBRSxJQUFJLElBQUksQ0FBQ3ZJLE9BQU8sQ0FBQ3dJLFNBQVMsSUFBSSxFQUFFO2dCQUMzRCxJQUFJaUQsdUJBQXVCNUYsZUFBZTNHLElBQUl3RSxPQUFPLENBQUNtQyxlQUFlLENBQUM7Z0JBQ3RFLElBQUk2Rix1QkFBdUIsQ0FBQyxJQUFJLENBQUMxTCxPQUFPLENBQUMyTCx1QkFBdUIsSUFBSSxDQUFDM0wsUUFBUThGLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQzlGLE9BQU8sQ0FBQzRMLHNCQUFzQixJQUFJLENBQUM1TCxRQUFRNkYsV0FBVyxJQUFJLENBQUNELG9CQUFvQjFHLEtBQUsyRyxhQUFhQztnQkFFcE0sSUFBSTJGLHdCQUF3QixDQUFDQyxzQkFBc0I7b0JBQ2pELElBQUlySSxJQUFJbkUsSUFBSTJNLEtBQUssQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsYUFBYTtvQkFFakQsSUFBSTFJLEtBQUtBLEVBQUV0RSxNQUFNLEdBQUcsR0FBRzt3QkFDckIsT0FBTzs0QkFDTEcsS0FBS0E7NEJBQ0xzTSxZQUFZQTt3QkFDZDtvQkFDRixDQUFDO29CQUVELElBQUlRLFFBQVE5TSxJQUFJK0MsS0FBSyxDQUFDNEQ7b0JBQ3RCLElBQUlBLGdCQUFnQkMsZ0JBQWdCRCxnQkFBZ0JDLGdCQUFnQixJQUFJLENBQUM5RixPQUFPLENBQUN1SSxFQUFFLENBQUM3RSxPQUFPLENBQUNzSSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBR1IsYUFBYVEsTUFBTWxJLEtBQUs7b0JBQ3BJNUUsTUFBTThNLE1BQU01RixJQUFJLENBQUNOO2dCQUNuQixDQUFDO2dCQUVELElBQUksT0FBTzBGLGVBQWUsVUFBVUEsYUFBYTtvQkFBQ0E7aUJBQVc7Z0JBQzdELE9BQU87b0JBQ0x0TSxLQUFLQTtvQkFDTHNNLFlBQVlBO2dCQUNkO1lBQ0Y7UUFDRjtRQUFHO1lBQ0R0TSxLQUFLO1lBQ0xpQixPQUFPLFNBQVM4TCxVQUFVaE8sSUFBSSxFQUFFK0IsT0FBTyxFQUFFa00sT0FBTyxFQUFFO2dCQUNoRCxJQUFJQyxTQUFTLElBQUk7Z0JBRWpCLElBQUk5Tyw2RUFBT0EsQ0FBQzJDLGFBQWEsWUFBWSxJQUFJLENBQUNBLE9BQU8sQ0FBQ29NLGdDQUFnQyxFQUFFO29CQUNsRnBNLFVBQVUsSUFBSSxDQUFDQSxPQUFPLENBQUNvTSxnQ0FBZ0MsQ0FBQ3ROO2dCQUMxRCxDQUFDO2dCQUVELElBQUksQ0FBQ2tCLFNBQVNBLFVBQVUsQ0FBQztnQkFDekIsSUFBSS9CLFNBQVNnQyxhQUFhaEMsU0FBUyxJQUFJLEVBQUUsT0FBTztnQkFDaEQsSUFBSSxDQUFDeUMsTUFBTTJMLE9BQU8sQ0FBQ3BPLE9BQU9BLE9BQU87b0JBQUNnSCxPQUFPaEg7aUJBQU07Z0JBQy9DLElBQUlxTyxnQkFBZ0J0TSxRQUFRc00sYUFBYSxLQUFLck0sWUFBWUQsUUFBUXNNLGFBQWEsR0FBRyxJQUFJLENBQUN0TSxPQUFPLENBQUNzTSxhQUFhO2dCQUM1RyxJQUFJeEcsZUFBZTlGLFFBQVE4RixZQUFZLEtBQUs3RixZQUFZRCxRQUFROEYsWUFBWSxHQUFHLElBQUksQ0FBQzlGLE9BQU8sQ0FBQzhGLFlBQVk7Z0JBRXhHLElBQUl5Ryx1QkFBdUIsSUFBSSxDQUFDaEIsY0FBYyxDQUFDdE4sSUFBSSxDQUFDQSxLQUFLYyxNQUFNLEdBQUcsRUFBRSxFQUFFaUIsVUFDbEVkLE1BQU1xTixxQkFBcUJyTixHQUFHLEVBQzlCc00sYUFBYWUscUJBQXFCZixVQUFVO2dCQUVoRCxJQUFJZ0IsWUFBWWhCLFVBQVUsQ0FBQ0EsV0FBV3pNLE1BQU0sR0FBRyxFQUFFO2dCQUNqRCxJQUFJZ0ssTUFBTS9JLFFBQVErSSxHQUFHLElBQUksSUFBSSxDQUFDb0MsUUFBUTtnQkFDdEMsSUFBSXNCLDBCQUEwQnpNLFFBQVF5TSx1QkFBdUIsSUFBSSxJQUFJLENBQUN6TSxPQUFPLENBQUN5TSx1QkFBdUI7Z0JBRXJHLElBQUkxRCxPQUFPQSxJQUFJMkQsV0FBVyxPQUFPLFVBQVU7b0JBQ3pDLElBQUlELHlCQUF5Qjt3QkFDM0IsSUFBSTVHLGNBQWM3RixRQUFRNkYsV0FBVyxJQUFJLElBQUksQ0FBQzdGLE9BQU8sQ0FBQzZGLFdBQVc7d0JBRWpFLElBQUl5RyxlQUFlOzRCQUNqQmhCLFNBQVM1SSxHQUFHLEdBQUcsR0FBR3BCLE1BQU0sQ0FBQ2tMLFdBQVdsTCxNQUFNLENBQUN1RSxhQUFhdkUsTUFBTSxDQUFDcEM7NEJBQy9ELE9BQU9vTTt3QkFDVCxDQUFDO3dCQUVELE9BQU8sR0FBR2hLLE1BQU0sQ0FBQ2tMLFdBQVdsTCxNQUFNLENBQUN1RSxhQUFhdkUsTUFBTSxDQUFDcEM7b0JBQ3pELENBQUM7b0JBRUQsSUFBSW9OLGVBQWU7d0JBQ2pCaEIsU0FBUzVJLEdBQUcsR0FBR3hEO3dCQUNmLE9BQU9vTTtvQkFDVCxDQUFDO29CQUVELE9BQU9wTTtnQkFDVCxDQUFDO2dCQUVELElBQUlvTSxXQUFXLElBQUksQ0FBQ3hJLE9BQU8sQ0FBQzdFLE1BQU0rQjtnQkFDbEMsSUFBSTBDLE1BQU00SSxZQUFZQSxTQUFTNUksR0FBRztnQkFDbEMsSUFBSWlLLGFBQWFyQixZQUFZQSxTQUFTc0IsT0FBTyxJQUFJMU47Z0JBQ2pELElBQUkyTixrQkFBa0J2QixZQUFZQSxTQUFTd0IsWUFBWSxJQUFJNU47Z0JBQzNELElBQUk2TixVQUFVN08sT0FBTzZGLFNBQVMsQ0FBQ3FGLFFBQVEsQ0FBQzFLLEtBQUssQ0FBQ2dFO2dCQUM5QyxJQUFJc0ssV0FBVztvQkFBQztvQkFBbUI7b0JBQXFCO2lCQUFrQjtnQkFDMUUsSUFBSUMsYUFBYWpOLFFBQVFpTixVQUFVLEtBQUtoTixZQUFZRCxRQUFRaU4sVUFBVSxHQUFHLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQ2lOLFVBQVU7Z0JBQ2hHLElBQUlDLDZCQUE2QixDQUFDLElBQUksQ0FBQ0MsVUFBVSxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDQyxjQUFjO2dCQUNuRixJQUFJQSxpQkFBaUIsT0FBTzFLLFFBQVEsWUFBWSxPQUFPQSxRQUFRLGFBQWEsT0FBT0EsUUFBUTtnQkFFM0YsSUFBSXdLLDhCQUE4QnhLLE9BQU8wSyxrQkFBa0JKLFNBQVN0SixPQUFPLENBQUNxSixXQUFXLEtBQUssQ0FBRSxRQUFPRSxlQUFlLFlBQVlGLFlBQVksZ0JBQWUsR0FBSTtvQkFDN0osSUFBSSxDQUFDL00sUUFBUXFOLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQ3JOLE9BQU8sQ0FBQ3FOLGFBQWEsRUFBRTt3QkFDekQsSUFBSSxDQUFDLElBQUksQ0FBQ3JOLE9BQU8sQ0FBQ3NOLHFCQUFxQixFQUFFOzRCQUN2QyxJQUFJLENBQUNqTixNQUFNLENBQUNWLElBQUksQ0FBQzt3QkFDbkIsQ0FBQzt3QkFFRCxJQUFJc0csSUFBSSxJQUFJLENBQUNqRyxPQUFPLENBQUNzTixxQkFBcUIsR0FBRyxJQUFJLENBQUN0TixPQUFPLENBQUNzTixxQkFBcUIsQ0FBQ1gsWUFBWWpLLEtBQUtrSSxnQkFBZ0JBLGdCQUFnQixDQUFDLEdBQUc1SyxVQUFVLENBQUMsR0FBRzs0QkFDakp1SSxJQUFJaUQ7d0JBQ04sTUFBTSxRQUFRbEssTUFBTSxDQUFDcEMsS0FBSyxNQUFNb0MsTUFBTSxDQUFDLElBQUksQ0FBQzZKLFFBQVEsRUFBRSwyQ0FBMkM7d0JBRWpHLElBQUltQixlQUFlOzRCQUNqQmhCLFNBQVM1SSxHQUFHLEdBQUd1RDs0QkFDZixPQUFPcUY7d0JBQ1QsQ0FBQzt3QkFFRCxPQUFPckY7b0JBQ1QsQ0FBQztvQkFFRCxJQUFJSCxjQUFjO3dCQUNoQixJQUFJeUgsaUJBQWlCUixZQUFZO3dCQUNqQyxJQUFJOUosT0FBT3NLLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQyxJQUFJQyxjQUFjRCxpQkFBaUJWLGtCQUFrQkYsVUFBVTt3QkFFL0QsSUFBSyxJQUFJdEosS0FBS1gsSUFBSzs0QkFDakIsSUFBSXhFLE9BQU82RixTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDdkIsS0FBS1csSUFBSTtnQ0FDaEQsSUFBSW9LLFVBQVUsR0FBR25NLE1BQU0sQ0FBQ2tNLGFBQWFsTSxNQUFNLENBQUN3RSxjQUFjeEUsTUFBTSxDQUFDK0I7Z0NBQ2pFSixJQUFJLENBQUNJLEVBQUUsR0FBRyxJQUFJLENBQUM0SSxTQUFTLENBQUN3QixTQUFTN0MsZ0JBQWdCQSxnQkFBZ0IsQ0FBQyxHQUFHNUssVUFBVTtvQ0FDOUVpTixZQUFZLEtBQUs7b0NBQ2pCMUUsSUFBSWlEO2dDQUNOO2dDQUNBLElBQUl2SSxJQUFJLENBQUNJLEVBQUUsS0FBS29LLFNBQVN4SyxJQUFJLENBQUNJLEVBQUUsR0FBR1gsR0FBRyxDQUFDVyxFQUFFOzRCQUMzQyxDQUFDO3dCQUNIO3dCQUVBWCxNQUFNTztvQkFDUixDQUFDO2dCQUNILE9BQU8sSUFBSWlLLDhCQUE4QixPQUFPRCxlQUFlLFlBQVlGLFlBQVksa0JBQWtCO29CQUN2R3JLLE1BQU1BLElBQUkwRCxJQUFJLENBQUM2RztvQkFDZixJQUFJdkssS0FBS0EsTUFBTSxJQUFJLENBQUNnTCxpQkFBaUIsQ0FBQ2hMLEtBQUt6RSxNQUFNK0IsU0FBU2tNO2dCQUM1RCxPQUFPO29CQUNMLElBQUl5QixjQUFjLEtBQUs7b0JBQ3ZCLElBQUlmLFVBQVUsS0FBSztvQkFDbkIsSUFBSWdCLHNCQUFzQjVOLFFBQVE2TixLQUFLLEtBQUs1TixhQUFhLE9BQU9ELFFBQVE2TixLQUFLLEtBQUs7b0JBQ2xGLElBQUlDLGtCQUFrQjlDLFdBQVc4QyxlQUFlLENBQUM5TjtvQkFDakQsSUFBSStOLHFCQUFxQkgsc0JBQXNCLElBQUksQ0FBQ0ksY0FBYyxDQUFDQyxTQUFTLENBQUNsRixLQUFLL0ksUUFBUTZOLEtBQUssRUFBRTdOLFdBQVcsRUFBRTtvQkFDOUcsSUFBSWtPLGVBQWVsTyxPQUFPLENBQUMsZUFBZXNCLE1BQU0sQ0FBQ3lNLG9CQUFvQixJQUFJL04sUUFBUWtPLFlBQVk7b0JBRTdGLElBQUksQ0FBQyxJQUFJLENBQUNDLGFBQWEsQ0FBQ3pMLFFBQVFvTCxpQkFBaUI7d0JBQy9DSCxjQUFjLElBQUk7d0JBQ2xCakwsTUFBTXdMO29CQUNSLENBQUM7b0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDekwsTUFBTTt3QkFDNUJrSyxVQUFVLElBQUk7d0JBQ2RsSyxNQUFNeEQ7b0JBQ1IsQ0FBQztvQkFFRCxJQUFJa1AsaUNBQWlDcE8sUUFBUW9PLDhCQUE4QixJQUFJLElBQUksQ0FBQ3BPLE9BQU8sQ0FBQ29PLDhCQUE4QjtvQkFDMUgsSUFBSUMsZ0JBQWdCRCxrQ0FBa0N4QixVQUFVM00sWUFBWXlDLEdBQUc7b0JBQy9FLElBQUk0TCxnQkFBZ0JSLG1CQUFtQkksaUJBQWlCeEwsT0FBTyxJQUFJLENBQUMxQyxPQUFPLENBQUNzTyxhQUFhO29CQUV6RixJQUFJMUIsV0FBV2UsZUFBZVcsZUFBZTt3QkFDM0MsSUFBSSxDQUFDak8sTUFBTSxDQUFDYixHQUFHLENBQUM4TyxnQkFBZ0IsY0FBYyxZQUFZLEVBQUV2RixLQUFLeUQsV0FBV3ROLEtBQUtvUCxnQkFBZ0JKLGVBQWV4TCxHQUFHO3dCQUVuSCxJQUFJb0QsY0FBYzs0QkFDaEIsSUFBSXlJLEtBQUssSUFBSSxDQUFDekwsT0FBTyxDQUFDNUQsS0FBSzBMLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBRzVLLFVBQVUsQ0FBQyxHQUFHO2dDQUMzRThGLGNBQWMsS0FBSzs0QkFDckI7NEJBQ0EsSUFBSXlJLE1BQU1BLEdBQUc3TCxHQUFHLEVBQUUsSUFBSSxDQUFDckMsTUFBTSxDQUFDVixJQUFJLENBQUM7d0JBQ3JDLENBQUM7d0JBRUQsSUFBSTZPLE9BQU8sRUFBRTt3QkFDYixJQUFJQyxlQUFlLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMzTyxPQUFPLENBQUM0TyxXQUFXLEVBQUU1TyxRQUFRK0ksR0FBRyxJQUFJLElBQUksQ0FBQ29DLFFBQVE7d0JBRTdHLElBQUksSUFBSSxDQUFDbkwsT0FBTyxDQUFDNk8sYUFBYSxLQUFLLGNBQWNKLGdCQUFnQkEsWUFBWSxDQUFDLEVBQUUsRUFBRTs0QkFDaEYsSUFBSyxJQUFJNVAsSUFBSSxHQUFHQSxJQUFJNFAsYUFBYTFQLE1BQU0sRUFBRUYsSUFBSztnQ0FDNUMyUCxLQUFLL1AsSUFBSSxDQUFDZ1EsWUFBWSxDQUFDNVAsRUFBRTs0QkFDM0I7d0JBQ0YsT0FBTyxJQUFJLElBQUksQ0FBQ21CLE9BQU8sQ0FBQzZPLGFBQWEsS0FBSyxPQUFPOzRCQUMvQ0wsT0FBTyxJQUFJLENBQUNFLGFBQWEsQ0FBQ0ksa0JBQWtCLENBQUM5TyxRQUFRK0ksR0FBRyxJQUFJLElBQUksQ0FBQ29DLFFBQVE7d0JBQzNFLE9BQU87NEJBQ0xxRCxLQUFLL1AsSUFBSSxDQUFDdUIsUUFBUStJLEdBQUcsSUFBSSxJQUFJLENBQUNvQyxRQUFRO3dCQUN4QyxDQUFDO3dCQUVELElBQUk0RCxPQUFPLFNBQVNBLEtBQUszTSxDQUFDLEVBQUUrQixDQUFDLEVBQUU2SyxvQkFBb0IsRUFBRTs0QkFDbkQsSUFBSUMsb0JBQW9CbkIsbUJBQW1Ca0IseUJBQXlCdE0sTUFBTXNNLHVCQUF1QlgsYUFBYTs0QkFFOUcsSUFBSWxDLE9BQU9uTSxPQUFPLENBQUNrUCxpQkFBaUIsRUFBRTtnQ0FDcEMvQyxPQUFPbk0sT0FBTyxDQUFDa1AsaUJBQWlCLENBQUM5TSxHQUFHb0ssV0FBV3JJLEdBQUc4SyxtQkFBbUJYLGVBQWV0Tzs0QkFDdEYsT0FBTyxJQUFJbU0sT0FBT2dELGdCQUFnQixJQUFJaEQsT0FBT2dELGdCQUFnQixDQUFDQyxXQUFXLEVBQUU7Z0NBQ3pFakQsT0FBT2dELGdCQUFnQixDQUFDQyxXQUFXLENBQUNoTixHQUFHb0ssV0FBV3JJLEdBQUc4SyxtQkFBbUJYLGVBQWV0Tzs0QkFDekYsQ0FBQzs0QkFFRG1NLE9BQU85SixJQUFJLENBQUMsY0FBY0QsR0FBR29LLFdBQVdySSxHQUFHekI7d0JBQzdDO3dCQUVBLElBQUksSUFBSSxDQUFDMUMsT0FBTyxDQUFDb1AsV0FBVyxFQUFFOzRCQUM1QixJQUFJLElBQUksQ0FBQ3BQLE9BQU8sQ0FBQ3FQLGtCQUFrQixJQUFJekIscUJBQXFCO2dDQUMxRFksS0FBS3ZQLE9BQU8sQ0FBQyxTQUFVa00sUUFBUSxFQUFFO29DQUMvQmdCLE9BQU82QixjQUFjLENBQUNzQixXQUFXLENBQUNuRSxVQUFVbkwsU0FBU2YsT0FBTyxDQUFDLFNBQVVzUSxNQUFNLEVBQUU7d0NBQzdFUixLQUFLOzRDQUFDNUQ7eUNBQVMsRUFBRWpNLE1BQU1xUSxRQUFRdlAsT0FBTyxDQUFDLGVBQWVzQixNQUFNLENBQUNpTyxRQUFRLElBQUlyQjtvQ0FDM0U7Z0NBQ0Y7NEJBQ0YsT0FBTztnQ0FDTGEsS0FBS1AsTUFBTXRQLEtBQUtnUDs0QkFDbEIsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7b0JBRUR4TCxNQUFNLElBQUksQ0FBQ2dMLGlCQUFpQixDQUFDaEwsS0FBS3pFLE1BQU0rQixTQUFTc0wsVUFBVVk7b0JBQzNELElBQUlVLFdBQVdsSyxRQUFReEQsT0FBTyxJQUFJLENBQUNjLE9BQU8sQ0FBQ3dQLDJCQUEyQixFQUFFOU0sTUFBTSxHQUFHcEIsTUFBTSxDQUFDa0wsV0FBVyxLQUFLbEwsTUFBTSxDQUFDcEM7b0JBRS9HLElBQUksQ0FBQzBOLFdBQVdlLFdBQVUsS0FBTSxJQUFJLENBQUMzTixPQUFPLENBQUN5UCxzQkFBc0IsRUFBRTt3QkFDbkUsSUFBSSxJQUFJLENBQUN6UCxPQUFPLENBQUMySixnQkFBZ0IsS0FBSyxNQUFNOzRCQUMxQ2pILE1BQU0sSUFBSSxDQUFDMUMsT0FBTyxDQUFDeVAsc0JBQXNCLENBQUMsSUFBSSxDQUFDelAsT0FBTyxDQUFDd1AsMkJBQTJCLEdBQUcsR0FBR2xPLE1BQU0sQ0FBQ2tMLFdBQVcsS0FBS2xMLE1BQU0sQ0FBQ3BDLE9BQU9BLEdBQUcsRUFBRXlPLGNBQWNqTCxNQUFNekMsU0FBUzt3QkFDakssT0FBTzs0QkFDTHlDLE1BQU0sSUFBSSxDQUFDMUMsT0FBTyxDQUFDeVAsc0JBQXNCLENBQUMvTTt3QkFDNUMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSTRKLGVBQWU7b0JBQ2pCaEIsU0FBUzVJLEdBQUcsR0FBR0E7b0JBQ2YsT0FBTzRJO2dCQUNULENBQUM7Z0JBRUQsT0FBTzVJO1lBQ1Q7UUFDRjtRQUFHO1lBQ0R4RCxLQUFLO1lBQ0xpQixPQUFPLFNBQVN1TixrQkFBa0JoTCxHQUFHLEVBQUV4RCxHQUFHLEVBQUVjLE9BQU8sRUFBRXNMLFFBQVEsRUFBRVksT0FBTyxFQUFFO2dCQUN0RSxJQUFJd0QsU0FBUyxJQUFJO2dCQUVqQixJQUFJLElBQUksQ0FBQ3ZDLFVBQVUsSUFBSSxJQUFJLENBQUNBLFVBQVUsQ0FBQ3dDLEtBQUssRUFBRTtvQkFDNUNqTixNQUFNLElBQUksQ0FBQ3lLLFVBQVUsQ0FBQ3dDLEtBQUssQ0FBQ2pOLEtBQUtrSSxnQkFBZ0JBLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDNUssT0FBTyxDQUFDcUwsYUFBYSxDQUFDdUUsZ0JBQWdCLEdBQUc1UCxVQUFVc0wsU0FBU3VFLE9BQU8sRUFBRXZFLFNBQVN3RSxNQUFNLEVBQUV4RSxTQUFTc0IsT0FBTyxFQUFFO3dCQUNoTHRCLFVBQVVBO29CQUNaO2dCQUNGLE9BQU8sSUFBSSxDQUFDdEwsUUFBUStQLGlCQUFpQixFQUFFO29CQUNyQyxJQUFJL1AsUUFBUXFMLGFBQWEsRUFBRSxJQUFJLENBQUNTLFlBQVksQ0FBQzVMLElBQUksQ0FBQzBLLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBRzVLLFVBQVU7d0JBQzlGcUwsZUFBZVQsZ0JBQWdCQSxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQzVLLE9BQU8sQ0FBQ3FMLGFBQWEsR0FBR3JMLFFBQVFxTCxhQUFhO29CQUN2RztvQkFDQSxJQUFJMkUsa0JBQWtCLE9BQU90TixRQUFRLFlBQWExQyxDQUFBQSxXQUFXQSxRQUFRcUwsYUFBYSxJQUFJckwsUUFBUXFMLGFBQWEsQ0FBQzJFLGVBQWUsS0FBSy9QLFlBQVlELFFBQVFxTCxhQUFhLENBQUMyRSxlQUFlLEdBQUcsSUFBSSxDQUFDaFEsT0FBTyxDQUFDcUwsYUFBYSxDQUFDMkUsZUFBZTtvQkFDOU4sSUFBSUM7b0JBRUosSUFBSUQsaUJBQWlCO3dCQUNuQixJQUFJRSxLQUFLeE4sSUFBSW1KLEtBQUssQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsYUFBYTt3QkFDbERrRSxVQUFVQyxNQUFNQSxHQUFHblIsTUFBTTtvQkFDM0IsQ0FBQztvQkFFRCxJQUFJNkYsT0FBTzVFLFFBQVEyRCxPQUFPLElBQUksT0FBTzNELFFBQVEyRCxPQUFPLEtBQUssV0FBVzNELFFBQVEyRCxPQUFPLEdBQUczRCxPQUFPO29CQUM3RixJQUFJLElBQUksQ0FBQ0EsT0FBTyxDQUFDcUwsYUFBYSxDQUFDdUUsZ0JBQWdCLEVBQUVoTCxPQUFPZ0csZ0JBQWdCQSxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQzVLLE9BQU8sQ0FBQ3FMLGFBQWEsQ0FBQ3VFLGdCQUFnQixHQUFHaEw7b0JBQzFJbEMsTUFBTSxJQUFJLENBQUNvSixZQUFZLENBQUNxRSxXQUFXLENBQUN6TixLQUFLa0MsTUFBTTVFLFFBQVErSSxHQUFHLElBQUksSUFBSSxDQUFDb0MsUUFBUSxFQUFFbkw7b0JBRTdFLElBQUlnUSxpQkFBaUI7d0JBQ25CLElBQUlJLEtBQUsxTixJQUFJbUosS0FBSyxDQUFDLElBQUksQ0FBQ0MsWUFBWSxDQUFDQyxhQUFhO3dCQUNsRCxJQUFJc0UsVUFBVUQsTUFBTUEsR0FBR3JSLE1BQU07d0JBQzdCLElBQUlrUixVQUFVSSxTQUFTclEsUUFBUXNRLElBQUksR0FBRyxLQUFLO29CQUM3QyxDQUFDO29CQUVELElBQUl0USxRQUFRc1EsSUFBSSxLQUFLLEtBQUssRUFBRTVOLE1BQU0sSUFBSSxDQUFDb0osWUFBWSxDQUFDd0UsSUFBSSxDQUFDNU4sS0FBSyxXQUFZO3dCQUN4RSxJQUFLLElBQUlqQyxPQUFPM0IsVUFBVUMsTUFBTSxFQUFFVSxPQUFPLElBQUlpQixNQUFNRCxPQUFPRSxPQUFPLEdBQUdBLE9BQU9GLE1BQU1FLE9BQVE7NEJBQ3ZGbEIsSUFBSSxDQUFDa0IsS0FBSyxHQUFHN0IsU0FBUyxDQUFDNkIsS0FBSzt3QkFDOUI7d0JBRUEsSUFBSXVMLFdBQVdBLE9BQU8sQ0FBQyxFQUFFLEtBQUt6TSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUNPLFFBQVF1USxPQUFPLEVBQUU7NEJBQ3pEYixPQUFPclAsTUFBTSxDQUFDVixJQUFJLENBQUMsNkNBQTZDMkIsTUFBTSxDQUFDN0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxhQUFhNkIsTUFBTSxDQUFDcEMsR0FBRyxDQUFDLEVBQUU7NEJBRTFHLE9BQU8sSUFBSTt3QkFDYixDQUFDO3dCQUVELE9BQU93USxPQUFPekQsU0FBUyxDQUFDdk4sS0FBSyxDQUFDZ1IsUUFBUWpRLEtBQUs2QixNQUFNLENBQUM7NEJBQUNwQzt5QkFBSTtvQkFDekQsR0FBR2M7b0JBQ0gsSUFBSUEsUUFBUXFMLGFBQWEsRUFBRSxJQUFJLENBQUNTLFlBQVksQ0FBQzBFLEtBQUs7Z0JBQ3BELENBQUM7Z0JBRUQsSUFBSUMsY0FBY3pRLFFBQVF5USxXQUFXLElBQUksSUFBSSxDQUFDelEsT0FBTyxDQUFDeVEsV0FBVztnQkFDakUsSUFBSUMscUJBQXFCLE9BQU9ELGdCQUFnQixXQUFXO29CQUFDQTtpQkFBWSxHQUFHQSxXQUFXO2dCQUV0RixJQUFJL04sUUFBUXpDLGFBQWF5QyxRQUFRLElBQUksSUFBSWdPLHNCQUFzQkEsbUJBQW1CM1IsTUFBTSxJQUFJaUIsUUFBUTJRLGtCQUFrQixLQUFLLEtBQUssRUFBRTtvQkFDaElqTyxNQUFNd0gsY0FBY0ssTUFBTSxDQUFDbUcsb0JBQW9CaE8sS0FBS3hELEtBQUssSUFBSSxDQUFDYyxPQUFPLElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUM0USx1QkFBdUIsR0FBR2hHLGdCQUFnQjt3QkFDOUhpRyxjQUFjdkY7b0JBQ2hCLEdBQUd0TCxXQUFXQSxPQUFPLEVBQUUsSUFBSTtnQkFDN0IsQ0FBQztnQkFFRCxPQUFPMEM7WUFDVDtRQUNGO1FBQUc7WUFDRHhELEtBQUs7WUFDTGlCLE9BQU8sU0FBUzJDLFFBQVE3RSxJQUFJLEVBQUU7Z0JBQzVCLElBQUk2UyxTQUFTLElBQUk7Z0JBRWpCLElBQUk5USxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUlpUztnQkFDSixJQUFJbkU7Z0JBQ0osSUFBSUU7Z0JBQ0osSUFBSStDO2dCQUNKLElBQUlDO2dCQUNKLElBQUksT0FBTzdSLFNBQVMsVUFBVUEsT0FBTztvQkFBQ0E7aUJBQUs7Z0JBQzNDQSxLQUFLZ0IsT0FBTyxDQUFDLFNBQVVrRixDQUFDLEVBQUU7b0JBQ3hCLElBQUkyTSxPQUFPM0MsYUFBYSxDQUFDNEMsUUFBUTtvQkFFakMsSUFBSUMsWUFBWUYsT0FBT3ZGLGNBQWMsQ0FBQ3BILEdBQUduRTtvQkFFekMsSUFBSWQsTUFBTThSLFVBQVU5UixHQUFHO29CQUN2QjBOLFVBQVUxTjtvQkFDVixJQUFJc00sYUFBYXdGLFVBQVV4RixVQUFVO29CQUNyQyxJQUFJc0YsT0FBTzlRLE9BQU8sQ0FBQ2lSLFVBQVUsRUFBRXpGLGFBQWFBLFdBQVdsSyxNQUFNLENBQUN3UCxPQUFPOVEsT0FBTyxDQUFDaVIsVUFBVTtvQkFDdkYsSUFBSXJELHNCQUFzQjVOLFFBQVE2TixLQUFLLEtBQUs1TixhQUFhLE9BQU9ELFFBQVE2TixLQUFLLEtBQUs7b0JBRWxGLElBQUlxRCx3QkFBd0J0RCx1QkFBdUIsQ0FBQzVOLFFBQVFtUixPQUFPLElBQUluUixRQUFRNk4sS0FBSyxLQUFLLEtBQUtpRCxPQUFPOUMsY0FBYyxDQUFDb0QsZ0JBQWdCO29CQUVwSSxJQUFJQyx1QkFBdUJyUixRQUFRdVEsT0FBTyxLQUFLdFEsYUFBYyxRQUFPRCxRQUFRdVEsT0FBTyxLQUFLLFlBQVksT0FBT3ZRLFFBQVF1USxPQUFPLEtBQUssUUFBTyxLQUFNdlEsUUFBUXVRLE9BQU8sS0FBSztvQkFDaEssSUFBSWUsUUFBUXRSLFFBQVF3TyxJQUFJLEdBQUd4TyxRQUFRd08sSUFBSSxHQUFHc0MsT0FBT3BDLGFBQWEsQ0FBQ0ksa0JBQWtCLENBQUM5TyxRQUFRK0ksR0FBRyxJQUFJK0gsT0FBTzNGLFFBQVEsRUFBRW5MLFFBQVE0TyxXQUFXLENBQUM7b0JBQ3RJcEQsV0FBV3ZNLE9BQU8sQ0FBQyxTQUFVc0osRUFBRSxFQUFFO3dCQUMvQixJQUFJdUksT0FBTzNDLGFBQWEsQ0FBQzRDLFFBQVE7d0JBQ2pDakIsU0FBU3ZIO3dCQUVULElBQUksQ0FBQ3dDLGdCQUFnQixDQUFDLEdBQUd6SixNQUFNLENBQUNnUSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUtoUSxNQUFNLENBQUNpSCxJQUFJLElBQUl1SSxPQUFPUyxLQUFLLElBQUlULE9BQU9TLEtBQUssQ0FBQ0Msa0JBQWtCLElBQUksQ0FBQ1YsT0FBT1MsS0FBSyxDQUFDQyxrQkFBa0IsQ0FBQzFCLFNBQVM7NEJBQ3pKL0UsZ0JBQWdCLENBQUMsR0FBR3pKLE1BQU0sQ0FBQ2dRLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBS2hRLE1BQU0sQ0FBQ2lILElBQUksR0FBRyxJQUFJOzRCQUU1RHVJLE9BQU96USxNQUFNLENBQUNWLElBQUksQ0FBQyxRQUFTMkIsTUFBTSxDQUFDc0wsU0FBUyxxQkFBdUJ0TCxNQUFNLENBQUNnUSxNQUFNbEwsSUFBSSxDQUFDLE9BQU8sd0NBQXlDOUUsTUFBTSxDQUFDd08sUUFBUSx5QkFBMEI7d0JBQ2hMLENBQUM7d0JBRUR3QixNQUFNclMsT0FBTyxDQUFDLFNBQVV3UyxJQUFJLEVBQUU7NEJBQzVCLElBQUlYLE9BQU8zQyxhQUFhLENBQUM0QyxRQUFROzRCQUNqQ2xCLFVBQVU0Qjs0QkFDVixJQUFJQyxZQUFZO2dDQUFDeFM7NkJBQUk7NEJBRXJCLElBQUk0UixPQUFPM0QsVUFBVSxJQUFJMkQsT0FBTzNELFVBQVUsQ0FBQ3dFLGFBQWEsRUFBRTtnQ0FDeERiLE9BQU8zRCxVQUFVLENBQUN3RSxhQUFhLENBQUNELFdBQVd4UyxLQUFLdVMsTUFBTWxKLElBQUl2STs0QkFDNUQsT0FBTztnQ0FDTCxJQUFJNFI7Z0NBQ0osSUFBSWhFLHFCQUFxQmdFLGVBQWVkLE9BQU85QyxjQUFjLENBQUNDLFNBQVMsQ0FBQ3dELE1BQU16UixRQUFRNk4sS0FBSyxFQUFFN047Z0NBQzdGLElBQUk2UixhQUFhLEdBQUd2USxNQUFNLENBQUN3UCxPQUFPOVEsT0FBTyxDQUFDOFIsZUFBZSxFQUFFO2dDQUUzRCxJQUFJbEUscUJBQXFCO29DQUN2QjhELFVBQVVqVCxJQUFJLENBQUNTLE1BQU0wUztvQ0FFckIsSUFBSVYsdUJBQXVCO3dDQUN6QlEsVUFBVWpULElBQUksQ0FBQ1MsTUFBTTJTO29DQUN2QixDQUFDO2dDQUNILENBQUM7Z0NBRUQsSUFBSVIsc0JBQXNCO29DQUN4QixJQUFJVSxhQUFhLEdBQUd6USxNQUFNLENBQUNwQyxLQUFLb0MsTUFBTSxDQUFDd1AsT0FBTzlRLE9BQU8sQ0FBQ2dTLGdCQUFnQixFQUFFMVEsTUFBTSxDQUFDdEIsUUFBUXVRLE9BQU87b0NBQzlGbUIsVUFBVWpULElBQUksQ0FBQ3NUO29DQUVmLElBQUluRSxxQkFBcUI7d0NBQ3ZCOEQsVUFBVWpULElBQUksQ0FBQ3NULGFBQWFIO3dDQUU1QixJQUFJVix1QkFBdUI7NENBQ3pCUSxVQUFValQsSUFBSSxDQUFDc1QsYUFBYUY7d0NBQzlCLENBQUM7b0NBQ0gsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7NEJBRUQsSUFBSUk7NEJBRUosTUFBT0EsY0FBY1AsVUFBVVEsR0FBRyxHQUFJO2dDQUNwQyxJQUFJLENBQUNwQixPQUFPM0MsYUFBYSxDQUFDNEMsUUFBUTtvQ0FDaENqRSxlQUFlbUY7b0NBQ2ZsQixRQUFRRCxPQUFPaEksV0FBVyxDQUFDMkksTUFBTWxKLElBQUkwSixhQUFhalM7Z0NBQ3BELENBQUM7NEJBQ0g7d0JBQ0Y7b0JBQ0Y7Z0JBQ0Y7Z0JBQ0EsT0FBTztvQkFDTDBDLEtBQUtxTztvQkFDTG5FLFNBQVNBO29CQUNURSxjQUFjQTtvQkFDZCtDLFNBQVNBO29CQUNUQyxRQUFRQTtnQkFDVjtZQUNGO1FBQ0Y7UUFBRztZQUNENVEsS0FBSztZQUNMaUIsT0FBTyxTQUFTZ08sY0FBY3pMLEdBQUcsRUFBRTtnQkFDakMsT0FBT0EsUUFBUXpDLGFBQWEsQ0FBRSxFQUFDLElBQUksQ0FBQ0QsT0FBTyxDQUFDbVMsVUFBVSxJQUFJelAsUUFBUSxJQUFJLEtBQUssQ0FBRSxFQUFDLElBQUksQ0FBQzFDLE9BQU8sQ0FBQ29TLGlCQUFpQixJQUFJMVAsUUFBUSxFQUFDO1lBQzNIO1FBQ0Y7UUFBRztZQUNEeEQsS0FBSztZQUNMaUIsT0FBTyxTQUFTMkksWUFBWTJJLElBQUksRUFBRWxKLEVBQUUsRUFBRXJKLEdBQUcsRUFBRTtnQkFDekMsSUFBSWMsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLElBQUksQ0FBQ3FPLFVBQVUsSUFBSSxJQUFJLENBQUNBLFVBQVUsQ0FBQ3JFLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQ3FFLFVBQVUsQ0FBQ3JFLFdBQVcsQ0FBQzJJLE1BQU1sSixJQUFJckosS0FBS2M7Z0JBQ3RHLE9BQU8sSUFBSSxDQUFDcVMsYUFBYSxDQUFDdkosV0FBVyxDQUFDMkksTUFBTWxKLElBQUlySixLQUFLYztZQUN2RDtRQUNGO0tBQUUsRUFBRTtRQUFDO1lBQ0hkLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzJOLGdCQUFnQjlOLE9BQU8sRUFBRTtnQkFDdkMsSUFBSUksU0FBUztnQkFFYixJQUFLLElBQUlrUyxVQUFVdFMsUUFBUztvQkFDMUIsSUFBSTlCLE9BQU82RixTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDakUsU0FBU3NTLFdBQVdsUyxXQUFXa1MsT0FBTzlMLFNBQVMsQ0FBQyxHQUFHcEcsT0FBT3JCLE1BQU0sS0FBS2tCLGNBQWNELE9BQU8sQ0FBQ3NTLE9BQU8sRUFBRTt3QkFDM0ksT0FBTyxJQUFJO29CQUNiLENBQUM7Z0JBQ0g7Z0JBRUEsT0FBTyxLQUFLO1lBQ2Q7UUFDRjtLQUFFO0lBRUYsT0FBT3RIO0FBQ1QsRUFBRXJKO0FBRUYsU0FBUzRRLFdBQVdDLE1BQU0sRUFBRTtJQUMxQixPQUFPQSxPQUFPQyxNQUFNLENBQUMsR0FBR0MsV0FBVyxLQUFLRixPQUFPeEssS0FBSyxDQUFDO0FBQ3ZEO0FBRUEsSUFBSTJLLGVBQWUsV0FBWTtJQUM3QixTQUFTQSxhQUFhM1MsT0FBTyxFQUFFO1FBQzdCMUMscUZBQWVBLENBQUMsSUFBSSxFQUFFcVY7UUFFdEIsSUFBSSxDQUFDM1MsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQzRTLGFBQWEsR0FBRyxJQUFJLENBQUM1UyxPQUFPLENBQUM0UyxhQUFhLElBQUksS0FBSztRQUN4RCxJQUFJLENBQUN2UyxNQUFNLEdBQUdxQixXQUFXSCxNQUFNLENBQUM7SUFDbEM7SUFFQWhFLGtGQUFZQSxDQUFDb1YsY0FBYztRQUFDO1lBQzFCelQsS0FBSztZQUNMaUIsT0FBTyxTQUFTMFMsc0JBQXNCcEIsSUFBSSxFQUFFO2dCQUMxQyxJQUFJLENBQUNBLFFBQVFBLEtBQUsvTixPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSTtnQkFDL0MsSUFBSXFFLElBQUkwSixLQUFLeFAsS0FBSyxDQUFDO2dCQUNuQixJQUFJOEYsRUFBRWhKLE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSTtnQkFDL0JnSixFQUFFbUssR0FBRztnQkFDTCxJQUFJbkssQ0FBQyxDQUFDQSxFQUFFaEosTUFBTSxHQUFHLEVBQUUsQ0FBQzJOLFdBQVcsT0FBTyxLQUFLLE9BQU8sSUFBSTtnQkFDdEQsT0FBTyxJQUFJLENBQUNvRyxrQkFBa0IsQ0FBQy9LLEVBQUUzQixJQUFJLENBQUM7WUFDeEM7UUFDRjtRQUFHO1lBQ0RsSCxLQUFLO1lBQ0xpQixPQUFPLFNBQVM0Uyx3QkFBd0J0QixJQUFJLEVBQUU7Z0JBQzVDLElBQUksQ0FBQ0EsUUFBUUEsS0FBSy9OLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTytOO2dCQUMzQyxJQUFJMUosSUFBSTBKLEtBQUt4UCxLQUFLLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDNlEsa0JBQWtCLENBQUMvSyxDQUFDLENBQUMsRUFBRTtZQUNyQztRQUNGO1FBQUc7WUFDRDdJLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzJTLG1CQUFtQnJCLElBQUksRUFBRTtnQkFDdkMsSUFBSSxPQUFPQSxTQUFTLFlBQVlBLEtBQUsvTixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUc7b0JBQ3RELElBQUlzUCxlQUFlO3dCQUFDO3dCQUFRO3dCQUFRO3dCQUFRO3dCQUFRO3dCQUFRO3dCQUFRO3FCQUFPO29CQUMzRSxJQUFJakwsSUFBSTBKLEtBQUt4UCxLQUFLLENBQUM7b0JBRW5CLElBQUksSUFBSSxDQUFDakMsT0FBTyxDQUFDaVQsWUFBWSxFQUFFO3dCQUM3QmxMLElBQUlBLEVBQUU1QixHQUFHLENBQUMsU0FBVStNLElBQUksRUFBRTs0QkFDeEIsT0FBT0EsS0FBS3hHLFdBQVc7d0JBQ3pCO29CQUNGLE9BQU8sSUFBSTNFLEVBQUVoSixNQUFNLEtBQUssR0FBRzt3QkFDekJnSixDQUFDLENBQUMsRUFBRSxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDMkUsV0FBVzt3QkFDdkIzRSxDQUFDLENBQUMsRUFBRSxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDMkssV0FBVzt3QkFDdkIsSUFBSU0sYUFBYXRQLE9BQU8sQ0FBQ3FFLENBQUMsQ0FBQyxFQUFFLENBQUMyRSxXQUFXLE1BQU0sQ0FBQyxHQUFHM0UsQ0FBQyxDQUFDLEVBQUUsR0FBR3dLLFdBQVd4SyxDQUFDLENBQUMsRUFBRSxDQUFDMkUsV0FBVztvQkFDdkYsT0FBTyxJQUFJM0UsRUFBRWhKLE1BQU0sS0FBSyxHQUFHO3dCQUN6QmdKLENBQUMsQ0FBQyxFQUFFLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMyRSxXQUFXO3dCQUN2QixJQUFJM0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2hKLE1BQU0sS0FBSyxHQUFHZ0osQ0FBQyxDQUFDLEVBQUUsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQzJLLFdBQVc7d0JBQzlDLElBQUkzSyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVNBLENBQUMsQ0FBQyxFQUFFLENBQUNoSixNQUFNLEtBQUssR0FBR2dKLENBQUMsQ0FBQyxFQUFFLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMySyxXQUFXO3dCQUNoRSxJQUFJTSxhQUFhdFAsT0FBTyxDQUFDcUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzJFLFdBQVcsTUFBTSxDQUFDLEdBQUczRSxDQUFDLENBQUMsRUFBRSxHQUFHd0ssV0FBV3hLLENBQUMsQ0FBQyxFQUFFLENBQUMyRSxXQUFXO3dCQUNyRixJQUFJc0csYUFBYXRQLE9BQU8sQ0FBQ3FFLENBQUMsQ0FBQyxFQUFFLENBQUMyRSxXQUFXLE1BQU0sQ0FBQyxHQUFHM0UsQ0FBQyxDQUFDLEVBQUUsR0FBR3dLLFdBQVd4SyxDQUFDLENBQUMsRUFBRSxDQUFDMkUsV0FBVztvQkFDdkYsQ0FBQztvQkFFRCxPQUFPM0UsRUFBRTNCLElBQUksQ0FBQztnQkFDaEIsQ0FBQztnQkFFRCxPQUFPLElBQUksQ0FBQ3BHLE9BQU8sQ0FBQ21ULFNBQVMsSUFBSSxJQUFJLENBQUNuVCxPQUFPLENBQUNpVCxZQUFZLEdBQUd4QixLQUFLL0UsV0FBVyxLQUFLK0UsSUFBSTtZQUN4RjtRQUNGO1FBQUc7WUFDRHZTLEtBQUs7WUFDTGlCLE9BQU8sU0FBU2lULGdCQUFnQjNCLElBQUksRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUN6UixPQUFPLENBQUNxVCxJQUFJLEtBQUssa0JBQWtCLElBQUksQ0FBQ3JULE9BQU8sQ0FBQ3NULHdCQUF3QixFQUFFO29CQUNqRjdCLE9BQU8sSUFBSSxDQUFDc0IsdUJBQXVCLENBQUN0QjtnQkFDdEMsQ0FBQztnQkFFRCxPQUFPLENBQUMsSUFBSSxDQUFDbUIsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDQSxhQUFhLENBQUM3VCxNQUFNLElBQUksSUFBSSxDQUFDNlQsYUFBYSxDQUFDbFAsT0FBTyxDQUFDK04sUUFBUSxDQUFDO1lBQ2xHO1FBQ0Y7UUFBRztZQUNEdlMsS0FBSztZQUNMaUIsT0FBTyxTQUFTb1Qsc0JBQXNCakMsS0FBSyxFQUFFO2dCQUMzQyxJQUFJdFAsUUFBUSxJQUFJO2dCQUVoQixJQUFJLENBQUNzUCxPQUFPLE9BQU8sSUFBSTtnQkFDdkIsSUFBSVA7Z0JBQ0pPLE1BQU1yUyxPQUFPLENBQUMsU0FBVXdTLElBQUksRUFBRTtvQkFDNUIsSUFBSVYsT0FBTztvQkFFWCxJQUFJeUMsYUFBYXhSLE1BQU04USxrQkFBa0IsQ0FBQ3JCO29CQUUxQyxJQUFJLENBQUN6UCxNQUFNaEMsT0FBTyxDQUFDNFMsYUFBYSxJQUFJNVEsTUFBTW9SLGVBQWUsQ0FBQ0ksYUFBYXpDLFFBQVF5QztnQkFDakY7Z0JBRUEsSUFBSSxDQUFDekMsU0FBUyxJQUFJLENBQUMvUSxPQUFPLENBQUM0UyxhQUFhLEVBQUU7b0JBQ3hDdEIsTUFBTXJTLE9BQU8sQ0FBQyxTQUFVd1MsSUFBSSxFQUFFO3dCQUM1QixJQUFJVixPQUFPO3dCQUVYLElBQUkwQyxVQUFVelIsTUFBTStRLHVCQUF1QixDQUFDdEI7d0JBRTVDLElBQUl6UCxNQUFNb1IsZUFBZSxDQUFDSyxVQUFVLE9BQU8xQyxRQUFRMEM7d0JBQ25EMUMsUUFBUS9PLE1BQU1oQyxPQUFPLENBQUM0UyxhQUFhLENBQUM3SSxJQUFJLENBQUMsU0FBVTJKLFlBQVksRUFBRTs0QkFDL0QsSUFBSUEsYUFBYWhRLE9BQU8sQ0FBQytQLGFBQWEsR0FBRyxPQUFPQzt3QkFDbEQ7b0JBQ0Y7Z0JBQ0YsQ0FBQztnQkFFRCxJQUFJLENBQUMzQyxPQUFPQSxRQUFRLElBQUksQ0FBQ3BDLGdCQUFnQixDQUFDLElBQUksQ0FBQzNPLE9BQU8sQ0FBQzRPLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RFLE9BQU9tQztZQUNUO1FBQ0Y7UUFBRztZQUNEN1IsS0FBSztZQUNMaUIsT0FBTyxTQUFTd08saUJBQWlCZ0YsU0FBUyxFQUFFbEMsSUFBSSxFQUFFO2dCQUNoRCxJQUFJLENBQUNrQyxXQUFXLE9BQU8sRUFBRTtnQkFDekIsSUFBSSxPQUFPQSxjQUFjLFlBQVlBLFlBQVlBLFVBQVVsQztnQkFDM0QsSUFBSSxPQUFPa0MsY0FBYyxVQUFVQSxZQUFZO29CQUFDQTtpQkFBVTtnQkFDMUQsSUFBSXpWLE9BQU82RixTQUFTLENBQUNxRixRQUFRLENBQUMxSyxLQUFLLENBQUNpVixlQUFlLGtCQUFrQixPQUFPQTtnQkFDNUUsSUFBSSxDQUFDbEMsTUFBTSxPQUFPa0MsU0FBUyxDQUFDLFVBQVUsSUFBSSxFQUFFO2dCQUM1QyxJQUFJNUMsUUFBUTRDLFNBQVMsQ0FBQ2xDLEtBQUs7Z0JBQzNCLElBQUksQ0FBQ1YsT0FBT0EsUUFBUTRDLFNBQVMsQ0FBQyxJQUFJLENBQUNkLHFCQUFxQixDQUFDcEIsTUFBTTtnQkFDL0QsSUFBSSxDQUFDVixPQUFPQSxRQUFRNEMsU0FBUyxDQUFDLElBQUksQ0FBQ2Isa0JBQWtCLENBQUNyQixNQUFNO2dCQUM1RCxJQUFJLENBQUNWLE9BQU9BLFFBQVE0QyxTQUFTLENBQUMsSUFBSSxDQUFDWix1QkFBdUIsQ0FBQ3RCLE1BQU07Z0JBQ2pFLElBQUksQ0FBQ1YsT0FBT0EsUUFBUTRDLFNBQVMsQ0FBQyxVQUFVO2dCQUN4QyxPQUFPNUMsU0FBUyxFQUFFO1lBQ3BCO1FBQ0Y7UUFBRztZQUNEN1IsS0FBSztZQUNMaUIsT0FBTyxTQUFTMk8sbUJBQW1CMkMsSUFBSSxFQUFFbUMsWUFBWSxFQUFFO2dCQUNyRCxJQUFJekgsU0FBUyxJQUFJO2dCQUVqQixJQUFJMEgsZ0JBQWdCLElBQUksQ0FBQ2xGLGdCQUFnQixDQUFDaUYsZ0JBQWdCLElBQUksQ0FBQzVULE9BQU8sQ0FBQzRPLFdBQVcsSUFBSSxFQUFFLEVBQUU2QztnQkFDMUYsSUFBSUgsUUFBUSxFQUFFO2dCQUVkLElBQUl3QyxVQUFVLFNBQVNBLFFBQVE5TixDQUFDLEVBQUU7b0JBQ2hDLElBQUksQ0FBQ0EsR0FBRztvQkFFUixJQUFJbUcsT0FBT2lILGVBQWUsQ0FBQ3BOLElBQUk7d0JBQzdCc0wsTUFBTTdTLElBQUksQ0FBQ3VIO29CQUNiLE9BQU87d0JBQ0xtRyxPQUFPOUwsTUFBTSxDQUFDVixJQUFJLENBQUMsdURBQXVEMkIsTUFBTSxDQUFDMEU7b0JBQ25GLENBQUM7Z0JBQ0g7Z0JBRUEsSUFBSSxPQUFPeUwsU0FBUyxZQUFZQSxLQUFLL04sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHO29CQUN0RCxJQUFJLElBQUksQ0FBQzFELE9BQU8sQ0FBQ3FULElBQUksS0FBSyxnQkFBZ0JTLFFBQVEsSUFBSSxDQUFDaEIsa0JBQWtCLENBQUNyQjtvQkFDMUUsSUFBSSxJQUFJLENBQUN6UixPQUFPLENBQUNxVCxJQUFJLEtBQUssa0JBQWtCLElBQUksQ0FBQ3JULE9BQU8sQ0FBQ3FULElBQUksS0FBSyxlQUFlUyxRQUFRLElBQUksQ0FBQ2pCLHFCQUFxQixDQUFDcEI7b0JBQ3BILElBQUksSUFBSSxDQUFDelIsT0FBTyxDQUFDcVQsSUFBSSxLQUFLLGVBQWVTLFFBQVEsSUFBSSxDQUFDZix1QkFBdUIsQ0FBQ3RCO2dCQUNoRixPQUFPLElBQUksT0FBT0EsU0FBUyxVQUFVO29CQUNuQ3FDLFFBQVEsSUFBSSxDQUFDaEIsa0JBQWtCLENBQUNyQjtnQkFDbEMsQ0FBQztnQkFFRG9DLGNBQWM1VSxPQUFPLENBQUMsU0FBVThVLEVBQUUsRUFBRTtvQkFDbEMsSUFBSXpDLE1BQU01TixPQUFPLENBQUNxUSxNQUFNLEdBQUdELFFBQVEzSCxPQUFPMkcsa0JBQWtCLENBQUNpQjtnQkFDL0Q7Z0JBQ0EsT0FBT3pDO1lBQ1Q7UUFDRjtLQUFFO0lBRUYsT0FBT3FCO0FBQ1Q7QUFFQSxJQUFJcUIsT0FBTztJQUFDO1FBQ1Z4RixNQUFNO1lBQUM7WUFBTztZQUFNO1lBQU07WUFBTztZQUFNO1lBQU87WUFBTztZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFTO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtTQUFLO1FBQ3RJeUYsSUFBSTtZQUFDO1lBQUc7U0FBRTtRQUNWRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTztZQUFNO1lBQU87WUFBTztZQUFNO1lBQVM7WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU87WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtTQUFLO1FBQzlZeUYsSUFBSTtZQUFDO1lBQUc7U0FBRTtRQUNWRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTztZQUFNO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU07WUFBTTtZQUFNO1NBQUs7UUFDN0l5RixJQUFJO1lBQUM7U0FBRTtRQUNQRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFPO1lBQU07WUFBTTtZQUFNO1lBQU07U0FBSztRQUN2RHlGLElBQUk7WUFBQztZQUFHO1lBQUc7U0FBRTtRQUNiRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1NBQUs7UUFDWnlGLElBQUk7WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1lBQUk7U0FBSTtRQUN6QkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztZQUFNO1NBQUs7UUFDbEJ5RixJQUFJO1lBQUM7WUFBRztZQUFHO1NBQUU7UUFDYkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztZQUFPO1NBQUs7UUFDbkJ5RixJQUFJO1lBQUM7WUFBRztZQUFHO1NBQUU7UUFDYkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFLO1FBQ1p5RixJQUFJO1lBQUM7WUFBRztZQUFHO1lBQUc7U0FBRTtRQUNoQkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFLO1FBQ1p5RixJQUFJO1lBQUM7WUFBRztTQUFFO1FBQ1ZGLElBQUk7SUFDTjtJQUFHO1FBQ0R2RixNQUFNO1lBQUM7U0FBSztRQUNaeUYsSUFBSTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBRztRQUNwQkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFLO1FBQ1p5RixJQUFJO1lBQUM7WUFBRztZQUFHO1lBQUc7U0FBRztRQUNqQkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFLO1FBQ1p5RixJQUFJO1lBQUM7WUFBRztTQUFFO1FBQ1ZGLElBQUk7SUFDTjtJQUFHO1FBQ0R2RixNQUFNO1lBQUM7U0FBSztRQUNaeUYsSUFBSTtZQUFDO1lBQUc7U0FBRTtRQUNWRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1NBQUs7UUFDWnlGLElBQUk7WUFBQztZQUFHO1lBQUc7WUFBRztTQUFFO1FBQ2hCRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1NBQUs7UUFDWnlGLElBQUk7WUFBQztZQUFHO1lBQUc7U0FBRztRQUNkRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1NBQUs7UUFDWnlGLElBQUk7WUFBQztZQUFHO1lBQUc7U0FBRTtRQUNiRixJQUFJO0lBQ047SUFBRztRQUNEdkYsTUFBTTtZQUFDO1NBQUs7UUFDWnlGLElBQUk7WUFBQztZQUFHO1NBQUU7UUFDVkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFNO1FBQ2J5RixJQUFJO1lBQUM7WUFBRztZQUFHO1NBQUU7UUFDYkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFLO1FBQ1p5RixJQUFJO1lBQUM7WUFBRztZQUFHO1lBQUk7U0FBRztRQUNsQkYsSUFBSTtJQUNOO0lBQUc7UUFDRHZGLE1BQU07WUFBQztTQUFLO1FBQ1p5RixJQUFJO1lBQUM7WUFBRztTQUFFO1FBQ1ZGLElBQUk7SUFDTjtJQUFHO1FBQ0R2RixNQUFNO1lBQUM7U0FBSztRQUNaeUYsSUFBSTtZQUFDO1lBQUc7WUFBRztTQUFHO1FBQ2RGLElBQUk7SUFDTjtJQUFHO1FBQ0R2RixNQUFNO1lBQUM7U0FBSztRQUNaeUYsSUFBSTtZQUFDO1lBQUc7WUFBRztZQUFHO1NBQUU7UUFDaEJGLElBQUk7SUFDTjtJQUFHO1FBQ0R2RixNQUFNO1lBQUM7WUFBTTtTQUFLO1FBQ2xCeUYsSUFBSTtZQUFDO1lBQUc7WUFBRztZQUFJO1NBQUc7UUFDbEJGLElBQUk7SUFDTjtDQUFFO0FBQ0YsSUFBSUcscUJBQXFCO0lBQ3ZCLEdBQUcsU0FBU0MsRUFBRXJLLENBQUMsRUFBRTtRQUNmLE9BQU9zSyxPQUFPdEssSUFBSTtJQUNwQjtJQUNBLEdBQUcsU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDZixPQUFPc0ssT0FBT3RLLEtBQUs7SUFDckI7SUFDQSxHQUFHLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2YsT0FBTztJQUNUO0lBQ0EsR0FBRyxTQUFTcUssRUFBRXJLLENBQUMsRUFBRTtRQUNmLE9BQU9zSyxPQUFPdEssSUFBSSxNQUFNLEtBQUtBLElBQUksT0FBTyxLQUFLLElBQUlBLElBQUksTUFBTSxLQUFLQSxJQUFJLE1BQU0sS0FBTUEsQ0FBQUEsSUFBSSxNQUFNLE1BQU1BLElBQUksT0FBTyxFQUFDLElBQUssSUFBSSxDQUFDO0lBQ3hIO0lBQ0EsR0FBRyxTQUFTcUssRUFBRXJLLENBQUMsRUFBRTtRQUNmLE9BQU9zSyxPQUFPdEssS0FBSyxJQUFJLElBQUlBLEtBQUssSUFBSSxJQUFJQSxLQUFLLElBQUksSUFBSUEsSUFBSSxPQUFPLEtBQUtBLElBQUksT0FBTyxLQUFLLElBQUlBLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQztJQUNoSDtJQUNBLEdBQUcsU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDZixPQUFPc0ssT0FBT3RLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUtBLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDckQ7SUFDQSxHQUFHLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2YsT0FBT3NLLE9BQU90SyxLQUFLLElBQUksSUFBSUEsSUFBSSxNQUFNLEtBQUtBLElBQUksTUFBTSxLQUFNQSxDQUFBQSxJQUFJLE1BQU0sTUFBTUEsSUFBSSxPQUFPLEVBQUMsSUFBSyxJQUFJLENBQUM7SUFDbEc7SUFDQSxHQUFHLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2YsT0FBT3NLLE9BQU90SyxLQUFLLElBQUksSUFBSUEsS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0EsS0FBSyxLQUFLLElBQUksQ0FBQztJQUNuRTtJQUNBLEdBQUcsU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDZixPQUFPc0ssT0FBT3RLLEtBQUs7SUFDckI7SUFDQSxJQUFJLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2hCLE9BQU9zSyxPQUFPdEssS0FBSyxJQUFJLElBQUlBLEtBQUssSUFBSSxJQUFJQSxJQUFJLElBQUksSUFBSUEsSUFBSSxLQUFLLElBQUksQ0FBQztJQUNwRTtJQUNBLElBQUksU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDaEIsT0FBT3NLLE9BQU90SyxLQUFLLEtBQUtBLEtBQUssS0FBSyxJQUFJQSxLQUFLLEtBQUtBLEtBQUssS0FBSyxJQUFJQSxJQUFJLEtBQUtBLElBQUksS0FBSyxJQUFJLENBQUM7SUFDdkY7SUFDQSxJQUFJLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2hCLE9BQU9zSyxPQUFPdEssSUFBSSxNQUFNLEtBQUtBLElBQUksT0FBTztJQUMxQztJQUNBLElBQUksU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDaEIsT0FBT3NLLE9BQU90SyxNQUFNO0lBQ3RCO0lBQ0EsSUFBSSxTQUFTcUssRUFBRXJLLENBQUMsRUFBRTtRQUNoQixPQUFPc0ssT0FBT3RLLEtBQUssSUFBSSxJQUFJQSxLQUFLLElBQUksSUFBSUEsS0FBSyxJQUFJLElBQUksQ0FBQztJQUN4RDtJQUNBLElBQUksU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDaEIsT0FBT3NLLE9BQU90SyxJQUFJLE1BQU0sS0FBS0EsSUFBSSxPQUFPLEtBQUssSUFBSUEsSUFBSSxNQUFNLEtBQU1BLENBQUFBLElBQUksTUFBTSxNQUFNQSxJQUFJLE9BQU8sRUFBQyxJQUFLLElBQUksQ0FBQztJQUN6RztJQUNBLElBQUksU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDaEIsT0FBT3NLLE9BQU90SyxJQUFJLE1BQU0sS0FBS0EsSUFBSSxPQUFPLEtBQUssSUFBSUEsTUFBTSxJQUFJLElBQUksQ0FBQztJQUNsRTtJQUNBLElBQUksU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDaEIsT0FBT3NLLE9BQU90SyxLQUFLLEtBQUtBLElBQUksTUFBTSxLQUFLQSxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUM7SUFDOUQ7SUFDQSxJQUFJLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2hCLE9BQU9zSyxPQUFPdEssS0FBSyxJQUFJLElBQUlBLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDM0M7SUFDQSxJQUFJLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2hCLE9BQU9zSyxPQUFPdEssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0EsSUFBSSxNQUFNLEtBQUtBLElBQUksTUFBTSxLQUFLLElBQUlBLElBQUksTUFBTSxNQUFNQSxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDN0c7SUFDQSxJQUFJLFNBQVNxSyxFQUFFckssQ0FBQyxFQUFFO1FBQ2hCLE9BQU9zSyxPQUFPdEssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0EsSUFBSSxNQUFNLEtBQUtBLElBQUksTUFBTSxLQUFLLElBQUksQ0FBQztJQUMxRTtJQUNBLElBQUksU0FBU3FLLEVBQUVySyxDQUFDLEVBQUU7UUFDaEIsT0FBT3NLLE9BQU90SyxJQUFJLE9BQU8sSUFBSSxJQUFJQSxJQUFJLE9BQU8sSUFBSSxJQUFJQSxJQUFJLE9BQU8sS0FBS0EsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDO0lBQzFGO0lBQ0EsSUFBSSxTQUFTcUssRUFBRXJLLENBQUMsRUFBRTtRQUNoQixPQUFPc0ssT0FBT3RLLEtBQUssSUFBSSxJQUFJQSxLQUFLLElBQUksSUFBSSxDQUFDQSxJQUFJLEtBQUtBLElBQUksRUFBQyxLQUFNQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDbEY7QUFDRjtBQUNBLElBQUl1Syx5QkFBeUI7SUFBQztJQUFNO0lBQU07Q0FBSztBQUMvQyxJQUFJQyxnQkFBZ0I7SUFDbEJDLE1BQU07SUFDTkMsS0FBSztJQUNMQyxLQUFLO0lBQ0xDLEtBQUs7SUFDTEMsTUFBTTtJQUNOQyxPQUFPO0FBQ1Q7QUFFQSxTQUFTQyxjQUFjO0lBQ3JCLElBQUlDLFFBQVEsQ0FBQztJQUNiZCxLQUFLL1UsT0FBTyxDQUFDLFNBQVU4VixHQUFHLEVBQUU7UUFDMUJBLElBQUl2RyxJQUFJLENBQUN2UCxPQUFPLENBQUMsU0FBVW1ELENBQUMsRUFBRTtZQUM1QjBTLEtBQUssQ0FBQzFTLEVBQUUsR0FBRztnQkFDVDRTLFNBQVNELElBQUlkLEVBQUU7Z0JBQ2ZnQixTQUFTZixrQkFBa0IsQ0FBQ2EsSUFBSWhCLEVBQUUsQ0FBQztZQUNyQztRQUNGO0lBQ0Y7SUFDQSxPQUFPZTtBQUNUO0FBRUEsSUFBSUksaUJBQWlCLFdBQVk7SUFDL0IsU0FBU0EsZUFBZXhHLGFBQWEsRUFBRTtRQUNyQyxJQUFJMU8sVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBGeEIscUZBQWVBLENBQUMsSUFBSSxFQUFFNFg7UUFFdEIsSUFBSSxDQUFDeEcsYUFBYSxHQUFHQTtRQUNyQixJQUFJLENBQUMxTyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDSyxNQUFNLEdBQUdxQixXQUFXSCxNQUFNLENBQUM7UUFFaEMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDdkIsT0FBTyxDQUFDbVYsaUJBQWlCLElBQUksSUFBSSxDQUFDblYsT0FBTyxDQUFDbVYsaUJBQWlCLEtBQUssSUFBRyxLQUFPLFFBQU9DLFNBQVMsZUFBZSxDQUFDQSxLQUFLQyxXQUFXLEdBQUc7WUFDdEksSUFBSSxDQUFDclYsT0FBTyxDQUFDbVYsaUJBQWlCLEdBQUc7WUFDakMsSUFBSSxDQUFDOVUsTUFBTSxDQUFDVCxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQ2tWLEtBQUssR0FBR0Q7SUFDZjtJQUVBdFgsa0ZBQVlBLENBQUMyWCxnQkFBZ0I7UUFBQztZQUM1QmhXLEtBQUs7WUFDTGlCLE9BQU8sU0FBU21WLFFBQVF2TSxHQUFHLEVBQUU3RSxHQUFHLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQzRRLEtBQUssQ0FBQy9MLElBQUksR0FBRzdFO1lBQ3BCO1FBQ0Y7UUFBRztZQUNEaEYsS0FBSztZQUNMaUIsT0FBTyxTQUFTb1YsUUFBUTlELElBQUksRUFBRTtnQkFDNUIsSUFBSXpSLFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFFcEYsSUFBSSxJQUFJLENBQUNzUyxnQkFBZ0IsSUFBSTtvQkFDM0IsSUFBSTt3QkFDRixPQUFPLElBQUlnRSxLQUFLQyxXQUFXLENBQUM1RCxNQUFNOzRCQUNoQ2xTLE1BQU1TLFFBQVFtUixPQUFPLEdBQUcsWUFBWSxVQUFVO3dCQUNoRDtvQkFDRixFQUFFLE9BQU9xRSxTQUFTO3dCQUNoQjtvQkFDRjtnQkFDRixDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUFDVixLQUFLLENBQUNyRCxLQUFLLElBQUksSUFBSSxDQUFDcUQsS0FBSyxDQUFDLElBQUksQ0FBQ3BHLGFBQWEsQ0FBQ3FFLHVCQUF1QixDQUFDdEIsTUFBTTtZQUN6RjtRQUNGO1FBQUc7WUFDRHZTLEtBQUs7WUFDTGlCLE9BQU8sU0FBU3NWLFlBQVloRSxJQUFJLEVBQUU7Z0JBQ2hDLElBQUl6UixVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUk0VyxPQUFPLElBQUksQ0FBQ0gsT0FBTyxDQUFDOUQsTUFBTXpSO2dCQUU5QixJQUFJLElBQUksQ0FBQ29SLGdCQUFnQixJQUFJO29CQUMzQixPQUFPc0UsUUFBUUEsS0FBS0MsZUFBZSxHQUFHQyxnQkFBZ0IsQ0FBQzdXLE1BQU0sR0FBRztnQkFDbEUsQ0FBQztnQkFFRCxPQUFPMlcsUUFBUUEsS0FBS1YsT0FBTyxDQUFDalcsTUFBTSxHQUFHO1lBQ3ZDO1FBQ0Y7UUFBRztZQUNERyxLQUFLO1lBQ0xpQixPQUFPLFNBQVMwVixvQkFBb0JwRSxJQUFJLEVBQUV2UyxHQUFHLEVBQUU7Z0JBQzdDLElBQUljLFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxJQUFJLENBQUN3USxXQUFXLENBQUNtQyxNQUFNelIsU0FBU21HLEdBQUcsQ0FBQyxTQUFVb0osTUFBTSxFQUFFO29CQUMzRCxPQUFPLEdBQUdqTyxNQUFNLENBQUNwQyxLQUFLb0MsTUFBTSxDQUFDaU87Z0JBQy9CO1lBQ0Y7UUFDRjtRQUFHO1lBQ0RyUSxLQUFLO1lBQ0xpQixPQUFPLFNBQVNtUCxZQUFZbUMsSUFBSSxFQUFFO2dCQUNoQyxJQUFJelAsUUFBUSxJQUFJO2dCQUVoQixJQUFJaEMsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJNFcsT0FBTyxJQUFJLENBQUNILE9BQU8sQ0FBQzlELE1BQU16UjtnQkFFOUIsSUFBSSxDQUFDMFYsTUFBTTtvQkFDVCxPQUFPLEVBQUU7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQ3RFLGdCQUFnQixJQUFJO29CQUMzQixPQUFPc0UsS0FBS0MsZUFBZSxHQUFHQyxnQkFBZ0IsQ0FBQ0UsSUFBSSxDQUFDLFNBQVVDLGVBQWUsRUFBRUMsZUFBZSxFQUFFO3dCQUM5RixPQUFPMUIsYUFBYSxDQUFDeUIsZ0JBQWdCLEdBQUd6QixhQUFhLENBQUMwQixnQkFBZ0I7b0JBQ3hFLEdBQUc3UCxHQUFHLENBQUMsU0FBVThQLGNBQWMsRUFBRTt3QkFDL0IsT0FBTyxHQUFHM1UsTUFBTSxDQUFDVSxNQUFNaEMsT0FBTyxDQUFDa1csT0FBTyxFQUFFNVUsTUFBTSxDQUFDMlU7b0JBQ2pEO2dCQUNGLENBQUM7Z0JBRUQsT0FBT1AsS0FBS1YsT0FBTyxDQUFDN08sR0FBRyxDQUFDLFNBQVVnUSxNQUFNLEVBQUU7b0JBQ3hDLE9BQU9uVSxNQUFNaU0sU0FBUyxDQUFDd0QsTUFBTTBFLFFBQVFuVztnQkFDdkM7WUFDRjtRQUNGO1FBQUc7WUFDRGQsS0FBSztZQUNMaUIsT0FBTyxTQUFTOE4sVUFBVXdELElBQUksRUFBRTVELEtBQUssRUFBRTtnQkFDckMsSUFBSTdOLFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEYsSUFBSTRXLE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUM5RCxNQUFNelI7Z0JBRTlCLElBQUkwVixNQUFNO29CQUNSLElBQUksSUFBSSxDQUFDdEUsZ0JBQWdCLElBQUk7d0JBQzNCLE9BQU8sR0FBRzlQLE1BQU0sQ0FBQyxJQUFJLENBQUN0QixPQUFPLENBQUNrVyxPQUFPLEVBQUU1VSxNQUFNLENBQUNvVSxLQUFLVSxNQUFNLENBQUN2STtvQkFDNUQsQ0FBQztvQkFFRCxPQUFPLElBQUksQ0FBQ3dJLHdCQUF3QixDQUFDWCxNQUFNN0g7Z0JBQzdDLENBQUM7Z0JBRUQsSUFBSSxDQUFDeE4sTUFBTSxDQUFDVixJQUFJLENBQUMsNkJBQTZCMkIsTUFBTSxDQUFDbVE7Z0JBQ3JELE9BQU87WUFDVDtRQUNGO1FBQUc7WUFDRHZTLEtBQUs7WUFDTGlCLE9BQU8sU0FBU2tXLHlCQUF5QlgsSUFBSSxFQUFFN0gsS0FBSyxFQUFFO2dCQUNwRCxJQUFJMUIsU0FBUyxJQUFJO2dCQUVqQixJQUFJbUssTUFBTVosS0FBS2EsS0FBSyxHQUFHYixLQUFLVCxPQUFPLENBQUNwSCxTQUFTNkgsS0FBS1QsT0FBTyxDQUFDdUIsS0FBS0MsR0FBRyxDQUFDNUksT0FBTztnQkFDMUUsSUFBSTBCLFNBQVNtRyxLQUFLVixPQUFPLENBQUNzQixJQUFJO2dCQUU5QixJQUFJLElBQUksQ0FBQ3RXLE9BQU8sQ0FBQzBXLG9CQUFvQixJQUFJaEIsS0FBS1YsT0FBTyxDQUFDalcsTUFBTSxLQUFLLEtBQUsyVyxLQUFLVixPQUFPLENBQUMsRUFBRSxLQUFLLEdBQUc7b0JBQzNGLElBQUl6RixXQUFXLEdBQUc7d0JBQ2hCQSxTQUFTO29CQUNYLE9BQU8sSUFBSUEsV0FBVyxHQUFHO3dCQUN2QkEsU0FBUztvQkFDWCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSW9ILGVBQWUsU0FBU0EsZUFBZTtvQkFDekMsT0FBT3hLLE9BQU9uTSxPQUFPLENBQUNrVyxPQUFPLElBQUkzRyxPQUFPbkcsUUFBUSxLQUFLK0MsT0FBT25NLE9BQU8sQ0FBQ2tXLE9BQU8sR0FBRzNHLE9BQU9uRyxRQUFRLEtBQUttRyxPQUFPbkcsUUFBUSxFQUFFO2dCQUNySDtnQkFFQSxJQUFJLElBQUksQ0FBQ3BKLE9BQU8sQ0FBQ21WLGlCQUFpQixLQUFLLE1BQU07b0JBQzNDLElBQUk1RixXQUFXLEdBQUcsT0FBTztvQkFDekIsSUFBSSxPQUFPQSxXQUFXLFVBQVUsT0FBTyxXQUFXak8sTUFBTSxDQUFDaU8sT0FBT25HLFFBQVE7b0JBQ3hFLE9BQU91TjtnQkFDVCxPQUFPLElBQUksSUFBSSxDQUFDM1csT0FBTyxDQUFDbVYsaUJBQWlCLEtBQUssTUFBTTtvQkFDbEQsT0FBT3dCO2dCQUNULE9BQU8sSUFBSSxJQUFJLENBQUMzVyxPQUFPLENBQUMwVyxvQkFBb0IsSUFBSWhCLEtBQUtWLE9BQU8sQ0FBQ2pXLE1BQU0sS0FBSyxLQUFLMlcsS0FBS1YsT0FBTyxDQUFDLEVBQUUsS0FBSyxHQUFHO29CQUNsRyxPQUFPMkI7Z0JBQ1QsQ0FBQztnQkFFRCxPQUFPLElBQUksQ0FBQzNXLE9BQU8sQ0FBQ2tXLE9BQU8sSUFBSUksSUFBSWxOLFFBQVEsS0FBSyxJQUFJLENBQUNwSixPQUFPLENBQUNrVyxPQUFPLEdBQUdJLElBQUlsTixRQUFRLEtBQUtrTixJQUFJbE4sUUFBUSxFQUFFO1lBQ3hHO1FBQ0Y7UUFBRztZQUNEbEssS0FBSztZQUNMaUIsT0FBTyxTQUFTaVIsbUJBQW1CO2dCQUNqQyxPQUFPLENBQUNpRCx1QkFBdUJ1QyxRQUFRLENBQUMsSUFBSSxDQUFDNVcsT0FBTyxDQUFDbVYsaUJBQWlCO1lBQ3hFO1FBQ0Y7S0FBRTtJQUVGLE9BQU9EO0FBQ1Q7QUFFQSxTQUFTMkIsVUFBVTlZLE1BQU0sRUFBRUMsY0FBYyxFQUFFO0lBQUUsSUFBSUMsT0FBT0MsT0FBT0QsSUFBSSxDQUFDRjtJQUFTLElBQUlHLE9BQU9DLHFCQUFxQixFQUFFO1FBQUUsSUFBSUMsVUFBVUYsT0FBT0MscUJBQXFCLENBQUNKO1FBQVMsSUFBSUMsZ0JBQWdCO1lBQUVJLFVBQVVBLFFBQVFDLE1BQU0sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUUsT0FBT0osT0FBT0ssd0JBQXdCLENBQUNSLFFBQVFPLEtBQUtFLFVBQVU7WUFBRTtRQUFJLENBQUM7UUFBQ1AsS0FBS1EsSUFBSSxDQUFDQyxLQUFLLENBQUNULE1BQU1HO0lBQVUsQ0FBQztJQUFDLE9BQU9IO0FBQU07QUFFMVYsU0FBUzZZLGdCQUFnQmxZLE1BQU0sRUFBRTtJQUFFLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJQyxVQUFVQyxNQUFNLEVBQUVGLElBQUs7UUFBRSxJQUFJRyxTQUFTRixTQUFTLENBQUNELEVBQUUsSUFBSSxJQUFJLEdBQUdDLFNBQVMsQ0FBQ0QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUFFLElBQUlBLElBQUksR0FBRztZQUFFZ1ksVUFBVTNZLE9BQU9jLFNBQVMsSUFBSSxFQUFFQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFdEIscUZBQWVBLENBQUNnQixRQUFRTSxLQUFLRixNQUFNLENBQUNFLElBQUk7WUFBRztRQUFJLE9BQU8sSUFBSWhCLE9BQU9pQix5QkFBeUIsRUFBRTtZQUFFakIsT0FBT2tCLGdCQUFnQixDQUFDUixRQUFRVixPQUFPaUIseUJBQXlCLENBQUNIO1FBQVUsT0FBTztZQUFFNlgsVUFBVTNZLE9BQU9jLFNBQVNDLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUVoQixPQUFPbUIsY0FBYyxDQUFDVCxRQUFRTSxLQUFLaEIsT0FBT0ssd0JBQXdCLENBQUNTLFFBQVFFO1lBQU87UUFBSSxDQUFDO0lBQUM7SUFBRSxPQUFPTjtBQUFRO0FBRTNoQixJQUFJbVksZUFBZSxXQUFZO0lBQzdCLFNBQVNBLGVBQWU7UUFDdEIsSUFBSS9XLFVBQVVsQixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRnhCLHFGQUFlQSxDQUFDLElBQUksRUFBRXlaO1FBRXRCLElBQUksQ0FBQzFXLE1BQU0sR0FBR3FCLFdBQVdILE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUN2QixPQUFPLEdBQUdBO1FBRWYsSUFBSSxDQUFDZ1gsTUFBTSxHQUFHaFgsUUFBUXFMLGFBQWEsSUFBSXJMLFFBQVFxTCxhQUFhLENBQUMyTCxNQUFNLElBQUksU0FBVTdXLEtBQUssRUFBRTtZQUN0RixPQUFPQTtRQUNUO1FBRUEsSUFBSSxDQUFDRCxJQUFJLENBQUNGO0lBQ1o7SUFFQXpDLGtGQUFZQSxDQUFDd1osY0FBYztRQUFDO1lBQzFCN1gsS0FBSztZQUNMaUIsT0FBTyxTQUFTRCxPQUFPO2dCQUNyQixJQUFJRixVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQ2tCLFFBQVFxTCxhQUFhLEVBQUVyTCxRQUFRcUwsYUFBYSxHQUFHO29CQUNsRDRMLGFBQWEsSUFBSTtnQkFDbkI7Z0JBQ0EsSUFBSUMsUUFBUWxYLFFBQVFxTCxhQUFhO2dCQUNqQyxJQUFJLENBQUNoRyxNQUFNLEdBQUc2UixNQUFNN1IsTUFBTSxLQUFLcEYsWUFBWWlYLE1BQU03UixNQUFNLEdBQUdBLE1BQU07Z0JBQ2hFLElBQUksQ0FBQzRSLFdBQVcsR0FBR0MsTUFBTUQsV0FBVyxLQUFLaFgsWUFBWWlYLE1BQU1ELFdBQVcsR0FBRyxJQUFJO2dCQUM3RSxJQUFJLENBQUNFLG1CQUFtQixHQUFHRCxNQUFNQyxtQkFBbUIsS0FBS2xYLFlBQVlpWCxNQUFNQyxtQkFBbUIsR0FBRyxLQUFLO2dCQUN0RyxJQUFJLENBQUMvVyxNQUFNLEdBQUc4VyxNQUFNOVcsTUFBTSxHQUFHOEUsWUFBWWdTLE1BQU05VyxNQUFNLElBQUk4VyxNQUFNRSxhQUFhLElBQUksSUFBSTtnQkFDcEYsSUFBSSxDQUFDN0gsTUFBTSxHQUFHMkgsTUFBTTNILE1BQU0sR0FBR3JLLFlBQVlnUyxNQUFNM0gsTUFBTSxJQUFJMkgsTUFBTUcsYUFBYSxJQUFJLElBQUk7Z0JBQ3BGLElBQUksQ0FBQ0MsZUFBZSxHQUFHSixNQUFNSSxlQUFlLEdBQUdKLE1BQU1JLGVBQWUsR0FBR0osTUFBTUksZUFBZSxJQUFJLEdBQUc7Z0JBQ25HLElBQUksQ0FBQ0MsY0FBYyxHQUFHTCxNQUFNTSxjQUFjLEdBQUcsS0FBS04sTUFBTUssY0FBYyxJQUFJLEdBQUc7Z0JBQzdFLElBQUksQ0FBQ0MsY0FBYyxHQUFHLElBQUksQ0FBQ0QsY0FBYyxHQUFHLEtBQUtMLE1BQU1NLGNBQWMsSUFBSSxFQUFFO2dCQUMzRSxJQUFJLENBQUNDLGFBQWEsR0FBR1AsTUFBTU8sYUFBYSxHQUFHdlMsWUFBWWdTLE1BQU1PLGFBQWEsSUFBSVAsTUFBTVEsb0JBQW9CLElBQUl4UyxZQUFZLE1BQU07Z0JBQzlILElBQUksQ0FBQ3lTLGFBQWEsR0FBR1QsTUFBTVMsYUFBYSxHQUFHelMsWUFBWWdTLE1BQU1TLGFBQWEsSUFBSVQsTUFBTVUsb0JBQW9CLElBQUkxUyxZQUFZLElBQUk7Z0JBQzVILElBQUksQ0FBQzJTLHVCQUF1QixHQUFHWCxNQUFNVyx1QkFBdUIsR0FBR1gsTUFBTVcsdUJBQXVCLEdBQUdYLE1BQU1XLHVCQUF1QixJQUFJLEdBQUc7Z0JBQ25JLElBQUksQ0FBQ0MsV0FBVyxHQUFHWixNQUFNWSxXQUFXLEdBQUdaLE1BQU1ZLFdBQVcsR0FBRyxJQUFJO2dCQUMvRCxJQUFJLENBQUNDLFlBQVksR0FBR2IsTUFBTWEsWUFBWSxLQUFLOVgsWUFBWWlYLE1BQU1hLFlBQVksR0FBRyxLQUFLO2dCQUNqRixJQUFJLENBQUNDLFdBQVc7WUFDbEI7UUFDRjtRQUFHO1lBQ0Q5WSxLQUFLO1lBQ0xpQixPQUFPLFNBQVNxUSxRQUFRO2dCQUN0QixJQUFJLElBQUksQ0FBQ3hRLE9BQU8sRUFBRSxJQUFJLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUNGLE9BQU87WUFDMUM7UUFDRjtRQUFHO1lBQ0RkLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzZYLGNBQWM7Z0JBQzVCLElBQUlDLFlBQVksR0FBRzNXLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixNQUFNLEVBQUUsU0FBU2tCLE1BQU0sQ0FBQyxJQUFJLENBQUNpTyxNQUFNO2dCQUNsRSxJQUFJLENBQUMySSxNQUFNLEdBQUcsSUFBSWhTLE9BQU8rUixXQUFXO2dCQUNwQyxJQUFJRSxvQkFBb0IsR0FBRzdXLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixNQUFNLEVBQUVrQixNQUFNLENBQUMsSUFBSSxDQUFDaVcsY0FBYyxFQUFFLFNBQVNqVyxNQUFNLENBQUMsSUFBSSxDQUFDa1csY0FBYyxFQUFFbFcsTUFBTSxDQUFDLElBQUksQ0FBQ2lPLE1BQU07Z0JBQ2xJLElBQUksQ0FBQzZJLGNBQWMsR0FBRyxJQUFJbFMsT0FBT2lTLG1CQUFtQjtnQkFDcEQsSUFBSUUsbUJBQW1CLEdBQUcvVyxNQUFNLENBQUMsSUFBSSxDQUFDbVcsYUFBYSxFQUFFLFNBQVNuVyxNQUFNLENBQUMsSUFBSSxDQUFDcVcsYUFBYTtnQkFDdkYsSUFBSSxDQUFDNUwsYUFBYSxHQUFHLElBQUk3RixPQUFPbVMsa0JBQWtCO1lBQ3BEO1FBQ0Y7UUFBRztZQUNEblosS0FBSztZQUNMaUIsT0FBTyxTQUFTZ1EsWUFBWWhMLEdBQUcsRUFBRVAsSUFBSSxFQUFFbUUsR0FBRyxFQUFFL0ksT0FBTyxFQUFFO29CQVExQ3NZLFlBQVQsU0FBU0EsVUFBVUMsR0FBRyxFQUFFO29CQUN0QixPQUFPQSxJQUFJNVUsT0FBTyxDQUFDLE9BQU87Z0JBQzVCO2dCQVRBLElBQUkzQixRQUFRLElBQUk7Z0JBRWhCLElBQUk2SjtnQkFDSixJQUFJMUw7Z0JBQ0osSUFBSXFZO2dCQUNKLElBQUkzVCxjQUFjLElBQUksQ0FBQzdFLE9BQU8sSUFBSSxJQUFJLENBQUNBLE9BQU8sQ0FBQ3FMLGFBQWEsSUFBSSxJQUFJLENBQUNyTCxPQUFPLENBQUNxTCxhQUFhLENBQUN1RSxnQkFBZ0IsSUFBSSxDQUFDO2dCQU1oSCxJQUFJNkksZUFBZSxTQUFTQSxhQUFhdlosR0FBRyxFQUFFO29CQUM1QyxJQUFJQSxJQUFJd0UsT0FBTyxDQUFDMUIsTUFBTXNWLGVBQWUsSUFBSSxHQUFHO3dCQUMxQyxJQUFJL1QsT0FBT29CLG9CQUFvQkMsTUFBTUMsYUFBYTNGO3dCQUNsRCxPQUFPOEMsTUFBTStWLFlBQVksR0FBRy9WLE1BQU1nVixNQUFNLENBQUN6VCxNQUFNdEQsV0FBVzhJLEtBQUsrTixnQkFBZ0JBLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBRzlXLFVBQVU0RSxPQUFPLENBQUMsR0FBRzs0QkFDdEk4VCxrQkFBa0J4Wjt3QkFDcEIsTUFBTXFFLElBQUk7b0JBQ1osQ0FBQztvQkFFRCxJQUFJd0UsSUFBSTdJLElBQUkrQyxLQUFLLENBQUNELE1BQU1zVixlQUFlO29CQUN2QyxJQUFJblQsSUFBSTRELEVBQUVqRSxLQUFLLEdBQUc2VSxJQUFJO29CQUN0QixJQUFJQyxJQUFJN1EsRUFBRTNCLElBQUksQ0FBQ3BFLE1BQU1zVixlQUFlLEVBQUVxQixJQUFJO29CQUMxQyxPQUFPM1csTUFBTWdWLE1BQU0sQ0FBQ3JTLG9CQUFvQkMsTUFBTUMsYUFBYVYsSUFBSXlVLEdBQUc3UCxLQUFLK04sZ0JBQWdCQSxnQkFBZ0JBLGdCQUFnQixDQUFDLEdBQUc5VyxVQUFVNEUsT0FBTyxDQUFDLEdBQUc7d0JBQzlJOFQsa0JBQWtCdlU7b0JBQ3BCO2dCQUNGO2dCQUVBLElBQUksQ0FBQzZULFdBQVc7Z0JBQ2hCLElBQUlhLDhCQUE4QjdZLFdBQVdBLFFBQVE2WSwyQkFBMkIsSUFBSSxJQUFJLENBQUM3WSxPQUFPLENBQUM2WSwyQkFBMkI7Z0JBQzVILElBQUk3SSxrQkFBa0JoUSxXQUFXQSxRQUFRcUwsYUFBYSxJQUFJckwsUUFBUXFMLGFBQWEsQ0FBQzJFLGVBQWUsS0FBSy9QLFlBQVlELFFBQVFxTCxhQUFhLENBQUMyRSxlQUFlLEdBQUcsSUFBSSxDQUFDaFEsT0FBTyxDQUFDcUwsYUFBYSxDQUFDMkUsZUFBZTtnQkFDbE0sSUFBSThJLFFBQVE7b0JBQUM7d0JBQ1hDLE9BQU8sSUFBSSxDQUFDWCxjQUFjO3dCQUMxQlksV0FBVyxTQUFTQSxVQUFVVCxHQUFHLEVBQUU7NEJBQ2pDLE9BQU9ELFVBQVVDO3dCQUNuQjtvQkFDRjtvQkFBRzt3QkFDRFEsT0FBTyxJQUFJLENBQUNiLE1BQU07d0JBQ2xCYyxXQUFXLFNBQVNBLFVBQVVULEdBQUcsRUFBRTs0QkFDakMsT0FBT3ZXLE1BQU1pVixXQUFXLEdBQUdxQixVQUFVdFcsTUFBTXFELE1BQU0sQ0FBQ2tULFFBQVFELFVBQVVDLElBQUk7d0JBQzFFO29CQUNGO2lCQUFFO2dCQUNGTyxNQUFNN1osT0FBTyxDQUFDLFNBQVVnYSxJQUFJLEVBQUU7b0JBQzVCVCxXQUFXO29CQUVYLE1BQU8zTSxRQUFRb04sS0FBS0YsS0FBSyxDQUFDRyxJQUFJLENBQUMvVCxLQUFNO3dCQUNuQyxJQUFJZ1UsYUFBYXROLEtBQUssQ0FBQyxFQUFFLENBQUM4TSxJQUFJO3dCQUM5QnhZLFFBQVFzWSxhQUFhVTt3QkFFckIsSUFBSWhaLFVBQVVGLFdBQVc7NEJBQ3ZCLElBQUksT0FBTzRZLGdDQUFnQyxZQUFZO2dDQUNyRCxJQUFJTyxPQUFPUCw0QkFBNEIxVCxLQUFLMEcsT0FBTzdMO2dDQUNuREcsUUFBUSxPQUFPaVosU0FBUyxXQUFXQSxPQUFPLEVBQUU7NEJBQzlDLE9BQU8sSUFBSXBaLFdBQVdBLFFBQVFnRSxjQUFjLENBQUNtVixhQUFhO2dDQUN4RGhaLFFBQVE7NEJBQ1YsT0FBTyxJQUFJNlAsaUJBQWlCO2dDQUMxQjdQLFFBQVEwTCxLQUFLLENBQUMsRUFBRTtnQ0FDaEIsUUFBUzs0QkFDWCxPQUFPO2dDQUNMN0osTUFBTTNCLE1BQU0sQ0FBQ1YsSUFBSSxDQUFDLDhCQUE4QjJCLE1BQU0sQ0FBQzZYLFlBQVksdUJBQXVCN1gsTUFBTSxDQUFDNkQ7Z0NBRWpHaEYsUUFBUTs0QkFDVixDQUFDO3dCQUNILE9BQU8sSUFBSSxPQUFPQSxVQUFVLFlBQVksQ0FBQzZCLE1BQU1tVixtQkFBbUIsRUFBRTs0QkFDbEVoWCxRQUFRNkMsV0FBVzdDO3dCQUNyQixDQUFDO3dCQUVELElBQUk2WSxZQUFZQyxLQUFLRCxTQUFTLENBQUM3WTt3QkFDL0JnRixNQUFNQSxJQUFJeEIsT0FBTyxDQUFDa0ksS0FBSyxDQUFDLEVBQUUsRUFBRW1OO3dCQUU1QixJQUFJaEosaUJBQWlCOzRCQUNuQmlKLEtBQUtGLEtBQUssQ0FBQ00sU0FBUyxJQUFJbFosTUFBTXBCLE1BQU07NEJBQ3BDa2EsS0FBS0YsS0FBSyxDQUFDTSxTQUFTLElBQUl4TixLQUFLLENBQUMsRUFBRSxDQUFDOU0sTUFBTTt3QkFDekMsT0FBTzs0QkFDTGthLEtBQUtGLEtBQUssQ0FBQ00sU0FBUyxHQUFHO3dCQUN6QixDQUFDO3dCQUVEYjt3QkFFQSxJQUFJQSxZQUFZeFcsTUFBTThWLFdBQVcsRUFBRTs0QkFDakMsS0FBTTt3QkFDUixDQUFDO29CQUNIO2dCQUNGO2dCQUNBLE9BQU8zUztZQUNUO1FBQ0Y7UUFBRztZQUNEakcsS0FBSztZQUNMaUIsT0FBTyxTQUFTbVEsS0FBS25MLEdBQUcsRUFBRTRPLEVBQUUsRUFBRTtvQkFZbkJ1RixtQkFBVCxTQUFTQSxpQkFBaUJwYSxHQUFHLEVBQUVxYSxnQkFBZ0IsRUFBRTtvQkFDL0MsSUFBSUMsTUFBTSxJQUFJLENBQUMzQix1QkFBdUI7b0JBQ3RDLElBQUkzWSxJQUFJd0UsT0FBTyxDQUFDOFYsT0FBTyxHQUFHLE9BQU90YTtvQkFDakMsSUFBSThHLElBQUk5RyxJQUFJK0MsS0FBSyxDQUFDLElBQUlpRSxPQUFPLEdBQUc1RSxNQUFNLENBQUNrWSxLQUFLO29CQUM1QyxJQUFJQyxnQkFBZ0IsSUFBSW5ZLE1BQU0sQ0FBQzBFLENBQUMsQ0FBQyxFQUFFO29CQUNuQzlHLE1BQU04RyxDQUFDLENBQUMsRUFBRTtvQkFDVnlULGdCQUFnQixJQUFJLENBQUN0SixXQUFXLENBQUNzSixlQUFlQztvQkFDaEQsSUFBSUMsc0JBQXNCRixjQUFjNU4sS0FBSyxDQUFDO29CQUM5QyxJQUFJK04sc0JBQXNCSCxjQUFjNU4sS0FBSyxDQUFDO29CQUU5QyxJQUFJOE4sdUJBQXVCQSxvQkFBb0I1YSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUM2YSx1QkFBdUJBLG9CQUFvQjdhLE1BQU0sR0FBRyxNQUFNLEdBQUc7d0JBQy9IMGEsZ0JBQWdCQSxjQUFjOVYsT0FBTyxDQUFDLE1BQU07b0JBQzlDLENBQUM7b0JBRUQsSUFBSTt3QkFDRitWLGdCQUFnQkcsS0FBS2xLLEtBQUssQ0FBQzhKO3dCQUMzQixJQUFJRixrQkFBa0JHLGdCQUFnQjVDLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBR3lDLG1CQUFtQkc7b0JBQy9GLEVBQUUsT0FBT2hTLEdBQUc7d0JBQ1YsSUFBSSxDQUFDckgsTUFBTSxDQUFDVixJQUFJLENBQUMsb0RBQW9EMkIsTUFBTSxDQUFDcEMsTUFBTXdJO3dCQUNsRixPQUFPLEdBQUdwRyxNQUFNLENBQUNwQyxLQUFLb0MsTUFBTSxDQUFDa1ksS0FBS2xZLE1BQU0sQ0FBQ21ZO29CQUMzQztvQkFFQSxPQUFPQyxjQUFjeEwsWUFBWTtvQkFDakMsT0FBT2hQO2dCQUNUO2dCQW5DQSxJQUFJaU4sU0FBUyxJQUFJO2dCQUVqQixJQUFJbk0sVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJK007Z0JBQ0osSUFBSTFMO2dCQUVKLElBQUl1WixnQkFBZ0I1QyxnQkFBZ0IsQ0FBQyxHQUFHOVc7Z0JBRXhDMFosY0FBYy9JLGtCQUFrQixHQUFHLEtBQUs7Z0JBQ3hDLE9BQU8rSSxjQUFjeEwsWUFBWTtnQkE0QmpDLE1BQU9yQyxRQUFRLElBQUksQ0FBQ0UsYUFBYSxDQUFDbU4sSUFBSSxDQUFDL1QsS0FBTTtvQkFDM0MsSUFBSTJVLGFBQWEsRUFBRTtvQkFDbkIsSUFBSUMsV0FBVyxLQUFLO29CQUVwQixJQUFJbE8sS0FBSyxDQUFDLEVBQUUsQ0FBQ25JLE9BQU8sQ0FBQyxJQUFJLENBQUM0VCxlQUFlLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBT2hSLElBQUksQ0FBQ3VGLEtBQUssQ0FBQyxFQUFFLEdBQUc7d0JBQzNFLElBQUk1RixJQUFJNEYsS0FBSyxDQUFDLEVBQUUsQ0FBQzVKLEtBQUssQ0FBQyxJQUFJLENBQUNxVixlQUFlLEVBQUVuUixHQUFHLENBQUMsU0FBVTZULElBQUksRUFBRTs0QkFDL0QsT0FBT0EsS0FBS3JCLElBQUk7d0JBQ2xCO3dCQUNBOU0sS0FBSyxDQUFDLEVBQUUsR0FBRzVGLEVBQUVuQyxLQUFLO3dCQUNsQmdXLGFBQWE3VDt3QkFDYjhULFdBQVcsSUFBSTtvQkFDakIsQ0FBQztvQkFFRDVaLFFBQVE0VCxHQUFHdUYsaUJBQWlCclYsSUFBSSxDQUFDLElBQUksRUFBRTRILEtBQUssQ0FBQyxFQUFFLENBQUM4TSxJQUFJLElBQUllLGdCQUFnQkE7b0JBQ3hFLElBQUl2WixTQUFTMEwsS0FBSyxDQUFDLEVBQUUsS0FBSzFHLE9BQU8sT0FBT2hGLFVBQVUsVUFBVSxPQUFPQTtvQkFDbkUsSUFBSSxPQUFPQSxVQUFVLFVBQVVBLFFBQVE2QyxXQUFXN0M7b0JBRWxELElBQUksQ0FBQ0EsT0FBTzt3QkFDVixJQUFJLENBQUNFLE1BQU0sQ0FBQ1YsSUFBSSxDQUFDLHFCQUFxQjJCLE1BQU0sQ0FBQ3VLLEtBQUssQ0FBQyxFQUFFLEVBQUUsaUJBQWlCdkssTUFBTSxDQUFDNkQ7d0JBQy9FaEYsUUFBUTtvQkFDVixDQUFDO29CQUVELElBQUk0WixVQUFVO3dCQUNaNVosUUFBUTJaLFdBQVdHLE1BQU0sQ0FBQyxTQUFValEsQ0FBQyxFQUFFNE8sQ0FBQyxFQUFFOzRCQUN4QyxPQUFPek0sT0FBTzZLLE1BQU0sQ0FBQ2hOLEdBQUc0TyxHQUFHNVksUUFBUStJLEdBQUcsRUFBRStOLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBRzlXLFVBQVUsQ0FBQyxHQUFHO2dDQUN4RjBZLGtCQUFrQjdNLEtBQUssQ0FBQyxFQUFFLENBQUM4TSxJQUFJOzRCQUNqQzt3QkFDRixHQUFHeFksTUFBTXdZLElBQUk7b0JBQ2YsQ0FBQztvQkFFRHhULE1BQU1BLElBQUl4QixPQUFPLENBQUNrSSxLQUFLLENBQUMsRUFBRSxFQUFFMUw7b0JBQzVCLElBQUksQ0FBQytYLE1BQU0sQ0FBQ21CLFNBQVMsR0FBRztnQkFDMUI7Z0JBRUEsT0FBT2xVO1lBQ1Q7UUFDRjtLQUFFO0lBRUYsT0FBTzRSO0FBQ1Q7QUFFQSxTQUFTbUQsVUFBVW5jLE1BQU0sRUFBRUMsY0FBYyxFQUFFO0lBQUUsSUFBSUMsT0FBT0MsT0FBT0QsSUFBSSxDQUFDRjtJQUFTLElBQUlHLE9BQU9DLHFCQUFxQixFQUFFO1FBQUUsSUFBSUMsVUFBVUYsT0FBT0MscUJBQXFCLENBQUNKO1FBQVMsSUFBSUMsZ0JBQWdCO1lBQUVJLFVBQVVBLFFBQVFDLE1BQU0sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUUsT0FBT0osT0FBT0ssd0JBQXdCLENBQUNSLFFBQVFPLEtBQUtFLFVBQVU7WUFBRTtRQUFJLENBQUM7UUFBQ1AsS0FBS1EsSUFBSSxDQUFDQyxLQUFLLENBQUNULE1BQU1HO0lBQVUsQ0FBQztJQUFDLE9BQU9IO0FBQU07QUFFMVYsU0FBU2tjLGdCQUFnQnZiLE1BQU0sRUFBRTtJQUFFLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJQyxVQUFVQyxNQUFNLEVBQUVGLElBQUs7UUFBRSxJQUFJRyxTQUFTRixTQUFTLENBQUNELEVBQUUsSUFBSSxJQUFJLEdBQUdDLFNBQVMsQ0FBQ0QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUFFLElBQUlBLElBQUksR0FBRztZQUFFcWIsVUFBVWhjLE9BQU9jLFNBQVMsSUFBSSxFQUFFQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFdEIscUZBQWVBLENBQUNnQixRQUFRTSxLQUFLRixNQUFNLENBQUNFLElBQUk7WUFBRztRQUFJLE9BQU8sSUFBSWhCLE9BQU9pQix5QkFBeUIsRUFBRTtZQUFFakIsT0FBT2tCLGdCQUFnQixDQUFDUixRQUFRVixPQUFPaUIseUJBQXlCLENBQUNIO1FBQVUsT0FBTztZQUFFa2IsVUFBVWhjLE9BQU9jLFNBQVNDLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUVoQixPQUFPbUIsY0FBYyxDQUFDVCxRQUFRTSxLQUFLaEIsT0FBT0ssd0JBQXdCLENBQUNTLFFBQVFFO1lBQU87UUFBSSxDQUFDO0lBQUM7SUFBRSxPQUFPTjtBQUFRO0FBRTNoQixTQUFTd2IsZUFBZUMsU0FBUyxFQUFFO0lBQ2pDLElBQUlDLGFBQWFELFVBQVUzTixXQUFXLEdBQUdpTSxJQUFJO0lBQzdDLElBQUk0QixnQkFBZ0IsQ0FBQztJQUVyQixJQUFJRixVQUFVM1csT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHO1FBQy9CLElBQUlxRSxJQUFJc1MsVUFBVXBZLEtBQUssQ0FBQztRQUN4QnFZLGFBQWF2UyxDQUFDLENBQUMsRUFBRSxDQUFDMkUsV0FBVyxHQUFHaU0sSUFBSTtRQUNwQyxJQUFJNkIsU0FBU3pTLENBQUMsQ0FBQyxFQUFFLENBQUN2QixTQUFTLENBQUMsR0FBR3VCLENBQUMsQ0FBQyxFQUFFLENBQUNoSixNQUFNLEdBQUc7UUFFN0MsSUFBSXViLGVBQWUsY0FBY0UsT0FBTzlXLE9BQU8sQ0FBQyxPQUFPLEdBQUc7WUFDeEQsSUFBSSxDQUFDNlcsY0FBY0UsUUFBUSxFQUFFRixjQUFjRSxRQUFRLEdBQUdELE9BQU83QixJQUFJO1FBQ25FLE9BQU8sSUFBSTJCLGVBQWUsa0JBQWtCRSxPQUFPOVcsT0FBTyxDQUFDLE9BQU8sR0FBRztZQUNuRSxJQUFJLENBQUM2VyxjQUFjRyxLQUFLLEVBQUVILGNBQWNHLEtBQUssR0FBR0YsT0FBTzdCLElBQUk7UUFDN0QsT0FBTztZQUNMLElBQUlnQyxPQUFPSCxPQUFPdlksS0FBSyxDQUFDO1lBQ3hCMFksS0FBSzFiLE9BQU8sQ0FBQyxTQUFVMmIsR0FBRyxFQUFFO2dCQUMxQixJQUFJLENBQUNBLEtBQUs7Z0JBRVYsSUFBSUMsYUFBYUQsSUFBSTNZLEtBQUssQ0FBQyxNQUN2QjZZLGNBQWNqZCw4RUFBUUEsQ0FBQ2dkLGFBQ3ZCM2IsTUFBTTRiLFdBQVcsQ0FBQyxFQUFFLEVBQ3BCQyxPQUFPRCxZQUFZOVMsS0FBSyxDQUFDO2dCQUU3QixJQUFJdVEsTUFBTXdDLEtBQUszVSxJQUFJLENBQUMsS0FBS3VTLElBQUksR0FBR2hWLE9BQU8sQ0FBQyxZQUFZO2dCQUNwRCxJQUFJLENBQUM0VyxhQUFhLENBQUNyYixJQUFJeVosSUFBSSxHQUFHLEVBQUU0QixhQUFhLENBQUNyYixJQUFJeVosSUFBSSxHQUFHLEdBQUdKO2dCQUM1RCxJQUFJQSxRQUFRLFNBQVNnQyxhQUFhLENBQUNyYixJQUFJeVosSUFBSSxHQUFHLEdBQUcsS0FBSztnQkFDdEQsSUFBSUosUUFBUSxRQUFRZ0MsYUFBYSxDQUFDcmIsSUFBSXlaLElBQUksR0FBRyxHQUFHLElBQUk7Z0JBQ3BELElBQUksQ0FBQ3FDLE1BQU16QyxNQUFNZ0MsYUFBYSxDQUFDcmIsSUFBSXlaLElBQUksR0FBRyxHQUFHc0MsU0FBUzFDLEtBQUs7WUFDN0Q7UUFDRixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCtCLFlBQVlBO1FBQ1pDLGVBQWVBO0lBQ2pCO0FBQ0Y7QUFFQSxTQUFTVyxzQkFBc0JDLEVBQUUsRUFBRTtJQUNqQyxJQUFJQyxRQUFRLENBQUM7SUFDYixPQUFPLFNBQVNDLGdCQUFnQjlDLEdBQUcsRUFBRXhQLEdBQUcsRUFBRS9JLE9BQU8sRUFBRTtRQUNqRCxJQUFJZCxNQUFNNkosTUFBTThRLEtBQUt5QixTQUFTLENBQUN0YjtRQUMvQixJQUFJdWIsWUFBWUgsS0FBSyxDQUFDbGMsSUFBSTtRQUUxQixJQUFJLENBQUNxYyxXQUFXO1lBQ2RBLFlBQVlKLEdBQUdwUyxLQUFLL0k7WUFDcEJvYixLQUFLLENBQUNsYyxJQUFJLEdBQUdxYztRQUNmLENBQUM7UUFFRCxPQUFPQSxVQUFVaEQ7SUFDbkI7QUFDRjtBQUVBLElBQUlpRCxZQUFZLFdBQVk7SUFDMUIsU0FBU0EsWUFBWTtRQUNuQixJQUFJeGIsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBGeEIscUZBQWVBLENBQUMsSUFBSSxFQUFFa2U7UUFFdEIsSUFBSSxDQUFDbmIsTUFBTSxHQUFHcUIsV0FBV0gsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQ3ZCLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUN5YixPQUFPLEdBQUc7WUFDYnRGLFFBQVErRSxzQkFBc0IsU0FBVW5TLEdBQUcsRUFBRS9JLE9BQU8sRUFBRTtnQkFDcEQsSUFBSXViLFlBQVksSUFBSW5HLEtBQUtzRyxZQUFZLENBQUMzUyxLQUFLL0k7Z0JBQzNDLE9BQU8sU0FBVXVZLEdBQUcsRUFBRTtvQkFDcEIsT0FBT2dELFVBQVV2RSxNQUFNLENBQUN1QjtnQkFDMUI7WUFDRjtZQUNBa0MsVUFBVVMsc0JBQXNCLFNBQVVuUyxHQUFHLEVBQUUvSSxPQUFPLEVBQUU7Z0JBQ3RELElBQUl1YixZQUFZLElBQUluRyxLQUFLc0csWUFBWSxDQUFDM1MsS0FBS29SLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBR25hLFVBQVUsQ0FBQyxHQUFHO29CQUMzRjJiLE9BQU87Z0JBQ1Q7Z0JBQ0EsT0FBTyxTQUFVcEQsR0FBRyxFQUFFO29CQUNwQixPQUFPZ0QsVUFBVXZFLE1BQU0sQ0FBQ3VCO2dCQUMxQjtZQUNGO1lBQ0FxRCxVQUFVVixzQkFBc0IsU0FBVW5TLEdBQUcsRUFBRS9JLE9BQU8sRUFBRTtnQkFDdEQsSUFBSXViLFlBQVksSUFBSW5HLEtBQUt5RyxjQUFjLENBQUM5UyxLQUFLb1IsZ0JBQWdCLENBQUMsR0FBR25hO2dCQUNqRSxPQUFPLFNBQVV1WSxHQUFHLEVBQUU7b0JBQ3BCLE9BQU9nRCxVQUFVdkUsTUFBTSxDQUFDdUI7Z0JBQzFCO1lBQ0Y7WUFDQXVELGNBQWNaLHNCQUFzQixTQUFVblMsR0FBRyxFQUFFL0ksT0FBTyxFQUFFO2dCQUMxRCxJQUFJdWIsWUFBWSxJQUFJbkcsS0FBSzJHLGtCQUFrQixDQUFDaFQsS0FBS29SLGdCQUFnQixDQUFDLEdBQUduYTtnQkFDckUsT0FBTyxTQUFVdVksR0FBRyxFQUFFO29CQUNwQixPQUFPZ0QsVUFBVXZFLE1BQU0sQ0FBQ3VCLEtBQUt2WSxRQUFRMGEsS0FBSyxJQUFJO2dCQUNoRDtZQUNGO1lBQ0FzQixNQUFNZCxzQkFBc0IsU0FBVW5TLEdBQUcsRUFBRS9JLE9BQU8sRUFBRTtnQkFDbEQsSUFBSXViLFlBQVksSUFBSW5HLEtBQUs2RyxVQUFVLENBQUNsVCxLQUFLb1IsZ0JBQWdCLENBQUMsR0FBR25hO2dCQUM3RCxPQUFPLFNBQVV1WSxHQUFHLEVBQUU7b0JBQ3BCLE9BQU9nRCxVQUFVdkUsTUFBTSxDQUFDdUI7Z0JBQzFCO1lBQ0Y7UUFDRjtRQUNBLElBQUksQ0FBQ3JZLElBQUksQ0FBQ0Y7SUFDWjtJQUVBekMsa0ZBQVlBLENBQUNpZSxXQUFXO1FBQUM7WUFDdkJ0YyxLQUFLO1lBQ0xpQixPQUFPLFNBQVNELEtBQUsrSyxRQUFRLEVBQUU7Z0JBQzdCLElBQUlqTCxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRztvQkFDaEZ1TSxlQUFlLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQ0QsSUFBSTZMLFFBQVFsWCxRQUFRcUwsYUFBYTtnQkFDakMsSUFBSSxDQUFDaU0sZUFBZSxHQUFHSixNQUFNSSxlQUFlLEdBQUdKLE1BQU1JLGVBQWUsR0FBR0osTUFBTUksZUFBZSxJQUFJLEdBQUc7WUFDckc7UUFDRjtRQUFHO1lBQ0RwWSxLQUFLO1lBQ0xpQixPQUFPLFNBQVMrYixJQUFJNVIsSUFBSSxFQUFFeUosRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMwSCxPQUFPLENBQUNuUixLQUFLb0MsV0FBVyxHQUFHaU0sSUFBSSxHQUFHLEdBQUc1RTtZQUM1QztRQUNGO1FBQUc7WUFDRDdVLEtBQUs7WUFDTGlCLE9BQU8sU0FBU2djLFVBQVU3UixJQUFJLEVBQUV5SixFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQzBILE9BQU8sQ0FBQ25SLEtBQUtvQyxXQUFXLEdBQUdpTSxJQUFJLEdBQUcsR0FBR3VDLHNCQUFzQm5IO1lBQ2xFO1FBQ0Y7UUFBRztZQUNEN1UsS0FBSztZQUNMaUIsT0FBTyxTQUFTNlcsT0FBTzdXLEtBQUssRUFBRWljLE9BQU8sRUFBRXJULEdBQUcsRUFBRS9JLE9BQU8sRUFBRTtnQkFDbkQsSUFBSWdDLFFBQVEsSUFBSTtnQkFFaEIsSUFBSXlaLFVBQVVXLFFBQVFuYSxLQUFLLENBQUMsSUFBSSxDQUFDcVYsZUFBZTtnQkFFaEQsSUFBSXJRLFNBQVN3VSxRQUFReEIsTUFBTSxDQUFDLFNBQVVvQyxHQUFHLEVBQUV6RCxDQUFDLEVBQUU7b0JBQzVDLElBQUkwRCxrQkFBa0JsQyxlQUFleEIsSUFDakMwQixhQUFhZ0MsZ0JBQWdCaEMsVUFBVSxFQUN2Q0MsZ0JBQWdCK0IsZ0JBQWdCL0IsYUFBYTtvQkFFakQsSUFBSXZZLE1BQU15WixPQUFPLENBQUNuQixXQUFXLEVBQUU7d0JBQzdCLElBQUlpQyxZQUFZRjt3QkFFaEIsSUFBSTs0QkFDRixJQUFJRyxhQUFheGMsV0FBV0EsUUFBUXljLFlBQVksSUFBSXpjLFFBQVF5YyxZQUFZLENBQUN6YyxRQUFRMFksZ0JBQWdCLENBQUMsSUFBSSxDQUFDOzRCQUN2RyxJQUFJdFcsSUFBSW9hLFdBQVdFLE1BQU0sSUFBSUYsV0FBV3pULEdBQUcsSUFBSS9JLFFBQVEwYyxNQUFNLElBQUkxYyxRQUFRK0ksR0FBRyxJQUFJQTs0QkFDaEZ3VCxZQUFZdmEsTUFBTXlaLE9BQU8sQ0FBQ25CLFdBQVcsQ0FBQytCLEtBQUtqYSxHQUFHK1gsZ0JBQWdCQSxnQkFBZ0JBLGdCQUFnQixDQUFDLEdBQUdJLGdCQUFnQnZhLFVBQVV3Yzt3QkFDOUgsRUFBRSxPQUFPNWMsT0FBTzs0QkFDZG9DLE1BQU0zQixNQUFNLENBQUNWLElBQUksQ0FBQ0M7d0JBQ3BCO3dCQUVBLE9BQU8yYztvQkFDVCxPQUFPO3dCQUNMdmEsTUFBTTNCLE1BQU0sQ0FBQ1YsSUFBSSxDQUFDLG9DQUFvQzJCLE1BQU0sQ0FBQ2daO29CQUMvRCxDQUFDO29CQUVELE9BQU8rQjtnQkFDVCxHQUFHbGM7Z0JBQ0gsT0FBTzhHO1lBQ1Q7UUFDRjtLQUFFO0lBRUYsT0FBT3VVO0FBQ1Q7QUFFQSxTQUFTbUIsVUFBVTVlLE1BQU0sRUFBRUMsY0FBYyxFQUFFO0lBQUUsSUFBSUMsT0FBT0MsT0FBT0QsSUFBSSxDQUFDRjtJQUFTLElBQUlHLE9BQU9DLHFCQUFxQixFQUFFO1FBQUUsSUFBSUMsVUFBVUYsT0FBT0MscUJBQXFCLENBQUNKO1FBQVMsSUFBSUMsZ0JBQWdCO1lBQUVJLFVBQVVBLFFBQVFDLE1BQU0sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUUsT0FBT0osT0FBT0ssd0JBQXdCLENBQUNSLFFBQVFPLEtBQUtFLFVBQVU7WUFBRTtRQUFJLENBQUM7UUFBQ1AsS0FBS1EsSUFBSSxDQUFDQyxLQUFLLENBQUNULE1BQU1HO0lBQVUsQ0FBQztJQUFDLE9BQU9IO0FBQU07QUFFMVYsU0FBUzJlLGdCQUFnQmhlLE1BQU0sRUFBRTtJQUFFLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJQyxVQUFVQyxNQUFNLEVBQUVGLElBQUs7UUFBRSxJQUFJRyxTQUFTRixTQUFTLENBQUNELEVBQUUsSUFBSSxJQUFJLEdBQUdDLFNBQVMsQ0FBQ0QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUFFLElBQUlBLElBQUksR0FBRztZQUFFOGQsVUFBVXplLE9BQU9jLFNBQVMsSUFBSSxFQUFFQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFdEIscUZBQWVBLENBQUNnQixRQUFRTSxLQUFLRixNQUFNLENBQUNFLElBQUk7WUFBRztRQUFJLE9BQU8sSUFBSWhCLE9BQU9pQix5QkFBeUIsRUFBRTtZQUFFakIsT0FBT2tCLGdCQUFnQixDQUFDUixRQUFRVixPQUFPaUIseUJBQXlCLENBQUNIO1FBQVUsT0FBTztZQUFFMmQsVUFBVXplLE9BQU9jLFNBQVNDLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUVoQixPQUFPbUIsY0FBYyxDQUFDVCxRQUFRTSxLQUFLaEIsT0FBT0ssd0JBQXdCLENBQUNTLFFBQVFFO1lBQU87UUFBSSxDQUFDO0lBQUM7SUFBRSxPQUFPTjtBQUFRO0FBRTNoQixTQUFTaWUsZUFBZWpXLE9BQU8sRUFBRTtJQUFFLElBQUlDLDRCQUE0QmlXO0lBQStCLE9BQU8sU0FBUy9WLHVCQUF1QjtRQUFFLElBQUlDLFFBQVFySixxRkFBZUEsQ0FBQ2lKLFVBQVVLO1FBQVEsSUFBSUosMkJBQTJCO1lBQUUsSUFBSUssWUFBWXZKLHFGQUFlQSxDQUFDLElBQUksRUFBRXdKLFdBQVc7WUFBRUYsU0FBU0csUUFBUUMsU0FBUyxDQUFDTCxPQUFPbEksV0FBV29JO1FBQVksT0FBTztZQUFFRCxTQUFTRCxNQUFNdEksS0FBSyxDQUFDLElBQUksRUFBRUk7UUFBWSxDQUFDO1FBQUMsT0FBT3BCLGdHQUEwQkEsQ0FBQyxJQUFJLEVBQUV1SjtJQUFTO0FBQUc7QUFFNWEsU0FBUzZWLDhCQUE4QjtJQUFFLElBQUksT0FBTzFWLFlBQVksZUFBZSxDQUFDQSxRQUFRQyxTQUFTLEVBQUUsT0FBTyxLQUFLO0lBQUUsSUFBSUQsUUFBUUMsU0FBUyxDQUFDQyxJQUFJLEVBQUUsT0FBTyxLQUFLO0lBQUUsSUFBSSxPQUFPQyxVQUFVLFlBQVksT0FBTyxJQUFJO0lBQUUsSUFBSTtRQUFFQyxRQUFRekQsU0FBUyxDQUFDMEQsT0FBTyxDQUFDeEQsSUFBSSxDQUFDbUQsUUFBUUMsU0FBUyxDQUFDRyxTQUFTLEVBQUUsRUFBRSxXQUFZLENBQUM7UUFBSyxPQUFPLElBQUk7SUFBRSxFQUFFLE9BQU9FLEdBQUc7UUFBRSxPQUFPLEtBQUs7SUFBRTtBQUFFO0FBRTFVLFNBQVNxVixjQUFjQyxDQUFDLEVBQUUxUyxJQUFJLEVBQUU7SUFDOUIsSUFBSTBTLEVBQUVDLE9BQU8sQ0FBQzNTLEtBQUssS0FBS3JLLFdBQVc7UUFDakMsT0FBTytjLEVBQUVDLE9BQU8sQ0FBQzNTLEtBQUs7UUFDdEIwUyxFQUFFRSxZQUFZO0lBQ2hCLENBQUM7QUFDSDtBQUVBLElBQUlDLFlBQVksU0FBVTlVLGFBQWEsRUFBRTtJQUN2QzVLLCtFQUFTQSxDQUFDMGYsV0FBVzlVO0lBRXJCLElBQUlDLFNBQVN1VSxlQUFlTTtJQUU1QixTQUFTQSxVQUFVQyxPQUFPLEVBQUVDLEtBQUssRUFBRXBTLFFBQVEsRUFBRTtRQUMzQyxJQUFJako7UUFFSixJQUFJaEMsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBGeEIscUZBQWVBLENBQUMsSUFBSSxFQUFFNmY7UUFFdEJuYixRQUFRc0csT0FBT3JFLElBQUksQ0FBQyxJQUFJO1FBRXhCLElBQUlxQixRQUFRO1lBQ1YzRCxhQUFhc0MsSUFBSSxDQUFDekcsNEZBQXNCQSxDQUFDd0U7UUFDM0MsQ0FBQztRQUVEQSxNQUFNb2IsT0FBTyxHQUFHQTtRQUNoQnBiLE1BQU1xYixLQUFLLEdBQUdBO1FBQ2RyYixNQUFNaUosUUFBUSxHQUFHQTtRQUNqQmpKLE1BQU0wTSxhQUFhLEdBQUd6RCxTQUFTeUQsYUFBYTtRQUM1QzFNLE1BQU1oQyxPQUFPLEdBQUdBO1FBQ2hCZ0MsTUFBTTNCLE1BQU0sR0FBR3FCLFdBQVdILE1BQU0sQ0FBQztRQUNqQ1MsTUFBTXNiLFlBQVksR0FBRyxFQUFFO1FBQ3ZCdGIsTUFBTXViLGdCQUFnQixHQUFHdmQsUUFBUXVkLGdCQUFnQixJQUFJO1FBQ3JEdmIsTUFBTXdiLFlBQVksR0FBRztRQUNyQnhiLE1BQU15YixVQUFVLEdBQUd6ZCxRQUFReWQsVUFBVSxJQUFJLElBQUl6ZCxRQUFReWQsVUFBVSxHQUFHLENBQUM7UUFDbkV6YixNQUFNMGIsWUFBWSxHQUFHMWQsUUFBUTBkLFlBQVksSUFBSSxJQUFJMWQsUUFBUTBkLFlBQVksR0FBRyxHQUFHO1FBQzNFMWIsTUFBTTJiLEtBQUssR0FBRyxDQUFDO1FBQ2YzYixNQUFNNGIsS0FBSyxHQUFHLEVBQUU7UUFFaEIsSUFBSTViLE1BQU1vYixPQUFPLElBQUlwYixNQUFNb2IsT0FBTyxDQUFDbGQsSUFBSSxFQUFFO1lBQ3ZDOEIsTUFBTW9iLE9BQU8sQ0FBQ2xkLElBQUksQ0FBQytLLFVBQVVqTCxRQUFRb2QsT0FBTyxFQUFFcGQ7UUFDaEQsQ0FBQztRQUVELE9BQU9nQztJQUNUO0lBRUF6RSxrRkFBWUEsQ0FBQzRmLFdBQVc7UUFBQztZQUN2QmplLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzBkLFVBQVVDLFNBQVMsRUFBRXRTLFVBQVUsRUFBRXhMLE9BQU8sRUFBRStkLFFBQVEsRUFBRTtnQkFDbEUsSUFBSTVSLFNBQVMsSUFBSTtnQkFFakIsSUFBSTZSLFNBQVMsQ0FBQztnQkFDZCxJQUFJZixVQUFVLENBQUM7Z0JBQ2YsSUFBSWdCLGtCQUFrQixDQUFDO2dCQUN2QixJQUFJQyxtQkFBbUIsQ0FBQztnQkFDeEJKLFVBQVU3ZSxPQUFPLENBQUMsU0FBVThKLEdBQUcsRUFBRTtvQkFDL0IsSUFBSW9WLG1CQUFtQixJQUFJO29CQUMzQjNTLFdBQVd2TSxPQUFPLENBQUMsU0FBVXNKLEVBQUUsRUFBRTt3QkFDL0IsSUFBSStCLE9BQU8sR0FBR2hKLE1BQU0sQ0FBQ3lILEtBQUssS0FBS3pILE1BQU0sQ0FBQ2lIO3dCQUV0QyxJQUFJLENBQUN2SSxRQUFRb2UsTUFBTSxJQUFJalMsT0FBT2tSLEtBQUssQ0FBQzVULGlCQUFpQixDQUFDVixLQUFLUixLQUFLOzRCQUM5RDRELE9BQU93UixLQUFLLENBQUNyVCxLQUFLLEdBQUc7d0JBQ3ZCLE9BQU8sSUFBSTZCLE9BQU93UixLQUFLLENBQUNyVCxLQUFLLEdBQUc7NkJBQVUsSUFBSTZCLE9BQU93UixLQUFLLENBQUNyVCxLQUFLLEtBQUssR0FBRzs0QkFDdEUsSUFBSTJTLE9BQU8sQ0FBQzNTLEtBQUssS0FBS3JLLFdBQVdnZCxPQUFPLENBQUMzUyxLQUFLLEdBQUcsSUFBSTt3QkFDdkQsT0FBTzs0QkFDTDZCLE9BQU93UixLQUFLLENBQUNyVCxLQUFLLEdBQUc7NEJBQ3JCNlQsbUJBQW1CLEtBQUs7NEJBQ3hCLElBQUlsQixPQUFPLENBQUMzUyxLQUFLLEtBQUtySyxXQUFXZ2QsT0FBTyxDQUFDM1MsS0FBSyxHQUFHLElBQUk7NEJBQ3JELElBQUkwVCxNQUFNLENBQUMxVCxLQUFLLEtBQUtySyxXQUFXK2QsTUFBTSxDQUFDMVQsS0FBSyxHQUFHLElBQUk7NEJBQ25ELElBQUk0VCxnQkFBZ0IsQ0FBQzNWLEdBQUcsS0FBS3RJLFdBQVdpZSxnQkFBZ0IsQ0FBQzNWLEdBQUcsR0FBRyxJQUFJO3dCQUNyRSxDQUFDO29CQUNIO29CQUNBLElBQUksQ0FBQzRWLGtCQUFrQkYsZUFBZSxDQUFDbFYsSUFBSSxHQUFHLElBQUk7Z0JBQ3BEO2dCQUVBLElBQUk3SyxPQUFPRCxJQUFJLENBQUMrZixRQUFRamYsTUFBTSxJQUFJYixPQUFPRCxJQUFJLENBQUNnZixTQUFTbGUsTUFBTSxFQUFFO29CQUM3RCxJQUFJLENBQUM2ZSxLQUFLLENBQUNuZixJQUFJLENBQUM7d0JBQ2R3ZSxTQUFTQTt3QkFDVEMsY0FBY2hmLE9BQU9ELElBQUksQ0FBQ2dmLFNBQVNsZSxNQUFNO3dCQUN6Q3NmLFFBQVEsQ0FBQzt3QkFDVEMsUUFBUSxFQUFFO3dCQUNWUCxVQUFVQTtvQkFDWjtnQkFDRixDQUFDO2dCQUVELE9BQU87b0JBQ0xDLFFBQVE5ZixPQUFPRCxJQUFJLENBQUMrZjtvQkFDcEJmLFNBQVMvZSxPQUFPRCxJQUFJLENBQUNnZjtvQkFDckJnQixpQkFBaUIvZixPQUFPRCxJQUFJLENBQUNnZ0I7b0JBQzdCQyxrQkFBa0JoZ0IsT0FBT0QsSUFBSSxDQUFDaWdCO2dCQUNoQztZQUNGO1FBQ0Y7UUFBRztZQUNEaGYsS0FBSztZQUNMaUIsT0FBTyxTQUFTa2UsT0FBTy9ULElBQUksRUFBRWlVLEdBQUcsRUFBRTNaLElBQUksRUFBRTtnQkFDdEMsSUFBSXpCLElBQUltSCxLQUFLckksS0FBSyxDQUFDO2dCQUNuQixJQUFJOEcsTUFBTTVGLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUlvRixLQUFLcEYsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSW9iLEtBQUssSUFBSSxDQUFDbGMsSUFBSSxDQUFDLGlCQUFpQjBHLEtBQUtSLElBQUlnVztnQkFFN0MsSUFBSTNaLE1BQU07b0JBQ1IsSUFBSSxDQUFDeVksS0FBSyxDQUFDaFUsaUJBQWlCLENBQUNOLEtBQUtSLElBQUkzRDtnQkFDeEMsQ0FBQztnQkFFRCxJQUFJLENBQUMrWSxLQUFLLENBQUNyVCxLQUFLLEdBQUdpVSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMvQixJQUFJRixTQUFTLENBQUM7Z0JBQ2QsSUFBSSxDQUFDVCxLQUFLLENBQUMzZSxPQUFPLENBQUMsU0FBVStkLENBQUMsRUFBRTtvQkFDOUJ6WSxTQUFTeVksRUFBRXFCLE1BQU0sRUFBRTt3QkFBQ3RWO3FCQUFJLEVBQUVSO29CQUMxQndVLGNBQWNDLEdBQUcxUztvQkFDakIsSUFBSWlVLEtBQUt2QixFQUFFc0IsTUFBTSxDQUFDN2YsSUFBSSxDQUFDOGY7b0JBRXZCLElBQUl2QixFQUFFRSxZQUFZLEtBQUssS0FBSyxDQUFDRixFQUFFd0IsSUFBSSxFQUFFO3dCQUNuQ3RnQixPQUFPRCxJQUFJLENBQUMrZSxFQUFFcUIsTUFBTSxFQUFFcGYsT0FBTyxDQUFDLFNBQVVtRCxDQUFDLEVBQUU7NEJBQ3pDLElBQUksQ0FBQ2ljLE1BQU0sQ0FBQ2pjLEVBQUUsRUFBRWljLE1BQU0sQ0FBQ2pjLEVBQUUsR0FBRyxDQUFDOzRCQUM3QixJQUFJcWMsYUFBYXpCLEVBQUVxQixNQUFNLENBQUNqYyxFQUFFOzRCQUU1QixJQUFJcWMsV0FBVzFmLE1BQU0sRUFBRTtnQ0FDckIwZixXQUFXeGYsT0FBTyxDQUFDLFNBQVVzSixFQUFFLEVBQUU7b0NBQy9CLElBQUk4VixNQUFNLENBQUNqYyxFQUFFLENBQUNtRyxHQUFHLEtBQUt0SSxXQUFXb2UsTUFBTSxDQUFDamMsRUFBRSxDQUFDbUcsR0FBRyxHQUFHLElBQUk7Z0NBQ3ZEOzRCQUNGLENBQUM7d0JBQ0g7d0JBQ0F5VSxFQUFFd0IsSUFBSSxHQUFHLElBQUk7d0JBRWIsSUFBSXhCLEVBQUVzQixNQUFNLENBQUN2ZixNQUFNLEVBQUU7NEJBQ25CaWUsRUFBRWUsUUFBUSxDQUFDZixFQUFFc0IsTUFBTTt3QkFDckIsT0FBTzs0QkFDTHRCLEVBQUVlLFFBQVE7d0JBQ1osQ0FBQztvQkFDSCxDQUFDO2dCQUNIO2dCQUNBLElBQUksQ0FBQzFiLElBQUksQ0FBQyxVQUFVZ2M7Z0JBQ3BCLElBQUksQ0FBQ1QsS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxDQUFDdmYsTUFBTSxDQUFDLFNBQVUyZSxDQUFDLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQ0EsRUFBRXdCLElBQUk7Z0JBQ2hCO1lBQ0Y7UUFDRjtRQUFHO1lBQ0R0ZixLQUFLO1lBQ0xpQixPQUFPLFNBQVN1ZSxLQUFLM1YsR0FBRyxFQUFFUixFQUFFLEVBQUVvVyxNQUFNLEVBQUU7Z0JBQ3BDLElBQUlqUCxTQUFTLElBQUk7Z0JBRWpCLElBQUlrUCxRQUFROWYsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO2dCQUNqRixJQUFJK2YsT0FBTy9mLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDNGUsWUFBWTtnQkFDaEcsSUFBSUssV0FBV2pmLFVBQVVDLE1BQU0sR0FBRyxJQUFJRCxTQUFTLENBQUMsRUFBRSxHQUFHbUIsU0FBUztnQkFDOUQsSUFBSSxDQUFDOEksSUFBSWhLLE1BQU0sRUFBRSxPQUFPZ2YsU0FBUyxJQUFJLEVBQUUsQ0FBQztnQkFFeEMsSUFBSSxJQUFJLENBQUNQLFlBQVksSUFBSSxJQUFJLENBQUNELGdCQUFnQixFQUFFO29CQUM5QyxJQUFJLENBQUNELFlBQVksQ0FBQzdlLElBQUksQ0FBQzt3QkFDckJzSyxLQUFLQTt3QkFDTFIsSUFBSUE7d0JBQ0pvVyxRQUFRQTt3QkFDUkMsT0FBT0E7d0JBQ1BDLE1BQU1BO3dCQUNOZCxVQUFVQTtvQkFDWjtvQkFDQTtnQkFDRixDQUFDO2dCQUVELElBQUksQ0FBQ1AsWUFBWTtnQkFDakIsT0FBTyxJQUFJLENBQUNKLE9BQU8sQ0FBQ3VCLE9BQU8sQ0FBQzVWLEtBQUtSLElBQUksU0FBVWdXLEdBQUcsRUFBRTNaLElBQUksRUFBRTtvQkFDeEQ4SyxPQUFPOE4sWUFBWTtvQkFFbkIsSUFBSTlOLE9BQU80TixZQUFZLENBQUN2ZSxNQUFNLEdBQUcsR0FBRzt3QkFDbEMsSUFBSStmLE9BQU9wUCxPQUFPNE4sWUFBWSxDQUFDeFosS0FBSzt3QkFFcEM0TCxPQUFPZ1AsSUFBSSxDQUFDSSxLQUFLL1YsR0FBRyxFQUFFK1YsS0FBS3ZXLEVBQUUsRUFBRXVXLEtBQUtILE1BQU0sRUFBRUcsS0FBS0YsS0FBSyxFQUFFRSxLQUFLRCxJQUFJLEVBQUVDLEtBQUtmLFFBQVE7b0JBQ2xGLENBQUM7b0JBRUQsSUFBSVEsT0FBTzNaLFFBQVFnYSxRQUFRbFAsT0FBTytOLFVBQVUsRUFBRTt3QkFDNUNzQixXQUFXLFdBQVk7NEJBQ3JCclAsT0FBT2dQLElBQUksQ0FBQ3phLElBQUksQ0FBQ3lMLFFBQVEzRyxLQUFLUixJQUFJb1csUUFBUUMsUUFBUSxHQUFHQyxPQUFPLEdBQUdkO3dCQUNqRSxHQUFHYzt3QkFDSDtvQkFDRixDQUFDO29CQUVEZCxTQUFTUSxLQUFLM1o7Z0JBQ2hCO1lBQ0Y7UUFDRjtRQUFHO1lBQ0QxRixLQUFLO1lBQ0xpQixPQUFPLFNBQVM2ZSxlQUFlbEIsU0FBUyxFQUFFdFMsVUFBVSxFQUFFO2dCQUNwRCxJQUFJc0YsU0FBUyxJQUFJO2dCQUVqQixJQUFJOVEsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJaWYsV0FBV2pmLFVBQVVDLE1BQU0sR0FBRyxJQUFJRCxTQUFTLENBQUMsRUFBRSxHQUFHbUIsU0FBUztnQkFFOUQsSUFBSSxDQUFDLElBQUksQ0FBQ21kLE9BQU8sRUFBRTtvQkFDakIsSUFBSSxDQUFDL2MsTUFBTSxDQUFDVixJQUFJLENBQUM7b0JBQ2pCLE9BQU9vZSxZQUFZQTtnQkFDckIsQ0FBQztnQkFFRCxJQUFJLE9BQU9ELGNBQWMsVUFBVUEsWUFBWSxJQUFJLENBQUNwUCxhQUFhLENBQUNJLGtCQUFrQixDQUFDZ1A7Z0JBQ3JGLElBQUksT0FBT3RTLGVBQWUsVUFBVUEsYUFBYTtvQkFBQ0E7aUJBQVc7Z0JBQzdELElBQUl3UyxTQUFTLElBQUksQ0FBQ0gsU0FBUyxDQUFDQyxXQUFXdFMsWUFBWXhMLFNBQVMrZDtnQkFFNUQsSUFBSSxDQUFDQyxPQUFPQSxNQUFNLENBQUNqZixNQUFNLEVBQUU7b0JBQ3pCLElBQUksQ0FBQ2lmLE9BQU9mLE9BQU8sQ0FBQ2xlLE1BQU0sRUFBRWdmO29CQUM1QixPQUFPLElBQUk7Z0JBQ2IsQ0FBQztnQkFFREMsT0FBT0EsTUFBTSxDQUFDL2UsT0FBTyxDQUFDLFNBQVVxTCxJQUFJLEVBQUU7b0JBQ3BDd0csT0FBT21PLE9BQU8sQ0FBQzNVO2dCQUNqQjtZQUNGO1FBQ0Y7UUFBRztZQUNEcEwsS0FBSztZQUNMaUIsT0FBTyxTQUFTa1QsS0FBS3lLLFNBQVMsRUFBRXRTLFVBQVUsRUFBRXVTLFFBQVEsRUFBRTtnQkFDcEQsSUFBSSxDQUFDaUIsY0FBYyxDQUFDbEIsV0FBV3RTLFlBQVksQ0FBQyxHQUFHdVM7WUFDakQ7UUFDRjtRQUFHO1lBQ0Q3ZSxLQUFLO1lBQ0xpQixPQUFPLFNBQVNpZSxPQUFPTixTQUFTLEVBQUV0UyxVQUFVLEVBQUV1UyxRQUFRLEVBQUU7Z0JBQ3RELElBQUksQ0FBQ2lCLGNBQWMsQ0FBQ2xCLFdBQVd0UyxZQUFZO29CQUN6QzRTLFFBQVEsSUFBSTtnQkFDZCxHQUFHTDtZQUNMO1FBQ0Y7UUFBRztZQUNEN2UsS0FBSztZQUNMaUIsT0FBTyxTQUFTOGUsUUFBUTNVLElBQUksRUFBRTtnQkFDNUIsSUFBSTRVLFNBQVMsSUFBSTtnQkFFakIsSUFBSTllLFNBQVN0QixVQUFVQyxNQUFNLEdBQUcsS0FBS0QsU0FBUyxDQUFDLEVBQUUsS0FBS21CLFlBQVluQixTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUU7Z0JBQ25GLElBQUlxRSxJQUFJbUgsS0FBS3JJLEtBQUssQ0FBQztnQkFDbkIsSUFBSThHLE1BQU01RixDQUFDLENBQUMsRUFBRTtnQkFDZCxJQUFJb0YsS0FBS3BGLENBQUMsQ0FBQyxFQUFFO2dCQUNiLElBQUksQ0FBQ3ViLElBQUksQ0FBQzNWLEtBQUtSLElBQUksUUFBUXRJLFdBQVdBLFdBQVcsU0FBVXNlLEdBQUcsRUFBRTNaLElBQUksRUFBRTtvQkFDcEUsSUFBSTJaLEtBQUtXLE9BQU83ZSxNQUFNLENBQUNWLElBQUksQ0FBQyxHQUFHMkIsTUFBTSxDQUFDbEIsUUFBUSxzQkFBc0JrQixNQUFNLENBQUNpSCxJQUFJLGtCQUFrQmpILE1BQU0sQ0FBQ3lILEtBQUssWUFBWXdWO29CQUN6SCxJQUFJLENBQUNBLE9BQU8zWixNQUFNc2EsT0FBTzdlLE1BQU0sQ0FBQ2IsR0FBRyxDQUFDLEdBQUc4QixNQUFNLENBQUNsQixRQUFRLHFCQUFxQmtCLE1BQU0sQ0FBQ2lILElBQUksa0JBQWtCakgsTUFBTSxDQUFDeUgsTUFBTW5FO29CQUVySHNhLE9BQU9iLE1BQU0sQ0FBQy9ULE1BQU1pVSxLQUFLM1o7Z0JBQzNCO1lBQ0Y7UUFDRjtRQUFHO1lBQ0QxRixLQUFLO1lBQ0xpQixPQUFPLFNBQVNpUCxZQUFZME8sU0FBUyxFQUFFdFIsU0FBUyxFQUFFdE4sR0FBRyxFQUFFaWdCLGFBQWEsRUFBRUMsUUFBUSxFQUFFO2dCQUM5RSxJQUFJcGYsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUVwRixJQUFJLElBQUksQ0FBQ21NLFFBQVEsQ0FBQ3NHLEtBQUssSUFBSSxJQUFJLENBQUN0RyxRQUFRLENBQUNzRyxLQUFLLENBQUNDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDdkcsUUFBUSxDQUFDc0csS0FBSyxDQUFDQyxrQkFBa0IsQ0FBQ2hGLFlBQVk7b0JBQ3ZILElBQUksQ0FBQ25NLE1BQU0sQ0FBQ1YsSUFBSSxDQUFDLHFCQUFzQjJCLE1BQU0sQ0FBQ3BDLEtBQUssd0JBQTBCb0MsTUFBTSxDQUFDa0wsV0FBVyx5QkFBMEI7b0JBQ3pIO2dCQUNGLENBQUM7Z0JBRUQsSUFBSXROLFFBQVFlLGFBQWFmLFFBQVEsSUFBSSxJQUFJQSxRQUFRLElBQUk7Z0JBRXJELElBQUksSUFBSSxDQUFDa2UsT0FBTyxJQUFJLElBQUksQ0FBQ0EsT0FBTyxDQUFDN2IsTUFBTSxFQUFFO29CQUN2QyxJQUFJLENBQUM2YixPQUFPLENBQUM3YixNQUFNLENBQUN1YyxXQUFXdFIsV0FBV3ROLEtBQUtpZ0IsZUFBZSxJQUFJLEVBQUV2QyxnQkFBZ0JBLGdCQUFnQixDQUFDLEdBQUc1YyxVQUFVLENBQUMsR0FBRzt3QkFDcEhvZixVQUFVQTtvQkFDWjtnQkFDRixDQUFDO2dCQUVELElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ0EsU0FBUyxDQUFDLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDVCxLQUFLLENBQUNyVSxXQUFXLENBQUM4VSxTQUFTLENBQUMsRUFBRSxFQUFFdFIsV0FBV3ROLEtBQUtpZ0I7WUFDdkQ7UUFDRjtLQUFFO0lBRUYsT0FBT2hDO0FBQ1QsRUFBRXhiO0FBRUYsU0FBUzBkLE1BQU07SUFDYixPQUFPO1FBQ0wvZSxPQUFPLEtBQUs7UUFDWmdmLGVBQWUsSUFBSTtRQUNuQi9XLElBQUk7WUFBQztTQUFjO1FBQ25CQyxXQUFXO1lBQUM7U0FBYztRQUMxQm9HLGFBQWE7WUFBQztTQUFNO1FBQ3BCcUMsWUFBWSxLQUFLO1FBQ2pCMkIsZUFBZSxLQUFLO1FBQ3BCVSwwQkFBMEIsS0FBSztRQUMvQkQsTUFBTTtRQUNOa00sU0FBUyxLQUFLO1FBQ2Q3SSxzQkFBc0IsSUFBSTtRQUMxQjVRLGNBQWM7UUFDZEQsYUFBYTtRQUNiaU0saUJBQWlCO1FBQ2pCRSxrQkFBa0I7UUFDbEJ3Tix5QkFBeUIsS0FBSztRQUM5QnBRLGFBQWEsS0FBSztRQUNsQmQsZUFBZSxLQUFLO1FBQ3BCTyxlQUFlO1FBQ2ZRLG9CQUFvQixJQUFJO1FBQ3hCSCxtQkFBbUIsS0FBSztRQUN4QjJKLDZCQUE2QixLQUFLO1FBQ2xDcEksYUFBYSxLQUFLO1FBQ2xCRyx5QkFBeUIsS0FBSztRQUM5QnVCLFlBQVksSUFBSTtRQUNoQkMsbUJBQW1CLElBQUk7UUFDdkIvRSxlQUFlLEtBQUs7UUFDcEJKLFlBQVksS0FBSztRQUNqQkssdUJBQXVCLEtBQUs7UUFDNUJtQyx3QkFBd0IsS0FBSztRQUM3QkQsNkJBQTZCLEtBQUs7UUFDbEMvQyx5QkFBeUIsS0FBSztRQUM5Qkwsa0NBQWtDLFNBQVM3QixPQUFPOUssSUFBSSxFQUFFO1lBQ3RELElBQUlnZ0IsTUFBTSxDQUFDO1lBQ1gsSUFBSXBpQiw2RUFBT0EsQ0FBQ29DLElBQUksQ0FBQyxFQUFFLE1BQU0sVUFBVWdnQixNQUFNaGdCLElBQUksQ0FBQyxFQUFFO1lBQ2hELElBQUksT0FBT0EsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVZ2dCLElBQUl2UixZQUFZLEdBQUd6TyxJQUFJLENBQUMsRUFBRTtZQUMzRCxJQUFJLE9BQU9BLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVWdnQixJQUFJQyxZQUFZLEdBQUdqZ0IsSUFBSSxDQUFDLEVBQUU7WUFFM0QsSUFBSXBDLDZFQUFPQSxDQUFDb0MsSUFBSSxDQUFDLEVBQUUsTUFBTSxZQUFZcEMsNkVBQU9BLENBQUNvQyxJQUFJLENBQUMsRUFBRSxNQUFNLFVBQVU7Z0JBQ2xFLElBQUlPLFVBQVVQLElBQUksQ0FBQyxFQUFFLElBQUlBLElBQUksQ0FBQyxFQUFFO2dCQUNoQ3ZCLE9BQU9ELElBQUksQ0FBQytCLFNBQVNmLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7b0JBQzFDdWdCLEdBQUcsQ0FBQ3ZnQixJQUFJLEdBQUdjLE9BQU8sQ0FBQ2QsSUFBSTtnQkFDekI7WUFDRixDQUFDO1lBRUQsT0FBT3VnQjtRQUNUO1FBQ0FwVSxlQUFlO1lBQ2I0TCxhQUFhLElBQUk7WUFDakJELFFBQVEsU0FBU0EsT0FBTzdXLEtBQUssRUFBRWljLE9BQU8sRUFBRXJULEdBQUcsRUFBRS9JLE9BQU8sRUFBRTtnQkFDcEQsT0FBT0c7WUFDVDtZQUNBQyxRQUFRO1lBQ1JtUCxRQUFRO1lBQ1IrSCxpQkFBaUI7WUFDakJDLGdCQUFnQjtZQUNoQkUsZUFBZTtZQUNmRSxlQUFlO1lBQ2ZFLHlCQUF5QjtZQUN6QkMsYUFBYTtZQUNiOUgsaUJBQWlCLElBQUk7UUFDdkI7SUFDRjtBQUNGO0FBQ0EsU0FBUzJQLGlCQUFpQjNmLE9BQU8sRUFBRTtJQUNqQyxJQUFJLE9BQU9BLFFBQVF1SSxFQUFFLEtBQUssVUFBVXZJLFFBQVF1SSxFQUFFLEdBQUc7UUFBQ3ZJLFFBQVF1SSxFQUFFO0tBQUM7SUFDN0QsSUFBSSxPQUFPdkksUUFBUTRPLFdBQVcsS0FBSyxVQUFVNU8sUUFBUTRPLFdBQVcsR0FBRztRQUFDNU8sUUFBUTRPLFdBQVc7S0FBQztJQUN4RixJQUFJLE9BQU81TyxRQUFRaVIsVUFBVSxLQUFLLFVBQVVqUixRQUFRaVIsVUFBVSxHQUFHO1FBQUNqUixRQUFRaVIsVUFBVTtLQUFDO0lBRXJGLElBQUlqUixRQUFRNFMsYUFBYSxJQUFJNVMsUUFBUTRTLGFBQWEsQ0FBQ2xQLE9BQU8sQ0FBQyxZQUFZLEdBQUc7UUFDeEUxRCxRQUFRNFMsYUFBYSxHQUFHNVMsUUFBUTRTLGFBQWEsQ0FBQ3RSLE1BQU0sQ0FBQztZQUFDO1NBQVM7SUFDakUsQ0FBQztJQUVELE9BQU90QjtBQUNUO0FBRUEsU0FBUzRmLFVBQVU3aEIsTUFBTSxFQUFFQyxjQUFjLEVBQUU7SUFBRSxJQUFJQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNGO0lBQVMsSUFBSUcsT0FBT0MscUJBQXFCLEVBQUU7UUFBRSxJQUFJQyxVQUFVRixPQUFPQyxxQkFBcUIsQ0FBQ0o7UUFBUyxJQUFJQyxnQkFBZ0I7WUFBRUksVUFBVUEsUUFBUUMsTUFBTSxDQUFDLFNBQVVDLEdBQUcsRUFBRTtnQkFBRSxPQUFPSixPQUFPSyx3QkFBd0IsQ0FBQ1IsUUFBUU8sS0FBS0UsVUFBVTtZQUFFO1FBQUksQ0FBQztRQUFDUCxLQUFLUSxJQUFJLENBQUNDLEtBQUssQ0FBQ1QsTUFBTUc7SUFBVSxDQUFDO0lBQUMsT0FBT0g7QUFBTTtBQUUxVixTQUFTNGhCLGdCQUFnQmpoQixNQUFNLEVBQUU7SUFBRSxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUMsVUFBVUMsTUFBTSxFQUFFRixJQUFLO1FBQUUsSUFBSUcsU0FBU0YsU0FBUyxDQUFDRCxFQUFFLElBQUksSUFBSSxHQUFHQyxTQUFTLENBQUNELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFBRSxJQUFJQSxJQUFJLEdBQUc7WUFBRStnQixVQUFVMWhCLE9BQU9jLFNBQVMsSUFBSSxFQUFFQyxPQUFPLENBQUMsU0FBVUMsR0FBRyxFQUFFO2dCQUFFdEIscUZBQWVBLENBQUNnQixRQUFRTSxLQUFLRixNQUFNLENBQUNFLElBQUk7WUFBRztRQUFJLE9BQU8sSUFBSWhCLE9BQU9pQix5QkFBeUIsRUFBRTtZQUFFakIsT0FBT2tCLGdCQUFnQixDQUFDUixRQUFRVixPQUFPaUIseUJBQXlCLENBQUNIO1FBQVUsT0FBTztZQUFFNGdCLFVBQVUxaEIsT0FBT2MsU0FBU0MsT0FBTyxDQUFDLFNBQVVDLEdBQUcsRUFBRTtnQkFBRWhCLE9BQU9tQixjQUFjLENBQUNULFFBQVFNLEtBQUtoQixPQUFPSyx3QkFBd0IsQ0FBQ1MsUUFBUUU7WUFBTztRQUFJLENBQUM7SUFBQztJQUFFLE9BQU9OO0FBQVE7QUFFM2hCLFNBQVNraEIsZUFBZWxaLE9BQU8sRUFBRTtJQUFFLElBQUlDLDRCQUE0QmtaO0lBQStCLE9BQU8sU0FBU2haLHVCQUF1QjtRQUFFLElBQUlDLFFBQVFySixxRkFBZUEsQ0FBQ2lKLFVBQVVLO1FBQVEsSUFBSUosMkJBQTJCO1lBQUUsSUFBSUssWUFBWXZKLHFGQUFlQSxDQUFDLElBQUksRUFBRXdKLFdBQVc7WUFBRUYsU0FBU0csUUFBUUMsU0FBUyxDQUFDTCxPQUFPbEksV0FBV29JO1FBQVksT0FBTztZQUFFRCxTQUFTRCxNQUFNdEksS0FBSyxDQUFDLElBQUksRUFBRUk7UUFBWSxDQUFDO1FBQUMsT0FBT3BCLGdHQUEwQkEsQ0FBQyxJQUFJLEVBQUV1SjtJQUFTO0FBQUc7QUFFNWEsU0FBUzhZLDhCQUE4QjtJQUFFLElBQUksT0FBTzNZLFlBQVksZUFBZSxDQUFDQSxRQUFRQyxTQUFTLEVBQUUsT0FBTyxLQUFLO0lBQUUsSUFBSUQsUUFBUUMsU0FBUyxDQUFDQyxJQUFJLEVBQUUsT0FBTyxLQUFLO0lBQUUsSUFBSSxPQUFPQyxVQUFVLFlBQVksT0FBTyxJQUFJO0lBQUUsSUFBSTtRQUFFQyxRQUFRekQsU0FBUyxDQUFDMEQsT0FBTyxDQUFDeEQsSUFBSSxDQUFDbUQsUUFBUUMsU0FBUyxDQUFDRyxTQUFTLEVBQUUsRUFBRSxXQUFZLENBQUM7UUFBSyxPQUFPLElBQUk7SUFBRSxFQUFFLE9BQU9FLEdBQUc7UUFBRSxPQUFPLEtBQUs7SUFBRTtBQUFFO0FBRTFVLFNBQVNzWSxPQUFPLENBQUM7QUFFakIsU0FBU0Msb0JBQW9CQyxJQUFJLEVBQUU7SUFDakMsSUFBSUMsT0FBT2ppQixPQUFPa2lCLG1CQUFtQixDQUFDbGlCLE9BQU9taUIsY0FBYyxDQUFDSDtJQUM1REMsS0FBS2xoQixPQUFPLENBQUMsU0FBVW9kLEdBQUcsRUFBRTtRQUMxQixJQUFJLE9BQU82RCxJQUFJLENBQUM3RCxJQUFJLEtBQUssWUFBWTtZQUNuQzZELElBQUksQ0FBQzdELElBQUksR0FBRzZELElBQUksQ0FBQzdELElBQUksQ0FBQ2lFLElBQUksQ0FBQ0o7UUFDN0IsQ0FBQztJQUNIO0FBQ0Y7QUFFQSxJQUFJSyxPQUFPLFNBQVVsWSxhQUFhLEVBQUU7SUFDbEM1SywrRUFBU0EsQ0FBQzhpQixNQUFNbFk7SUFFaEIsSUFBSUMsU0FBU3dYLGVBQWVTO0lBRTVCLFNBQVNBLE9BQU87UUFDZCxJQUFJdmU7UUFFSixJQUFJaEMsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLElBQUlpZixXQUFXamYsVUFBVUMsTUFBTSxHQUFHLElBQUlELFNBQVMsQ0FBQyxFQUFFLEdBQUdtQixTQUFTO1FBRTlEM0MscUZBQWVBLENBQUMsSUFBSSxFQUFFaWpCO1FBRXRCdmUsUUFBUXNHLE9BQU9yRSxJQUFJLENBQUMsSUFBSTtRQUV4QixJQUFJcUIsUUFBUTtZQUNWM0QsYUFBYXNDLElBQUksQ0FBQ3pHLDRGQUFzQkEsQ0FBQ3dFO1FBQzNDLENBQUM7UUFFREEsTUFBTWhDLE9BQU8sR0FBRzJmLGlCQUFpQjNmO1FBQ2pDZ0MsTUFBTWlKLFFBQVEsR0FBRyxDQUFDO1FBQ2xCakosTUFBTTNCLE1BQU0sR0FBR3FCO1FBQ2ZNLE1BQU13ZSxPQUFPLEdBQUc7WUFDZEMsVUFBVSxFQUFFO1FBQ2Q7UUFDQVIsb0JBQW9CemlCLDRGQUFzQkEsQ0FBQ3dFO1FBRTNDLElBQUkrYixZQUFZLENBQUMvYixNQUFNMGUsYUFBYSxJQUFJLENBQUMxZ0IsUUFBUTJnQixPQUFPLEVBQUU7WUFDeEQsSUFBSSxDQUFDM2UsTUFBTWhDLE9BQU8sQ0FBQ3NmLGFBQWEsRUFBRTtnQkFDaEN0ZCxNQUFNOUIsSUFBSSxDQUFDRixTQUFTK2Q7Z0JBRXBCLE9BQU9yZ0IsZ0dBQTBCQSxDQUFDc0UsT0FBT3hFLDRGQUFzQkEsQ0FBQ3dFO1lBQ2xFLENBQUM7WUFFRCtjLFdBQVcsV0FBWTtnQkFDckIvYyxNQUFNOUIsSUFBSSxDQUFDRixTQUFTK2Q7WUFDdEIsR0FBRztRQUNMLENBQUM7UUFFRCxPQUFPL2I7SUFDVDtJQUVBekUsa0ZBQVlBLENBQUNnakIsTUFBTTtRQUFDO1lBQ2xCcmhCLEtBQUs7WUFDTGlCLE9BQU8sU0FBU0QsT0FBTztvQkFrQ1owZ0Isc0JBQVQsU0FBU0Esb0JBQW9CQyxhQUFhLEVBQUU7b0JBQzFDLElBQUksQ0FBQ0EsZUFBZSxPQUFPLElBQUk7b0JBQy9CLElBQUksT0FBT0Esa0JBQWtCLFlBQVksT0FBTyxJQUFJQTtvQkFDcEQsT0FBT0E7Z0JBQ1Q7Z0JBckNBLElBQUkxVSxTQUFTLElBQUk7Z0JBRWpCLElBQUluTSxVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUlpZixXQUFXamYsVUFBVUMsTUFBTSxHQUFHLElBQUlELFNBQVMsQ0FBQyxFQUFFLEdBQUdtQixTQUFTO2dCQUU5RCxJQUFJLE9BQU9ELFlBQVksWUFBWTtvQkFDakMrZCxXQUFXL2Q7b0JBQ1hBLFVBQVUsQ0FBQztnQkFDYixDQUFDO2dCQUVELElBQUksQ0FBQ0EsUUFBUXdJLFNBQVMsSUFBSXhJLFFBQVF3SSxTQUFTLEtBQUssS0FBSyxJQUFJeEksUUFBUXVJLEVBQUUsRUFBRTtvQkFDbkUsSUFBSSxPQUFPdkksUUFBUXVJLEVBQUUsS0FBSyxVQUFVO3dCQUNsQ3ZJLFFBQVF3SSxTQUFTLEdBQUd4SSxRQUFRdUksRUFBRTtvQkFDaEMsT0FBTyxJQUFJdkksUUFBUXVJLEVBQUUsQ0FBQzdFLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRzt3QkFDaEQxRCxRQUFRd0ksU0FBUyxHQUFHeEksUUFBUXVJLEVBQUUsQ0FBQyxFQUFFO29CQUNuQyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSXVZLFVBQVV6QjtnQkFDZCxJQUFJLENBQUNyZixPQUFPLEdBQUc2ZixnQkFBZ0JBLGdCQUFnQkEsZ0JBQWdCLENBQUMsR0FBR2lCLFVBQVUsSUFBSSxDQUFDOWdCLE9BQU8sR0FBRzJmLGlCQUFpQjNmO2dCQUU3RyxJQUFJLElBQUksQ0FBQ0EsT0FBTyxDQUFDMkosZ0JBQWdCLEtBQUssTUFBTTtvQkFDMUMsSUFBSSxDQUFDM0osT0FBTyxDQUFDcUwsYUFBYSxHQUFHd1UsZ0JBQWdCQSxnQkFBZ0IsQ0FBQyxHQUFHaUIsUUFBUXpWLGFBQWEsR0FBRyxJQUFJLENBQUNyTCxPQUFPLENBQUNxTCxhQUFhO2dCQUNySCxDQUFDO2dCQUVELElBQUlyTCxRQUFROEYsWUFBWSxLQUFLN0YsV0FBVztvQkFDdEMsSUFBSSxDQUFDRCxPQUFPLENBQUMyTCx1QkFBdUIsR0FBRzNMLFFBQVE4RixZQUFZO2dCQUM3RCxDQUFDO2dCQUVELElBQUk5RixRQUFRNkYsV0FBVyxLQUFLNUYsV0FBVztvQkFDckMsSUFBSSxDQUFDRCxPQUFPLENBQUM0TCxzQkFBc0IsR0FBRzVMLFFBQVE2RixXQUFXO2dCQUMzRCxDQUFDO2dCQVFELElBQUksQ0FBQyxJQUFJLENBQUM3RixPQUFPLENBQUMyZ0IsT0FBTyxFQUFFO29CQUN6QixJQUFJLElBQUksQ0FBQ0gsT0FBTyxDQUFDbmdCLE1BQU0sRUFBRTt3QkFDdkJxQixXQUFXeEIsSUFBSSxDQUFDMGdCLG9CQUFvQixJQUFJLENBQUNKLE9BQU8sQ0FBQ25nQixNQUFNLEdBQUcsSUFBSSxDQUFDTCxPQUFPO29CQUN4RSxPQUFPO3dCQUNMMEIsV0FBV3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDRixPQUFPO29CQUNwQyxDQUFDO29CQUVELElBQUl1YjtvQkFFSixJQUFJLElBQUksQ0FBQ2lGLE9BQU8sQ0FBQ2pGLFNBQVMsRUFBRTt3QkFDMUJBLFlBQVksSUFBSSxDQUFDaUYsT0FBTyxDQUFDakYsU0FBUztvQkFDcEMsT0FBTyxJQUFJLE9BQU9uRyxTQUFTLGFBQWE7d0JBQ3RDbUcsWUFBWUM7b0JBQ2QsQ0FBQztvQkFFRCxJQUFJdUYsS0FBSyxJQUFJcE8sYUFBYSxJQUFJLENBQUMzUyxPQUFPO29CQUN0QyxJQUFJLENBQUNxZCxLQUFLLEdBQUcsSUFBSWpWLGNBQWMsSUFBSSxDQUFDcEksT0FBTyxDQUFDbUosU0FBUyxFQUFFLElBQUksQ0FBQ25KLE9BQU87b0JBQ25FLElBQUltRCxJQUFJLElBQUksQ0FBQzhILFFBQVE7b0JBQ3JCOUgsRUFBRTlDLE1BQU0sR0FBR3FCO29CQUNYeUIsRUFBRWtQLGFBQWEsR0FBRyxJQUFJLENBQUNnTCxLQUFLO29CQUM1QmxhLEVBQUV1TCxhQUFhLEdBQUdxUztvQkFDbEI1ZCxFQUFFNkssY0FBYyxHQUFHLElBQUlrSCxlQUFlNkwsSUFBSTt3QkFDeEM3SyxTQUFTLElBQUksQ0FBQ2xXLE9BQU8sQ0FBQzhSLGVBQWU7d0JBQ3JDcUQsbUJBQW1CLElBQUksQ0FBQ25WLE9BQU8sQ0FBQ21WLGlCQUFpQjt3QkFDakR1QixzQkFBc0IsSUFBSSxDQUFDMVcsT0FBTyxDQUFDMFcsb0JBQW9CO29CQUN6RDtvQkFFQSxJQUFJNkUsYUFBYyxFQUFDLElBQUksQ0FBQ3ZiLE9BQU8sQ0FBQ3FMLGFBQWEsQ0FBQzJMLE1BQU0sSUFBSSxJQUFJLENBQUNoWCxPQUFPLENBQUNxTCxhQUFhLENBQUMyTCxNQUFNLEtBQUs4SixRQUFRelYsYUFBYSxDQUFDMkwsTUFBTSxHQUFHO3dCQUMzSDdULEVBQUVvWSxTQUFTLEdBQUdxRixvQkFBb0JyRjt3QkFDbENwWSxFQUFFb1ksU0FBUyxDQUFDcmIsSUFBSSxDQUFDaUQsR0FBRyxJQUFJLENBQUNuRCxPQUFPO3dCQUNoQyxJQUFJLENBQUNBLE9BQU8sQ0FBQ3FMLGFBQWEsQ0FBQzJMLE1BQU0sR0FBRzdULEVBQUVvWSxTQUFTLENBQUN2RSxNQUFNLENBQUNzSixJQUFJLENBQUNuZCxFQUFFb1ksU0FBUztvQkFDekUsQ0FBQztvQkFFRHBZLEVBQUUySSxZQUFZLEdBQUcsSUFBSWlMLGFBQWEsSUFBSSxDQUFDL1csT0FBTztvQkFDOUNtRCxFQUFFb08sS0FBSyxHQUFHO3dCQUNSQyxvQkFBb0IsSUFBSSxDQUFDQSxrQkFBa0IsQ0FBQzhPLElBQUksQ0FBQyxJQUFJO29CQUN2RDtvQkFDQW5kLEVBQUVnTSxnQkFBZ0IsR0FBRyxJQUFJZ08sVUFBVXlELG9CQUFvQixJQUFJLENBQUNKLE9BQU8sQ0FBQ3BELE9BQU8sR0FBR2phLEVBQUVrUCxhQUFhLEVBQUVsUCxHQUFHLElBQUksQ0FBQ25ELE9BQU87b0JBQzlHbUQsRUFBRWdNLGdCQUFnQixDQUFDdE4sRUFBRSxDQUFDLEtBQUssU0FBVUssS0FBSyxFQUFFO3dCQUMxQyxJQUFLLElBQUl6QixPQUFPM0IsVUFBVUMsTUFBTSxFQUFFVSxPQUFPLElBQUlpQixNQUFNRCxPQUFPLElBQUlBLE9BQU8sSUFBSSxDQUFDLEdBQUdFLE9BQU8sR0FBR0EsT0FBT0YsTUFBTUUsT0FBUTs0QkFDMUdsQixJQUFJLENBQUNrQixPQUFPLEVBQUUsR0FBRzdCLFNBQVMsQ0FBQzZCLEtBQUs7d0JBQ2xDO3dCQUVBd0wsT0FBTzlKLElBQUksQ0FBQzNELEtBQUssQ0FBQ3lOLFFBQVE7NEJBQUNqSzt5QkFBTSxDQUFDWixNQUFNLENBQUM3QjtvQkFDM0M7b0JBRUEsSUFBSSxJQUFJLENBQUMrZ0IsT0FBTyxDQUFDUSxnQkFBZ0IsRUFBRTt3QkFDakM3ZCxFQUFFNmQsZ0JBQWdCLEdBQUdKLG9CQUFvQixJQUFJLENBQUNKLE9BQU8sQ0FBQ1EsZ0JBQWdCO3dCQUN0RTdkLEVBQUU2ZCxnQkFBZ0IsQ0FBQzlnQixJQUFJLENBQUNpRCxHQUFHLElBQUksQ0FBQ25ELE9BQU8sQ0FBQ2loQixTQUFTLEVBQUUsSUFBSSxDQUFDamhCLE9BQU87b0JBQ2pFLENBQUM7b0JBRUQsSUFBSSxJQUFJLENBQUN3Z0IsT0FBTyxDQUFDclQsVUFBVSxFQUFFO3dCQUMzQmhLLEVBQUVnSyxVQUFVLEdBQUd5VCxvQkFBb0IsSUFBSSxDQUFDSixPQUFPLENBQUNyVCxVQUFVO3dCQUMxRCxJQUFJaEssRUFBRWdLLFVBQVUsQ0FBQ2pOLElBQUksRUFBRWlELEVBQUVnSyxVQUFVLENBQUNqTixJQUFJLENBQUMsSUFBSTtvQkFDL0MsQ0FBQztvQkFFRCxJQUFJLENBQUNzSyxVQUFVLEdBQUcsSUFBSVEsV0FBVyxJQUFJLENBQUNDLFFBQVEsRUFBRSxJQUFJLENBQUNqTCxPQUFPO29CQUM1RCxJQUFJLENBQUN3SyxVQUFVLENBQUMzSSxFQUFFLENBQUMsS0FBSyxTQUFVSyxLQUFLLEVBQUU7d0JBQ3ZDLElBQUssSUFBSXJCLFFBQVEvQixVQUFVQyxNQUFNLEVBQUVVLE9BQU8sSUFBSWlCLE1BQU1HLFFBQVEsSUFBSUEsUUFBUSxJQUFJLENBQUMsR0FBR0MsUUFBUSxHQUFHQSxRQUFRRCxPQUFPQyxRQUFTOzRCQUNqSHJCLElBQUksQ0FBQ3FCLFFBQVEsRUFBRSxHQUFHaEMsU0FBUyxDQUFDZ0MsTUFBTTt3QkFDcEM7d0JBRUFxTCxPQUFPOUosSUFBSSxDQUFDM0QsS0FBSyxDQUFDeU4sUUFBUTs0QkFBQ2pLO3lCQUFNLENBQUNaLE1BQU0sQ0FBQzdCO29CQUMzQztvQkFDQSxJQUFJLENBQUMrZ0IsT0FBTyxDQUFDQyxRQUFRLENBQUN4aEIsT0FBTyxDQUFDLFNBQVVvRSxDQUFDLEVBQUU7d0JBQ3pDLElBQUlBLEVBQUVuRCxJQUFJLEVBQUVtRCxFQUFFbkQsSUFBSSxDQUFDaU07b0JBQ3JCO2dCQUNGLENBQUM7Z0JBRUQsSUFBSSxDQUFDNkssTUFBTSxHQUFHLElBQUksQ0FBQ2hYLE9BQU8sQ0FBQ3FMLGFBQWEsQ0FBQzJMLE1BQU07Z0JBQy9DLElBQUksQ0FBQytHLFVBQVVBLFdBQVdpQztnQkFFMUIsSUFBSSxJQUFJLENBQUNoZ0IsT0FBTyxDQUFDNE8sV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDM0QsUUFBUSxDQUFDK1YsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUNoaEIsT0FBTyxDQUFDK0ksR0FBRyxFQUFFO29CQUNwRixJQUFJdUksUUFBUSxJQUFJLENBQUNyRyxRQUFRLENBQUN5RCxhQUFhLENBQUNDLGdCQUFnQixDQUFDLElBQUksQ0FBQzNPLE9BQU8sQ0FBQzRPLFdBQVc7b0JBQ2pGLElBQUkwQyxNQUFNdlMsTUFBTSxHQUFHLEtBQUt1UyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDdFIsT0FBTyxDQUFDK0ksR0FBRyxHQUFHdUksS0FBSyxDQUFDLEVBQUU7Z0JBQ3pFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQ3JHLFFBQVEsQ0FBQytWLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDaGhCLE9BQU8sQ0FBQytJLEdBQUcsRUFBRTtvQkFDeEQsSUFBSSxDQUFDMUksTUFBTSxDQUFDVixJQUFJLENBQUM7Z0JBQ25CLENBQUM7Z0JBRUQsSUFBSXVoQixXQUFXO29CQUFDO29CQUFlO29CQUFxQjtvQkFBcUI7aUJBQW9CO2dCQUM3RkEsU0FBU2ppQixPQUFPLENBQUMsU0FBVTBmLE1BQU0sRUFBRTtvQkFDakN4UyxNQUFNLENBQUN3UyxPQUFPLEdBQUcsV0FBWTt3QkFDM0IsSUFBSXdDO3dCQUVKLE9BQU8sQ0FBQ0EsZUFBZWhWLE9BQU9rUixLQUFLLENBQUMsQ0FBQ3NCLE9BQU8sQ0FBQ2pnQixLQUFLLENBQUN5aUIsY0FBY3JpQjtvQkFDbkU7Z0JBQ0Y7Z0JBQ0EsSUFBSXNpQixrQkFBa0I7b0JBQUM7b0JBQWU7b0JBQWdCO29CQUFxQjtpQkFBdUI7Z0JBQ2xHQSxnQkFBZ0JuaUIsT0FBTyxDQUFDLFNBQVUwZixNQUFNLEVBQUU7b0JBQ3hDeFMsTUFBTSxDQUFDd1MsT0FBTyxHQUFHLFdBQVk7d0JBQzNCLElBQUkwQzt3QkFFSEEsQ0FBQUEsZ0JBQWdCbFYsT0FBT2tSLEtBQUssQ0FBQyxDQUFDc0IsT0FBTyxDQUFDamdCLEtBQUssQ0FBQzJpQixlQUFldmlCO3dCQUU1RCxPQUFPcU47b0JBQ1Q7Z0JBQ0Y7Z0JBQ0EsSUFBSW1WLFdBQVc3ZTtnQkFFZixJQUFJNFEsT0FBTyxTQUFTQSxPQUFPO29CQUN6QixJQUFJa08sU0FBUyxTQUFTQSxPQUFPaEQsR0FBRyxFQUFFbmIsQ0FBQyxFQUFFO3dCQUNuQyxJQUFJK0ksT0FBT3VVLGFBQWEsSUFBSSxDQUFDdlUsT0FBT3FWLG9CQUFvQixFQUFFclYsT0FBTzlMLE1BQU0sQ0FBQ1YsSUFBSSxDQUFDO3dCQUM3RXdNLE9BQU91VSxhQUFhLEdBQUcsSUFBSTt3QkFDM0IsSUFBSSxDQUFDdlUsT0FBT25NLE9BQU8sQ0FBQzJnQixPQUFPLEVBQUV4VSxPQUFPOUwsTUFBTSxDQUFDYixHQUFHLENBQUMsZUFBZTJNLE9BQU9uTSxPQUFPO3dCQUU1RW1NLE9BQU85SixJQUFJLENBQUMsZUFBZThKLE9BQU9uTSxPQUFPO3dCQUV6Q3NoQixTQUFTeGUsT0FBTyxDQUFDTTt3QkFDakIyYSxTQUFTUSxLQUFLbmI7b0JBQ2hCO29CQUVBLElBQUkrSSxPQUFPMlIsU0FBUyxJQUFJM1IsT0FBT25NLE9BQU8sQ0FBQzJKLGdCQUFnQixLQUFLLFFBQVEsQ0FBQ3dDLE9BQU91VSxhQUFhLEVBQUUsT0FBT2EsT0FBTyxJQUFJLEVBQUVwVixPQUFPL0ksQ0FBQyxDQUFDa2QsSUFBSSxDQUFDblU7b0JBRTdIQSxPQUFPakIsY0FBYyxDQUFDaUIsT0FBT25NLE9BQU8sQ0FBQytJLEdBQUcsRUFBRXdZO2dCQUM1QztnQkFFQSxJQUFJLElBQUksQ0FBQ3ZoQixPQUFPLENBQUNtSixTQUFTLElBQUksQ0FBQyxJQUFJLENBQUNuSixPQUFPLENBQUNzZixhQUFhLEVBQUU7b0JBQ3pEak07Z0JBQ0YsT0FBTztvQkFDTDBMLFdBQVcxTCxNQUFNO2dCQUNuQixDQUFDO2dCQUVELE9BQU9pTztZQUNUO1FBQ0Y7UUFBRztZQUNEcGlCLEtBQUs7WUFDTGlCLE9BQU8sU0FBU3NoQixjQUFjdFcsUUFBUSxFQUFFO2dCQUN0QyxJQUFJdUUsU0FBUyxJQUFJO2dCQUVqQixJQUFJcU8sV0FBV2pmLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUdraEIsSUFBSTtnQkFDdkYsSUFBSTBCLGVBQWUzRDtnQkFDbkIsSUFBSWxPLFVBQVUsT0FBTzFFLGFBQWEsV0FBV0EsV0FBVyxJQUFJLENBQUNBLFFBQVE7Z0JBQ3JFLElBQUksT0FBT0EsYUFBYSxZQUFZdVcsZUFBZXZXO2dCQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDbkwsT0FBTyxDQUFDbUosU0FBUyxJQUFJLElBQUksQ0FBQ25KLE9BQU8sQ0FBQ3dmLHVCQUF1QixFQUFFO29CQUNuRSxJQUFJM1AsV0FBV0EsUUFBUW5ELFdBQVcsT0FBTyxVQUFVLE9BQU9nVjtvQkFDMUQsSUFBSTFELFNBQVMsRUFBRTtvQkFFZixJQUFJMkQsU0FBUyxTQUFTQSxPQUFPNVksR0FBRyxFQUFFO3dCQUNoQyxJQUFJLENBQUNBLEtBQUs7d0JBRVYsSUFBSXlGLE9BQU9rQixPQUFPekUsUUFBUSxDQUFDeUQsYUFBYSxDQUFDSSxrQkFBa0IsQ0FBQy9GO3dCQUU1RHlGLEtBQUt2UCxPQUFPLENBQUMsU0FBVW1ELENBQUMsRUFBRTs0QkFDeEIsSUFBSTRiLE9BQU90YSxPQUFPLENBQUN0QixLQUFLLEdBQUc0YixPQUFPdmYsSUFBSSxDQUFDMkQ7d0JBQ3pDO29CQUNGO29CQUVBLElBQUksQ0FBQ3lOLFNBQVM7d0JBQ1osSUFBSThELFlBQVksSUFBSSxDQUFDMUksUUFBUSxDQUFDeUQsYUFBYSxDQUFDQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMzTyxPQUFPLENBQUM0TyxXQUFXO3dCQUNyRitFLFVBQVUxVSxPQUFPLENBQUMsU0FBVW1ELENBQUMsRUFBRTs0QkFDN0IsT0FBT3VmLE9BQU92Zjt3QkFDaEI7b0JBQ0YsT0FBTzt3QkFDTHVmLE9BQU85UjtvQkFDVCxDQUFDO29CQUVELElBQUksSUFBSSxDQUFDN1AsT0FBTyxDQUFDdWYsT0FBTyxFQUFFO3dCQUN4QixJQUFJLENBQUN2ZixPQUFPLENBQUN1ZixPQUFPLENBQUN0Z0IsT0FBTyxDQUFDLFNBQVVtRCxDQUFDLEVBQUU7NEJBQ3hDLE9BQU91ZixPQUFPdmY7d0JBQ2hCO29CQUNGLENBQUM7b0JBRUQsSUFBSSxDQUFDNkksUUFBUSxDQUFDa0UsZ0JBQWdCLENBQUNrRSxJQUFJLENBQUMySyxRQUFRLElBQUksQ0FBQ2hlLE9BQU8sQ0FBQ3VJLEVBQUUsRUFBRSxTQUFVYixDQUFDLEVBQUU7d0JBQ3hFLElBQUksQ0FBQ0EsS0FBSyxDQUFDZ0ksT0FBT2tTLGdCQUFnQixJQUFJbFMsT0FBT3ZFLFFBQVEsRUFBRXVFLE9BQU9tUyxtQkFBbUIsQ0FBQ25TLE9BQU92RSxRQUFRO3dCQUNqR3VXLGFBQWFoYTtvQkFDZjtnQkFDRixPQUFPO29CQUNMZ2EsYUFBYSxJQUFJO2dCQUNuQixDQUFDO1lBQ0g7UUFDRjtRQUFHO1lBQ0R4aUIsS0FBSztZQUNMaUIsT0FBTyxTQUFTMmhCLGdCQUFnQnRULElBQUksRUFBRWpHLEVBQUUsRUFBRXdWLFFBQVEsRUFBRTtnQkFDbEQsSUFBSXVELFdBQVc3ZTtnQkFDZixJQUFJLENBQUMrTCxNQUFNQSxPQUFPLElBQUksQ0FBQ3NQLFNBQVM7Z0JBQ2hDLElBQUksQ0FBQ3ZWLElBQUlBLEtBQUssSUFBSSxDQUFDdkksT0FBTyxDQUFDdUksRUFBRTtnQkFDN0IsSUFBSSxDQUFDd1YsVUFBVUEsV0FBV2lDO2dCQUMxQixJQUFJLENBQUMvVSxRQUFRLENBQUNrRSxnQkFBZ0IsQ0FBQ2lQLE1BQU0sQ0FBQzVQLE1BQU1qRyxJQUFJLFNBQVVnVyxHQUFHLEVBQUU7b0JBQzdEK0MsU0FBU3hlLE9BQU87b0JBQ2hCaWIsU0FBU1E7Z0JBQ1g7Z0JBQ0EsT0FBTytDO1lBQ1Q7UUFDRjtRQUFHO1lBQ0RwaUIsS0FBSztZQUNMaUIsT0FBTyxTQUFTNGhCLElBQUkxWCxNQUFNLEVBQUU7Z0JBQzFCLElBQUksQ0FBQ0EsUUFBUSxNQUFNLElBQUkyWCxNQUFNLGlHQUFpRztnQkFDOUgsSUFBSSxDQUFDM1gsT0FBTzlLLElBQUksRUFBRSxNQUFNLElBQUl5aUIsTUFBTSw0RkFBNEY7Z0JBRTlILElBQUkzWCxPQUFPOUssSUFBSSxLQUFLLFdBQVc7b0JBQzdCLElBQUksQ0FBQ2loQixPQUFPLENBQUNwRCxPQUFPLEdBQUcvUztnQkFDekIsQ0FBQztnQkFFRCxJQUFJQSxPQUFPOUssSUFBSSxLQUFLLFlBQVk4SyxPQUFPN0ssR0FBRyxJQUFJNkssT0FBTzFLLElBQUksSUFBSTBLLE9BQU96SyxLQUFLLEVBQUU7b0JBQ3pFLElBQUksQ0FBQzRnQixPQUFPLENBQUNuZ0IsTUFBTSxHQUFHZ0s7Z0JBQ3hCLENBQUM7Z0JBRUQsSUFBSUEsT0FBTzlLLElBQUksS0FBSyxvQkFBb0I7b0JBQ3RDLElBQUksQ0FBQ2loQixPQUFPLENBQUNRLGdCQUFnQixHQUFHM1c7Z0JBQ2xDLENBQUM7Z0JBRUQsSUFBSUEsT0FBTzlLLElBQUksS0FBSyxjQUFjO29CQUNoQyxJQUFJLENBQUNpaEIsT0FBTyxDQUFDclQsVUFBVSxHQUFHOUM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSUEsT0FBTzlLLElBQUksS0FBSyxpQkFBaUI7b0JBQ25DMkssY0FBY0UsZ0JBQWdCLENBQUNDO2dCQUNqQyxDQUFDO2dCQUVELElBQUlBLE9BQU85SyxJQUFJLEtBQUssYUFBYTtvQkFDL0IsSUFBSSxDQUFDaWhCLE9BQU8sQ0FBQ2pGLFNBQVMsR0FBR2xSO2dCQUMzQixDQUFDO2dCQUVELElBQUlBLE9BQU85SyxJQUFJLEtBQUssWUFBWTtvQkFDOUIsSUFBSSxDQUFDaWhCLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDaGlCLElBQUksQ0FBQzRMO2dCQUM3QixDQUFDO2dCQUVELE9BQU8sSUFBSTtZQUNiO1FBQ0Y7UUFBRztZQUNEbkwsS0FBSztZQUNMaUIsT0FBTyxTQUFTMGhCLG9CQUFvQnpmLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDQSxLQUFLLENBQUMsSUFBSSxDQUFDMGIsU0FBUyxFQUFFO2dCQUMzQixJQUFJO29CQUFDO29CQUFVO2lCQUFNLENBQUNwYSxPQUFPLENBQUN0QixLQUFLLENBQUMsR0FBRztnQkFFdkMsSUFBSyxJQUFJNmYsS0FBSyxHQUFHQSxLQUFLLElBQUksQ0FBQ25FLFNBQVMsQ0FBQy9lLE1BQU0sRUFBRWtqQixLQUFNO29CQUNqRCxJQUFJQyxZQUFZLElBQUksQ0FBQ3BFLFNBQVMsQ0FBQ21FLEdBQUc7b0JBQ2xDLElBQUk7d0JBQUM7d0JBQVU7cUJBQU0sQ0FBQ3ZlLE9BQU8sQ0FBQ3dlLGFBQWEsQ0FBQyxHQUFHLFFBQVM7b0JBRXhELElBQUksSUFBSSxDQUFDN0UsS0FBSyxDQUFDeFQsMkJBQTJCLENBQUNxWSxZQUFZO3dCQUNyRCxJQUFJLENBQUNOLGdCQUFnQixHQUFHTTt3QkFDeEIsS0FBTTtvQkFDUixDQUFDO2dCQUNIO1lBQ0Y7UUFDRjtRQUFHO1lBQ0RoakIsS0FBSztZQUNMaUIsT0FBTyxTQUFTK0ssZUFBZW5DLEdBQUcsRUFBRWdWLFFBQVEsRUFBRTtnQkFDNUMsSUFBSWpOLFNBQVMsSUFBSTtnQkFFakIsSUFBSSxDQUFDcVIsb0JBQW9CLEdBQUdwWjtnQkFDNUIsSUFBSXVZLFdBQVc3ZTtnQkFDZixJQUFJLENBQUNKLElBQUksQ0FBQyxvQkFBb0IwRztnQkFFOUIsSUFBSXFaLGNBQWMsU0FBU0EsWUFBWWhnQixDQUFDLEVBQUU7b0JBQ3hDME8sT0FBTzNGLFFBQVEsR0FBRy9JO29CQUNsQjBPLE9BQU9nTixTQUFTLEdBQUdoTixPQUFPN0YsUUFBUSxDQUFDeUQsYUFBYSxDQUFDSSxrQkFBa0IsQ0FBQzFNO29CQUNwRTBPLE9BQU84USxnQkFBZ0IsR0FBRzNoQjtvQkFFMUI2USxPQUFPK1EsbUJBQW1CLENBQUN6ZjtnQkFDN0I7Z0JBRUEsSUFBSW9jLE9BQU8sU0FBU0EsS0FBS0QsR0FBRyxFQUFFbmMsQ0FBQyxFQUFFO29CQUMvQixJQUFJQSxHQUFHO3dCQUNMZ2dCLFlBQVloZ0I7d0JBRVowTyxPQUFPdEcsVUFBVSxDQUFDVSxjQUFjLENBQUM5STt3QkFFakMwTyxPQUFPcVIsb0JBQW9CLEdBQUdsaUI7d0JBRTlCNlEsT0FBT3pPLElBQUksQ0FBQyxtQkFBbUJEO3dCQUUvQjBPLE9BQU96USxNQUFNLENBQUNiLEdBQUcsQ0FBQyxtQkFBbUI0QztvQkFDdkMsT0FBTzt3QkFDTDBPLE9BQU9xUixvQkFBb0IsR0FBR2xpQjtvQkFDaEMsQ0FBQztvQkFFRHFoQixTQUFTeGUsT0FBTyxDQUFDLFdBQVk7d0JBQzNCLE9BQU9nTyxPQUFPMU4sQ0FBQyxDQUFDMUUsS0FBSyxDQUFDb1MsUUFBUWhTO29CQUNoQztvQkFDQSxJQUFJaWYsVUFBVUEsU0FBU1EsS0FBSyxXQUFZO3dCQUN0QyxPQUFPek4sT0FBTzFOLENBQUMsQ0FBQzFFLEtBQUssQ0FBQ29TLFFBQVFoUztvQkFDaEM7Z0JBQ0Y7Z0JBRUEsSUFBSXVqQixTQUFTLFNBQVNBLE9BQU83VCxJQUFJLEVBQUU7b0JBQ2pDLElBQUksQ0FBQ3pGLE9BQU8sQ0FBQ3lGLFFBQVFzQyxPQUFPN0YsUUFBUSxDQUFDK1YsZ0JBQWdCLEVBQUV4UyxPQUFPLEVBQUU7b0JBQ2hFLElBQUlwTSxJQUFJLE9BQU9vTSxTQUFTLFdBQVdBLE9BQU9zQyxPQUFPN0YsUUFBUSxDQUFDeUQsYUFBYSxDQUFDNkUscUJBQXFCLENBQUMvRSxLQUFLO29CQUVuRyxJQUFJcE0sR0FBRzt3QkFDTCxJQUFJLENBQUMwTyxPQUFPM0YsUUFBUSxFQUFFOzRCQUNwQmlYLFlBQVloZ0I7d0JBQ2QsQ0FBQzt3QkFFRCxJQUFJLENBQUMwTyxPQUFPdEcsVUFBVSxDQUFDVyxRQUFRLEVBQUUyRixPQUFPdEcsVUFBVSxDQUFDVSxjQUFjLENBQUM5STt3QkFDbEUsSUFBSTBPLE9BQU83RixRQUFRLENBQUMrVixnQkFBZ0IsRUFBRWxRLE9BQU83RixRQUFRLENBQUMrVixnQkFBZ0IsQ0FBQ3NCLGlCQUFpQixDQUFDbGdCO29CQUMzRixDQUFDO29CQUVEME8sT0FBTzJRLGFBQWEsQ0FBQ3JmLEdBQUcsU0FBVW1jLEdBQUcsRUFBRTt3QkFDckNDLEtBQUtELEtBQUtuYztvQkFDWjtnQkFDRjtnQkFFQSxJQUFJLENBQUMyRyxPQUFPLElBQUksQ0FBQ2tDLFFBQVEsQ0FBQytWLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDL1YsUUFBUSxDQUFDK1YsZ0JBQWdCLENBQUN1QixLQUFLLEVBQUU7b0JBQ25GRixPQUFPLElBQUksQ0FBQ3BYLFFBQVEsQ0FBQytWLGdCQUFnQixDQUFDd0IsTUFBTTtnQkFDOUMsT0FBTyxJQUFJLENBQUN6WixPQUFPLElBQUksQ0FBQ2tDLFFBQVEsQ0FBQytWLGdCQUFnQixJQUFJLElBQUksQ0FBQy9WLFFBQVEsQ0FBQytWLGdCQUFnQixDQUFDdUIsS0FBSyxFQUFFO29CQUN6RixJQUFJLENBQUN0WCxRQUFRLENBQUMrVixnQkFBZ0IsQ0FBQ3dCLE1BQU0sQ0FBQ0g7Z0JBQ3hDLE9BQU87b0JBQ0xBLE9BQU90WjtnQkFDVCxDQUFDO2dCQUVELE9BQU91WTtZQUNUO1FBQ0Y7UUFBRztZQUNEcGlCLEtBQUs7WUFDTGlCLE9BQU8sU0FBU3NpQixVQUFVMVosR0FBRyxFQUFFUixFQUFFLEVBQUVtYSxTQUFTLEVBQUU7Z0JBQzVDLElBQUl4RCxTQUFTLElBQUk7Z0JBRWpCLElBQUl5RCxTQUFTLFNBQVNBLE9BQU96akIsR0FBRyxFQUFFeWIsSUFBSSxFQUFFO29CQUN0QyxJQUFJM2E7b0JBRUosSUFBSTNDLDZFQUFPQSxDQUFDc2QsVUFBVSxVQUFVO3dCQUM5QixJQUFLLElBQUk1WixRQUFRakMsVUFBVUMsTUFBTSxFQUFFZ2MsT0FBTyxJQUFJcmEsTUFBTUssUUFBUSxJQUFJQSxRQUFRLElBQUksQ0FBQyxHQUFHQyxRQUFRLEdBQUdBLFFBQVFELE9BQU9DLFFBQVM7NEJBQ2pIK1osSUFBSSxDQUFDL1osUUFBUSxFQUFFLEdBQUdsQyxTQUFTLENBQUNrQyxNQUFNO3dCQUNwQzt3QkFFQWhCLFVBQVVrZixPQUFPbGYsT0FBTyxDQUFDb00sZ0NBQWdDLENBQUM7NEJBQUNsTjs0QkFBS3liO3lCQUFLLENBQUNyWixNQUFNLENBQUN5WjtvQkFDL0UsT0FBTzt3QkFDTC9hLFVBQVU2ZixnQkFBZ0IsQ0FBQyxHQUFHbEY7b0JBQ2hDLENBQUM7b0JBRUQzYSxRQUFRK0ksR0FBRyxHQUFHL0ksUUFBUStJLEdBQUcsSUFBSTRaLE9BQU81WixHQUFHO29CQUN2Qy9JLFFBQVF3TyxJQUFJLEdBQUd4TyxRQUFRd08sSUFBSSxJQUFJbVUsT0FBT25VLElBQUk7b0JBQzFDeE8sUUFBUXVJLEVBQUUsR0FBR3ZJLFFBQVF1SSxFQUFFLElBQUlvYSxPQUFPcGEsRUFBRTtvQkFDcEN2SSxRQUFRMGlCLFNBQVMsR0FBRzFpQixRQUFRMGlCLFNBQVMsSUFBSUEsYUFBYUMsT0FBT0QsU0FBUztvQkFDdEUsSUFBSTVjLGVBQWVvWixPQUFPbGYsT0FBTyxDQUFDOEYsWUFBWSxJQUFJO29CQUNsRCxJQUFJOGMsWUFBWTVpQixRQUFRMGlCLFNBQVMsR0FBRyxHQUFHcGhCLE1BQU0sQ0FBQ3RCLFFBQVEwaUIsU0FBUyxFQUFFcGhCLE1BQU0sQ0FBQ3dFLGNBQWN4RSxNQUFNLENBQUNwQyxPQUFPQSxHQUFHO29CQUN2RyxPQUFPZ2dCLE9BQU85YixDQUFDLENBQUN3ZixXQUFXNWlCO2dCQUM3QjtnQkFFQSxJQUFJLE9BQU8rSSxRQUFRLFVBQVU7b0JBQzNCNFosT0FBTzVaLEdBQUcsR0FBR0E7Z0JBQ2YsT0FBTztvQkFDTDRaLE9BQU9uVSxJQUFJLEdBQUd6RjtnQkFDaEIsQ0FBQztnQkFFRDRaLE9BQU9wYSxFQUFFLEdBQUdBO2dCQUNab2EsT0FBT0QsU0FBUyxHQUFHQTtnQkFDbkIsT0FBT0M7WUFDVDtRQUNGO1FBQUc7WUFDRHpqQixLQUFLO1lBQ0xpQixPQUFPLFNBQVNpRCxJQUFJO2dCQUNsQixJQUFJeWY7Z0JBRUosT0FBTyxJQUFJLENBQUNyWSxVQUFVLElBQUksQ0FBQ3FZLG1CQUFtQixJQUFJLENBQUNyWSxVQUFVLEVBQUV5QixTQUFTLENBQUN2TixLQUFLLENBQUNta0Isa0JBQWtCL2pCO1lBQ25HO1FBQ0Y7UUFBRztZQUNESSxLQUFLO1lBQ0xpQixPQUFPLFNBQVNpTCxTQUFTO2dCQUN2QixJQUFJMFg7Z0JBRUosT0FBTyxJQUFJLENBQUN0WSxVQUFVLElBQUksQ0FBQ3NZLG9CQUFvQixJQUFJLENBQUN0WSxVQUFVLEVBQUVZLE1BQU0sQ0FBQzFNLEtBQUssQ0FBQ29rQixtQkFBbUJoa0I7WUFDbEc7UUFDRjtRQUFHO1lBQ0RJLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzRpQixvQkFBb0J4YSxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQ3ZJLE9BQU8sQ0FBQ3dJLFNBQVMsR0FBR0Q7WUFDM0I7UUFDRjtRQUFHO1lBQ0RySixLQUFLO1lBQ0xpQixPQUFPLFNBQVNxUixtQkFBbUJqSixFQUFFLEVBQUU7Z0JBQ3JDLElBQUl5YSxTQUFTLElBQUk7Z0JBRWpCLElBQUloakIsVUFBVWxCLFVBQVVDLE1BQU0sR0FBRyxLQUFLRCxTQUFTLENBQUMsRUFBRSxLQUFLbUIsWUFBWW5CLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUVwRixJQUFJLENBQUMsSUFBSSxDQUFDNGhCLGFBQWEsRUFBRTtvQkFDdkIsSUFBSSxDQUFDcmdCLE1BQU0sQ0FBQ1YsSUFBSSxDQUFDLG1EQUFtRCxJQUFJLENBQUNtZSxTQUFTO29CQUNsRixPQUFPLEtBQUs7Z0JBQ2QsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDQSxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQy9lLE1BQU0sRUFBRTtvQkFDN0MsSUFBSSxDQUFDc0IsTUFBTSxDQUFDVixJQUFJLENBQUMsOERBQThELElBQUksQ0FBQ21lLFNBQVM7b0JBQzdGLE9BQU8sS0FBSztnQkFDZCxDQUFDO2dCQUVELElBQUkvVSxNQUFNLElBQUksQ0FBQzZZLGdCQUFnQixJQUFJLElBQUksQ0FBQzlELFNBQVMsQ0FBQyxFQUFFO2dCQUNwRCxJQUFJbFAsY0FBYyxJQUFJLENBQUM1TyxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUM0TyxXQUFXLEdBQUcsS0FBSztnQkFDakUsSUFBSXFVLFVBQVUsSUFBSSxDQUFDbkYsU0FBUyxDQUFDLElBQUksQ0FBQ0EsU0FBUyxDQUFDL2UsTUFBTSxHQUFHLEVBQUU7Z0JBQ3ZELElBQUlnSyxJQUFJMkQsV0FBVyxPQUFPLFVBQVUsT0FBTyxJQUFJO2dCQUUvQyxJQUFJd1csaUJBQWlCLFNBQVNBLGVBQWU5Z0IsQ0FBQyxFQUFFMEgsQ0FBQyxFQUFFO29CQUNqRCxJQUFJcVosWUFBWUgsT0FBTy9YLFFBQVEsQ0FBQ2tFLGdCQUFnQixDQUFDd08sS0FBSyxDQUFDLEdBQUdyYyxNQUFNLENBQUNjLEdBQUcsS0FBS2QsTUFBTSxDQUFDd0ksR0FBRztvQkFFbkYsT0FBT3FaLGNBQWMsQ0FBQyxLQUFLQSxjQUFjO2dCQUMzQztnQkFFQSxJQUFJbmpCLFFBQVFvakIsUUFBUSxFQUFFO29CQUNwQixJQUFJQyxZQUFZcmpCLFFBQVFvakIsUUFBUSxDQUFDLElBQUksRUFBRUY7b0JBQ3ZDLElBQUlHLGNBQWNwakIsV0FBVyxPQUFPb2pCO2dCQUN0QyxDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDNVosaUJBQWlCLENBQUNWLEtBQUtSLEtBQUssT0FBTyxJQUFJO2dCQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDMEMsUUFBUSxDQUFDa0UsZ0JBQWdCLENBQUNpTyxPQUFPLElBQUksSUFBSSxDQUFDcGQsT0FBTyxDQUFDbUosU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDbkosT0FBTyxDQUFDd2YsdUJBQXVCLEVBQUUsT0FBTyxJQUFJO2dCQUMzSCxJQUFJMEQsZUFBZW5hLEtBQUtSLE9BQVEsRUFBQ3FHLGVBQWVzVSxlQUFlRCxTQUFTMWEsR0FBRSxHQUFJLE9BQU8sSUFBSTtnQkFDekYsT0FBTyxLQUFLO1lBQ2Q7UUFDRjtRQUFHO1lBQ0RySixLQUFLO1lBQ0xpQixPQUFPLFNBQVNtakIsZUFBZS9hLEVBQUUsRUFBRXdWLFFBQVEsRUFBRTtnQkFDM0MsSUFBSXdGLFNBQVMsSUFBSTtnQkFFakIsSUFBSWpDLFdBQVc3ZTtnQkFFZixJQUFJLENBQUMsSUFBSSxDQUFDekMsT0FBTyxDQUFDdUksRUFBRSxFQUFFO29CQUNwQndWLFlBQVlBO29CQUNaLE9BQU9sYixRQUFRQyxPQUFPO2dCQUN4QixDQUFDO2dCQUVELElBQUksT0FBT3lGLE9BQU8sVUFBVUEsS0FBSztvQkFBQ0E7aUJBQUc7Z0JBQ3JDQSxHQUFHdEosT0FBTyxDQUFDLFNBQVU2SyxDQUFDLEVBQUU7b0JBQ3RCLElBQUl5WixPQUFPdmpCLE9BQU8sQ0FBQ3VJLEVBQUUsQ0FBQzdFLE9BQU8sQ0FBQ29HLEtBQUssR0FBR3laLE9BQU92akIsT0FBTyxDQUFDdUksRUFBRSxDQUFDOUosSUFBSSxDQUFDcUw7Z0JBQy9EO2dCQUNBLElBQUksQ0FBQzJYLGFBQWEsQ0FBQyxTQUFVbEQsR0FBRyxFQUFFO29CQUNoQytDLFNBQVN4ZSxPQUFPO29CQUNoQixJQUFJaWIsVUFBVUEsU0FBU1E7Z0JBQ3pCO2dCQUNBLE9BQU8rQztZQUNUO1FBQ0Y7UUFBRztZQUNEcGlCLEtBQUs7WUFDTGlCLE9BQU8sU0FBU3FqQixjQUFjaFYsSUFBSSxFQUFFdVAsUUFBUSxFQUFFO2dCQUM1QyxJQUFJdUQsV0FBVzdlO2dCQUNmLElBQUksT0FBTytMLFNBQVMsVUFBVUEsT0FBTztvQkFBQ0E7aUJBQUs7Z0JBQzNDLElBQUlpVixZQUFZLElBQUksQ0FBQ3pqQixPQUFPLENBQUN1ZixPQUFPLElBQUksRUFBRTtnQkFDMUMsSUFBSW1FLFVBQVVsVixLQUFLblEsTUFBTSxDQUFDLFNBQVUwSyxHQUFHLEVBQUU7b0JBQ3ZDLE9BQU8wYSxVQUFVL2YsT0FBTyxDQUFDcUYsT0FBTztnQkFDbEM7Z0JBRUEsSUFBSSxDQUFDMmEsUUFBUTNrQixNQUFNLEVBQUU7b0JBQ25CLElBQUlnZixVQUFVQTtvQkFDZCxPQUFPbGIsUUFBUUMsT0FBTztnQkFDeEIsQ0FBQztnQkFFRCxJQUFJLENBQUM5QyxPQUFPLENBQUN1ZixPQUFPLEdBQUdrRSxVQUFVbmlCLE1BQU0sQ0FBQ29pQjtnQkFDeEMsSUFBSSxDQUFDakMsYUFBYSxDQUFDLFNBQVVsRCxHQUFHLEVBQUU7b0JBQ2hDK0MsU0FBU3hlLE9BQU87b0JBQ2hCLElBQUlpYixVQUFVQSxTQUFTUTtnQkFDekI7Z0JBQ0EsT0FBTytDO1lBQ1Q7UUFDRjtRQUFHO1lBQ0RwaUIsS0FBSztZQUNMaUIsT0FBTyxTQUFTd2pCLElBQUk1YSxHQUFHLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQ0EsS0FBS0EsTUFBTSxJQUFJLENBQUM2WSxnQkFBZ0IsSUFBSyxLQUFJLENBQUM5RCxTQUFTLElBQUksSUFBSSxDQUFDQSxTQUFTLENBQUMvZSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMrZSxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQzNTLFFBQVE7Z0JBQ3pILElBQUksQ0FBQ3BDLEtBQUssT0FBTztnQkFDakIsSUFBSTZhLFVBQVU7b0JBQUM7b0JBQU07b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU07b0JBQU07b0JBQU07b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU07b0JBQU07b0JBQU87b0JBQU87b0JBQU87b0JBQU07b0JBQU07b0JBQU87b0JBQU87b0JBQU87b0JBQU07b0JBQU87b0JBQU87b0JBQU87b0JBQU87b0JBQU07b0JBQU87aUJBQU07Z0JBQ3RiLE9BQU9BLFFBQVFsZ0IsT0FBTyxDQUFDLElBQUksQ0FBQ3VILFFBQVEsQ0FBQ3lELGFBQWEsQ0FBQ3FFLHVCQUF1QixDQUFDaEssUUFBUSxDQUFDLEtBQUtBLElBQUkyRCxXQUFXLEdBQUdoSixPQUFPLENBQUMsV0FBVyxJQUFJLFFBQVEsS0FBSztZQUNqSjtRQUNGO1FBQUc7WUFDRHhFLEtBQUs7WUFDTGlCLE9BQU8sU0FBUzBqQixnQkFBZ0I7Z0JBQzlCLElBQUlDLFNBQVMsSUFBSTtnQkFFakIsSUFBSTlqQixVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLElBQUlpZixXQUFXamYsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBR2toQixJQUFJO2dCQUV2RixJQUFJK0QsZ0JBQWdCbEUsZ0JBQWdCQSxnQkFBZ0JBLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDN2YsT0FBTyxHQUFHQSxVQUFVO29CQUMvRjJnQixTQUFTLElBQUk7Z0JBQ2Y7Z0JBRUEsSUFBSWxmLFFBQVEsSUFBSThlLEtBQUt3RDtnQkFFckIsSUFBSS9qQixRQUFRTSxLQUFLLEtBQUtMLGFBQWFELFFBQVFJLE1BQU0sS0FBS0gsV0FBVztvQkFDL0R3QixNQUFNcEIsTUFBTSxHQUFHb0IsTUFBTXBCLE1BQU0sQ0FBQ29CLEtBQUssQ0FBQ3pCO2dCQUNwQyxDQUFDO2dCQUVELElBQUlna0IsZ0JBQWdCO29CQUFDO29CQUFTO29CQUFZO2lCQUFXO2dCQUNyREEsY0FBYy9rQixPQUFPLENBQUMsU0FBVW9FLENBQUMsRUFBRTtvQkFDakM1QixLQUFLLENBQUM0QixFQUFFLEdBQUd5Z0IsTUFBTSxDQUFDemdCLEVBQUU7Z0JBQ3RCO2dCQUNBNUIsTUFBTXdKLFFBQVEsR0FBRzRVLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDNVUsUUFBUTtnQkFDbER4SixNQUFNd0osUUFBUSxDQUFDc0csS0FBSyxHQUFHO29CQUNyQkMsb0JBQW9CL1AsTUFBTStQLGtCQUFrQixDQUFDOE8sSUFBSSxDQUFDN2U7Z0JBQ3BEO2dCQUNBQSxNQUFNK0ksVUFBVSxHQUFHLElBQUlRLFdBQVd2SixNQUFNd0osUUFBUSxFQUFFeEosTUFBTXpCLE9BQU87Z0JBQy9EeUIsTUFBTStJLFVBQVUsQ0FBQzNJLEVBQUUsQ0FBQyxLQUFLLFNBQVVLLEtBQUssRUFBRTtvQkFDeEMsSUFBSyxJQUFJaEIsUUFBUXBDLFVBQVVDLE1BQU0sRUFBRVUsT0FBTyxJQUFJaUIsTUFBTVEsUUFBUSxJQUFJQSxRQUFRLElBQUksQ0FBQyxHQUFHQyxRQUFRLEdBQUdBLFFBQVFELE9BQU9DLFFBQVM7d0JBQ2pIMUIsSUFBSSxDQUFDMEIsUUFBUSxFQUFFLEdBQUdyQyxTQUFTLENBQUNxQyxNQUFNO29CQUNwQztvQkFFQU0sTUFBTVksSUFBSSxDQUFDM0QsS0FBSyxDQUFDK0MsT0FBTzt3QkFBQ1M7cUJBQU0sQ0FBQ1osTUFBTSxDQUFDN0I7Z0JBQ3pDO2dCQUNBZ0MsTUFBTXZCLElBQUksQ0FBQzZqQixlQUFlaEc7Z0JBQzFCdGMsTUFBTStJLFVBQVUsQ0FBQ3hLLE9BQU8sR0FBR3lCLE1BQU16QixPQUFPO2dCQUN4Q3lCLE1BQU0rSSxVQUFVLENBQUMyRSxnQkFBZ0IsQ0FBQ2xFLFFBQVEsQ0FBQ3NHLEtBQUssR0FBRztvQkFDakRDLG9CQUFvQi9QLE1BQU0rUCxrQkFBa0IsQ0FBQzhPLElBQUksQ0FBQzdlO2dCQUNwRDtnQkFDQSxPQUFPQTtZQUNUO1FBQ0Y7UUFBRztZQUNEdkMsS0FBSztZQUNMaUIsT0FBTyxTQUFTOEosU0FBUztnQkFDdkIsT0FBTztvQkFDTGpLLFNBQVMsSUFBSSxDQUFDQSxPQUFPO29CQUNyQnFkLE9BQU8sSUFBSSxDQUFDQSxLQUFLO29CQUNqQmxTLFVBQVUsSUFBSSxDQUFDQSxRQUFRO29CQUN2QjJTLFdBQVcsSUFBSSxDQUFDQSxTQUFTO29CQUN6QjhELGtCQUFrQixJQUFJLENBQUNBLGdCQUFnQjtnQkFDekM7WUFDRjtRQUNGO0tBQUU7SUFFRixPQUFPckI7QUFDVCxFQUFFNWU7QUFFRi9ELHFGQUFlQSxDQUFDMmlCLE1BQU0sa0JBQWtCLFdBQVk7SUFDbEQsSUFBSXZnQixVQUFVbEIsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUttQixZQUFZbkIsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEYsSUFBSWlmLFdBQVdqZixVQUFVQyxNQUFNLEdBQUcsSUFBSUQsU0FBUyxDQUFDLEVBQUUsR0FBR21CLFNBQVM7SUFDOUQsT0FBTyxJQUFJc2dCLEtBQUt2Z0IsU0FBUytkO0FBQzNCO0FBRUEsSUFBSWtHLFdBQVcxRCxLQUFLMkQsY0FBYztBQUNsQ0QsU0FBU0MsY0FBYyxHQUFHM0QsS0FBSzJELGNBQWM7QUFFN0MsSUFBSUEsaUJBQWlCRCxTQUFTQyxjQUFjO0FBQzVDLElBQUloa0IsT0FBTytqQixTQUFTL2pCLElBQUk7QUFDeEIsSUFBSXVoQixnQkFBZ0J3QyxTQUFTeEMsYUFBYTtBQUMxQyxJQUFJSyxrQkFBa0JtQyxTQUFTbkMsZUFBZTtBQUM5QyxJQUFJQyxNQUFNa0MsU0FBU2xDLEdBQUc7QUFDdEIsSUFBSTdXLGlCQUFpQitZLFNBQVMvWSxjQUFjO0FBQzVDLElBQUl1WCxZQUFZd0IsU0FBU3hCLFNBQVM7QUFDbEMsSUFBSXJmLElBQUk2Z0IsU0FBUzdnQixDQUFDO0FBQ2xCLElBQUlnSSxTQUFTNlksU0FBUzdZLE1BQU07QUFDNUIsSUFBSTJYLHNCQUFzQmtCLFNBQVNsQixtQkFBbUI7QUFDdEQsSUFBSXZSLHFCQUFxQnlTLFNBQVN6UyxrQkFBa0I7QUFDcEQsSUFBSThSLGlCQUFpQlcsU0FBU1gsY0FBYztBQUM1QyxJQUFJRSxnQkFBZ0JTLFNBQVNULGFBQWE7QUFFMUMsaUVBQWVTLFFBQVFBLEVBQUM7QUFDMkoiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXNtL2kxOG5leHQuanM/ZTQ0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgX3RvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9BcnJheSc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxudmFyIGNvbnNvbGVMb2dnZXIgPSB7XG4gIHR5cGU6ICdsb2dnZXInLFxuICBsb2c6IGZ1bmN0aW9uIGxvZyhhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2xvZycsIGFyZ3MpO1xuICB9LFxuICB3YXJuOiBmdW5jdGlvbiB3YXJuKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnd2FybicsIGFyZ3MpO1xuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoYXJncykge1xuICAgIHRoaXMub3V0cHV0KCdlcnJvcicsIGFyZ3MpO1xuICB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uIG91dHB1dCh0eXBlLCBhcmdzKSB7XG4gICAgaWYgKGNvbnNvbGUgJiYgY29uc29sZVt0eXBlXSkgY29uc29sZVt0eXBlXS5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufTtcblxudmFyIExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTG9nZ2VyKGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvZ2dlcik7XG5cbiAgICB0aGlzLmluaXQoY29uY3JldGVMb2dnZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExvZ2dlciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB0aGlzLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdpMThuZXh0Oic7XG4gICAgICB0aGlzLmxvZ2dlciA9IGNvbmNyZXRlTG9nZ2VyIHx8IGNvbnNvbGVMb2dnZXI7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldERlYnVnXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlYnVnKGJvb2wpIHtcbiAgICAgIHRoaXMuZGVidWcgPSBib29sO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9nKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ2xvZycsICcnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid2FyblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3YXJuKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnd2FybicsICcnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXJyb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdlcnJvcicsICcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVwcmVjYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ3dhcm4nLCAnV0FSTklORyBERVBSRUNBVEVEOiAnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9yd2FyZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3J3YXJkKGFyZ3MsIGx2bCwgcHJlZml4LCBkZWJ1Z09ubHkpIHtcbiAgICAgIGlmIChkZWJ1Z09ubHkgJiYgIXRoaXMuZGVidWcpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykgYXJnc1swXSA9IFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHRoaXMucHJlZml4LCBcIiBcIikuY29uY2F0KGFyZ3NbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyW2x2bF0oYXJncyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUobW9kdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIG5ldyBMb2dnZXIodGhpcy5sb2dnZXIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwge1xuICAgICAgICBwcmVmaXg6IFwiXCIuY29uY2F0KHRoaXMucHJlZml4LCBcIjpcIikuY29uY2F0KG1vZHVsZU5hbWUsIFwiOlwiKVxuICAgICAgfSksIHRoaXMub3B0aW9ucykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbG9uZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZShvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnM7XG4gICAgICBvcHRpb25zLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8IHRoaXMucHJlZml4O1xuICAgICAgcmV0dXJuIG5ldyBMb2dnZXIodGhpcy5sb2dnZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMb2dnZXI7XG59KCk7XG5cbnZhciBiYXNlTG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLm9ic2VydmVycyA9IHt9O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV2ZW50RW1pdHRlciwgW3tcbiAgICBrZXk6IFwib25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnRzLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XSA9IF90aGlzLm9ic2VydmVyc1tldmVudF0gfHwgW107XG5cbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9mZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzW2V2ZW50XSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm9ic2VydmVyc1tldmVudF07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vYnNlcnZlcnNbZXZlbnRdID0gdGhpcy5vYnNlcnZlcnNbZXZlbnRdLmZpbHRlcihmdW5jdGlvbiAobCkge1xuICAgICAgICByZXR1cm4gbCAhPT0gbGlzdGVuZXI7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW1pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vYnNlcnZlcnNbZXZlbnRdKSB7XG4gICAgICAgIHZhciBjbG9uZWQgPSBbXS5jb25jYXQodGhpcy5vYnNlcnZlcnNbZXZlbnRdKTtcbiAgICAgICAgY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9ic2VydmVyc1snKiddKSB7XG4gICAgICAgIHZhciBfY2xvbmVkID0gW10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzWycqJ10pO1xuXG4gICAgICAgIF9jbG9uZWQuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICBvYnNlcnZlci5hcHBseShvYnNlcnZlciwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRFbWl0dGVyO1xufSgpO1xuXG5mdW5jdGlvbiBkZWZlcigpIHtcbiAgdmFyIHJlcztcbiAgdmFyIHJlajtcbiAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzID0gcmVzb2x2ZTtcbiAgICByZWogPSByZWplY3Q7XG4gIH0pO1xuICBwcm9taXNlLnJlc29sdmUgPSByZXM7XG4gIHByb21pc2UucmVqZWN0ID0gcmVqO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIG1ha2VTdHJpbmcob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICcnO1xuICByZXR1cm4gJycgKyBvYmplY3Q7XG59XG5mdW5jdGlvbiBjb3B5KGEsIHMsIHQpIHtcbiAgYS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgaWYgKHNbbV0pIHRbbV0gPSBzW21dO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIEVtcHR5KSB7XG4gIGZ1bmN0aW9uIGNsZWFuS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgJiYga2V5LmluZGV4T2YoJyMjIycpID4gLTEgPyBrZXkucmVwbGFjZSgvIyMjL2csICcuJykgOiBrZXk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Ob3RUcmF2ZXJzZURlZXBlcigpIHtcbiAgICByZXR1cm4gIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHZhciBzdGFjayA9IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJyA/IFtdLmNvbmNhdChwYXRoKSA6IHBhdGguc3BsaXQoJy4nKTtcblxuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMSkge1xuICAgIGlmIChjYW5Ob3RUcmF2ZXJzZURlZXBlcigpKSByZXR1cm4ge307XG4gICAgdmFyIGtleSA9IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpO1xuICAgIGlmICghb2JqZWN0W2tleV0gJiYgRW1wdHkpIG9iamVjdFtrZXldID0gbmV3IEVtcHR5KCk7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdCA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYW5Ob3RUcmF2ZXJzZURlZXBlcigpKSByZXR1cm4ge307XG4gIHJldHVybiB7XG4gICAgb2JqOiBvYmplY3QsXG4gICAgazogY2xlYW5LZXkoc3RhY2suc2hpZnQoKSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2V0UGF0aChvYmplY3QsIHBhdGgsIG5ld1ZhbHVlKSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aCA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBPYmplY3QpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoLms7XG5cbiAgb2JqW2tdID0gbmV3VmFsdWU7XG59XG5mdW5jdGlvbiBwdXNoUGF0aChvYmplY3QsIHBhdGgsIG5ld1ZhbHVlLCBjb25jYXQpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoMiA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBPYmplY3QpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgyLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aDIuaztcblxuICBvYmpba10gPSBvYmpba10gfHwgW107XG4gIGlmIChjb25jYXQpIG9ialtrXSA9IG9ialtrXS5jb25jYXQobmV3VmFsdWUpO1xuICBpZiAoIWNvbmNhdCkgb2JqW2tdLnB1c2gobmV3VmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0UGF0aChvYmplY3QsIHBhdGgpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoMyA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoKSxcbiAgICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoMy5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGgzLms7XG5cbiAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmpba107XG59XG5mdW5jdGlvbiBnZXRQYXRoV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0UGF0aChkYXRhLCBrZXkpO1xuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhdGgoZGVmYXVsdERhdGEsIGtleSk7XG59XG5mdW5jdGlvbiBkZWVwRXh0ZW5kKHRhcmdldCwgc291cmNlLCBvdmVyd3JpdGUpIHtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICBpZiAocHJvcCAhPT0gJ19fcHJvdG9fXycgJiYgcHJvcCAhPT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W3Byb3BdID09PSAnc3RyaW5nJyB8fCB0YXJnZXRbcHJvcF0gaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHNvdXJjZVtwcm9wXSA9PT0gJ3N0cmluZycgfHwgc291cmNlW3Byb3BdIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgICAgaWYgKG92ZXJ3cml0ZSkgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZXBFeHRlbmQodGFyZ2V0W3Byb3BdLCBzb3VyY2VbcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gcmVnZXhFc2NhcGUoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcbn1cbnZhciBfZW50aXR5TWFwID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnLyc6ICcmI3gyRjsnXG59O1xuZnVuY3Rpb24gZXNjYXBlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1smPD5cIidcXC9dL2csIGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gX2VudGl0eU1hcFtzXTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxudmFyIGlzSUUxMCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG52YXIgY2hhcnMgPSBbJyAnLCAnLCcsICc/JywgJyEnLCAnOyddO1xuZnVuY3Rpb24gbG9va3NMaWtlT2JqZWN0UGF0aChrZXksIG5zU2VwYXJhdG9yLCBrZXlTZXBhcmF0b3IpIHtcbiAgbnNTZXBhcmF0b3IgPSBuc1NlcGFyYXRvciB8fCAnJztcbiAga2V5U2VwYXJhdG9yID0ga2V5U2VwYXJhdG9yIHx8ICcnO1xuICB2YXIgcG9zc2libGVDaGFycyA9IGNoYXJzLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBuc1NlcGFyYXRvci5pbmRleE9mKGMpIDwgMCAmJiBrZXlTZXBhcmF0b3IuaW5kZXhPZihjKSA8IDA7XG4gIH0pO1xuICBpZiAocG9zc2libGVDaGFycy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCIoXCIuY29uY2F0KHBvc3NpYmxlQ2hhcnMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMgPT09ICc/JyA/ICdcXFxcPycgOiBjO1xuICB9KS5qb2luKCd8JyksIFwiKVwiKSk7XG4gIHZhciBtYXRjaGVkID0gIXIudGVzdChrZXkpO1xuXG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHZhciBraSA9IGtleS5pbmRleE9mKGtleVNlcGFyYXRvcik7XG5cbiAgICBpZiAoa2kgPiAwICYmICFyLnRlc3Qoa2V5LnN1YnN0cmluZygwLCBraSkpKSB7XG4gICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyQxKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQxKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMkMShPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzJDEoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBkZWVwRmluZChvYmosIHBhdGgpIHtcbiAgdmFyIGtleVNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJy4nO1xuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtwYXRoXSkgcmV0dXJuIG9ialtwYXRoXTtcbiAgdmFyIHBhdGhzID0gcGF0aC5zcGxpdChrZXlTZXBhcmF0b3IpO1xuICB2YXIgY3VycmVudCA9IG9iajtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50W3BhdGhzW2ldXSA9PT0gJ3N0cmluZycgJiYgaSArIDEgPCBwYXRocy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRbcGF0aHNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBqID0gMjtcbiAgICAgIHZhciBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIHZhciBtaXggPSBjdXJyZW50W3BdO1xuXG4gICAgICB3aGlsZSAobWl4ID09PSB1bmRlZmluZWQgJiYgcGF0aHMubGVuZ3RoID4gaSArIGopIHtcbiAgICAgICAgaisrO1xuICAgICAgICBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgICAgbWl4ID0gY3VycmVudFtwXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1peCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKG1peCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKHApKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWl4ID09PSAnc3RyaW5nJykgcmV0dXJuIG1peDtcbiAgICAgICAgaWYgKHAgJiYgdHlwZW9mIG1peFtwXSA9PT0gJ3N0cmluZycpIHJldHVybiBtaXhbcF07XG4gICAgICB9XG5cbiAgICAgIHZhciBqb2luZWRQYXRoID0gcGF0aHMuc2xpY2UoaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIGlmIChqb2luZWRQYXRoKSByZXR1cm4gZGVlcEZpbmQobWl4LCBqb2luZWRQYXRoLCBrZXlTZXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gY3VycmVudFtwYXRoc1tpXV07XG4gIH1cblxuICByZXR1cm4gY3VycmVudDtcbn1cblxudmFyIFJlc291cmNlU3RvcmUgPSBmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHMoUmVzb3VyY2VTdG9yZSwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSZXNvdXJjZVN0b3JlKTtcblxuICBmdW5jdGlvbiBSZXNvdXJjZVN0b3JlKGRhdGEpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJ1xuICAgIH07XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVzb3VyY2VTdG9yZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLmRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID0gJy4nO1xuICAgIH1cblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmVzb3VyY2VTdG9yZSwgW3tcbiAgICBrZXk6IFwiYWRkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGROYW1lc3BhY2VzKG5zKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpIDwgMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMucHVzaChucyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZU5hbWVzcGFjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlcyhucykge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UobG5nLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBpZ25vcmVKU09OU3RydWN0dXJlID0gb3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgOiB0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZTtcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSAmJiB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGguY29uY2F0KGtleSk7XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKTtcbiAgICAgIGlmIChyZXN1bHQgfHwgIWlnbm9yZUpTT05TdHJ1Y3R1cmUgfHwgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG4gICAgICByZXR1cm4gZGVlcEZpbmQodGhpcy5kYXRhICYmIHRoaXMuZGF0YVtsbmddICYmIHRoaXMuZGF0YVtsbmddW25zXSwga2V5LCBrZXlTZXBhcmF0b3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZShsbmcsIG5zLCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICBpZiAoa2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIGtleVNlcGFyYXRvciA9ICcuJztcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSkgcGF0aCA9IHBhdGguY29uY2F0KGtleVNlcGFyYXRvciA/IGtleS5zcGxpdChrZXlTZXBhcmF0b3IpIDoga2V5KTtcblxuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhbHVlID0gbnM7XG4gICAgICAgIG5zID0gcGF0aFsxXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGROYW1lc3BhY2VzKG5zKTtcbiAgICAgIHNldFBhdGgodGhpcy5kYXRhLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZXMobG5nLCBucywgcmVzb3VyY2VzKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBtIGluIHJlc291cmNlcykge1xuICAgICAgICBpZiAodHlwZW9mIHJlc291cmNlc1ttXSA9PT0gJ3N0cmluZycgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShyZXNvdXJjZXNbbV0pID09PSAnW29iamVjdCBBcnJheV0nKSB0aGlzLmFkZFJlc291cmNlKGxuZywgbnMsIG0sIHJlc291cmNlc1ttXSwge1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIHJlc291cmNlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIHJlc291cmNlcywgZGVlcCwgb3ZlcndyaXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG5cbiAgICAgIGlmIChsbmcuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgICBkZWVwID0gcmVzb3VyY2VzO1xuICAgICAgICByZXNvdXJjZXMgPSBucztcbiAgICAgICAgbnMgPSBwYXRoWzFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZE5hbWVzcGFjZXMobnMpO1xuICAgICAgdmFyIHBhY2sgPSBnZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCkgfHwge307XG5cbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIGRlZXBFeHRlbmQocGFjaywgcmVzb3VyY2VzLCBvdmVyd3JpdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFjayA9IF9vYmplY3RTcHJlYWQkMShfb2JqZWN0U3ByZWFkJDEoe30sIHBhY2spLCByZXNvdXJjZXMpO1xuICAgICAgfVxuXG4gICAgICBzZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCwgcGFjayk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlUmVzb3VyY2VCdW5kbGUobG5nLCBucykge1xuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtsbmddW25zXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVOYW1lc3BhY2VzKG5zKTtcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlZCcsIGxuZywgbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5kZWZhdWx0TlM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgPT09ICd2MScpIHJldHVybiBfb2JqZWN0U3ByZWFkJDEoX29iamVjdFNwcmVhZCQxKHt9LCB7fSksIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucykpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERhdGFCeUxhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGFCeUxhbmd1YWdlKGxuZykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVtsbmddO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGxuZykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldERhdGFCeUxhbmd1YWdlKGxuZyk7XG4gICAgICB2YXIgbiA9IGRhdGEgJiYgT2JqZWN0LmtleXMoZGF0YSkgfHwgW107XG4gICAgICByZXR1cm4gISFuLmZpbmQoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbdl0gJiYgT2JqZWN0LmtleXMoZGF0YVt2XSkubGVuZ3RoID4gMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVzb3VyY2VTdG9yZTtcbn0oRXZlbnRFbWl0dGVyKTtcblxudmFyIHBvc3RQcm9jZXNzb3IgPSB7XG4gIHByb2Nlc3NvcnM6IHt9LFxuICBhZGRQb3N0UHJvY2Vzc29yOiBmdW5jdGlvbiBhZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSkge1xuICAgIHRoaXMucHJvY2Vzc29yc1ttb2R1bGUubmFtZV0gPSBtb2R1bGU7XG4gIH0sXG4gIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKHByb2Nlc3NvcnMsIHZhbHVlLCBrZXksIG9wdGlvbnMsIHRyYW5zbGF0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcHJvY2Vzc29ycy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9jZXNzb3IpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0pIHZhbHVlID0gX3RoaXMucHJvY2Vzc29yc1twcm9jZXNzb3JdLnByb2Nlc3ModmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBvd25LZXlzJDIob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDIodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQyKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkMihPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDEoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMSgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMSgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG52YXIgY2hlY2tlZExvYWRlZEZvciA9IHt9O1xuXG52YXIgVHJhbnNsYXRvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhUcmFuc2xhdG9yLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDEoVHJhbnNsYXRvcik7XG5cbiAgZnVuY3Rpb24gVHJhbnNsYXRvcihzZXJ2aWNlcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2xhdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgY29weShbJ3Jlc291cmNlU3RvcmUnLCAnbGFuZ3VhZ2VVdGlscycsICdwbHVyYWxSZXNvbHZlcicsICdpbnRlcnBvbGF0b3InLCAnYmFja2VuZENvbm5lY3RvcicsICdpMThuRm9ybWF0JywgJ3V0aWxzJ10sIHNlcnZpY2VzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgfVxuXG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3RyYW5zbGF0b3InKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVHJhbnNsYXRvciwgW3tcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nKSB7XG4gICAgICBpZiAobG5nKSB0aGlzLmxhbmd1YWdlID0gbG5nO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgICAgaW50ZXJwb2xhdGlvbjoge31cbiAgICAgIH07XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXMgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0cmFjdEZyb21LZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0cmFjdEZyb21LZXkoa2V5LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zU2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgaWYgKG5zU2VwYXJhdG9yID09PSB1bmRlZmluZWQpIG5zU2VwYXJhdG9yID0gJzonO1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICB2YXIgbmFtZXNwYWNlcyA9IG9wdGlvbnMubnMgfHwgdGhpcy5vcHRpb25zLmRlZmF1bHROUyB8fCBbXTtcbiAgICAgIHZhciB3b3VsZENoZWNrRm9yTnNJbktleSA9IG5zU2VwYXJhdG9yICYmIGtleS5pbmRleE9mKG5zU2VwYXJhdG9yKSA+IC0xO1xuICAgICAgdmFyIHNlZW1zTmF0dXJhbExhbmd1YWdlID0gIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvciAmJiAhb3B0aW9ucy5rZXlTZXBhcmF0b3IgJiYgIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yICYmICFvcHRpb25zLm5zU2VwYXJhdG9yICYmICFsb29rc0xpa2VPYmplY3RQYXRoKGtleSwgbnNTZXBhcmF0b3IsIGtleVNlcGFyYXRvcik7XG5cbiAgICAgIGlmICh3b3VsZENoZWNrRm9yTnNJbktleSAmJiAhc2VlbXNOYXR1cmFsTGFuZ3VhZ2UpIHtcbiAgICAgICAgdmFyIG0gPSBrZXkubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG5cbiAgICAgICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQobnNTZXBhcmF0b3IpO1xuICAgICAgICBpZiAobnNTZXBhcmF0b3IgIT09IGtleVNlcGFyYXRvciB8fCBuc1NlcGFyYXRvciA9PT0ga2V5U2VwYXJhdG9yICYmIHRoaXMub3B0aW9ucy5ucy5pbmRleE9mKHBhcnRzWzBdKSA+IC0xKSBuYW1lc3BhY2VzID0gcGFydHMuc2hpZnQoKTtcbiAgICAgICAga2V5ID0gcGFydHMuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnKSBuYW1lc3BhY2VzID0gW25hbWVzcGFjZXNdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIG5hbWVzcGFjZXM6IG5hbWVzcGFjZXNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRyYW5zbGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0cmFuc2xhdGUoa2V5cywgb3B0aW9ucywgbGFzdEtleSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChfdHlwZW9mKG9wdGlvbnMpICE9PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICAgIGlmIChrZXlzID09PSB1bmRlZmluZWQgfHwga2V5cyA9PT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpKSBrZXlzID0gW1N0cmluZyhrZXlzKV07XG4gICAgICB2YXIgcmV0dXJuRGV0YWlscyA9IG9wdGlvbnMucmV0dXJuRGV0YWlscyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5yZXR1cm5EZXRhaWxzIDogdGhpcy5vcHRpb25zLnJldHVybkRldGFpbHM7XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcblxuICAgICAgdmFyIF90aGlzJGV4dHJhY3RGcm9tS2V5ID0gdGhpcy5leHRyYWN0RnJvbUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0sIG9wdGlvbnMpLFxuICAgICAgICAgIGtleSA9IF90aGlzJGV4dHJhY3RGcm9tS2V5LmtleSxcbiAgICAgICAgICBuYW1lc3BhY2VzID0gX3RoaXMkZXh0cmFjdEZyb21LZXkubmFtZXNwYWNlcztcblxuICAgICAgdmFyIG5hbWVzcGFjZSA9IG5hbWVzcGFjZXNbbmFtZXNwYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBsbmcgPSBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlO1xuICAgICAgdmFyIGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlID0gb3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZSB8fCB0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7XG5cbiAgICAgIGlmIChsbmcgJiYgbG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSB7XG4gICAgICAgIGlmIChhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSkge1xuICAgICAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgfHwgdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuXG4gICAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICAgIHJlc29sdmVkLnJlcyA9IFwiXCIuY29uY2F0KG5hbWVzcGFjZSkuY29uY2F0KG5zU2VwYXJhdG9yKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQobmFtZXNwYWNlKS5jb25jYXQobnNTZXBhcmF0b3IpLmNvbmNhdChrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICByZXNvbHZlZC5yZXMgPSBrZXk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlKGtleXMsIG9wdGlvbnMpO1xuICAgICAgdmFyIHJlcyA9IHJlc29sdmVkICYmIHJlc29sdmVkLnJlcztcbiAgICAgIHZhciByZXNVc2VkS2V5ID0gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQudXNlZEtleSB8fCBrZXk7XG4gICAgICB2YXIgcmVzRXhhY3RVc2VkS2V5ID0gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQuZXhhY3RVc2VkS2V5IHx8IGtleTtcbiAgICAgIHZhciByZXNUeXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShyZXMpO1xuICAgICAgdmFyIG5vT2JqZWN0ID0gWydbb2JqZWN0IE51bWJlcl0nLCAnW29iamVjdCBGdW5jdGlvbl0nLCAnW29iamVjdCBSZWdFeHBdJ107XG4gICAgICB2YXIgam9pbkFycmF5cyA9IG9wdGlvbnMuam9pbkFycmF5cyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5qb2luQXJyYXlzIDogdGhpcy5vcHRpb25zLmpvaW5BcnJheXM7XG4gICAgICB2YXIgaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgPSAhdGhpcy5pMThuRm9ybWF0IHx8IHRoaXMuaTE4bkZvcm1hdC5oYW5kbGVBc09iamVjdDtcbiAgICAgIHZhciBoYW5kbGVBc09iamVjdCA9IHR5cGVvZiByZXMgIT09ICdzdHJpbmcnICYmIHR5cGVvZiByZXMgIT09ICdib29sZWFuJyAmJiB0eXBlb2YgcmVzICE9PSAnbnVtYmVyJztcblxuICAgICAgaWYgKGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ICYmIHJlcyAmJiBoYW5kbGVBc09iamVjdCAmJiBub09iamVjdC5pbmRleE9mKHJlc1R5cGUpIDwgMCAmJiAhKHR5cGVvZiBqb2luQXJyYXlzID09PSAnc3RyaW5nJyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMucmV0dXJuT2JqZWN0cyAmJiAhdGhpcy5vcHRpb25zLnJldHVybk9iamVjdHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2FjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByID0gdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlciA/IHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIocmVzVXNlZEtleSwgcmVzLCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICAgIG5zOiBuYW1lc3BhY2VzXG4gICAgICAgICAgfSkpIDogXCJrZXkgJ1wiLmNvbmNhdChrZXksIFwiIChcIikuY29uY2F0KHRoaXMubGFuZ3VhZ2UsIFwiKScgcmV0dXJuZWQgYW4gb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5nLlwiKTtcblxuICAgICAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgICAgICByZXNvbHZlZC5yZXMgPSByO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgIHZhciByZXNUeXBlSXNBcnJheSA9IHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgICAgdmFyIGNvcHkgPSByZXNUeXBlSXNBcnJheSA/IFtdIDoge307XG4gICAgICAgICAgdmFyIG5ld0tleVRvVXNlID0gcmVzVHlwZUlzQXJyYXkgPyByZXNFeGFjdFVzZWRLZXkgOiByZXNVc2VkS2V5O1xuXG4gICAgICAgICAgZm9yICh2YXIgbSBpbiByZXMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCBtKSkge1xuICAgICAgICAgICAgICB2YXIgZGVlcEtleSA9IFwiXCIuY29uY2F0KG5ld0tleVRvVXNlKS5jb25jYXQoa2V5U2VwYXJhdG9yKS5jb25jYXQobSk7XG4gICAgICAgICAgICAgIGNvcHlbbV0gPSB0aGlzLnRyYW5zbGF0ZShkZWVwS2V5LCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge1xuICAgICAgICAgICAgICAgIGpvaW5BcnJheXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5zOiBuYW1lc3BhY2VzXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKGNvcHlbbV0gPT09IGRlZXBLZXkpIGNvcHlbbV0gPSByZXNbbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzID0gY29weTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCAmJiB0eXBlb2Ygam9pbkFycmF5cyA9PT0gJ3N0cmluZycgJiYgcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICByZXMgPSByZXMuam9pbihqb2luQXJyYXlzKTtcbiAgICAgICAgaWYgKHJlcykgcmVzID0gdGhpcy5leHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleXMsIG9wdGlvbnMsIGxhc3RLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHVzZWREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgIHZhciB1c2VkS2V5ID0gZmFsc2U7XG4gICAgICAgIHZhciBuZWVkc1BsdXJhbEhhbmRsaW5nID0gb3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNvdW50ICE9PSAnc3RyaW5nJztcbiAgICAgICAgdmFyIGhhc0RlZmF1bHRWYWx1ZSA9IFRyYW5zbGF0b3IuaGFzRGVmYXVsdFZhbHVlKG9wdGlvbnMpO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlU3VmZml4ID0gbmVlZHNQbHVyYWxIYW5kbGluZyA/IHRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KGxuZywgb3B0aW9ucy5jb3VudCwgb3B0aW9ucykgOiAnJztcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IG9wdGlvbnNbXCJkZWZhdWx0VmFsdWVcIi5jb25jYXQoZGVmYXVsdFZhbHVlU3VmZml4KV0gfHwgb3B0aW9ucy5kZWZhdWx0VmFsdWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSAmJiBoYXNEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICB1c2VkRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgcmVzID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSkge1xuICAgICAgICAgIHVzZWRLZXkgPSB0cnVlO1xuICAgICAgICAgIHJlcyA9IGtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkgPSBvcHRpb25zLm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSB8fCB0aGlzLm9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5O1xuICAgICAgICB2YXIgcmVzRm9yTWlzc2luZyA9IG1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSAmJiB1c2VkS2V5ID8gdW5kZWZpbmVkIDogcmVzO1xuICAgICAgICB2YXIgdXBkYXRlTWlzc2luZyA9IGhhc0RlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUgIT09IHJlcyAmJiB0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztcblxuICAgICAgICBpZiAodXNlZEtleSB8fCB1c2VkRGVmYXVsdCB8fCB1cGRhdGVNaXNzaW5nKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIubG9nKHVwZGF0ZU1pc3NpbmcgPyAndXBkYXRlS2V5JyA6ICdtaXNzaW5nS2V5JywgbG5nLCBuYW1lc3BhY2UsIGtleSwgdXBkYXRlTWlzc2luZyA/IGRlZmF1bHRWYWx1ZSA6IHJlcyk7XG5cbiAgICAgICAgICBpZiAoa2V5U2VwYXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgZmsgPSB0aGlzLnJlc29sdmUoa2V5LCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICAgICAga2V5U2VwYXJhdG9yOiBmYWxzZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKGZrICYmIGZrLnJlcykgdGhpcy5sb2dnZXIud2FybignU2VlbXMgdGhlIGxvYWRlZCB0cmFuc2xhdGlvbnMgd2VyZSBpbiBmbGF0IEpTT04gZm9ybWF0IGluc3RlYWQgb2YgbmVzdGVkLiBFaXRoZXIgc2V0IGtleVNlcGFyYXRvcjogZmFsc2Ugb24gaW5pdCBvciBtYWtlIHN1cmUgeW91ciB0cmFuc2xhdGlvbnMgYXJlIHB1Ymxpc2hlZCBpbiBuZXN0ZWQgZm9ybWF0LicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBsbmdzID0gW107XG4gICAgICAgICAgdmFyIGZhbGxiYWNrTG5ncyA9IHRoaXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZywgb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8gPT09ICdmYWxsYmFjaycgJiYgZmFsbGJhY2tMbmdzICYmIGZhbGxiYWNrTG5nc1swXSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsYmFja0xuZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgbG5ncy5wdXNoKGZhbGxiYWNrTG5nc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGxuZ3MgPSB0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsbmdzLnB1c2gob3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHNlbmQgPSBmdW5jdGlvbiBzZW5kKGwsIGssIHNwZWNpZmljRGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdEZvck1pc3NpbmcgPSBoYXNEZWZhdWx0VmFsdWUgJiYgc3BlY2lmaWNEZWZhdWx0VmFsdWUgIT09IHJlcyA/IHNwZWNpZmljRGVmYXVsdFZhbHVlIDogcmVzRm9yTWlzc2luZztcblxuICAgICAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKGwsIG5hbWVzcGFjZSwgaywgZGVmYXVsdEZvck1pc3NpbmcsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfdGhpczIuYmFja2VuZENvbm5lY3RvciAmJiBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZykge1xuICAgICAgICAgICAgICBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyhsLCBuYW1lc3BhY2UsIGssIGRlZmF1bHRGb3JNaXNzaW5nLCB1cGRhdGVNaXNzaW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXMyLmVtaXQoJ21pc3NpbmdLZXknLCBsLCBuYW1lc3BhY2UsIGssIHJlcyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzICYmIG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgbG5ncy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXhlcyhsYW5ndWFnZSwgb3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICBzZW5kKFtsYW5ndWFnZV0sIGtleSArIHN1ZmZpeCwgb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChzdWZmaXgpXSB8fCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbmQobG5ncywga2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyA9IHRoaXMuZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXlzLCBvcHRpb25zLCByZXNvbHZlZCwgbGFzdEtleSk7XG4gICAgICAgIGlmICh1c2VkS2V5ICYmIHJlcyA9PT0ga2V5ICYmIHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkpIHJlcyA9IFwiXCIuY29uY2F0KG5hbWVzcGFjZSwgXCI6XCIpLmNvbmNhdChrZXkpO1xuXG4gICAgICAgIGlmICgodXNlZEtleSB8fCB1c2VkRGVmYXVsdCkgJiYgdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkgPyBcIlwiLmNvbmNhdChuYW1lc3BhY2UsIFwiOlwiKS5jb25jYXQoa2V5KSA6IGtleSwgdXNlZERlZmF1bHQgPyByZXMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICByZXNvbHZlZC5yZXMgPSByZXM7XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0ZW5kVHJhbnNsYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXksIG9wdGlvbnMsIHJlc29sdmVkLCBsYXN0S2V5KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaTE4bkZvcm1hdCAmJiB0aGlzLmkxOG5Gb3JtYXQucGFyc2UpIHtcbiAgICAgICAgcmVzID0gdGhpcy5pMThuRm9ybWF0LnBhcnNlKHJlcywgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyksIG9wdGlvbnMpLCByZXNvbHZlZC51c2VkTG5nLCByZXNvbHZlZC51c2VkTlMsIHJlc29sdmVkLnVzZWRLZXksIHtcbiAgICAgICAgICByZXNvbHZlZDogcmVzb2x2ZWRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNraXBJbnRlcnBvbGF0aW9uKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVycG9sYXRpb24pIHRoaXMuaW50ZXJwb2xhdG9yLmluaXQoX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgb3B0aW9ucyksIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiksIG9wdGlvbnMuaW50ZXJwb2xhdGlvbilcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgJiYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgOiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMpO1xuICAgICAgICB2YXIgbmVzdEJlZjtcblxuICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgdmFyIG5iID0gcmVzLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO1xuICAgICAgICAgIG5lc3RCZWYgPSBuYiAmJiBuYi5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMucmVwbGFjZSAmJiB0eXBlb2Ygb3B0aW9ucy5yZXBsYWNlICE9PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbGFjZSA6IG9wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSBkYXRhID0gX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyksIGRhdGEpO1xuICAgICAgICByZXMgPSB0aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShyZXMsIGRhdGEsIG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXIgbmEgPSByZXMubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG4gICAgICAgICAgdmFyIG5lc3RBZnQgPSBuYSAmJiBuYS5sZW5ndGg7XG4gICAgICAgICAgaWYgKG5lc3RCZWYgPCBuZXN0QWZ0KSBvcHRpb25zLm5lc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm5lc3QgIT09IGZhbHNlKSByZXMgPSB0aGlzLmludGVycG9sYXRvci5uZXN0KHJlcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobGFzdEtleSAmJiBsYXN0S2V5WzBdID09PSBhcmdzWzBdICYmICFvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIF90aGlzMy5sb2dnZXIud2FybihcIkl0IHNlZW1zIHlvdSBhcmUgbmVzdGluZyByZWN1cnNpdmVseSBrZXk6IFwiLmNvbmNhdChhcmdzWzBdLCBcIiBpbiBrZXk6IFwiKS5jb25jYXQoa2V5WzBdKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpczMudHJhbnNsYXRlLmFwcGx5KF90aGlzMywgYXJncy5jb25jYXQoW2tleV0pKTtcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVycG9sYXRpb24pIHRoaXMuaW50ZXJwb2xhdG9yLnJlc2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3N0UHJvY2VzcyA9IG9wdGlvbnMucG9zdFByb2Nlc3MgfHwgdGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzO1xuICAgICAgdmFyIHBvc3RQcm9jZXNzb3JOYW1lcyA9IHR5cGVvZiBwb3N0UHJvY2VzcyA9PT0gJ3N0cmluZycgPyBbcG9zdFByb2Nlc3NdIDogcG9zdFByb2Nlc3M7XG5cbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiByZXMgIT09IG51bGwgJiYgcG9zdFByb2Nlc3Nvck5hbWVzICYmIHBvc3RQcm9jZXNzb3JOYW1lcy5sZW5ndGggJiYgb3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgIT09IGZhbHNlKSB7XG4gICAgICAgIHJlcyA9IHBvc3RQcm9jZXNzb3IuaGFuZGxlKHBvc3RQcm9jZXNzb3JOYW1lcywgcmVzLCBrZXksIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQgPyBfb2JqZWN0U3ByZWFkJDIoe1xuICAgICAgICAgIGkxOG5SZXNvbHZlZDogcmVzb2x2ZWRcbiAgICAgICAgfSwgb3B0aW9ucykgOiBvcHRpb25zLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzb2x2ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlKGtleXMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgZm91bmQ7XG4gICAgICB2YXIgdXNlZEtleTtcbiAgICAgIHZhciBleGFjdFVzZWRLZXk7XG4gICAgICB2YXIgdXNlZExuZztcbiAgICAgIHZhciB1c2VkTlM7XG4gICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnKSBrZXlzID0gW2tleXNdO1xuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcblxuICAgICAgICB2YXIgZXh0cmFjdGVkID0gX3RoaXM0LmV4dHJhY3RGcm9tS2V5KGssIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBrZXkgPSBleHRyYWN0ZWQua2V5O1xuICAgICAgICB1c2VkS2V5ID0ga2V5O1xuICAgICAgICB2YXIgbmFtZXNwYWNlcyA9IGV4dHJhY3RlZC5uYW1lc3BhY2VzO1xuICAgICAgICBpZiAoX3RoaXM0Lm9wdGlvbnMuZmFsbGJhY2tOUykgbmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMuY29uY2F0KF90aGlzNC5vcHRpb25zLmZhbGxiYWNrTlMpO1xuICAgICAgICB2YXIgbmVlZHNQbHVyYWxIYW5kbGluZyA9IG9wdGlvbnMuY291bnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jb3VudCAhPT0gJ3N0cmluZyc7XG5cbiAgICAgICAgdmFyIG5lZWRzWmVyb1N1ZmZpeExvb2t1cCA9IG5lZWRzUGx1cmFsSGFuZGxpbmcgJiYgIW9wdGlvbnMub3JkaW5hbCAmJiBvcHRpb25zLmNvdW50ID09PSAwICYmIF90aGlzNC5wbHVyYWxSZXNvbHZlci5zaG91bGRVc2VJbnRsQXBpKCk7XG5cbiAgICAgICAgdmFyIG5lZWRzQ29udGV4dEhhbmRsaW5nID0gb3B0aW9ucy5jb250ZXh0ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICdudW1iZXInKSAmJiBvcHRpb25zLmNvbnRleHQgIT09ICcnO1xuICAgICAgICB2YXIgY29kZXMgPSBvcHRpb25zLmxuZ3MgPyBvcHRpb25zLmxuZ3MgOiBfdGhpczQubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgX3RoaXM0Lmxhbmd1YWdlLCBvcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcbiAgICAgICAgICB1c2VkTlMgPSBucztcblxuICAgICAgICAgIGlmICghY2hlY2tlZExvYWRlZEZvcltcIlwiLmNvbmNhdChjb2Rlc1swXSwgXCItXCIpLmNvbmNhdChucyldICYmIF90aGlzNC51dGlscyAmJiBfdGhpczQudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlICYmICFfdGhpczQudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKHVzZWROUykpIHtcbiAgICAgICAgICAgIGNoZWNrZWRMb2FkZWRGb3JbXCJcIi5jb25jYXQoY29kZXNbMF0sIFwiLVwiKS5jb25jYXQobnMpXSA9IHRydWU7XG5cbiAgICAgICAgICAgIF90aGlzNC5sb2dnZXIud2FybihcImtleSBcXFwiXCIuY29uY2F0KHVzZWRLZXksIFwiXFxcIiBmb3IgbGFuZ3VhZ2VzIFxcXCJcIikuY29uY2F0KGNvZGVzLmpvaW4oJywgJyksIFwiXFxcIiB3b24ndCBnZXQgcmVzb2x2ZWQgYXMgbmFtZXNwYWNlIFxcXCJcIikuY29uY2F0KHVzZWROUywgXCJcXFwiIHdhcyBub3QgeWV0IGxvYWRlZFwiKSwgJ1RoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcbiAgICAgICAgICAgIHVzZWRMbmcgPSBjb2RlO1xuICAgICAgICAgICAgdmFyIGZpbmFsS2V5cyA9IFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXM0LmkxOG5Gb3JtYXQgJiYgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cykge1xuICAgICAgICAgICAgICBfdGhpczQuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKGZpbmFsS2V5cywga2V5LCBjb2RlLCBucywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgcGx1cmFsU3VmZml4O1xuICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykgcGx1cmFsU3VmZml4ID0gX3RoaXM0LnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChjb2RlLCBvcHRpb25zLmNvdW50LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFyIHplcm9TdWZmaXggPSBcIlwiLmNvbmNhdChfdGhpczQub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsIFwiemVyb1wiKTtcblxuICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGtleSArIHBsdXJhbFN1ZmZpeCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmVlZHNaZXJvU3VmZml4TG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChrZXkgKyB6ZXJvU3VmZml4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobmVlZHNDb250ZXh0SGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dEtleSA9IFwiXCIuY29uY2F0KGtleSkuY29uY2F0KF90aGlzNC5vcHRpb25zLmNvbnRleHRTZXBhcmF0b3IpLmNvbmNhdChvcHRpb25zLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkgKyBwbHVyYWxTdWZmaXgpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmVlZHNaZXJvU3VmZml4TG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkgKyB6ZXJvU3VmZml4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBvc3NpYmxlS2V5O1xuXG4gICAgICAgICAgICB3aGlsZSAocG9zc2libGVLZXkgPSBmaW5hbEtleXMucG9wKCkpIHtcbiAgICAgICAgICAgICAgaWYgKCFfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHtcbiAgICAgICAgICAgICAgICBleGFjdFVzZWRLZXkgPSBwb3NzaWJsZUtleTtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IF90aGlzNC5nZXRSZXNvdXJjZShjb2RlLCBucywgcG9zc2libGVLZXksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXM6IGZvdW5kLFxuICAgICAgICB1c2VkS2V5OiB1c2VkS2V5LFxuICAgICAgICBleGFjdFVzZWRLZXk6IGV4YWN0VXNlZEtleSxcbiAgICAgICAgdXNlZExuZzogdXNlZExuZyxcbiAgICAgICAgdXNlZE5TOiB1c2VkTlNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzVmFsaWRMb29rdXBcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZExvb2t1cChyZXMpIHtcbiAgICAgIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCAmJiAhKCF0aGlzLm9wdGlvbnMucmV0dXJuTnVsbCAmJiByZXMgPT09IG51bGwpICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyAmJiByZXMgPT09ICcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgICAgaWYgKHRoaXMuaTE4bkZvcm1hdCAmJiB0aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UpIHJldHVybiB0aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGNvZGUsIG5zLCBrZXksIG9wdGlvbnMpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImhhc0RlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNEZWZhdWx0VmFsdWUob3B0aW9ucykge1xuICAgICAgdmFyIHByZWZpeCA9ICdkZWZhdWx0VmFsdWUnO1xuXG4gICAgICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIG9wdGlvbikgJiYgcHJlZml4ID09PSBvcHRpb24uc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpICYmIHVuZGVmaW5lZCAhPT0gb3B0aW9uc1tvcHRpb25dKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcmFuc2xhdG9yO1xufShFdmVudEVtaXR0ZXIpO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuXG52YXIgTGFuZ3VhZ2VVdGlsID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMYW5ndWFnZVV0aWwob3B0aW9ucykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYW5ndWFnZVV0aWwpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN1cHBvcnRlZExuZ3MgPSB0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyB8fCBmYWxzZTtcbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdsYW5ndWFnZVV0aWxzJyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGFuZ3VhZ2VVdGlsLCBbe1xuICAgIGtleTogXCJnZXRTY3JpcHRQYXJ0RnJvbUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBudWxsO1xuICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgICBpZiAocC5sZW5ndGggPT09IDIpIHJldHVybiBudWxsO1xuICAgICAgcC5wb3AoKTtcbiAgICAgIGlmIChwW3AubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwLmpvaW4oJy0nKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldExhbmd1YWdlUGFydEZyb21Db2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBjb2RlO1xuICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUocFswXSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcm1hdExhbmd1YWdlQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIHZhciBzcGVjaWFsQ2FzZXMgPSBbJ2hhbnMnLCAnaGFudCcsICdsYXRuJywgJ2N5cmwnLCAnY2FucycsICdtb25nJywgJ2FyYWInXTtcbiAgICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcpIHtcbiAgICAgICAgICBwID0gcC5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBwWzBdID0gcFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHBbMV0gPSBwWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMV0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsxXSA9IGNhcGl0YWxpemUocFsxXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIHBbMF0gPSBwWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHBbMV0ubGVuZ3RoID09PSAyKSBwWzFdID0gcFsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChwWzBdICE9PSAnc2duJyAmJiBwWzJdLmxlbmd0aCA9PT0gMikgcFsyXSA9IHBbMl0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzJdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMl0gPSBjYXBpdGFsaXplKHBbMl0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcC5qb2luKCctJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlIHx8IHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcgPyBjb2RlLnRvTG93ZXJDYXNlKCkgOiBjb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc1N1cHBvcnRlZENvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNTdXBwb3J0ZWRDb2RlKGNvZGUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCA9PT0gJ2xhbmd1YWdlT25seScgfHwgdGhpcy5vcHRpb25zLm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncykge1xuICAgICAgICBjb2RlID0gdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICF0aGlzLnN1cHBvcnRlZExuZ3MgfHwgIXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGggfHwgdGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoY29kZSkgPiAtMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlc3RNYXRjaEZyb21Db2Rlcyhjb2Rlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFjb2RlcykgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZm91bmQ7XG4gICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBjbGVhbmVkTG5nID0gX3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpO1xuXG4gICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzIHx8IF90aGlzLmlzU3VwcG9ydGVkQ29kZShjbGVhbmVkTG5nKSkgZm91bmQgPSBjbGVhbmVkTG5nO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZm91bmQgJiYgdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MpIHtcbiAgICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdmFyIGxuZ09ubHkgPSBfdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5pc1N1cHBvcnRlZENvZGUobG5nT25seSkpIHJldHVybiBmb3VuZCA9IGxuZ09ubHk7XG4gICAgICAgICAgZm91bmQgPSBfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZChmdW5jdGlvbiAoc3VwcG9ydGVkTG5nKSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydGVkTG5nLmluZGV4T2YobG5nT25seSkgPT09IDApIHJldHVybiBzdXBwb3J0ZWRMbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IHRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdO1xuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRGYWxsYmFja0NvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tzLCBjb2RlKSB7XG4gICAgICBpZiAoIWZhbGxiYWNrcykgcmV0dXJuIFtdO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdmdW5jdGlvbicpIGZhbGxiYWNrcyA9IGZhbGxiYWNrcyhjb2RlKTtcbiAgICAgIGlmICh0eXBlb2YgZmFsbGJhY2tzID09PSAnc3RyaW5nJykgZmFsbGJhY2tzID0gW2ZhbGxiYWNrc107XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShmYWxsYmFja3MpID09PSAnW29iamVjdCBBcnJheV0nKSByZXR1cm4gZmFsbGJhY2tzO1xuICAgICAgaWYgKCFjb2RlKSByZXR1cm4gZmFsbGJhY2tzW1wiZGVmYXVsdFwiXSB8fCBbXTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbGxiYWNrc1tjb2RlXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbXCJkZWZhdWx0XCJdO1xuICAgICAgcmV0dXJuIGZvdW5kIHx8IFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1Jlc29sdmVIaWVyYXJjaHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9SZXNvbHZlSGllcmFyY2h5KGNvZGUsIGZhbGxiYWNrQ29kZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBmYWxsYmFja0NvZGVzID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKGZhbGxiYWNrQ29kZSB8fCB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgfHwgW10sIGNvZGUpO1xuICAgICAgdmFyIGNvZGVzID0gW107XG5cbiAgICAgIHZhciBhZGRDb2RlID0gZnVuY3Rpb24gYWRkQ29kZShjKSB7XG4gICAgICAgIGlmICghYykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChfdGhpczIuaXNTdXBwb3J0ZWRDb2RlKGMpKSB7XG4gICAgICAgICAgY29kZXMucHVzaChjKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczIubG9nZ2VyLndhcm4oXCJyZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogXCIuY29uY2F0KGMpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScpIGFkZENvZGUodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdsYW5ndWFnZU9ubHknICYmIHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIGZhbGxiYWNrQ29kZXMuZm9yRWFjaChmdW5jdGlvbiAoZmMpIHtcbiAgICAgICAgaWYgKGNvZGVzLmluZGV4T2YoZmMpIDwgMCkgYWRkQ29kZShfdGhpczIuZm9ybWF0TGFuZ3VhZ2VDb2RlKGZjKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2RlcztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGFuZ3VhZ2VVdGlsO1xufSgpO1xuXG52YXIgc2V0cyA9IFt7XG4gIGxuZ3M6IFsnYWNoJywgJ2FrJywgJ2FtJywgJ2FybicsICdicicsICdmaWwnLCAnZ3VuJywgJ2xuJywgJ21mZScsICdtZycsICdtaScsICdvYycsICdwdCcsICdwdC1CUicsICd0ZycsICd0bCcsICd0aScsICd0cicsICd1eicsICd3YSddLFxuICBucjogWzEsIDJdLFxuICBmYzogMVxufSwge1xuICBsbmdzOiBbJ2FmJywgJ2FuJywgJ2FzdCcsICdheicsICdiZycsICdibicsICdjYScsICdkYScsICdkZScsICdkZXYnLCAnZWwnLCAnZW4nLCAnZW8nLCAnZXMnLCAnZXQnLCAnZXUnLCAnZmknLCAnZm8nLCAnZnVyJywgJ2Z5JywgJ2dsJywgJ2d1JywgJ2hhJywgJ2hpJywgJ2h1JywgJ2h5JywgJ2lhJywgJ2l0JywgJ2trJywgJ2tuJywgJ2t1JywgJ2xiJywgJ21haScsICdtbCcsICdtbicsICdtcicsICduYWgnLCAnbmFwJywgJ25iJywgJ25lJywgJ25sJywgJ25uJywgJ25vJywgJ25zbycsICdwYScsICdwYXAnLCAncG1zJywgJ3BzJywgJ3B0LVBUJywgJ3JtJywgJ3NjbycsICdzZScsICdzaScsICdzbycsICdzb24nLCAnc3EnLCAnc3YnLCAnc3cnLCAndGEnLCAndGUnLCAndGsnLCAndXInLCAneW8nXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDJcbn0sIHtcbiAgbG5nczogWydheScsICdibycsICdjZ2cnLCAnZmEnLCAnaHQnLCAnaWQnLCAnamEnLCAnamJvJywgJ2thJywgJ2ttJywgJ2tvJywgJ2t5JywgJ2xvJywgJ21zJywgJ3NhaCcsICdzdScsICd0aCcsICd0dCcsICd1ZycsICd2aScsICd3bycsICd6aCddLFxuICBucjogWzFdLFxuICBmYzogM1xufSwge1xuICBsbmdzOiBbJ2JlJywgJ2JzJywgJ2NucicsICdkeicsICdocicsICdydScsICdzcicsICd1ayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNFxufSwge1xuICBsbmdzOiBbJ2FyJ10sXG4gIG5yOiBbMCwgMSwgMiwgMywgMTEsIDEwMF0sXG4gIGZjOiA1XG59LCB7XG4gIGxuZ3M6IFsnY3MnLCAnc2snXSxcbiAgbnI6IFsxLCAyLCA1XSxcbiAgZmM6IDZcbn0sIHtcbiAgbG5nczogWydjc2InLCAncGwnXSxcbiAgbnI6IFsxLCAyLCA1XSxcbiAgZmM6IDdcbn0sIHtcbiAgbG5nczogWydjeSddLFxuICBucjogWzEsIDIsIDMsIDhdLFxuICBmYzogOFxufSwge1xuICBsbmdzOiBbJ2ZyJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiA5XG59LCB7XG4gIGxuZ3M6IFsnZ2EnXSxcbiAgbnI6IFsxLCAyLCAzLCA3LCAxMV0sXG4gIGZjOiAxMFxufSwge1xuICBsbmdzOiBbJ2dkJ10sXG4gIG5yOiBbMSwgMiwgMywgMjBdLFxuICBmYzogMTFcbn0sIHtcbiAgbG5nczogWydpcyddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTJcbn0sIHtcbiAgbG5nczogWydqdiddLFxuICBucjogWzAsIDFdLFxuICBmYzogMTNcbn0sIHtcbiAgbG5nczogWydrdyddLFxuICBucjogWzEsIDIsIDMsIDRdLFxuICBmYzogMTRcbn0sIHtcbiAgbG5nczogWydsdCddLFxuICBucjogWzEsIDIsIDEwXSxcbiAgZmM6IDE1XG59LCB7XG4gIGxuZ3M6IFsnbHYnXSxcbiAgbnI6IFsxLCAyLCAwXSxcbiAgZmM6IDE2XG59LCB7XG4gIGxuZ3M6IFsnbWsnXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDE3XG59LCB7XG4gIGxuZ3M6IFsnbW5rJ10sXG4gIG5yOiBbMCwgMSwgMl0sXG4gIGZjOiAxOFxufSwge1xuICBsbmdzOiBbJ210J10sXG4gIG5yOiBbMSwgMiwgMTEsIDIwXSxcbiAgZmM6IDE5XG59LCB7XG4gIGxuZ3M6IFsnb3InXSxcbiAgbnI6IFsyLCAxXSxcbiAgZmM6IDJcbn0sIHtcbiAgbG5nczogWydybyddLFxuICBucjogWzEsIDIsIDIwXSxcbiAgZmM6IDIwXG59LCB7XG4gIGxuZ3M6IFsnc2wnXSxcbiAgbnI6IFs1LCAxLCAyLCAzXSxcbiAgZmM6IDIxXG59LCB7XG4gIGxuZ3M6IFsnaGUnLCAnaXcnXSxcbiAgbnI6IFsxLCAyLCAyMCwgMjFdLFxuICBmYzogMjJcbn1dO1xudmFyIF9ydWxlc1BsdXJhbHNUeXBlcyA9IHtcbiAgMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID4gMSk7XG4gIH0sXG4gIDI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPSAxKTtcbiAgfSxcbiAgMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIDQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICUgMTAgPj0gMiAmJiBuICUgMTAgPD0gNCAmJiAobiAlIDEwMCA8IDEwIHx8IG4gJSAxMDAgPj0gMjApID8gMSA6IDIpO1xuICB9LFxuICA1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMCA/IDAgOiBuID09IDEgPyAxIDogbiA9PSAyID8gMiA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwID8gMyA6IG4gJSAxMDAgPj0gMTEgPyA0IDogNSk7XG4gIH0sXG4gIDY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPj0gMiAmJiBuIDw9IDQgPyAxIDogMik7XG4gIH0sXG4gIDc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuICE9IDggJiYgbiAhPSAxMSA/IDIgOiAzKTtcbiAgfSxcbiAgOTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID49IDIpO1xuICB9LFxuICAxMDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gPCA3ID8gMiA6IG4gPCAxMSA/IDMgOiA0KTtcbiAgfSxcbiAgMTE6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gPT0gMTEgPyAwIDogbiA9PSAyIHx8IG4gPT0gMTIgPyAxIDogbiA+IDIgJiYgbiA8IDIwID8gMiA6IDMpO1xuICB9LFxuICAxMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgIT0gMSB8fCBuICUgMTAwID09IDExKTtcbiAgfSxcbiAgMTM6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPT0gMCk7XG4gIH0sXG4gIDE0OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA9PSAzID8gMiA6IDMpO1xuICB9LFxuICAxNTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDE2OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAhPT0gMCA/IDEgOiAyKTtcbiAgfSxcbiAgMTc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogMSk7XG4gIH0sXG4gIDE4OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMCA/IDAgOiBuID09IDEgPyAxIDogMik7XG4gIH0sXG4gIDE5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDAgfHwgbiAlIDEwMCA+IDEgJiYgbiAlIDEwMCA8IDExID8gMSA6IG4gJSAxMDAgPiAxMCAmJiBuICUgMTAwIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDIwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDAgfHwgbiAlIDEwMCA+IDAgJiYgbiAlIDEwMCA8IDIwID8gMSA6IDIpO1xuICB9LFxuICAyMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAwID09IDEgPyAxIDogbiAlIDEwMCA9PSAyID8gMiA6IG4gJSAxMDAgPT0gMyB8fCBuICUgMTAwID09IDQgPyAzIDogMCk7XG4gIH0sXG4gIDIyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogKG4gPCAwIHx8IG4gPiAxMCkgJiYgbiAlIDEwID09IDAgPyAyIDogMyk7XG4gIH1cbn07XG52YXIgZGVwcmVjYXRlZEpzb25WZXJzaW9ucyA9IFsndjEnLCAndjInLCAndjMnXTtcbnZhciBzdWZmaXhlc09yZGVyID0ge1xuICB6ZXJvOiAwLFxuICBvbmU6IDEsXG4gIHR3bzogMixcbiAgZmV3OiAzLFxuICBtYW55OiA0LFxuICBvdGhlcjogNVxufTtcblxuZnVuY3Rpb24gY3JlYXRlUnVsZXMoKSB7XG4gIHZhciBydWxlcyA9IHt9O1xuICBzZXRzLmZvckVhY2goZnVuY3Rpb24gKHNldCkge1xuICAgIHNldC5sbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgIHJ1bGVzW2xdID0ge1xuICAgICAgICBudW1iZXJzOiBzZXQubnIsXG4gICAgICAgIHBsdXJhbHM6IF9ydWxlc1BsdXJhbHNUeXBlc1tzZXQuZmNdXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG52YXIgUGx1cmFsUmVzb2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBsdXJhbFJlc29sdmVyKGxhbmd1YWdlVXRpbHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGx1cmFsUmVzb2x2ZXIpO1xuXG4gICAgdGhpcy5sYW5ndWFnZVV0aWxzID0gbGFuZ3VhZ2VVdGlscztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3BsdXJhbFJlc29sdmVyJyk7XG5cbiAgICBpZiAoKCF0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gfHwgdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID09PSAndjQnKSAmJiAodHlwZW9mIEludGwgPT09ICd1bmRlZmluZWQnIHx8ICFJbnRsLlBsdXJhbFJ1bGVzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID0gJ3YzJztcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLicpO1xuICAgIH1cblxuICAgIHRoaXMucnVsZXMgPSBjcmVhdGVSdWxlcygpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBsdXJhbFJlc29sdmVyLCBbe1xuICAgIGtleTogXCJhZGRSdWxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJ1bGUobG5nLCBvYmopIHtcbiAgICAgIHRoaXMucnVsZXNbbG5nXSA9IG9iajtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UnVsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSdWxlKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKGNvZGUsIHtcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMub3JkaW5hbCA/ICdvcmRpbmFsJyA6ICdjYXJkaW5hbCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydWxlc1tjb2RlXSB8fCB0aGlzLnJ1bGVzW3RoaXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm5lZWRzUGx1cmFsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5lZWRzUGx1cmFsKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUgJiYgcnVsZS5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLmxlbmd0aCA+IDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPiAxO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRQbHVyYWxGb3Jtc09mS2V5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBsdXJhbEZvcm1zT2ZLZXkoY29kZSwga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdWZmaXhlcyhjb2RlLCBvcHRpb25zKS5tYXAoZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5KS5jb25jYXQoc3VmZml4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXhlcyhjb2RlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHJldHVybiBydWxlLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydChmdW5jdGlvbiAocGx1cmFsQ2F0ZWdvcnkxLCBwbHVyYWxDYXRlZ29yeTIpIHtcbiAgICAgICAgICByZXR1cm4gc3VmZml4ZXNPcmRlcltwbHVyYWxDYXRlZ29yeTFdIC0gc3VmZml4ZXNPcmRlcltwbHVyYWxDYXRlZ29yeTJdO1xuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKHBsdXJhbENhdGVnb3J5KSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KF90aGlzLm9wdGlvbnMucHJlcGVuZCkuY29uY2F0KHBsdXJhbENhdGVnb3J5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlLm51bWJlcnMubWFwKGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmdldFN1ZmZpeChjb2RlLCBudW1iZXIsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN1ZmZpeFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXgoY29kZSwgY291bnQpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAocnVsZSkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5vcHRpb25zLnByZXBlbmQpLmNvbmNhdChydWxlLnNlbGVjdChjb3VudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHJ1bGUsIGNvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXIud2FybihcIm5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogXCIuY29uY2F0KGNvZGUpKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShydWxlLCBjb3VudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBpZHggPSBydWxlLm5vQWJzID8gcnVsZS5wbHVyYWxzKGNvdW50KSA6IHJ1bGUucGx1cmFscyhNYXRoLmFicyhjb3VudCkpO1xuICAgICAgdmFyIHN1ZmZpeCA9IHJ1bGUubnVtYmVyc1tpZHhdO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4ICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPT09IDIgJiYgcnVsZS5udW1iZXJzWzBdID09PSAxKSB7XG4gICAgICAgIGlmIChzdWZmaXggPT09IDIpIHtcbiAgICAgICAgICBzdWZmaXggPSAncGx1cmFsJztcbiAgICAgICAgfSBlbHNlIGlmIChzdWZmaXggPT09IDEpIHtcbiAgICAgICAgICBzdWZmaXggPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcmV0dXJuU3VmZml4ID0gZnVuY3Rpb24gcmV0dXJuU3VmZml4KCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucHJlcGVuZCAmJiBzdWZmaXgudG9TdHJpbmcoKSA/IF90aGlzMi5vcHRpb25zLnByZXBlbmQgKyBzdWZmaXgudG9TdHJpbmcoKSA6IHN1ZmZpeC50b1N0cmluZygpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YxJykge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAxKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0eXBlb2Ygc3VmZml4ID09PSAnbnVtYmVyJykgcmV0dXJuIFwiX3BsdXJhbF9cIi5jb25jYXQoc3VmZml4LnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YyJykge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlcGVuZCAmJiBpZHgudG9TdHJpbmcoKSA/IHRoaXMub3B0aW9ucy5wcmVwZW5kICsgaWR4LnRvU3RyaW5nKCkgOiBpZHgudG9TdHJpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hvdWxkVXNlSW50bEFwaVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRVc2VJbnRsQXBpKCkge1xuICAgICAgcmV0dXJuICFkZXByZWNhdGVkSnNvblZlcnNpb25zLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBsdXJhbFJlc29sdmVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDModGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkMyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxudmFyIEludGVycG9sYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW50ZXJwb2xhdG9yKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbnRlcnBvbGF0b3IpO1xuXG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnaW50ZXJwb2xhdG9yJyk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuZm9ybWF0ID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhJbnRlcnBvbGF0b3IsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIGlmICghb3B0aW9ucy5pbnRlcnBvbGF0aW9uKSBvcHRpb25zLmludGVycG9sYXRpb24gPSB7XG4gICAgICAgIGVzY2FwZVZhbHVlOiB0cnVlXG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5lc2NhcGUgPSBpT3B0cy5lc2NhcGUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZSA6IGVzY2FwZTtcbiAgICAgIHRoaXMuZXNjYXBlVmFsdWUgPSBpT3B0cy5lc2NhcGVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMuZXNjYXBlVmFsdWUgOiB0cnVlO1xuICAgICAgdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlID0gaU9wdHMudXNlUmF3VmFsdWVUb0VzY2FwZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMudXNlUmF3VmFsdWVUb0VzY2FwZSA6IGZhbHNlO1xuICAgICAgdGhpcy5wcmVmaXggPSBpT3B0cy5wcmVmaXggPyByZWdleEVzY2FwZShpT3B0cy5wcmVmaXgpIDogaU9wdHMucHJlZml4RXNjYXBlZCB8fCAne3snO1xuICAgICAgdGhpcy5zdWZmaXggPSBpT3B0cy5zdWZmaXggPyByZWdleEVzY2FwZShpT3B0cy5zdWZmaXgpIDogaU9wdHMuc3VmZml4RXNjYXBlZCB8fCAnfX0nO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgICAgdGhpcy51bmVzY2FwZVByZWZpeCA9IGlPcHRzLnVuZXNjYXBlU3VmZml4ID8gJycgOiBpT3B0cy51bmVzY2FwZVByZWZpeCB8fCAnLSc7XG4gICAgICB0aGlzLnVuZXNjYXBlU3VmZml4ID0gdGhpcy51bmVzY2FwZVByZWZpeCA/ICcnIDogaU9wdHMudW5lc2NhcGVTdWZmaXggfHwgJyc7XG4gICAgICB0aGlzLm5lc3RpbmdQcmVmaXggPSBpT3B0cy5uZXN0aW5nUHJlZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMubmVzdGluZ1ByZWZpeCkgOiBpT3B0cy5uZXN0aW5nUHJlZml4RXNjYXBlZCB8fCByZWdleEVzY2FwZSgnJHQoJyk7XG4gICAgICB0aGlzLm5lc3RpbmdTdWZmaXggPSBpT3B0cy5uZXN0aW5nU3VmZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMubmVzdGluZ1N1ZmZpeCkgOiBpT3B0cy5uZXN0aW5nU3VmZml4RXNjYXBlZCB8fCByZWdleEVzY2FwZSgnKScpO1xuICAgICAgdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA9IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yID8gaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgOiBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciB8fCAnLCc7XG4gICAgICB0aGlzLm1heFJlcGxhY2VzID0gaU9wdHMubWF4UmVwbGFjZXMgPyBpT3B0cy5tYXhSZXBsYWNlcyA6IDEwMDA7XG4gICAgICB0aGlzLmFsd2F5c0Zvcm1hdCA9IGlPcHRzLmFsd2F5c0Zvcm1hdCAhPT0gdW5kZWZpbmVkID8gaU9wdHMuYWx3YXlzRm9ybWF0IDogZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0UmVnRXhwKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucykgdGhpcy5pbml0KHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc2V0UmVnRXhwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0UmVnRXhwKCkge1xuICAgICAgdmFyIHJlZ2V4cFN0ciA9IFwiXCIuY29uY2F0KHRoaXMucHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7XG4gICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU3RyLCAnZycpO1xuICAgICAgdmFyIHJlZ2V4cFVuZXNjYXBlU3RyID0gXCJcIi5jb25jYXQodGhpcy5wcmVmaXgpLmNvbmNhdCh0aGlzLnVuZXNjYXBlUHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnVuZXNjYXBlU3VmZml4KS5jb25jYXQodGhpcy5zdWZmaXgpO1xuICAgICAgdGhpcy5yZWdleHBVbmVzY2FwZSA9IG5ldyBSZWdFeHAocmVnZXhwVW5lc2NhcGVTdHIsICdnJyk7XG4gICAgICB2YXIgbmVzdGluZ1JlZ2V4cFN0ciA9IFwiXCIuY29uY2F0KHRoaXMubmVzdGluZ1ByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy5uZXN0aW5nU3VmZml4KTtcbiAgICAgIHRoaXMubmVzdGluZ1JlZ2V4cCA9IG5ldyBSZWdFeHAobmVzdGluZ1JlZ2V4cFN0ciwgJ2cnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW50ZXJwb2xhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyLCBkYXRhLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHZhciByZXBsYWNlcztcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzIHx8IHt9O1xuXG4gICAgICBmdW5jdGlvbiByZWdleFNhZmUodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBoYW5kbGVGb3JtYXQgPSBmdW5jdGlvbiBoYW5kbGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihfdGhpcy5mb3JtYXRTZXBhcmF0b3IpIDwgMCkge1xuICAgICAgICAgIHZhciBwYXRoID0gZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuYWx3YXlzRm9ybWF0ID8gX3RoaXMuZm9ybWF0KHBhdGgsIHVuZGVmaW5lZCwgbG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIGRhdGEpLCB7fSwge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbmtleToga2V5XG4gICAgICAgICAgfSkpIDogcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwID0ga2V5LnNwbGl0KF90aGlzLmZvcm1hdFNlcGFyYXRvcik7XG4gICAgICAgIHZhciBrID0gcC5zaGlmdCgpLnRyaW0oKTtcbiAgICAgICAgdmFyIGYgPSBwLmpvaW4oX3RoaXMuZm9ybWF0U2VwYXJhdG9yKS50cmltKCk7XG4gICAgICAgIHJldHVybiBfdGhpcy5mb3JtYXQoZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwgayksIGYsIGxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpLCBkYXRhKSwge30sIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9ua2V5OiBrXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICAgIHZhciBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgPSBvcHRpb25zICYmIG9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIHx8IHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI7XG4gICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyA6IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcztcbiAgICAgIHZhciB0b2RvcyA9IFt7XG4gICAgICAgIHJlZ2V4OiB0aGlzLnJlZ2V4cFVuZXNjYXBlLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXhwLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZXNjYXBlVmFsdWUgPyByZWdleFNhZmUoX3RoaXMuZXNjYXBlKHZhbCkpIDogcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgdG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykge1xuICAgICAgICByZXBsYWNlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoID0gdG9kby5yZWdleC5leGVjKHN0cikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2hlZFZhciA9IG1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICB2YWx1ZSA9IGhhbmRsZUZvcm1hdChtYXRjaGVkVmFyKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB2YXIgdGVtcCA9IG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcihzdHIsIG1hdGNoLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycgPyB0ZW1wIDogJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShtYXRjaGVkVmFyKSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaFswXTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihcIm1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlIFwiLmNvbmNhdChtYXRjaGVkVmFyLCBcIiBmb3IgaW50ZXJwb2xhdGluZyBcIikuY29uY2F0KHN0cikpO1xuXG4gICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmICFfdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzYWZlVmFsdWUgPSB0b2RvLnNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHNhZmVWYWx1ZSk7XG5cbiAgICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCAtPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvZG8ucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBsYWNlcysrO1xuXG4gICAgICAgICAgaWYgKHJlcGxhY2VzID49IF90aGlzLm1heFJlcGxhY2VzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXN0KHN0ciwgZmMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgdmFsdWU7XG5cbiAgICAgIHZhciBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQzKHt9LCBvcHRpb25zKTtcblxuICAgICAgY2xvbmVkT3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSBjbG9uZWRPcHRpb25zLmRlZmF1bHRWYWx1ZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlSGFzT3B0aW9ucyhrZXksIGluaGVyaXRlZE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlcCA9IHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihzZXApIDwgMCkgcmV0dXJuIGtleTtcbiAgICAgICAgdmFyIGMgPSBrZXkuc3BsaXQobmV3IFJlZ0V4cChcIlwiLmNvbmNhdChzZXAsIFwiWyBdKntcIikpKTtcbiAgICAgICAgdmFyIG9wdGlvbnNTdHJpbmcgPSBcIntcIi5jb25jYXQoY1sxXSk7XG4gICAgICAgIGtleSA9IGNbMF07XG4gICAgICAgIG9wdGlvbnNTdHJpbmcgPSB0aGlzLmludGVycG9sYXRlKG9wdGlvbnNTdHJpbmcsIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB2YXIgbWF0Y2hlZFNpbmdsZVF1b3RlcyA9IG9wdGlvbnNTdHJpbmcubWF0Y2goLycvZyk7XG4gICAgICAgIHZhciBtYXRjaGVkRG91YmxlUXVvdGVzID0gb3B0aW9uc1N0cmluZy5tYXRjaCgvXCIvZyk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRTaW5nbGVRdW90ZXMgJiYgbWF0Y2hlZFNpbmdsZVF1b3Rlcy5sZW5ndGggJSAyID09PSAwICYmICFtYXRjaGVkRG91YmxlUXVvdGVzIHx8IG1hdGNoZWREb3VibGVRdW90ZXMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICAgIG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zU3RyaW5nLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb25lZE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICAgIGlmIChpbmhlcml0ZWRPcHRpb25zKSBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgaW5oZXJpdGVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSBcIi5jb25jYXQoa2V5KSwgZSk7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSkuY29uY2F0KHNlcCkuY29uY2F0KG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIGNsb25lZE9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobWF0Y2ggPSB0aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhzdHIpKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXJzID0gW107XG4gICAgICAgIHZhciBkb1JlZHVjZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChtYXRjaFswXS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSAhPT0gLTEgJiYgIS97Lip9Ly50ZXN0KG1hdGNoWzFdKSkge1xuICAgICAgICAgIHZhciByID0gbWF0Y2hbMV0uc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0udHJpbSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1hdGNoWzFdID0gci5zaGlmdCgpO1xuICAgICAgICAgIGZvcm1hdHRlcnMgPSByO1xuICAgICAgICAgIGRvUmVkdWNlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gZmMoaGFuZGxlSGFzT3B0aW9ucy5jYWxsKHRoaXMsIG1hdGNoWzFdLnRyaW0oKSwgY2xvbmVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICBpZiAodmFsdWUgJiYgbWF0Y2hbMF0gPT09IHN0ciAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuXG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwibWlzc2VkIHRvIHJlc29sdmUgXCIuY29uY2F0KG1hdGNoWzFdLCBcIiBmb3IgbmVzdGluZyBcIikuY29uY2F0KHN0cikpO1xuICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG9SZWR1Y2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZvcm1hdHRlcnMucmVkdWNlKGZ1bmN0aW9uICh2LCBmKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLmZvcm1hdCh2LCBmLCBvcHRpb25zLmxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgICAgIGludGVycG9sYXRpb25rZXk6IG1hdGNoWzFdLnRyaW0oKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0sIHZhbHVlLnRyaW0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShtYXRjaFswXSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJbnRlcnBvbGF0b3I7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkNChvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDQoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ0KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBwYXJzZUZvcm1hdFN0cihmb3JtYXRTdHIpIHtcbiAgdmFyIGZvcm1hdE5hbWUgPSBmb3JtYXRTdHIudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHZhciBmb3JtYXRPcHRpb25zID0ge307XG5cbiAgaWYgKGZvcm1hdFN0ci5pbmRleE9mKCcoJykgPiAtMSkge1xuICAgIHZhciBwID0gZm9ybWF0U3RyLnNwbGl0KCcoJyk7XG4gICAgZm9ybWF0TmFtZSA9IHBbMF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdmFyIG9wdFN0ciA9IHBbMV0uc3Vic3RyaW5nKDAsIHBbMV0ubGVuZ3RoIC0gMSk7XG5cbiAgICBpZiAoZm9ybWF0TmFtZSA9PT0gJ2N1cnJlbmN5JyAmJiBvcHRTdHIuaW5kZXhPZignOicpIDwgMCkge1xuICAgICAgaWYgKCFmb3JtYXRPcHRpb25zLmN1cnJlbmN5KSBmb3JtYXRPcHRpb25zLmN1cnJlbmN5ID0gb3B0U3RyLnRyaW0oKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdE5hbWUgPT09ICdyZWxhdGl2ZXRpbWUnICYmIG9wdFN0ci5pbmRleE9mKCc6JykgPCAwKSB7XG4gICAgICBpZiAoIWZvcm1hdE9wdGlvbnMucmFuZ2UpIGZvcm1hdE9wdGlvbnMucmFuZ2UgPSBvcHRTdHIudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb3B0cyA9IG9wdFN0ci5zcGxpdCgnOycpO1xuICAgICAgb3B0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgaWYgKCFvcHQpIHJldHVybjtcblxuICAgICAgICB2YXIgX29wdCRzcGxpdCA9IG9wdC5zcGxpdCgnOicpLFxuICAgICAgICAgICAgX29wdCRzcGxpdDIgPSBfdG9BcnJheShfb3B0JHNwbGl0KSxcbiAgICAgICAgICAgIGtleSA9IF9vcHQkc3BsaXQyWzBdLFxuICAgICAgICAgICAgcmVzdCA9IF9vcHQkc3BsaXQyLnNsaWNlKDEpO1xuXG4gICAgICAgIHZhciB2YWwgPSByZXN0LmpvaW4oJzonKS50cmltKCkucmVwbGFjZSgvXicrfCcrJC9nLCAnJyk7XG4gICAgICAgIGlmICghZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSkgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IGZhbHNlO1xuICAgICAgICBpZiAodmFsID09PSAndHJ1ZScpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSB0cnVlO1xuICAgICAgICBpZiAoIWlzTmFOKHZhbCkpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0TmFtZTogZm9ybWF0TmFtZSxcbiAgICBmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZUZvcm1hdHRlcih2YWwsIGxuZywgb3B0aW9ucykge1xuICAgIHZhciBrZXkgPSBsbmcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTtcbiAgICB2YXIgZm9ybWF0dGVyID0gY2FjaGVba2V5XTtcblxuICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXIgPSBmbihsbmcsIG9wdGlvbnMpO1xuICAgICAgY2FjaGVba2V5XSA9IGZvcm1hdHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyKHZhbCk7XG4gIH07XG59XG5cbnZhciBGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEZvcm1hdHRlcigpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybWF0dGVyKTtcblxuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2Zvcm1hdHRlcicpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5mb3JtYXRzID0ge1xuICAgICAgbnVtYmVyOiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxuZywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgY3VycmVuY3k6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG5nLCBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5J1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZGF0ZXRpbWU6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHJlbGF0aXZldGltZTogY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZ1bmN0aW9uIChsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCwgb3B0aW9ucy5yYW5nZSB8fCAnZGF5Jyk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGxpc3Q6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgfTtcbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRm9ybWF0dGVyLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoc2VydmljZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICAgIGludGVycG9sYXRpb246IHt9XG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKG5hbWUsIGZjKSB7XG4gICAgICB0aGlzLmZvcm1hdHNbbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSBmYztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkQ2FjaGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZENhY2hlZChuYW1lLCBmYykge1xuICAgICAgdGhpcy5mb3JtYXRzW25hbWUudG9Mb3dlckNhc2UoKS50cmltKCldID0gY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZjKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgX2Zvcm1hdCwgbG5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgZm9ybWF0cyA9IF9mb3JtYXQuc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gZm9ybWF0cy5yZWR1Y2UoZnVuY3Rpb24gKG1lbSwgZikge1xuICAgICAgICB2YXIgX3BhcnNlRm9ybWF0U3RyID0gcGFyc2VGb3JtYXRTdHIoZiksXG4gICAgICAgICAgICBmb3JtYXROYW1lID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE5hbWUsXG4gICAgICAgICAgICBmb3JtYXRPcHRpb25zID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgaWYgKF90aGlzLmZvcm1hdHNbZm9ybWF0TmFtZV0pIHtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkID0gbWVtO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciB2YWxPcHRpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtcyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtc1tvcHRpb25zLmludGVycG9sYXRpb25rZXldIHx8IHt9O1xuICAgICAgICAgICAgdmFyIGwgPSB2YWxPcHRpb25zLmxvY2FsZSB8fCB2YWxPcHRpb25zLmxuZyB8fCBvcHRpb25zLmxvY2FsZSB8fCBvcHRpb25zLmxuZyB8fCBsbmc7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBfdGhpcy5mb3JtYXRzW2Zvcm1hdE5hbWVdKG1lbSwgbCwgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNChfb2JqZWN0U3ByZWFkJDQoe30sIGZvcm1hdE9wdGlvbnMpLCBvcHRpb25zKSwgdmFsT3B0aW9ucykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihcInRoZXJlIHdhcyBubyBmb3JtYXQgZnVuY3Rpb24gZm9yIFwiLmNvbmNhdChmb3JtYXROYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVtO1xuICAgICAgfSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRm9ybWF0dGVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDUob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDUodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ1KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkNShPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMigpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMigpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIHJlbW92ZVBlbmRpbmcocSwgbmFtZSkge1xuICBpZiAocS5wZW5kaW5nW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICBkZWxldGUgcS5wZW5kaW5nW25hbWVdO1xuICAgIHEucGVuZGluZ0NvdW50LS07XG4gIH1cbn1cblxudmFyIENvbm5lY3RvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhDb25uZWN0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIkMihDb25uZWN0b3IpO1xuXG4gIGZ1bmN0aW9uIENvbm5lY3RvcihiYWNrZW5kLCBzdG9yZSwgc2VydmljZXMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgX3RoaXMuYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgX3RoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICBfdGhpcy5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgIF90aGlzLmxhbmd1YWdlVXRpbHMgPSBzZXJ2aWNlcy5sYW5ndWFnZVV0aWxzO1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdiYWNrZW5kQ29ubmVjdG9yJyk7XG4gICAgX3RoaXMud2FpdGluZ1JlYWRzID0gW107XG4gICAgX3RoaXMubWF4UGFyYWxsZWxSZWFkcyA9IG9wdGlvbnMubWF4UGFyYWxsZWxSZWFkcyB8fCAxMDtcbiAgICBfdGhpcy5yZWFkaW5nQ2FsbHMgPSAwO1xuICAgIF90aGlzLm1heFJldHJpZXMgPSBvcHRpb25zLm1heFJldHJpZXMgPj0gMCA/IG9wdGlvbnMubWF4UmV0cmllcyA6IDU7XG4gICAgX3RoaXMucmV0cnlUaW1lb3V0ID0gb3B0aW9ucy5yZXRyeVRpbWVvdXQgPj0gMSA/IG9wdGlvbnMucmV0cnlUaW1lb3V0IDogMzUwO1xuICAgIF90aGlzLnN0YXRlID0ge307XG4gICAgX3RoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChfdGhpcy5iYWNrZW5kICYmIF90aGlzLmJhY2tlbmQuaW5pdCkge1xuICAgICAgX3RoaXMuYmFja2VuZC5pbml0KHNlcnZpY2VzLCBvcHRpb25zLmJhY2tlbmQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb25uZWN0b3IsIFt7XG4gICAga2V5OiBcInF1ZXVlTG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBxdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB0b0xvYWQgPSB7fTtcbiAgICAgIHZhciBwZW5kaW5nID0ge307XG4gICAgICB2YXIgdG9Mb2FkTGFuZ3VhZ2VzID0ge307XG4gICAgICB2YXIgdG9Mb2FkTmFtZXNwYWNlcyA9IHt9O1xuICAgICAgbGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxuZykge1xuICAgICAgICB2YXIgaGFzQWxsTmFtZXNwYWNlcyA9IHRydWU7XG4gICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFwiXCIuY29uY2F0KGxuZywgXCJ8XCIpLmNvbmNhdChucyk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMucmVsb2FkICYmIF90aGlzMi5zdG9yZS5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5zdGF0ZVtuYW1lXSA8IDApIDsgZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocGVuZGluZ1tuYW1lXSA9PT0gdW5kZWZpbmVkKSBwZW5kaW5nW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMTtcbiAgICAgICAgICAgIGhhc0FsbE5hbWVzcGFjZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nW25hbWVdID09PSB1bmRlZmluZWQpIHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB0b0xvYWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZE5hbWVzcGFjZXNbbnNdID09PSB1bmRlZmluZWQpIHRvTG9hZE5hbWVzcGFjZXNbbnNdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc0FsbE5hbWVzcGFjZXMpIHRvTG9hZExhbmd1YWdlc1tsbmddID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXModG9Mb2FkKS5sZW5ndGggfHwgT2JqZWN0LmtleXMocGVuZGluZykubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucXVldWUucHVzaCh7XG4gICAgICAgICAgcGVuZGluZzogcGVuZGluZyxcbiAgICAgICAgICBwZW5kaW5nQ291bnQ6IE9iamVjdC5rZXlzKHBlbmRpbmcpLmxlbmd0aCxcbiAgICAgICAgICBsb2FkZWQ6IHt9LFxuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0xvYWQ6IE9iamVjdC5rZXlzKHRvTG9hZCksXG4gICAgICAgIHBlbmRpbmc6IE9iamVjdC5rZXlzKHBlbmRpbmcpLFxuICAgICAgICB0b0xvYWRMYW5ndWFnZXM6IE9iamVjdC5rZXlzKHRvTG9hZExhbmd1YWdlcyksXG4gICAgICAgIHRvTG9hZE5hbWVzcGFjZXM6IE9iamVjdC5rZXlzKHRvTG9hZE5hbWVzcGFjZXMpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZGVkKG5hbWUsIGVyciwgZGF0YSkge1xuICAgICAgdmFyIHMgPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICB2YXIgbG5nID0gc1swXTtcbiAgICAgIHZhciBucyA9IHNbMV07XG4gICAgICBpZiAoZXJyKSB0aGlzLmVtaXQoJ2ZhaWxlZExvYWRpbmcnLCBsbmcsIG5zLCBlcnIpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlW25hbWVdID0gZXJyID8gLTEgOiAyO1xuICAgICAgdmFyIGxvYWRlZCA9IHt9O1xuICAgICAgdGhpcy5xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIHB1c2hQYXRoKHEubG9hZGVkLCBbbG5nXSwgbnMpO1xuICAgICAgICByZW1vdmVQZW5kaW5nKHEsIG5hbWUpO1xuICAgICAgICBpZiAoZXJyKSBxLmVycm9ycy5wdXNoKGVycik7XG5cbiAgICAgICAgaWYgKHEucGVuZGluZ0NvdW50ID09PSAwICYmICFxLmRvbmUpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhxLmxvYWRlZCkuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgaWYgKCFsb2FkZWRbbF0pIGxvYWRlZFtsXSA9IHt9O1xuICAgICAgICAgICAgdmFyIGxvYWRlZEtleXMgPSBxLmxvYWRlZFtsXTtcblxuICAgICAgICAgICAgaWYgKGxvYWRlZEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxvYWRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGVkW2xdW25zXSA9PT0gdW5kZWZpbmVkKSBsb2FkZWRbbF1bbnNdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChxLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHEuY2FsbGJhY2socS5lcnJvcnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxLmNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgbG9hZGVkKTtcbiAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcihmdW5jdGlvbiAocSkge1xuICAgICAgICByZXR1cm4gIXEuZG9uZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQobG5nLCBucywgZmNOYW1lKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyaWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAwO1xuICAgICAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRoaXMucmV0cnlUaW1lb3V0O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWxuZy5sZW5ndGgpIHJldHVybiBjYWxsYmFjayhudWxsLCB7fSk7XG5cbiAgICAgIGlmICh0aGlzLnJlYWRpbmdDYWxscyA+PSB0aGlzLm1heFBhcmFsbGVsUmVhZHMpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7XG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgIGZjTmFtZTogZmNOYW1lLFxuICAgICAgICAgIHRyaWVkOiB0cmllZCxcbiAgICAgICAgICB3YWl0OiB3YWl0LFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlYWRpbmdDYWxscysrO1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFtmY05hbWVdKGxuZywgbnMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgX3RoaXMzLnJlYWRpbmdDYWxscy0tO1xuXG4gICAgICAgIGlmIChfdGhpczMud2FpdGluZ1JlYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IF90aGlzMy53YWl0aW5nUmVhZHMuc2hpZnQoKTtcblxuICAgICAgICAgIF90aGlzMy5yZWFkKG5leHQubG5nLCBuZXh0Lm5zLCBuZXh0LmZjTmFtZSwgbmV4dC50cmllZCwgbmV4dC53YWl0LCBuZXh0LmNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIgJiYgZGF0YSAmJiB0cmllZCA8IF90aGlzMy5tYXhSZXRyaWVzKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczMucmVhZC5jYWxsKF90aGlzMywgbG5nLCBucywgZmNOYW1lLCB0cmllZCArIDEsIHdhaXQgKiAyLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwcmVwYXJlTG9hZGluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmJhY2tlbmQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy4nKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2VzID09PSAnc3RyaW5nJykgbGFuZ3VhZ2VzID0gdGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsYW5ndWFnZXMpO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJykgbmFtZXNwYWNlcyA9IFtuYW1lc3BhY2VzXTtcbiAgICAgIHZhciB0b0xvYWQgPSB0aGlzLnF1ZXVlTG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF0b0xvYWQudG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoIXRvTG9hZC5wZW5kaW5nLmxlbmd0aCkgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRvTG9hZC50b0xvYWQuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBfdGhpczQubG9hZE9uZShuYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5wcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIHt9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5wcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIHtcbiAgICAgICAgcmVsb2FkOiB0cnVlXG4gICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRPbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZE9uZShuYW1lKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIHByZWZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gICAgICB2YXIgcyA9IG5hbWUuc3BsaXQoJ3wnKTtcbiAgICAgIHZhciBsbmcgPSBzWzBdO1xuICAgICAgdmFyIG5zID0gc1sxXTtcbiAgICAgIHRoaXMucmVhZChsbmcsIG5zLCAncmVhZCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIF90aGlzNS5sb2dnZXIud2FybihcIlwiLmNvbmNhdChwcmVmaXgsIFwibG9hZGluZyBuYW1lc3BhY2UgXCIpLmNvbmNhdChucywgXCIgZm9yIGxhbmd1YWdlIFwiKS5jb25jYXQobG5nLCBcIiBmYWlsZWRcIiksIGVycik7XG4gICAgICAgIGlmICghZXJyICYmIGRhdGEpIF90aGlzNS5sb2dnZXIubG9nKFwiXCIuY29uY2F0KHByZWZpeCwgXCJsb2FkZWQgbmFtZXNwYWNlIFwiKS5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZyksIGRhdGEpO1xuXG4gICAgICAgIF90aGlzNS5sb2FkZWQobmFtZSwgZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzYXZlTWlzc2luZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzYXZlTWlzc2luZyhsYW5ndWFnZXMsIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlLCBpc1VwZGF0ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuXG4gICAgICBpZiAodGhpcy5zZXJ2aWNlcy51dGlscyAmJiB0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSAmJiAhdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UobmFtZXNwYWNlKSkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiZGlkIG5vdCBzYXZlIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGFzIHRoZSBuYW1lc3BhY2UgXFxcIlwiKS5jb25jYXQobmFtZXNwYWNlLCBcIlxcXCIgd2FzIG5vdCB5ZXQgbG9hZGVkXCIpLCAnVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCB8fCBrZXkgPT09ICcnKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLmJhY2tlbmQgJiYgdGhpcy5iYWNrZW5kLmNyZWF0ZSkge1xuICAgICAgICB0aGlzLmJhY2tlbmQuY3JlYXRlKGxhbmd1YWdlcywgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUsIG51bGwsIF9vYmplY3RTcHJlYWQkNShfb2JqZWN0U3ByZWFkJDUoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIGlzVXBkYXRlOiBpc1VwZGF0ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbGFuZ3VhZ2VzIHx8ICFsYW5ndWFnZXNbMF0pIHJldHVybjtcbiAgICAgIHRoaXMuc3RvcmUuYWRkUmVzb3VyY2UobGFuZ3VhZ2VzWzBdLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbm5lY3Rvcjtcbn0oRXZlbnRFbWl0dGVyKTtcblxuZnVuY3Rpb24gZ2V0KCkge1xuICByZXR1cm4ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBpbml0SW1tZWRpYXRlOiB0cnVlLFxuICAgIG5zOiBbJ3RyYW5zbGF0aW9uJ10sXG4gICAgZGVmYXVsdE5TOiBbJ3RyYW5zbGF0aW9uJ10sXG4gICAgZmFsbGJhY2tMbmc6IFsnZGV2J10sXG4gICAgZmFsbGJhY2tOUzogZmFsc2UsXG4gICAgc3VwcG9ydGVkTG5nczogZmFsc2UsXG4gICAgbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiBmYWxzZSxcbiAgICBsb2FkOiAnYWxsJyxcbiAgICBwcmVsb2FkOiBmYWxzZSxcbiAgICBzaW1wbGlmeVBsdXJhbFN1ZmZpeDogdHJ1ZSxcbiAgICBrZXlTZXBhcmF0b3I6ICcuJyxcbiAgICBuc1NlcGFyYXRvcjogJzonLFxuICAgIHBsdXJhbFNlcGFyYXRvcjogJ18nLFxuICAgIGNvbnRleHRTZXBhcmF0b3I6ICdfJyxcbiAgICBwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczogZmFsc2UsXG4gICAgc2F2ZU1pc3Npbmc6IGZhbHNlLFxuICAgIHVwZGF0ZU1pc3Npbmc6IGZhbHNlLFxuICAgIHNhdmVNaXNzaW5nVG86ICdmYWxsYmFjaycsXG4gICAgc2F2ZU1pc3NpbmdQbHVyYWxzOiB0cnVlLFxuICAgIG1pc3NpbmdLZXlIYW5kbGVyOiBmYWxzZSxcbiAgICBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6IGZhbHNlLFxuICAgIHBvc3RQcm9jZXNzOiBmYWxzZSxcbiAgICBwb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZDogZmFsc2UsXG4gICAgcmV0dXJuTnVsbDogdHJ1ZSxcbiAgICByZXR1cm5FbXB0eVN0cmluZzogdHJ1ZSxcbiAgICByZXR1cm5PYmplY3RzOiBmYWxzZSxcbiAgICBqb2luQXJyYXlzOiBmYWxzZSxcbiAgICByZXR1cm5lZE9iamVjdEhhbmRsZXI6IGZhbHNlLFxuICAgIHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLFxuICAgIGFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleTogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU6IGZhbHNlLFxuICAgIG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgaWYgKF90eXBlb2YoYXJnc1sxXSkgPT09ICdvYmplY3QnKSByZXQgPSBhcmdzWzFdO1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykgcmV0LmRlZmF1bHRWYWx1ZSA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMl0gPT09ICdzdHJpbmcnKSByZXQudERlc2NyaXB0aW9uID0gYXJnc1syXTtcblxuICAgICAgaWYgKF90eXBlb2YoYXJnc1syXSkgPT09ICdvYmplY3QnIHx8IF90eXBlb2YoYXJnc1szXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJnc1szXSB8fCBhcmdzWzJdO1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXRba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgICBlc2NhcGVWYWx1ZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBfZm9ybWF0LCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHByZWZpeDogJ3t7JyxcbiAgICAgIHN1ZmZpeDogJ319JyxcbiAgICAgIGZvcm1hdFNlcGFyYXRvcjogJywnLFxuICAgICAgdW5lc2NhcGVQcmVmaXg6ICctJyxcbiAgICAgIG5lc3RpbmdQcmVmaXg6ICckdCgnLFxuICAgICAgbmVzdGluZ1N1ZmZpeDogJyknLFxuICAgICAgbmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6ICcsJyxcbiAgICAgIG1heFJlcGxhY2VzOiAxMDAwLFxuICAgICAgc2tpcE9uVmFyaWFibGVzOiB0cnVlXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMubnMgPSBbb3B0aW9ucy5uc107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja0xuZyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tMbmcgPSBbb3B0aW9ucy5mYWxsYmFja0xuZ107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja05TID09PSAnc3RyaW5nJykgb3B0aW9ucy5mYWxsYmFja05TID0gW29wdGlvbnMuZmFsbGJhY2tOU107XG5cbiAgaWYgKG9wdGlvbnMuc3VwcG9ydGVkTG5ncyAmJiBvcHRpb25zLnN1cHBvcnRlZExuZ3MuaW5kZXhPZignY2ltb2RlJykgPCAwKSB7XG4gICAgb3B0aW9ucy5zdXBwb3J0ZWRMbmdzID0gb3B0aW9ucy5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbJ2NpbW9kZSddKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzJDYob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDYodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ2KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkNihPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDMoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMygpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMygpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiBiaW5kTWVtYmVyRnVuY3Rpb25zKGluc3QpIHtcbiAgdmFyIG1lbXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdCkpO1xuICBtZW1zLmZvckVhY2goZnVuY3Rpb24gKG1lbSkge1xuICAgIGlmICh0eXBlb2YgaW5zdFttZW1dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbnN0W21lbV0gPSBpbnN0W21lbV0uYmluZChpbnN0KTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgSTE4biA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhJMThuLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDMoSTE4bik7XG5cbiAgZnVuY3Rpb24gSTE4bigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSTE4bik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLm9wdGlvbnMgPSB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpO1xuICAgIF90aGlzLnNlcnZpY2VzID0ge307XG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlcjtcbiAgICBfdGhpcy5tb2R1bGVzID0ge1xuICAgICAgZXh0ZXJuYWw6IFtdXG4gICAgfTtcbiAgICBiaW5kTWVtYmVyRnVuY3Rpb25zKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcblxuICAgIGlmIChjYWxsYmFjayAmJiAhX3RoaXMuaXNJbml0aWFsaXplZCAmJiAhb3B0aW9ucy5pc0Nsb25lKSB7XG4gICAgICBpZiAoIV90aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgICBfdGhpcy5pbml0KG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEkxOG4sIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdE5TICYmIG9wdGlvbnMuZGVmYXVsdE5TICE9PSBmYWxzZSAmJiBvcHRpb25zLm5zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBvcHRpb25zLmRlZmF1bHROUyA9IG9wdGlvbnMubnM7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ucy5pbmRleE9mKCd0cmFuc2xhdGlvbicpIDwgMCkge1xuICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdE5TID0gb3B0aW9ucy5uc1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZGVmT3B0cyA9IGdldCgpO1xuICAgICAgdGhpcy5vcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIGRlZk9wdHMpLCB0aGlzLm9wdGlvbnMpLCB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJICE9PSAndjEnKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNih7fSwgZGVmT3B0cy5pbnRlcnBvbGF0aW9uKSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3IgPSBvcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubnNTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzT25EZW1hbmQoQ2xhc3NPck9iamVjdCkge1xuICAgICAgICBpZiAoIUNsYXNzT3JPYmplY3QpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIENsYXNzT3JPYmplY3QgPT09ICdmdW5jdGlvbicpIHJldHVybiBuZXcgQ2xhc3NPck9iamVjdCgpO1xuICAgICAgICByZXR1cm4gQ2xhc3NPck9iamVjdDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaXNDbG9uZSkge1xuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxvZ2dlcikge1xuICAgICAgICAgIGJhc2VMb2dnZXIuaW5pdChjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sb2dnZXIpLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VMb2dnZXIuaW5pdChudWxsLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvcm1hdHRlcjtcblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmZvcm1hdHRlcikge1xuICAgICAgICAgIGZvcm1hdHRlciA9IHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgZm9ybWF0dGVyID0gRm9ybWF0dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGx1ID0gbmV3IExhbmd1YWdlVXRpbCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0b3JlID0gbmV3IFJlc291cmNlU3RvcmUodGhpcy5vcHRpb25zLnJlc291cmNlcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnNlcnZpY2VzO1xuICAgICAgICBzLmxvZ2dlciA9IGJhc2VMb2dnZXI7XG4gICAgICAgIHMucmVzb3VyY2VTdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHMubGFuZ3VhZ2VVdGlscyA9IGx1O1xuICAgICAgICBzLnBsdXJhbFJlc29sdmVyID0gbmV3IFBsdXJhbFJlc29sdmVyKGx1LCB7XG4gICAgICAgICAgcHJlcGVuZDogdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcixcbiAgICAgICAgICBjb21wYXRpYmlsaXR5SlNPTjogdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLFxuICAgICAgICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZvcm1hdHRlciAmJiAoIXRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCB8fCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgPT09IGRlZk9wdHMuaW50ZXJwb2xhdGlvbi5mb3JtYXQpKSB7XG4gICAgICAgICAgcy5mb3JtYXR0ZXIgPSBjcmVhdGVDbGFzc09uRGVtYW5kKGZvcm1hdHRlcik7XG4gICAgICAgICAgcy5mb3JtYXR0ZXIuaW5pdChzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCA9IHMuZm9ybWF0dGVyLmZvcm1hdC5iaW5kKHMuZm9ybWF0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHMuaW50ZXJwb2xhdG9yID0gbmV3IEludGVycG9sYXRvcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBzLnV0aWxzID0ge1xuICAgICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogdGhpcy5oYXNMb2FkZWROYW1lc3BhY2UuYmluZCh0aGlzKVxuICAgICAgICB9O1xuICAgICAgICBzLmJhY2tlbmRDb25uZWN0b3IgPSBuZXcgQ29ubmVjdG9yKGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmJhY2tlbmQpLCBzLnJlc291cmNlU3RvcmUsIHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHMuYmFja2VuZENvbm5lY3Rvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpIHtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IgPSBjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKTtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChzLCB0aGlzLm9wdGlvbnMuZGV0ZWN0aW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSB7XG4gICAgICAgICAgcy5pMThuRm9ybWF0ID0gY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCk7XG4gICAgICAgICAgaWYgKHMuaTE4bkZvcm1hdC5pbml0KSBzLmkxOG5Gb3JtYXQuaW5pdCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yKHRoaXMuc2VydmljZXMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmV4dGVybmFsLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICBpZiAobS5pbml0KSBtLmluaXQoX3RoaXMyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0O1xuICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBub29wO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nICYmICF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMub3B0aW9ucy5sbmcpIHtcbiAgICAgICAgdmFyIGNvZGVzID0gdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgaWYgKGNvZGVzLmxlbmd0aCA+IDAgJiYgY29kZXNbMF0gIT09ICdkZXYnKSB0aGlzLm9wdGlvbnMubG5nID0gY29kZXNbMF07XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmICF0aGlzLm9wdGlvbnMubG5nKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2luaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWQnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0b3JlQXBpID0gWydnZXRSZXNvdXJjZScsICdoYXNSZXNvdXJjZUJ1bmRsZScsICdnZXRSZXNvdXJjZUJ1bmRsZScsICdnZXREYXRhQnlMYW5ndWFnZSddO1xuICAgICAgc3RvcmVBcGkuZm9yRWFjaChmdW5jdGlvbiAoZmNOYW1lKSB7XG4gICAgICAgIF90aGlzMltmY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpczIkc3RvcmU7XG5cbiAgICAgICAgICByZXR1cm4gKF90aGlzMiRzdG9yZSA9IF90aGlzMi5zdG9yZSlbZmNOYW1lXS5hcHBseShfdGhpczIkc3RvcmUsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHZhciBzdG9yZUFwaUNoYWluZWQgPSBbJ2FkZFJlc291cmNlJywgJ2FkZFJlc291cmNlcycsICdhZGRSZXNvdXJjZUJ1bmRsZScsICdyZW1vdmVSZXNvdXJjZUJ1bmRsZSddO1xuICAgICAgc3RvcmVBcGlDaGFpbmVkLmZvckVhY2goZnVuY3Rpb24gKGZjTmFtZSkge1xuICAgICAgICBfdGhpczJbZmNOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyJHN0b3JlMjtcblxuICAgICAgICAgIChfdGhpczIkc3RvcmUyID0gX3RoaXMyLnN0b3JlKVtmY05hbWVdLmFwcGx5KF90aGlzMiRzdG9yZTIsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXMyO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuXG4gICAgICB2YXIgbG9hZCA9IGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgIHZhciBmaW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goZXJyLCB0KSB7XG4gICAgICAgICAgaWYgKF90aGlzMi5pc0luaXRpYWxpemVkICYmICFfdGhpczIuaW5pdGlhbGl6ZWRTdG9yZU9uY2UpIF90aGlzMi5sb2dnZXIud2FybignaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhJyk7XG4gICAgICAgICAgX3RoaXMyLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMuaXNDbG9uZSkgX3RoaXMyLmxvZ2dlci5sb2coJ2luaXRpYWxpemVkJywgX3RoaXMyLm9wdGlvbnMpO1xuXG4gICAgICAgICAgX3RoaXMyLmVtaXQoJ2luaXRpYWxpemVkJywgX3RoaXMyLm9wdGlvbnMpO1xuXG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSh0KTtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChfdGhpczIubGFuZ3VhZ2VzICYmIF90aGlzMi5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScgJiYgIV90aGlzMi5pc0luaXRpYWxpemVkKSByZXR1cm4gZmluaXNoKG51bGwsIF90aGlzMi50LmJpbmQoX3RoaXMyKSk7XG5cbiAgICAgICAgX3RoaXMyLmNoYW5nZUxhbmd1YWdlKF90aGlzMi5vcHRpb25zLmxuZywgZmluaXNoKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8ICF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgICBsb2FkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGxvYWQsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZFJlc291cmNlcyhsYW5ndWFnZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbm9vcDtcbiAgICAgIHZhciB1c2VkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIHZhciB1c2VkTG5nID0gdHlwZW9mIGxhbmd1YWdlID09PSAnc3RyaW5nJyA/IGxhbmd1YWdlIDogdGhpcy5sYW5ndWFnZTtcbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2UgPT09ICdmdW5jdGlvbicpIHVzZWRDYWxsYmFjayA9IGxhbmd1YWdlO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXNvdXJjZXMgfHwgdGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSB7XG4gICAgICAgIGlmICh1c2VkTG5nICYmIHVzZWRMbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB1c2VkQ2FsbGJhY2soKTtcbiAgICAgICAgdmFyIHRvTG9hZCA9IFtdO1xuXG4gICAgICAgIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobG5nKSB7XG4gICAgICAgICAgaWYgKCFsbmcpIHJldHVybjtcblxuICAgICAgICAgIHZhciBsbmdzID0gX3RoaXMzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGxuZyk7XG5cbiAgICAgICAgICBsbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihsKSA8IDApIHRvTG9hZC5wdXNoKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdXNlZExuZykge1xuICAgICAgICAgIHZhciBmYWxsYmFja3MgPSB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICAgIGZhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwcGVuZCh1c2VkTG5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJlbG9hZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmVsb2FkLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmQobCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IubG9hZCh0b0xvYWQsIHRoaXMub3B0aW9ucy5ucywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoIWUgJiYgIV90aGlzMy5yZXNvbHZlZExhbmd1YWdlICYmIF90aGlzMy5sYW5ndWFnZSkgX3RoaXMzLnNldFJlc29sdmVkTGFuZ3VhZ2UoX3RoaXMzLmxhbmd1YWdlKTtcbiAgICAgICAgICB1c2VkQ2FsbGJhY2soZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXNlZENhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWxvYWRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkUmVzb3VyY2VzKGxuZ3MsIG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcbiAgICAgIGlmICghbG5ncykgbG5ncyA9IHRoaXMubGFuZ3VhZ2VzO1xuICAgICAgaWYgKCFucykgbnMgPSB0aGlzLm9wdGlvbnMubnM7XG4gICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3A7XG4gICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IucmVsb2FkKGxuZ3MsIG5zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1c2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXNlKG1vZHVsZSkge1xuICAgICAgaWYgKCFtb2R1bGUpIHRocm93IG5ldyBFcnJvcignWW91IGFyZSBwYXNzaW5nIGFuIHVuZGVmaW5lZCBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpJyk7XG4gICAgICBpZiAoIW1vZHVsZS50eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgcGFzc2luZyBhIHdyb25nIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKCknKTtcblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnYmFja2VuZCcpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmJhY2tlbmQgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2xvZ2dlcicgfHwgbW9kdWxlLmxvZyAmJiBtb2R1bGUud2FybiAmJiBtb2R1bGUuZXJyb3IpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmxvZ2dlciA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnbGFuZ3VhZ2VEZXRlY3RvcicpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2kxOG5Gb3JtYXQnKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5pMThuRm9ybWF0ID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdwb3N0UHJvY2Vzc29yJykge1xuICAgICAgICBwb3N0UHJvY2Vzc29yLmFkZFBvc3RQcm9jZXNzb3IobW9kdWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnZm9ybWF0dGVyJykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuZm9ybWF0dGVyID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICczcmRQYXJ0eScpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmV4dGVybmFsLnB1c2gobW9kdWxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFJlc29sdmVkTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVzb2x2ZWRMYW5ndWFnZShsKSB7XG4gICAgICBpZiAoIWwgfHwgIXRoaXMubGFuZ3VhZ2VzKSByZXR1cm47XG4gICAgICBpZiAoWydjaW1vZGUnLCAnZGV2J10uaW5kZXhPZihsKSA+IC0xKSByZXR1cm47XG5cbiAgICAgIGZvciAodmFyIGxpID0gMDsgbGkgPCB0aGlzLmxhbmd1YWdlcy5sZW5ndGg7IGxpKyspIHtcbiAgICAgICAgdmFyIGxuZ0luTG5ncyA9IHRoaXMubGFuZ3VhZ2VzW2xpXTtcbiAgICAgICAgaWYgKFsnY2ltb2RlJywgJ2RldiddLmluZGV4T2YobG5nSW5MbmdzKSA+IC0xKSBjb250aW51ZTtcblxuICAgICAgICBpZiAodGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnMobG5nSW5MbmdzKSkge1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRMYW5ndWFnZSA9IGxuZ0luTG5ncztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjaGFuZ2VMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VMYW5ndWFnZShsbmcsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbyA9IGxuZztcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICB0aGlzLmVtaXQoJ2xhbmd1YWdlQ2hhbmdpbmcnLCBsbmcpO1xuXG4gICAgICB2YXIgc2V0TG5nUHJvcHMgPSBmdW5jdGlvbiBzZXRMbmdQcm9wcyhsKSB7XG4gICAgICAgIF90aGlzNC5sYW5ndWFnZSA9IGw7XG4gICAgICAgIF90aGlzNC5sYW5ndWFnZXMgPSBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobCk7XG4gICAgICAgIF90aGlzNC5yZXNvbHZlZExhbmd1YWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIF90aGlzNC5zZXRSZXNvbHZlZExhbmd1YWdlKGwpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGRvbmUgPSBmdW5jdGlvbiBkb25lKGVyciwgbCkge1xuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIHNldExuZ1Byb3BzKGwpO1xuXG4gICAgICAgICAgX3RoaXM0LnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobCk7XG5cbiAgICAgICAgICBfdGhpczQuaXNMYW5ndWFnZUNoYW5naW5nVG8gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBfdGhpczQuZW1pdCgnbGFuZ3VhZ2VDaGFuZ2VkJywgbCk7XG5cbiAgICAgICAgICBfdGhpczQubG9nZ2VyLmxvZygnbGFuZ3VhZ2VDaGFuZ2VkJywgbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC50LmFwcGx5KF90aGlzNCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC50LmFwcGx5KF90aGlzNCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgc2V0TG5nID0gZnVuY3Rpb24gc2V0TG5nKGxuZ3MpIHtcbiAgICAgICAgaWYgKCFsbmcgJiYgIWxuZ3MgJiYgX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IpIGxuZ3MgPSBbXTtcbiAgICAgICAgdmFyIGwgPSB0eXBlb2YgbG5ncyA9PT0gJ3N0cmluZycgPyBsbmdzIDogX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKGxuZ3MpO1xuXG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczQubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHNldExuZ1Byb3BzKGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghX3RoaXM0LnRyYW5zbGF0b3IubGFuZ3VhZ2UpIF90aGlzNC50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKGwpO1xuICAgICAgICAgIGlmIChfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvcikgX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UobCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczQubG9hZFJlc291cmNlcyhsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZG9uZShlcnIsIGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jKSB7XG4gICAgICAgIHNldExuZyh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpO1xuICAgICAgfSBlbHNlIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmMpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChzZXRMbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0TG5nKGxuZyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Rml4ZWRUXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpeGVkVChsbmcsIG5zLCBrZXlQcmVmaXgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgZml4ZWRUID0gZnVuY3Rpb24gZml4ZWRUKGtleSwgb3B0cykge1xuICAgICAgICB2YXIgb3B0aW9ucztcblxuICAgICAgICBpZiAoX3R5cGVvZihvcHRzKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICAgICAgcmVzdFtfa2V5MyAtIDJdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zID0gX3RoaXM1Lm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoW2tleSwgb3B0c10uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KHt9LCBvcHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMubG5nID0gb3B0aW9ucy5sbmcgfHwgZml4ZWRULmxuZztcbiAgICAgICAgb3B0aW9ucy5sbmdzID0gb3B0aW9ucy5sbmdzIHx8IGZpeGVkVC5sbmdzO1xuICAgICAgICBvcHRpb25zLm5zID0gb3B0aW9ucy5ucyB8fCBmaXhlZFQubnM7XG4gICAgICAgIG9wdGlvbnMua2V5UHJlZml4ID0gb3B0aW9ucy5rZXlQcmVmaXggfHwga2V5UHJlZml4IHx8IGZpeGVkVC5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBfdGhpczUub3B0aW9ucy5rZXlTZXBhcmF0b3IgfHwgJy4nO1xuICAgICAgICB2YXIgcmVzdWx0S2V5ID0gb3B0aW9ucy5rZXlQcmVmaXggPyBcIlwiLmNvbmNhdChvcHRpb25zLmtleVByZWZpeCkuY29uY2F0KGtleVNlcGFyYXRvcikuY29uY2F0KGtleSkgOiBrZXk7XG4gICAgICAgIHJldHVybiBfdGhpczUudChyZXN1bHRLZXksIG9wdGlvbnMpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBsbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZpeGVkVC5sbmcgPSBsbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhlZFQubG5ncyA9IGxuZztcbiAgICAgIH1cblxuICAgICAgZml4ZWRULm5zID0gbnM7XG4gICAgICBmaXhlZFQua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICAgICAgcmV0dXJuIGZpeGVkVDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0KCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3I7XG5cbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0b3IgJiYgKF90aGlzJHRyYW5zbGF0b3IgPSB0aGlzLnRyYW5zbGF0b3IpLnRyYW5zbGF0ZS5hcHBseShfdGhpcyR0cmFuc2xhdG9yLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3IyO1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yICYmIChfdGhpcyR0cmFuc2xhdG9yMiA9IHRoaXMudHJhbnNsYXRvcikuZXhpc3RzLmFwcGx5KF90aGlzJHRyYW5zbGF0b3IyLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXREZWZhdWx0TmFtZXNwYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlZmF1bHROYW1lc3BhY2UobnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kZWZhdWx0TlMgPSBucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzTG9hZGVkTmFtZXNwYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0xvYWRlZE5hbWVzcGFjZShucykge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWQnLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmxhbmd1YWdlcyB8fCAhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2hhc0xvYWRlZE5hbWVzcGFjZTogaTE4bi5sYW5ndWFnZXMgd2VyZSB1bmRlZmluZWQgb3IgZW1wdHknLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxuZyA9IHRoaXMucmVzb2x2ZWRMYW5ndWFnZSB8fCB0aGlzLmxhbmd1YWdlc1swXTtcbiAgICAgIHZhciBmYWxsYmFja0xuZyA9IHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyA6IGZhbHNlO1xuICAgICAgdmFyIGxhc3RMbmcgPSB0aGlzLmxhbmd1YWdlc1t0aGlzLmxhbmd1YWdlcy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB0cnVlO1xuXG4gICAgICB2YXIgbG9hZE5vdFBlbmRpbmcgPSBmdW5jdGlvbiBsb2FkTm90UGVuZGluZyhsLCBuKSB7XG4gICAgICAgIHZhciBsb2FkU3RhdGUgPSBfdGhpczYuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtcIlwiLmNvbmNhdChsLCBcInxcIikuY29uY2F0KG4pXTtcblxuICAgICAgICByZXR1cm4gbG9hZFN0YXRlID09PSAtMSB8fCBsb2FkU3RhdGUgPT09IDI7XG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucy5wcmVjaGVjaykge1xuICAgICAgICB2YXIgcHJlUmVzdWx0ID0gb3B0aW9ucy5wcmVjaGVjayh0aGlzLCBsb2FkTm90UGVuZGluZyk7XG4gICAgICAgIGlmIChwcmVSZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHByZVJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCB8fCB0aGlzLm9wdGlvbnMucmVzb3VyY2VzICYmICF0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGxvYWROb3RQZW5kaW5nKGxuZywgbnMpICYmICghZmFsbGJhY2tMbmcgfHwgbG9hZE5vdFBlbmRpbmcobGFzdExuZywgbnMpKSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWROYW1lc3BhY2VzKG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLm5zKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBucyA9PT0gJ3N0cmluZycpIG5zID0gW25zXTtcbiAgICAgIG5zLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgaWYgKF90aGlzNy5vcHRpb25zLm5zLmluZGV4T2YobikgPCAwKSBfdGhpczcub3B0aW9ucy5ucy5wdXNoKG4pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkTGFuZ3VhZ2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRMYW5ndWFnZXMobG5ncywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAodHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnKSBsbmdzID0gW2xuZ3NdO1xuICAgICAgdmFyIHByZWxvYWRlZCA9IHRoaXMub3B0aW9ucy5wcmVsb2FkIHx8IFtdO1xuICAgICAgdmFyIG5ld0xuZ3MgPSBsbmdzLmZpbHRlcihmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHJldHVybiBwcmVsb2FkZWQuaW5kZXhPZihsbmcpIDwgMDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5ld0xuZ3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZCA9IHByZWxvYWRlZC5jb25jYXQobmV3TG5ncyk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkaXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlyKGxuZykge1xuICAgICAgaWYgKCFsbmcpIGxuZyA9IHRoaXMucmVzb2x2ZWRMYW5ndWFnZSB8fCAodGhpcy5sYW5ndWFnZXMgJiYgdGhpcy5sYW5ndWFnZXMubGVuZ3RoID4gMCA/IHRoaXMubGFuZ3VhZ2VzWzBdIDogdGhpcy5sYW5ndWFnZSk7XG4gICAgICBpZiAoIWxuZykgcmV0dXJuICdydGwnO1xuICAgICAgdmFyIHJ0bExuZ3MgPSBbJ2FyJywgJ3NodScsICdzcXInLCAnc3NoJywgJ3hhYScsICd5aGQnLCAneXVkJywgJ2FhbycsICdhYmgnLCAnYWJ2JywgJ2FjbScsICdhY3EnLCAnYWN3JywgJ2FjeCcsICdhY3knLCAnYWRmJywgJ2FkcycsICdhZWInLCAnYWVjJywgJ2FmYicsICdhanAnLCAnYXBjJywgJ2FwZCcsICdhcmInLCAnYXJxJywgJ2FycycsICdhcnknLCAnYXJ6JywgJ2F1eicsICdhdmwnLCAnYXloJywgJ2F5bCcsICdheW4nLCAnYXlwJywgJ2JieicsICdwZ2EnLCAnaGUnLCAnaXcnLCAncHMnLCAncGJ0JywgJ3BidScsICdwc3QnLCAncHJwJywgJ3ByZCcsICd1ZycsICd1cicsICd5ZGQnLCAneWRzJywgJ3lpaCcsICdqaScsICd5aScsICdoYm8nLCAnbWVuJywgJ3htbicsICdmYScsICdqcHInLCAncGVvJywgJ3BlcycsICdwcnMnLCAnZHYnLCAnc2FtJywgJ2NrYiddO1xuICAgICAgcmV0dXJuIHJ0bExuZ3MuaW5kZXhPZih0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUobG5nKSkgPiAtMSB8fCBsbmcudG9Mb3dlckNhc2UoKS5pbmRleE9mKCctYXJhYicpID4gMSA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb25lSW5zdGFuY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmVJbnN0YW5jZSgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG5cbiAgICAgIHZhciBtZXJnZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIHRoaXMub3B0aW9ucyksIG9wdGlvbnMpLCB7XG4gICAgICAgIGlzQ2xvbmU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2xvbmUgPSBuZXcgSTE4bihtZXJnZWRPcHRpb25zKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsb25lLmxvZ2dlciA9IGNsb25lLmxvZ2dlci5jbG9uZShvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1lbWJlcnNUb0NvcHkgPSBbJ3N0b3JlJywgJ3NlcnZpY2VzJywgJ2xhbmd1YWdlJ107XG4gICAgICBtZW1iZXJzVG9Db3B5LmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgY2xvbmVbbV0gPSBfdGhpczhbbV07XG4gICAgICB9KTtcbiAgICAgIGNsb25lLnNlcnZpY2VzID0gX29iamVjdFNwcmVhZCQ2KHt9LCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgIGNsb25lLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcihjbG9uZS5zZXJ2aWNlcywgY2xvbmUub3B0aW9ucyk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCA+IDEgPyBfbGVuNCAtIDEgOiAwKSwgX2tleTQgPSAxOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5NCAtIDFdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb25lLmVtaXQuYXBwbHkoY2xvbmUsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmUuaW5pdChtZXJnZWRPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9wdGlvbnMgPSBjbG9uZS5vcHRpb25zO1xuICAgICAgY2xvbmUudHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICByZXNvbHZlZExhbmd1YWdlOiB0aGlzLnJlc29sdmVkTGFuZ3VhZ2VcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEkxOG47XG59KEV2ZW50RW1pdHRlcik7XG5cbl9kZWZpbmVQcm9wZXJ0eShJMThuLCBcImNyZWF0ZUluc3RhbmNlXCIsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ldyBJMThuKG9wdGlvbnMsIGNhbGxiYWNrKTtcbn0pO1xuXG52YXIgaW5zdGFuY2UgPSBJMThuLmNyZWF0ZUluc3RhbmNlKCk7XG5pbnN0YW5jZS5jcmVhdGVJbnN0YW5jZSA9IEkxOG4uY3JlYXRlSW5zdGFuY2U7XG5cbnZhciBjcmVhdGVJbnN0YW5jZSA9IGluc3RhbmNlLmNyZWF0ZUluc3RhbmNlO1xudmFyIGluaXQgPSBpbnN0YW5jZS5pbml0O1xudmFyIGxvYWRSZXNvdXJjZXMgPSBpbnN0YW5jZS5sb2FkUmVzb3VyY2VzO1xudmFyIHJlbG9hZFJlc291cmNlcyA9IGluc3RhbmNlLnJlbG9hZFJlc291cmNlcztcbnZhciB1c2UgPSBpbnN0YW5jZS51c2U7XG52YXIgY2hhbmdlTGFuZ3VhZ2UgPSBpbnN0YW5jZS5jaGFuZ2VMYW5ndWFnZTtcbnZhciBnZXRGaXhlZFQgPSBpbnN0YW5jZS5nZXRGaXhlZFQ7XG52YXIgdCA9IGluc3RhbmNlLnQ7XG52YXIgZXhpc3RzID0gaW5zdGFuY2UuZXhpc3RzO1xudmFyIHNldERlZmF1bHROYW1lc3BhY2UgPSBpbnN0YW5jZS5zZXREZWZhdWx0TmFtZXNwYWNlO1xudmFyIGhhc0xvYWRlZE5hbWVzcGFjZSA9IGluc3RhbmNlLmhhc0xvYWRlZE5hbWVzcGFjZTtcbnZhciBsb2FkTmFtZXNwYWNlcyA9IGluc3RhbmNlLmxvYWROYW1lc3BhY2VzO1xudmFyIGxvYWRMYW5ndWFnZXMgPSBpbnN0YW5jZS5sb2FkTGFuZ3VhZ2VzO1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0YW5jZTtcbmV4cG9ydCB7IGNoYW5nZUxhbmd1YWdlLCBjcmVhdGVJbnN0YW5jZSwgZXhpc3RzLCBnZXRGaXhlZFQsIGhhc0xvYWRlZE5hbWVzcGFjZSwgaW5pdCwgbG9hZExhbmd1YWdlcywgbG9hZE5hbWVzcGFjZXMsIGxvYWRSZXNvdXJjZXMsIHJlbG9hZFJlc291cmNlcywgc2V0RGVmYXVsdE5hbWVzcGFjZSwgdCwgdXNlIH07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIl9jbGFzc0NhbGxDaGVjayIsIl9jcmVhdGVDbGFzcyIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHMiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9nZXRQcm90b3R5cGVPZiIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b0FycmF5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJmaWx0ZXIiLCJzeW0iLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJmb3JFYWNoIiwia2V5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbnNvbGVMb2dnZXIiLCJ0eXBlIiwibG9nIiwiYXJncyIsIm91dHB1dCIsIndhcm4iLCJlcnJvciIsImNvbnNvbGUiLCJMb2dnZXIiLCJjb25jcmV0ZUxvZ2dlciIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJpbml0IiwidmFsdWUiLCJwcmVmaXgiLCJsb2dnZXIiLCJkZWJ1ZyIsInNldERlYnVnIiwiYm9vbCIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJmb3J3YXJkIiwiX2xlbjIiLCJfa2V5MiIsIl9sZW4zIiwiX2tleTMiLCJkZXByZWNhdGUiLCJfbGVuNCIsIl9rZXk0IiwibHZsIiwiZGVidWdPbmx5IiwiY29uY2F0IiwiY3JlYXRlIiwibW9kdWxlTmFtZSIsImNsb25lIiwiYmFzZUxvZ2dlciIsIkV2ZW50RW1pdHRlciIsIm9ic2VydmVycyIsIm9uIiwiZXZlbnRzIiwibGlzdGVuZXIiLCJfdGhpcyIsInNwbGl0IiwiZXZlbnQiLCJvZmYiLCJsIiwiZW1pdCIsImNsb25lZCIsIm9ic2VydmVyIiwiX2Nsb25lZCIsImRlZmVyIiwicmVzIiwicmVqIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibWFrZVN0cmluZyIsImNvcHkiLCJhIiwicyIsInQiLCJtIiwiZ2V0TGFzdE9mUGF0aCIsInBhdGgiLCJFbXB0eSIsImNsZWFuS2V5IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJjYW5Ob3RUcmF2ZXJzZURlZXBlciIsInN0YWNrIiwic2hpZnQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvYmoiLCJrIiwic2V0UGF0aCIsIm5ld1ZhbHVlIiwiX2dldExhc3RPZlBhdGgiLCJwdXNoUGF0aCIsIl9nZXRMYXN0T2ZQYXRoMiIsImdldFBhdGgiLCJfZ2V0TGFzdE9mUGF0aDMiLCJnZXRQYXRoV2l0aERlZmF1bHRzIiwiZGF0YSIsImRlZmF1bHREYXRhIiwiZGVlcEV4dGVuZCIsIm92ZXJ3cml0ZSIsInByb3AiLCJTdHJpbmciLCJyZWdleEVzY2FwZSIsInN0ciIsIl9lbnRpdHlNYXAiLCJlc2NhcGUiLCJpc0lFMTAiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnREYXRhIiwidXNlckFnZW50IiwiY2hhcnMiLCJsb29rc0xpa2VPYmplY3RQYXRoIiwibnNTZXBhcmF0b3IiLCJrZXlTZXBhcmF0b3IiLCJwb3NzaWJsZUNoYXJzIiwiYyIsInIiLCJSZWdFeHAiLCJtYXAiLCJqb2luIiwibWF0Y2hlZCIsInRlc3QiLCJraSIsInN1YnN0cmluZyIsIm93bktleXMkMSIsIl9vYmplY3RTcHJlYWQkMSIsIl9jcmVhdGVTdXBlciIsIkRlcml2ZWQiLCJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9jcmVhdGVTdXBlckludGVybmFsIiwiU3VwZXIiLCJyZXN1bHQiLCJOZXdUYXJnZXQiLCJjb25zdHJ1Y3RvciIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJCb29sZWFuIiwidmFsdWVPZiIsImUiLCJkZWVwRmluZCIsInBhdGhzIiwiY3VycmVudCIsImoiLCJwIiwic2xpY2UiLCJtaXgiLCJlbmRzV2l0aCIsImpvaW5lZFBhdGgiLCJSZXNvdXJjZVN0b3JlIiwiX0V2ZW50RW1pdHRlciIsIl9zdXBlciIsIm5zIiwiZGVmYXVsdE5TIiwiaWdub3JlSlNPTlN0cnVjdHVyZSIsImFkZE5hbWVzcGFjZXMiLCJyZW1vdmVOYW1lc3BhY2VzIiwiaW5kZXgiLCJzcGxpY2UiLCJnZXRSZXNvdXJjZSIsImxuZyIsImFkZFJlc291cmNlIiwic2lsZW50IiwiYWRkUmVzb3VyY2VzIiwicmVzb3VyY2VzIiwidG9TdHJpbmciLCJhZGRSZXNvdXJjZUJ1bmRsZSIsImRlZXAiLCJwYWNrIiwicmVtb3ZlUmVzb3VyY2VCdW5kbGUiLCJoYXNSZXNvdXJjZUJ1bmRsZSIsImdldFJlc291cmNlQnVuZGxlIiwiY29tcGF0aWJpbGl0eUFQSSIsImdldERhdGFCeUxhbmd1YWdlIiwiaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zIiwibiIsImZpbmQiLCJ2IiwidG9KU09OIiwicG9zdFByb2Nlc3NvciIsInByb2Nlc3NvcnMiLCJhZGRQb3N0UHJvY2Vzc29yIiwibW9kdWxlIiwibmFtZSIsImhhbmRsZSIsInRyYW5zbGF0b3IiLCJwcm9jZXNzb3IiLCJwcm9jZXNzIiwib3duS2V5cyQyIiwiX29iamVjdFNwcmVhZCQyIiwiX2NyZWF0ZVN1cGVyJDEiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDEiLCJjaGVja2VkTG9hZGVkRm9yIiwiVHJhbnNsYXRvciIsInNlcnZpY2VzIiwiY2hhbmdlTGFuZ3VhZ2UiLCJsYW5ndWFnZSIsImV4aXN0cyIsImludGVycG9sYXRpb24iLCJyZXNvbHZlZCIsImV4dHJhY3RGcm9tS2V5IiwibmFtZXNwYWNlcyIsIndvdWxkQ2hlY2tGb3JOc0luS2V5Iiwic2VlbXNOYXR1cmFsTGFuZ3VhZ2UiLCJ1c2VyRGVmaW5lZEtleVNlcGFyYXRvciIsInVzZXJEZWZpbmVkTnNTZXBhcmF0b3IiLCJtYXRjaCIsImludGVycG9sYXRvciIsIm5lc3RpbmdSZWdleHAiLCJwYXJ0cyIsInRyYW5zbGF0ZSIsImxhc3RLZXkiLCJfdGhpczIiLCJvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlciIsImlzQXJyYXkiLCJyZXR1cm5EZXRhaWxzIiwiX3RoaXMkZXh0cmFjdEZyb21LZXkiLCJuYW1lc3BhY2UiLCJhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSIsInRvTG93ZXJDYXNlIiwicmVzVXNlZEtleSIsInVzZWRLZXkiLCJyZXNFeGFjdFVzZWRLZXkiLCJleGFjdFVzZWRLZXkiLCJyZXNUeXBlIiwibm9PYmplY3QiLCJqb2luQXJyYXlzIiwiaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQiLCJpMThuRm9ybWF0IiwiaGFuZGxlQXNPYmplY3QiLCJyZXR1cm5PYmplY3RzIiwicmV0dXJuZWRPYmplY3RIYW5kbGVyIiwicmVzVHlwZUlzQXJyYXkiLCJuZXdLZXlUb1VzZSIsImRlZXBLZXkiLCJleHRlbmRUcmFuc2xhdGlvbiIsInVzZWREZWZhdWx0IiwibmVlZHNQbHVyYWxIYW5kbGluZyIsImNvdW50IiwiaGFzRGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZhbHVlU3VmZml4IiwicGx1cmFsUmVzb2x2ZXIiLCJnZXRTdWZmaXgiLCJkZWZhdWx0VmFsdWUiLCJpc1ZhbGlkTG9va3VwIiwibWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5IiwicmVzRm9yTWlzc2luZyIsInVwZGF0ZU1pc3NpbmciLCJmayIsImxuZ3MiLCJmYWxsYmFja0xuZ3MiLCJsYW5ndWFnZVV0aWxzIiwiZ2V0RmFsbGJhY2tDb2RlcyIsImZhbGxiYWNrTG5nIiwic2F2ZU1pc3NpbmdUbyIsInRvUmVzb2x2ZUhpZXJhcmNoeSIsInNlbmQiLCJzcGVjaWZpY0RlZmF1bHRWYWx1ZSIsImRlZmF1bHRGb3JNaXNzaW5nIiwibWlzc2luZ0tleUhhbmRsZXIiLCJiYWNrZW5kQ29ubmVjdG9yIiwic2F2ZU1pc3NpbmciLCJzYXZlTWlzc2luZ1BsdXJhbHMiLCJnZXRTdWZmaXhlcyIsInN1ZmZpeCIsImFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSIsInBhcnNlTWlzc2luZ0tleUhhbmRsZXIiLCJfdGhpczMiLCJwYXJzZSIsImRlZmF1bHRWYXJpYWJsZXMiLCJ1c2VkTG5nIiwidXNlZE5TIiwic2tpcEludGVycG9sYXRpb24iLCJza2lwT25WYXJpYWJsZXMiLCJuZXN0QmVmIiwibmIiLCJpbnRlcnBvbGF0ZSIsIm5hIiwibmVzdEFmdCIsIm5lc3QiLCJjb250ZXh0IiwicmVzZXQiLCJwb3N0UHJvY2VzcyIsInBvc3RQcm9jZXNzb3JOYW1lcyIsImFwcGx5UG9zdFByb2Nlc3NvciIsInBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkIiwiaTE4blJlc29sdmVkIiwiX3RoaXM0IiwiZm91bmQiLCJleHRyYWN0ZWQiLCJmYWxsYmFja05TIiwibmVlZHNaZXJvU3VmZml4TG9va3VwIiwib3JkaW5hbCIsInNob3VsZFVzZUludGxBcGkiLCJuZWVkc0NvbnRleHRIYW5kbGluZyIsImNvZGVzIiwidXRpbHMiLCJoYXNMb2FkZWROYW1lc3BhY2UiLCJjb2RlIiwiZmluYWxLZXlzIiwiYWRkTG9va3VwS2V5cyIsInBsdXJhbFN1ZmZpeCIsInplcm9TdWZmaXgiLCJwbHVyYWxTZXBhcmF0b3IiLCJjb250ZXh0S2V5IiwiY29udGV4dFNlcGFyYXRvciIsInBvc3NpYmxlS2V5IiwicG9wIiwicmV0dXJuTnVsbCIsInJldHVybkVtcHR5U3RyaW5nIiwicmVzb3VyY2VTdG9yZSIsIm9wdGlvbiIsImNhcGl0YWxpemUiLCJzdHJpbmciLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsIkxhbmd1YWdlVXRpbCIsInN1cHBvcnRlZExuZ3MiLCJnZXRTY3JpcHRQYXJ0RnJvbUNvZGUiLCJmb3JtYXRMYW5ndWFnZUNvZGUiLCJnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZSIsInNwZWNpYWxDYXNlcyIsImxvd2VyQ2FzZUxuZyIsInBhcnQiLCJjbGVhbkNvZGUiLCJpc1N1cHBvcnRlZENvZGUiLCJsb2FkIiwibm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzIiwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzIiwiY2xlYW5lZExuZyIsImxuZ09ubHkiLCJzdXBwb3J0ZWRMbmciLCJmYWxsYmFja3MiLCJmYWxsYmFja0NvZGUiLCJmYWxsYmFja0NvZGVzIiwiYWRkQ29kZSIsImZjIiwic2V0cyIsIm5yIiwiX3J1bGVzUGx1cmFsc1R5cGVzIiwiXyIsIk51bWJlciIsImRlcHJlY2F0ZWRKc29uVmVyc2lvbnMiLCJzdWZmaXhlc09yZGVyIiwiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiLCJvdGhlciIsImNyZWF0ZVJ1bGVzIiwicnVsZXMiLCJzZXQiLCJudW1iZXJzIiwicGx1cmFscyIsIlBsdXJhbFJlc29sdmVyIiwiY29tcGF0aWJpbGl0eUpTT04iLCJJbnRsIiwiUGx1cmFsUnVsZXMiLCJhZGRSdWxlIiwiZ2V0UnVsZSIsIl91bnVzZWQiLCJuZWVkc1BsdXJhbCIsInJ1bGUiLCJyZXNvbHZlZE9wdGlvbnMiLCJwbHVyYWxDYXRlZ29yaWVzIiwiZ2V0UGx1cmFsRm9ybXNPZktleSIsInNvcnQiLCJwbHVyYWxDYXRlZ29yeTEiLCJwbHVyYWxDYXRlZ29yeTIiLCJwbHVyYWxDYXRlZ29yeSIsInByZXBlbmQiLCJudW1iZXIiLCJzZWxlY3QiLCJnZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUiLCJpZHgiLCJub0FicyIsIk1hdGgiLCJhYnMiLCJzaW1wbGlmeVBsdXJhbFN1ZmZpeCIsInJldHVyblN1ZmZpeCIsImluY2x1ZGVzIiwib3duS2V5cyQzIiwiX29iamVjdFNwcmVhZCQzIiwiSW50ZXJwb2xhdG9yIiwiZm9ybWF0IiwiZXNjYXBlVmFsdWUiLCJpT3B0cyIsInVzZVJhd1ZhbHVlVG9Fc2NhcGUiLCJwcmVmaXhFc2NhcGVkIiwic3VmZml4RXNjYXBlZCIsImZvcm1hdFNlcGFyYXRvciIsInVuZXNjYXBlUHJlZml4IiwidW5lc2NhcGVTdWZmaXgiLCJuZXN0aW5nUHJlZml4IiwibmVzdGluZ1ByZWZpeEVzY2FwZWQiLCJuZXN0aW5nU3VmZml4IiwibmVzdGluZ1N1ZmZpeEVzY2FwZWQiLCJuZXN0aW5nT3B0aW9uc1NlcGFyYXRvciIsIm1heFJlcGxhY2VzIiwiYWx3YXlzRm9ybWF0IiwicmVzZXRSZWdFeHAiLCJyZWdleHBTdHIiLCJyZWdleHAiLCJyZWdleHBVbmVzY2FwZVN0ciIsInJlZ2V4cFVuZXNjYXBlIiwibmVzdGluZ1JlZ2V4cFN0ciIsInJlZ2V4U2FmZSIsInZhbCIsInJlcGxhY2VzIiwiaGFuZGxlRm9ybWF0IiwiaW50ZXJwb2xhdGlvbmtleSIsInRyaW0iLCJmIiwibWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIiwidG9kb3MiLCJyZWdleCIsInNhZmVWYWx1ZSIsInRvZG8iLCJleGVjIiwibWF0Y2hlZFZhciIsInRlbXAiLCJsYXN0SW5kZXgiLCJoYW5kbGVIYXNPcHRpb25zIiwiaW5oZXJpdGVkT3B0aW9ucyIsInNlcCIsIm9wdGlvbnNTdHJpbmciLCJjbG9uZWRPcHRpb25zIiwibWF0Y2hlZFNpbmdsZVF1b3RlcyIsIm1hdGNoZWREb3VibGVRdW90ZXMiLCJKU09OIiwiZm9ybWF0dGVycyIsImRvUmVkdWNlIiwiZWxlbSIsInJlZHVjZSIsIm93bktleXMkNCIsIl9vYmplY3RTcHJlYWQkNCIsInBhcnNlRm9ybWF0U3RyIiwiZm9ybWF0U3RyIiwiZm9ybWF0TmFtZSIsImZvcm1hdE9wdGlvbnMiLCJvcHRTdHIiLCJjdXJyZW5jeSIsInJhbmdlIiwib3B0cyIsIm9wdCIsIl9vcHQkc3BsaXQiLCJfb3B0JHNwbGl0MiIsInJlc3QiLCJpc05hTiIsInBhcnNlSW50IiwiY3JlYXRlQ2FjaGVkRm9ybWF0dGVyIiwiZm4iLCJjYWNoZSIsImludm9rZUZvcm1hdHRlciIsInN0cmluZ2lmeSIsImZvcm1hdHRlciIsIkZvcm1hdHRlciIsImZvcm1hdHMiLCJOdW1iZXJGb3JtYXQiLCJzdHlsZSIsImRhdGV0aW1lIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZWxhdGl2ZXRpbWUiLCJSZWxhdGl2ZVRpbWVGb3JtYXQiLCJsaXN0IiwiTGlzdEZvcm1hdCIsImFkZCIsImFkZENhY2hlZCIsIl9mb3JtYXQiLCJtZW0iLCJfcGFyc2VGb3JtYXRTdHIiLCJmb3JtYXR0ZWQiLCJ2YWxPcHRpb25zIiwiZm9ybWF0UGFyYW1zIiwibG9jYWxlIiwib3duS2V5cyQ1IiwiX29iamVjdFNwcmVhZCQ1IiwiX2NyZWF0ZVN1cGVyJDIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDIiLCJyZW1vdmVQZW5kaW5nIiwicSIsInBlbmRpbmciLCJwZW5kaW5nQ291bnQiLCJDb25uZWN0b3IiLCJiYWNrZW5kIiwic3RvcmUiLCJ3YWl0aW5nUmVhZHMiLCJtYXhQYXJhbGxlbFJlYWRzIiwicmVhZGluZ0NhbGxzIiwibWF4UmV0cmllcyIsInJldHJ5VGltZW91dCIsInN0YXRlIiwicXVldWUiLCJxdWV1ZUxvYWQiLCJsYW5ndWFnZXMiLCJjYWxsYmFjayIsInRvTG9hZCIsInRvTG9hZExhbmd1YWdlcyIsInRvTG9hZE5hbWVzcGFjZXMiLCJoYXNBbGxOYW1lc3BhY2VzIiwicmVsb2FkIiwibG9hZGVkIiwiZXJyb3JzIiwiZXJyIiwiZG9uZSIsImxvYWRlZEtleXMiLCJyZWFkIiwiZmNOYW1lIiwidHJpZWQiLCJ3YWl0IiwibmV4dCIsInNldFRpbWVvdXQiLCJwcmVwYXJlTG9hZGluZyIsImxvYWRPbmUiLCJfdGhpczUiLCJmYWxsYmFja1ZhbHVlIiwiaXNVcGRhdGUiLCJnZXQiLCJpbml0SW1tZWRpYXRlIiwicHJlbG9hZCIsInBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzIiwicmV0IiwidERlc2NyaXB0aW9uIiwidHJhbnNmb3JtT3B0aW9ucyIsIm93bktleXMkNiIsIl9vYmplY3RTcHJlYWQkNiIsIl9jcmVhdGVTdXBlciQzIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzIiwibm9vcCIsImJpbmRNZW1iZXJGdW5jdGlvbnMiLCJpbnN0IiwibWVtcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJJMThuIiwibW9kdWxlcyIsImV4dGVybmFsIiwiaXNJbml0aWFsaXplZCIsImlzQ2xvbmUiLCJjcmVhdGVDbGFzc09uRGVtYW5kIiwiQ2xhc3NPck9iamVjdCIsImRlZk9wdHMiLCJsdSIsImxhbmd1YWdlRGV0ZWN0b3IiLCJkZXRlY3Rpb24iLCJzdG9yZUFwaSIsIl90aGlzMiRzdG9yZSIsInN0b3JlQXBpQ2hhaW5lZCIsIl90aGlzMiRzdG9yZTIiLCJkZWZlcnJlZCIsImZpbmlzaCIsImluaXRpYWxpemVkU3RvcmVPbmNlIiwibG9hZFJlc291cmNlcyIsInVzZWRDYWxsYmFjayIsImFwcGVuZCIsInJlc29sdmVkTGFuZ3VhZ2UiLCJzZXRSZXNvbHZlZExhbmd1YWdlIiwicmVsb2FkUmVzb3VyY2VzIiwidXNlIiwiRXJyb3IiLCJsaSIsImxuZ0luTG5ncyIsImlzTGFuZ3VhZ2VDaGFuZ2luZ1RvIiwic2V0TG5nUHJvcHMiLCJzZXRMbmciLCJjYWNoZVVzZXJMYW5ndWFnZSIsImFzeW5jIiwiZGV0ZWN0IiwiZ2V0Rml4ZWRUIiwia2V5UHJlZml4IiwiZml4ZWRUIiwicmVzdWx0S2V5IiwiX3RoaXMkdHJhbnNsYXRvciIsIl90aGlzJHRyYW5zbGF0b3IyIiwic2V0RGVmYXVsdE5hbWVzcGFjZSIsIl90aGlzNiIsImxhc3RMbmciLCJsb2FkTm90UGVuZGluZyIsImxvYWRTdGF0ZSIsInByZWNoZWNrIiwicHJlUmVzdWx0IiwibG9hZE5hbWVzcGFjZXMiLCJfdGhpczciLCJsb2FkTGFuZ3VhZ2VzIiwicHJlbG9hZGVkIiwibmV3TG5ncyIsImRpciIsInJ0bExuZ3MiLCJjbG9uZUluc3RhbmNlIiwiX3RoaXM4IiwibWVyZ2VkT3B0aW9ucyIsIm1lbWJlcnNUb0NvcHkiLCJpbnN0YW5jZSIsImNyZWF0ZUluc3RhbmNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/i18next/dist/esm/i18next.js\n");
|
|
11335
|
+
|
|
11336
|
+
/***/ }),
|
|
11337
|
+
|
|
11327
11338
|
/***/ "../../../node_modules/import-map-overrides/dist/import-map-overrides.js":
|
|
11328
11339
|
/*!*******************************************************************************!*\
|
|
11329
11340
|
!*** ../../../node_modules/import-map-overrides/dist/import-map-overrides.js ***!
|
|
@@ -12491,7 +12502,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
12491
12502
|
/******/ // This function allow to reference async chunks
|
|
12492
12503
|
/******/ __webpack_require__.u = (chunkId) => {
|
|
12493
12504
|
/******/ // return url for filenames based on template
|
|
12494
|
-
/******/ return "" + {"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-
|
|
12505
|
+
/******/ return "" + {"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-2ad13f":"910837678b95bca5","src_run_ts":"a3f8c9535d9deb27","src_ui_breadcrumbs_tsx":"3975decbab0164f3"}[chunkId] + ".js";
|
|
12495
12506
|
/******/ };
|
|
12496
12507
|
/******/ })();
|
|
12497
12508
|
/******/
|
|
@@ -12619,10 +12630,10 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
12619
12630
|
/******/ var promises = [];
|
|
12620
12631
|
/******/ switch(name) {
|
|
12621
12632
|
/******/ case "default": {
|
|
12622
|
-
/******/ register("@openmrs/esm-framework/src/internal", "5.2.1-pre.
|
|
12623
|
-
/******/ register("@openmrs/esm-framework", "5.2.1-pre.
|
|
12633
|
+
/******/ register("@openmrs/esm-framework/src/internal", "5.2.1-pre.1079", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/internal.ts */ "../../framework/esm-framework/src/internal.ts"))), 1);
|
|
12634
|
+
/******/ register("@openmrs/esm-framework", "5.2.1-pre.1079", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/index.ts */ "../../framework/esm-framework/src/index.ts"))), 1);
|
|
12624
12635
|
/******/ register("dayjs", "1.11.5", () => (() => (__webpack_require__(/*! ../../../node_modules/dayjs/dayjs.min.js */ "../../../node_modules/dayjs/dayjs.min.js"))), 1);
|
|
12625
|
-
/******/ register("i18next", "
|
|
12636
|
+
/******/ register("i18next", "21.10.0", () => (() => (__webpack_require__(/*! ../../../node_modules/i18next/dist/esm/i18next.js */ "../../../node_modules/i18next/dist/esm/i18next.js"))), 1);
|
|
12626
12637
|
/******/ register("react-dom", "18.2.0", () => (() => (__webpack_require__(/*! ../../../node_modules/react-dom/index.js */ "../../../node_modules/react-dom/index.js"))), 1);
|
|
12627
12638
|
/******/ register("react-i18next", "11.18.6", () => (() => (__webpack_require__(/*! ../../../node_modules/react-i18next/dist/es/index.js */ "../../../node_modules/react-i18next/dist/es/index.js"))), 1);
|
|
12628
12639
|
/******/ register("react", "18.2.0", () => (() => (__webpack_require__(/*! ../../../node_modules/react/index.js */ "../../../node_modules/react/index.js"))), 1);
|
|
@@ -12789,7 +12800,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
12789
12800
|
/******/ "webpack/sharing/consume/default/react-i18next/react-i18next": () => (loadSingletonVersionCheckFallback("default", "react-i18next", [1,11], () => (() => (__webpack_require__(/*! react-i18next */ "../../../node_modules/react-i18next/dist/es/index.js"))))),
|
|
12790
12801
|
/******/ "webpack/sharing/consume/default/swr/_internal/swr/_internal": () => (loadSingletonVersionCheckFallback("default", "swr/_internal", [1,2], () => (() => (__webpack_require__(/*! swr/_internal */ "../../../node_modules/swr/_internal/dist/index.mjs"))))),
|
|
12791
12802
|
/******/ "webpack/sharing/consume/default/dayjs/dayjs": () => (loadSingletonVersionCheckFallback("default", "dayjs", [1,1], () => (() => (__webpack_require__(/*! dayjs */ "../../../node_modules/dayjs/dayjs.min.js"))))),
|
|
12792
|
-
/******/ "webpack/sharing/consume/default/i18next/i18next": () => (loadSingletonVersionCheckFallback("default", "i18next", [1,
|
|
12803
|
+
/******/ "webpack/sharing/consume/default/i18next/i18next": () => (loadSingletonVersionCheckFallback("default", "i18next", [1,21], () => (() => (__webpack_require__(/*! i18next */ "../../../node_modules/i18next/dist/esm/i18next.js")))))
|
|
12793
12804
|
/******/ };
|
|
12794
12805
|
/******/ var initialConsumes = ["webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework","webpack/sharing/consume/default/rxjs/rxjs","webpack/sharing/consume/default/single-spa/single-spa","webpack/sharing/consume/default/react/react","webpack/sharing/consume/default/react-dom/react-dom","webpack/sharing/consume/default/react-i18next/react-i18next","webpack/sharing/consume/default/swr/_internal/swr/_internal","webpack/sharing/consume/default/dayjs/dayjs","webpack/sharing/consume/default/i18next/i18next"];
|
|
12795
12806
|
/******/ initialConsumes.forEach((id) => {
|